{"_id":"@absurd-engineering/enforcer","_rev":"3-59e21cb016074511520d4ebc2a3fe5af","name":"@absurd-engineering/enforcer","dist-tags":{"latest":"0.0.3"},"versions":{"0.0.1":{"name":"@absurd-engineering/enforcer","version":"0.0.1","keywords":["oclif"],"author":{"name":"Damien Wilson"},"license":"AGPL-3.0-or-later","_id":"@absurd-engineering/enforcer@0.0.1","maintainers":[{"name":"absurd.engineering","email":"damien@absurd.engineering"}],"homepage":"https://github.com/damien/enforcer","bugs":{"url":"https://github.com/damien/enforcer/issues"},"bin":{"enforcer":"bin/run.js"},"dist":{"shasum":"d3ac312987d29b2798e483ee79c2ece19acd1da1","tarball":"https://registry.npmjs.org/@absurd-engineering/enforcer/-/enforcer-0.0.1.tgz","fileCount":20,"integrity":"sha512-iIZT5gES/dgBU4fMrEEP7j6fVIA1EK6xDWilNGDMDmx9ufNYgvOLfX+bZVMarIStY55LOwRffAAvFA7U9U3cow==","signatures":[{"sig":"MEYCIQDwQ/WlL3Fuez6R7/WVLIS/PqYhPPl8xibfazMa3L0YYQIhAKZMzh7ffBn92RVrkIfm3iTo/1euNRZqyba7qhr56UtR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57107},"main":"dist/index.js","type":"module","oclif":{"bin":"enforcer","dirname":"enforcer","plugins":["@oclif/plugin-help"],"commands":"./dist/commands","topicSeparator":" "},"types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"98e79ee72e8ba1f7d340f2b6d9efbe2980f1dc38","scripts":{"lint":"eslint","test":"mocha --forbid-only \"test/**/*.test.ts\"","build":"shx rm -rf dist && tsc -b","prepack":"oclif manifest && oclif readme","version":"oclif readme && git add README.md","postpack":"shx rm -f oclif.manifest.json","skip-posttest":"pnpm run lint # TODO: figure out why eslint is failing"},"_npmUser":{"name":"absurd.engineering","email":"damien@absurd.engineering"},"repository":{"url":"git+https://github.com/damien/enforcer.git","type":"git"},"_npmVersion":"11.5.1","description":"A utility for auditing and remediating AWS S3 Public Access Block configurations.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@oclif/core":"^4","@inquirer/prompts":"^7.8.2","@aws-sdk/client-s3":"^3.864.0","@oclif/plugin-help":"^6","@aws-sdk/client-s3-control":"^3.864.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"shx":"^0.3.3","chai":"^4","mocha":"^10","oclif":"^4","sinon":"^21.0.0","eslint":"^9","ts-node":"^10","typescript":"^5","@oclif/test":"^4","@types/chai":"^4","@types/node":"^18","@types/mocha":"^10","@types/sinon":"^17.0.4","@eslint/compat":"^1","chai-as-promised":"^8.0.1","eslint-config-oclif":"^6","@oclif/prettier-config":"^0.2.1","eslint-config-prettier":"^10","@types/chai-as-promised":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/enforcer_0.0.1_1755198099906_0.8695128740973226","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@absurd-engineering/enforcer","version":"0.0.2","keywords":["oclif"],"author":{"name":"Damien Wilson"},"license":"AGPL-3.0-or-later","_id":"@absurd-engineering/enforcer@0.0.2","maintainers":[{"name":"absurd.engineering","email":"damien@absurd.engineering"}],"homepage":"https://github.com/damien/enforcer","bugs":{"url":"https://github.com/damien/enforcer/issues"},"bin":{"enforcer":"bin/run.js"},"dist":{"shasum":"9a26b78aaa2100a327649b40be1419cba2339a25","tarball":"https://registry.npmjs.org/@absurd-engineering/enforcer/-/enforcer-0.0.2.tgz","fileCount":20,"integrity":"sha512-cghnY6JR9/4O5hV4BK7MWAZRPOcbE8mU0ty8O80La+8sTxkO4rrm+r4VxZCNamMDJYfRPaoNo81ihKLiWlFvvA==","signatures":[{"sig":"MEQCID26ntBpPvXtk+P5nXM/lDEdO5vcM0NW/tNhwO8JzEpsAiAyBW48LwZ/ZzFn25vh6yhwjlg42Fy4arznkAxSdrXWoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59109},"main":"dist/index.js","type":"module","oclif":{"bin":"enforcer","dirname":"enforcer","plugins":["@oclif/plugin-help"],"commands":"./dist/commands","topicSeparator":" "},"types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2612f2e9e3e66930aba1ce827836cc6234d290c7","scripts":{"lint":"eslint","test":"mocha --forbid-only \"test/**/*.test.ts\"","build":"shx rm -rf dist && tsc -b","prepack":"oclif manifest && oclif readme","version":"oclif readme && git add README.md","postpack":"shx rm -f oclif.manifest.json","skip-posttest":"pnpm run lint # TODO: figure out why eslint is failing"},"_npmUser":{"name":"absurd.engineering","email":"damien@absurd.engineering"},"repository":{"url":"git+https://github.com/damien/enforcer.git","type":"git"},"_npmVersion":"11.5.1","description":"A utility for auditing and remediating AWS S3 Public Access Block configurations.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@oclif/core":"^4","@inquirer/prompts":"^7.8.2","@aws-sdk/client-s3":"^3.864.0","@oclif/plugin-help":"^6","@aws-sdk/client-s3-control":"^3.864.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"shx":"^0.3.3","chai":"^4","mocha":"^10","oclif":"^4","sinon":"^21.0.0","eslint":"^9","ts-node":"^10","typescript":"^5","@oclif/test":"^4","@types/chai":"^4","@types/node":"^18","@types/mocha":"^10","@types/sinon":"^17.0.4","@eslint/compat":"^1","chai-as-promised":"^8.0.1","eslint-config-oclif":"^6","@oclif/prettier-config":"^0.2.1","eslint-config-prettier":"^10","@types/chai-as-promised":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/enforcer_0.0.2_1755201364520_0.3212961024021761","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@absurd-engineering/enforcer","description":"A utility for auditing and remediating AWS S3 Public Access Block configurations.","version":"0.0.3","author":{"name":"Damien Wilson"},"bin":{"enforcer":"bin/run.js"},"bugs":{"url":"https://github.com/damien/enforcer/issues"},"dependencies":{"@aws-sdk/client-s3":"^3.864.0","@aws-sdk/client-s3-control":"^3.864.0","@inquirer/prompts":"^7.8.2","@oclif/core":"^4","@oclif/plugin-help":"^6"},"devDependencies":{"@eslint/compat":"^1","@oclif/prettier-config":"^0.2.1","@oclif/test":"^4","@types/chai":"^4","@types/chai-as-promised":"^8.0.2","@types/mocha":"^10","@types/node":"^18","@types/sinon":"^17.0.4","chai":"^4","chai-as-promised":"^8.0.1","eslint":"^9","eslint-config-oclif":"^6","eslint-config-prettier":"^10","mocha":"^10","oclif":"^4","shx":"^0.3.3","sinon":"^21.0.0","ts-node":"^10","typescript":"^5"},"engines":{"node":">=18.0.0"},"homepage":"https://github.com/damien/enforcer","keywords":["oclif"],"license":"AGPL-3.0-or-later","main":"dist/index.js","type":"module","oclif":{"bin":"enforcer","dirname":"enforcer","commands":"./dist/commands","plugins":["@oclif/plugin-help"],"topicSeparator":" "},"repository":{"type":"git","url":"git+https://github.com/damien/enforcer.git"},"scripts":{"build":"shx rm -rf dist && tsc -b","lint":"eslint","postpack":"shx rm -f oclif.manifest.json","skip-posttest":"pnpm run lint # TODO: figure out why eslint is failing","prepack":"oclif manifest && oclif readme","test":"mocha --forbid-only \"test/**/*.test.ts\"","version":"oclif readme && git add README.md"},"types":"dist/index.d.ts","packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","_id":"@absurd-engineering/enforcer@0.0.3","gitHead":"283ee81862f9d3b6dd5e44292899cb7afb3304f2","_nodeVersion":"24.5.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-Onc4fJ79KmICusOkDewuetjqtFlIXqS+N0BrDLaQjyB4zwU273JRPBXFx6D1k/bwC9OSMNWLrSfTi8HFuMFKGg==","shasum":"c169267b90e154910f2e5827c8085cd27d598f17","tarball":"https://registry.npmjs.org/@absurd-engineering/enforcer/-/enforcer-0.0.3.tgz","fileCount":20,"unpackedSize":59109,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCElLfNeSiwEhjCnKKKmJUxuMjZHI5l7TJt+DofSfBMxwIga97u9U3I479yh5R/cJr2LM3L6YUTFOMTGxb7lYcfDB0="}]},"_npmUser":{"name":"absurd.engineering","email":"damien@absurd.engineering"},"directories":{},"maintainers":[{"name":"absurd.engineering","email":"damien@absurd.engineering"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/enforcer_0.0.3_1755201542025_0.9510497563569291"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-14T19:01:39.723Z","modified":"2025-08-14T19:59:02.427Z","0.0.1":"2025-08-14T19:01:40.107Z","0.0.2":"2025-08-14T19:56:04.710Z","0.0.3":"2025-08-14T19:59:02.203Z"},"bugs":{"url":"https://github.com/damien/enforcer/issues"},"author":{"name":"Damien Wilson"},"license":"AGPL-3.0-or-later","homepage":"https://github.com/damien/enforcer","keywords":["oclif"],"repository":{"type":"git","url":"git+https://github.com/damien/enforcer.git"},"description":"A utility for auditing and remediating AWS S3 Public Access Block configurations.","maintainers":[{"name":"absurd.engineering","email":"damien@absurd.engineering"}],"readme":"enforcer\n=================\n\nA utility for auditing and remediating AWS S3 Public Access Block configurations.\n\n\n[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io)\n[![Version](https://img.shields.io/npm/v/enforcer.svg)](https://npmjs.org/package/@absurd-engineering/enforcer)\n[![Downloads/week](https://img.shields.io/npm/dw/enforcer.svg)](https://npmjs.org/package/enforcer)\n\n\n<!-- toc -->\n* [Getting Started](#getting-started)\n* [Usage](#usage)\n* [Commands](#commands)\n* [Testing and Development](#testing-and-development)\n* [Design](#design)\n<!-- tocstop -->\n# Getting Started\n\nEnforcer uses the AWS Javascript SDK internally and assumes all users of the tool have configured CLI and/or API access to AWS. If you don't have a locally configured AWS profile, configure one before using this tool: [Configuration and credential file settings in the AWS CLI\n](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)\n\nEnforcer is otherwise self-contained and only requires connectivity to AWS APIs to function.\n\n## Installation\n\nYou may install Enforcer with your preferred package manager or use `pnpm dlx` to run Enforcer without persisting the tool to your system.\n\n### npm\n\n```sh-session\n$ npm install -g @absurd-engineering/enforcer\n$ enforcer help\n```\n\n### pnpm\n\n```sh-session\n$ pnpm dlx @absurd-engineering/enforcer help\n```\n\n# Usage\n<!-- usage -->\n```sh-session\n$ npm install -g @absurd-engineering/enforcer\n$ enforcer COMMAND\nrunning command...\n$ enforcer (--version)\n@absurd-engineering/enforcer/0.0.3 linux-x64 node-v24.5.0\n$ enforcer --help [COMMAND]\nUSAGE\n  $ enforcer COMMAND\n...\n```\n<!-- usagestop -->\n# Commands\n<!-- commands -->\n* [`enforcer audit`](#enforcer-audit)\n* [`enforcer help [COMMAND]`](#enforcer-help-command)\n\n## `enforcer audit`\n\nAudit AWS S3 public access blocks\n\n```\nUSAGE\n  $ enforcer audit --profile <value> [--json] [--bucket <value>] [--fix]\n\nAUDIT FLAGS\n  --bucket=<value>  Scope actions to a specific bucket\n  --fix             Overwrite public access blocks to disallow public access\n\nGLOBAL FLAGS\n  --json             Format output as json.\n  --profile=<value>  (required) AWS profile to use for authentication against AWS\n\nDESCRIPTION\n  Audit AWS S3 public access blocks\n\nEXAMPLES\n  $ enforcer audit --profile default\n\n  $ enforcer audit --bucket my-bucket --profile default\n\n  $ enforcer audit --fix --profile default\n\nFLAG DESCRIPTIONS\n  --bucket=<value>  Scope actions to a specific bucket\n\n    If not provided, actions will be scoped to all buckets\n\n  --fix  Overwrite public access blocks to disallow public access\n\n    Update public access blocks for all buckets to disallow public access.\n    See: https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html#access-control-bl\n    ock-public-access-options\n\n  --profile=<value>  AWS profile to use for authentication against AWS\n\n    See https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html#cli-configure-files-using-profiles\n```\n\n_See code: [src/commands/audit.ts](https://github.com/damien/enforcer/blob/v0.0.3/src/commands/audit.ts)_\n\n## `enforcer help [COMMAND]`\n\nDisplay help for enforcer.\n\n```\nUSAGE\n  $ enforcer help [COMMAND...] [-n]\n\nARGUMENTS\n  COMMAND...  Command to show help for.\n\nFLAGS\n  -n, --nested-commands  Include all nested commands in the output.\n\nDESCRIPTION\n  Display help for enforcer.\n```\n\n_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.32/src/commands/help.ts)_\n<!-- commandsstop -->\n\n# Testing and Development\n\nTo test or contribute to this project:\n\n1. Install [fnm](https://github.com/Schniz/fnm) or your preferred Node version manager\n2. Install and use the version of NodeJS documented in [.node-version](./.node-version)\n3. Install [pnpm](https://pnpm.io/installation)\n   - Optionally, you may install `pnpm` using [Corepack](https://pnpm.io/installation#using-corepack) if available in your environment\n4. Run `pnpm install` from the root of this project directory\n5. Run `pnpm test` to execute unit tests\n\n## Running a development build\n\nEnforcer uses the excellent [oclif](https://oclif.io/) CLI framework to provide basic functionality for this tool. oclif provides multiple entry points to Enforcer at `bin/dev` and `bin/run`:\n* `node bin/dev.js` will execute local code from this project\n* `node bin/run.js` will execute the results of `pnpm build` stored in the `./dist` directory\n\nYou can use both of these entry points to manually test or experiment with the Enforcer CLI as needed.\n\n# Design\n\nSee [DESIGN.md](./DESIGN.md)\n","readmeFilename":"README.md"}