{"_id":"@access-tokens/cli","_rev":"4-1933fdf6ebcfb2a5fc2eea2291131333","name":"@access-tokens/cli","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@access-tokens/cli","version":"1.0.0","keywords":["dynamodb","personal-access-token","pat","authentication","cli","command-line"],"author":{"name":"Trevor Robinson"},"license":"ISC","_id":"@access-tokens/cli@1.0.0","maintainers":[{"name":"trevorr","email":"trevor@scurrilous.com"}],"homepage":"https://github.com/loancrate/access-tokens#readme","bugs":{"url":"https://github.com/loancrate/access-tokens/issues"},"bin":{"access-tokens":"dist/main.js"},"dist":{"shasum":"cefcd2cc291a06401df0cb6677b334d3e48a8ac8","tarball":"https://registry.npmjs.org/@access-tokens/cli/-/cli-1.0.0.tgz","fileCount":71,"integrity":"sha512-T6htCnc0hXELs6XpzGuibGp2w8GfwL41yl7raU6yf1xmH9x0leGohgXMamW39/iDPE71DYKWI+uC6QItiE4ybA==","signatures":[{"sig":"MEYCIQCGZny/KOQNq0iZdNpI/MdpgU7EHvhfhemu7lUygf/EQQIhAPlfKj4B8IQWPab9wvIRpoC5pvn04CBlS7P8pO/MXgLO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@access-tokens%2fcli@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101894},"main":"./dist/index.js","_from":"file:access-tokens-cli-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"lint":"eslint src","test":"jest","build":"tsc --build tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage *-junit.xml","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trevorr","email":"trevor@scurrilous.com"},"_resolved":"/tmp/12fefbf7fc48f88ec0a55478c39a32f0/access-tokens-cli-1.0.0.tgz","_integrity":"sha512-T6htCnc0hXELs6XpzGuibGp2w8GfwL41yl7raU6yf1xmH9x0leGohgXMamW39/iDPE71DYKWI+uC6QItiE4ybA==","repository":{"url":"git+https://github.com/loancrate/access-tokens.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.6.1","description":"CLI for managing personal access tokens","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"^4.1.12","yaml":"^2.8.1","chalk":"^4.1.2","fs-extra":"^11.3.2","commander":"^14.0.2","@access-tokens/core":"1.0.0","@access-tokens/client":"1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"^9.38.0","ts-jest":"^29.4.5","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.2","@jest/globals":"^30.2.0","@types/fs-extra":"^11.0.4","@access-tokens/jest-config":"1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.0.0_1762480580850_0.34854354267368004","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@access-tokens/cli","version":"1.1.0","keywords":["dynamodb","personal-access-token","pat","authentication","cli","command-line"],"author":{"name":"Trevor Robinson"},"license":"ISC","_id":"@access-tokens/cli@1.1.0","maintainers":[{"name":"trevorr","email":"trevor@scurrilous.com"},{"name":"andrew-loancrate","email":"andrew@loancrate.com"}],"homepage":"https://github.com/loancrate/access-tokens#readme","bugs":{"url":"https://github.com/loancrate/access-tokens/issues"},"bin":{"access-tokens":"dist/main.js"},"dist":{"shasum":"a8b48726a1a5fb329bf7c9f2a7a5f8aa6f8b952f","tarball":"https://registry.npmjs.org/@access-tokens/cli/-/cli-1.1.0.tgz","fileCount":75,"integrity":"sha512-V7t2FjpDwbqnwlP98AAxRu+ade+AcLZuW+/fcnMUFe3er8TA/+jjm7PZWd8TDY7IbIEmc0U81rt4k0CNWGV2ng==","signatures":[{"sig":"MEUCIF8KgFvhvBwM3ovQEG6LbUU4XYJVSJGx5rUKVEiXsWouAiEAlwDpc48SJSwHABOnAJt01CjEmejdGC0Q2JnRJDKVjrc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@access-tokens%2fcli@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108758},"main":"./dist/index.js","_from":"file:access-tokens-cli-1.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"lint":"eslint src","test":"jest","build":"tsc --build tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage *-junit.xml","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0f91d7c1-d5f0-4484-912b-e377a7fcc334"}},"_resolved":"/tmp/81508489741cc29618632b348c6601e7/access-tokens-cli-1.1.0.tgz","_integrity":"sha512-V7t2FjpDwbqnwlP98AAxRu+ade+AcLZuW+/fcnMUFe3er8TA/+jjm7PZWd8TDY7IbIEmc0U81rt4k0CNWGV2ng==","repository":{"url":"git+https://github.com/loancrate/access-tokens.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.6.2","description":"CLI for managing personal access tokens","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.1.12","yaml":"^2.8.1","chalk":"^4.1.2","fs-extra":"^11.3.2","commander":"^14.0.2","@access-tokens/core":"1.1.0","@access-tokens/client":"1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"^9.38.0","ts-jest":"^29.4.5","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.2","@jest/globals":"^30.2.0","@types/fs-extra":"^11.0.4","@access-tokens/jest-config":"1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.1.0_1767127271042_0.9163238941064948","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@access-tokens/cli","version":"1.2.0","description":"CLI for managing personal access tokens","keywords":["dynamodb","personal-access-token","pat","authentication","cli","command-line"],"repository":{"type":"git","url":"git+https://github.com/loancrate/access-tokens.git","directory":"packages/cli"},"license":"ISC","author":{"name":"Trevor Robinson"},"main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"access-tokens":"dist/main.js"},"dependencies":{"chalk":"^4.1.2","commander":"^14.0.2","fs-extra":"^11.3.2","luxon":"^3.7.2","yaml":"^2.8.1","zod":"^4.1.12","@access-tokens/client":"1.1.0","@access-tokens/core":"1.1.0"},"devDependencies":{"@jest/globals":"^30.2.0","@types/fs-extra":"^11.0.4","@types/jest":"^30.0.0","@types/luxon":"^3.7.1","@types/node":"^24.9.2","eslint":"^9.38.0","jest":"^30.2.0","jest-junit":"^16.0.0","ts-jest":"^29.4.5","typescript":"^5.9.3","@access-tokens/jest-config":"1.0.1"},"engines":{"node":">=20.0.0"},"scripts":{"build":"tsc --build tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage *-junit.xml","lint":"eslint src","test":"jest","typecheck":"tsc --noEmit"},"_id":"@access-tokens/cli@1.2.0","bugs":{"url":"https://github.com/loancrate/access-tokens/issues"},"homepage":"https://github.com/loancrate/access-tokens#readme","_integrity":"sha512-p5QYbMKd5V+hwkzgjYvmVuSZi7SuAYsKYGj7UbaLQOGmn2u+XVlWM2jGEvJ19CUQVj0OeV38xUGYHI6voHZoLg==","_resolved":"/tmp/8f10bc6bd35d6cd0c89b5040dc466007/access-tokens-cli-1.2.0.tgz","_from":"file:access-tokens-cli-1.2.0.tgz","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-p5QYbMKd5V+hwkzgjYvmVuSZi7SuAYsKYGj7UbaLQOGmn2u+XVlWM2jGEvJ19CUQVj0OeV38xUGYHI6voHZoLg==","shasum":"93e041bc00dbbd2eeac6d467ef5d76f119bdd671","tarball":"https://registry.npmjs.org/@access-tokens/cli/-/cli-1.2.0.tgz","fileCount":79,"unpackedSize":112224,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@access-tokens%2fcli@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCax9U4GTC+KKr74Q/sgEcdqvtr1Ze7KJFhS28OZD7dcQIhAJbh2ZlD7+DN3H741JMslx99wkx9eQtpGywDDnQZXlyn"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0f91d7c1-d5f0-4484-912b-e377a7fcc334"}},"directories":{},"maintainers":[{"name":"trevorr","email":"trevor@scurrilous.com"},{"name":"andrew-loancrate","email":"andrew@loancrate.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_1.2.0_1768418155122_0.4496271235992426"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-07T01:56:20.759Z","modified":"2026-01-14T19:15:55.580Z","1.0.0":"2025-11-07T01:56:21.045Z","1.1.0":"2025-12-30T20:41:11.227Z","1.2.0":"2026-01-14T19:15:55.265Z"},"bugs":{"url":"https://github.com/loancrate/access-tokens/issues"},"author":{"name":"Trevor Robinson"},"license":"ISC","homepage":"https://github.com/loancrate/access-tokens#readme","keywords":["dynamodb","personal-access-token","pat","authentication","cli","command-line"],"repository":{"type":"git","url":"git+https://github.com/loancrate/access-tokens.git","directory":"packages/cli"},"description":"CLI for managing personal access tokens","maintainers":[{"name":"trevorr","email":"trevor@scurrilous.com"},{"name":"andrew-loancrate","email":"andrew@loancrate.com"}],"readme":"# @access-tokens/cli\n\n[![npm](https://img.shields.io/npm/v/@access-tokens/cli)](https://www.npmjs.com/package/@access-tokens/cli)\n[![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)\n\nCommand-line interface for managing Personal Access Tokens (PATs).\n\n## Features\n\n- **Token Management**: Issue, list, update, revoke, and restore tokens\n- **Configuration**: Named endpoints for easy multi-environment management\n- **Bulk Operations**: Sync tokens across environments from YAML config\n- **Local Generation**: Generate tokens without server connection\n- **Flexible Output**: JSON or human-readable output formats\n- **Secure Credentials**: Config file permission validation\n\n## Installation\n\n```bash\nnpm install -g @access-tokens/cli\n```\n\nOr use with npx (no installation):\n\n```bash\nnpx @access-tokens/cli --help\n```\n\n## Quick Start\n\n### Issue a Token\n\n```bash\naccess-tokens issue \\\n  --url https://api.example.com \\\n  --admin-token <your-admin-token> \\\n  --owner user@example.com \\\n  --admin\n```\n\n### List Tokens\n\n```bash\naccess-tokens list \\\n  --url https://api.example.com \\\n  --admin-token <your-admin-token>\n```\n\n### Using Named Endpoints\n\nCreate a config file at `~/.access-tokens-cli/config.yaml`:\n\n```yaml\nendpoints:\n  prod:\n    url: https://api.example.com\n    adminToken: pat_prod_admin_token_here\n  staging:\n    url: https://staging.example.com\n    adminToken: pat_staging_admin_token_here\n```\n\nThen use the endpoint name:\n\n```bash\naccess-tokens list --endpoint prod\naccess-tokens issue --endpoint staging --owner user@example.com\n```\n\n## Commands\n\n### `generate`\n\nGenerate a token locally without storing in database. Useful for pre-generating tokens.\n\n```bash\naccess-tokens generate\naccess-tokens generate --token-prefix myapp_\naccess-tokens generate --token-id specific-id-123\naccess-tokens generate --json\n```\n\n**Options:**\n\n- `--token-prefix <prefix>` - Token prefix (default: `pat_`)\n- `--token-id <id>` - Use specific token ID\n- `--json` - Output as JSON\n- `--verbose` - Verbose output\n- `--quiet` - Minimal output\n\n**Output:**\n\n```\nToken: pat_9Xj2kLm5nPqRs7tUv.a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3\nToken ID: 9Xj2kLm5nPqRs7tUv\nSecret PHC: $scrypt$n=16384,r=8,p=1$...\n```\n\n### `list`\n\nList all tokens.\n\n```bash\naccess-tokens list --endpoint prod\naccess-tokens list --url https://api.example.com --admin-token <token>\naccess-tokens list --endpoint prod --include-revoked --include-expired\naccess-tokens list --endpoint prod --json\n```\n\n**Options:**\n\n- `--endpoint <name>` - Named endpoint from config\n- `--url <url>` - Direct endpoint URL\n- `--admin-token <token>` - Admin token (required with --url)\n- `--auth-path <path>` - Auth path (default: /auth)\n- `--admin-path <path>` - Admin path (default: /admin)\n- `--config-dir <path>` - Config directory (default: ~/.access-tokens-cli)\n- `--include-revoked` - Include revoked tokens\n- `--include-expired` - Include expired tokens\n- `--include-secret-phc` - Include secret PHC hashes\n- `--has-role <role>` - Filter tokens that have this role\n- `--json` - Output as JSON\n- `--verbose` - Verbose output\n- `--quiet` - Minimal output\n\n### `issue`\n\nIssue a new token.\n\n```bash\naccess-tokens issue \\\n  --endpoint prod \\\n  --owner user@example.com \\\n  --admin\n\naccess-tokens issue \\\n  --url https://api.example.com \\\n  --admin-token <token> \\\n  --owner user@example.com \\\n  --roles reader,writer \\\n  --expires-at 2025-12-31\n```\n\n**Options:**\n\n- `--endpoint <name>` - Named endpoint from config\n- `--url <url>` - Direct endpoint URL\n- `--admin-token <token>` - Admin token (required with --url)\n- `--auth-path <path>` - Auth path (default: /auth)\n- `--admin-path <path>` - Admin path (default: /admin)\n- `--config-dir <path>` - Config directory (default: ~/.access-tokens-cli)\n- `--owner <email>` - Token owner (required)\n- `--admin` - Make token an admin token\n- `--roles <roles>` - Comma-separated list of roles\n- `--expires-at <date>` - Expiration date (ISO 8601 or Unix timestamp)\n- `--json` - Output as JSON\n- `--verbose` - Verbose output\n- `--quiet` - Minimal output\n\n**Date Formats:**\n\n- ISO 8601: `2025-12-31`, `2025-12-31T23:59:59Z`\n- Unix timestamp: `1735689599`\n\n### `register`\n\nRegister a pre-generated token (from `generate` command).\n\n```bash\naccess-tokens register \\\n  --endpoint prod \\\n  --token-id 9Xj2kLm5nPqRs7tUv \\\n  --secret-phc '$scrypt$n=16384,r=8,p=1$...' \\\n  --owner user@example.com\n```\n\n**Options:**\n\n- `--endpoint <name>` - Named endpoint from config\n- `--url <url>` - Direct endpoint URL\n- `--admin-token <token>` - Admin token (required with --url)\n- `--auth-path <path>` - Auth path (default: /auth)\n- `--admin-path <path>` - Admin path (default: /admin)\n- `--config-dir <path>` - Config directory (default: ~/.access-tokens-cli)\n- `--token-id <id>` - Pre-generated token ID (required)\n- `--secret-phc <phc>` - Secret PHC hash (required)\n- `--owner <email>` - Token owner (required)\n- `--admin` - Make token an admin token\n- `--expires-at <date>` - Expiration date\n- `--json` - Output as JSON\n- `--verbose` - Verbose output\n- `--quiet` - Minimal output\n\n### `update`\n\nUpdate an existing token's properties.\n\n```bash\n# Update owner\naccess-tokens update \\\n  --endpoint prod \\\n  --token-id 9Xj2kLm5nPqRs7tUv \\\n  --owner newuser@example.com\n\n# Update admin flag\naccess-tokens update \\\n  --endpoint prod \\\n  --token-id 9Xj2kLm5nPqRs7tUv \\\n  --admin true\n\n# Clear expiration\naccess-tokens update \\\n  --endpoint prod \\\n  --token-id 9Xj2kLm5nPqRs7tUv \\\n  --expires-at null\n\n# Update roles\naccess-tokens update \\\n  --endpoint prod \\\n  --token-id 9Xj2kLm5nPqRs7tUv \\\n  --roles reader,writer\n\n# Add roles atomically\naccess-tokens update \\\n  --endpoint prod \\\n  --token-id 9Xj2kLm5nPqRs7tUv \\\n  --add-roles admin\n\n# Remove roles atomically\naccess-tokens update \\\n  --endpoint prod \\\n  --token-id 9Xj2kLm5nPqRs7tUv \\\n  --remove-roles guest\n```\n\n**Options:**\n\n- `--endpoint <name>` - Named endpoint from config\n- `--url <url>` - Direct endpoint URL\n- `--admin-token <token>` - Admin token (required with --url)\n- `--auth-path <path>` - Auth path (default: /auth)\n- `--admin-path <path>` - Admin path (default: /admin)\n- `--config-dir <path>` - Config directory (default: ~/.access-tokens-cli)\n- `--token-id <id>` - Token ID to update (required)\n- `--owner <email>` - New owner\n- `--admin <boolean>` - New admin status (true/false)\n- `--secret-phc <phc>` - New secret PHC hash\n- `--roles <roles>` - Replace all roles (comma-separated)\n- `--add-roles <roles>` - Add roles atomically (comma-separated)\n- `--remove-roles <roles>` - Remove roles atomically (comma-separated)\n- `--expires-at <date>` - New expiration or \"null\" to remove\n- `--verbose` - Verbose output\n- `--quiet` - Minimal output\n\n### `revoke`\n\nRevoke a token.\n\n```bash\naccess-tokens revoke --endpoint prod --token-id 9Xj2kLm5nPqRs7tUv\n\n# Revoke with cleanup in 30 days\naccess-tokens revoke \\\n  --endpoint prod \\\n  --token-id 9Xj2kLm5nPqRs7tUv \\\n  --expires-at 2025-12-31\n```\n\n**Options:**\n\n- `--endpoint <name>` - Named endpoint from config\n- `--url <url>` - Direct endpoint URL\n- `--admin-token <token>` - Admin token (required with --url)\n- `--auth-path <path>` - Auth path (default: /auth)\n- `--admin-path <path>` - Admin path (default: /admin)\n- `--config-dir <path>` - Config directory (default: ~/.access-tokens-cli)\n- `--token-id <id>` - Token ID to revoke (required)\n- `--expires-at <date>` - Expiration for cleanup (optional)\n- `--verbose` - Verbose output\n- `--quiet` - Minimal output\n\n### `restore`\n\nRestore a previously revoked token.\n\n```bash\naccess-tokens restore --endpoint prod --token-id 9Xj2kLm5nPqRs7tUv\n```\n\n**Options:**\n\n- `--endpoint <name>` - Named endpoint from config\n- `--url <url>` - Direct endpoint URL\n- `--admin-token <token>` - Admin token (required with --url)\n- `--auth-path <path>` - Auth path (default: /auth)\n- `--admin-path <path>` - Admin path (default: /admin)\n- `--config-dir <path>` - Config directory (default: ~/.access-tokens-cli)\n- `--token-id <id>` - Token ID to restore (required)\n- `--verbose` - Verbose output\n- `--quiet` - Minimal output\n\n### `sync`\n\nSync tokens from YAML config to endpoints. Ensures tokens exist with correct properties.\n\n**Sync Config (`sync.yaml`):**\n\n```yaml\ntokens:\n  - tokenId: service-a-prod\n    owner: service-a@example.com\n    isAdmin: false\n    roles: [reader, writer]\n    secretPhc: $scrypt$n=16384,r=8,p=1$...\n    expiresAt: 1735689599\n\n  - tokenId: admin-bot\n    owner: admin-bot@example.com\n    isAdmin: true\n    roles: [admin, reader, writer]\n    secretPhc: $scrypt$n=16384,r=8,p=1$...\n```\n\n**Usage:**\n\n```bash\n# Sync to configured endpoints\naccess-tokens sync --config sync.yaml\n\n# Sync to specific endpoint\naccess-tokens sync --config sync.yaml --endpoint prod\n\n# Sync to direct URL\naccess-tokens sync --config sync.yaml --url https://api.example.com --admin-token <token>\n\n# Dry run (preview changes)\naccess-tokens sync --config sync.yaml --dry-run\n```\n\n**Options:**\n\n- `--config <path>` - Path to sync config YAML (required)\n- `--endpoint <name>` - Target endpoint(s), comma-separated\n- `--url <url>` - Direct endpoint URL (overrides config)\n- `--admin-token <token>` - Admin token (required with --url)\n- `--auth-path <path>` - Auth path (default: /auth)\n- `--admin-path <path>` - Admin path (default: /admin)\n- `--config-dir <path>` - Config directory (default: ~/.access-tokens-cli)\n- `--dry-run` - Show changes without applying\n- `--verbose` - Verbose output\n- `--quiet` - Minimal output\n\n## Configuration\n\n### Config File Location\n\nDefault: `~/.access-tokens-cli/config.yaml`\n\nOverride: `--config-dir <path>`\n\n### Config File Format\n\n```yaml\nendpoints:\n  prod:\n    url: https://api.example.com\n    adminToken: pat_prod_admin_token\n    authPath: /auth # optional, default: /auth\n    adminPath: /admin # optional, default: /admin\n\n  staging:\n    url: https://staging.example.com\n    adminToken: pat_staging_admin_token\n```\n\n### Security\n\nThe CLI validates config file permissions and warns if the file is world-readable (mode 0644 or more permissive).\n\n**Secure your config:**\n\n```bash\nchmod 600 ~/.access-tokens-cli/config.yaml\n```\n\n## Output Formats\n\n### Human-Readable (Default)\n\n```\nToken issued successfully!\n\nTOKEN (save this securely, it won't be shown again):\npat_9Xj2kLm5nPqRs7tUv.a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3\n\nToken ID: 9Xj2kLm5nPqRs7tUv\nOwner: user@example.com\nAdmin: true\n```\n\n### JSON (--json)\n\n```json\n{\n  \"token\": \"pat_9Xj2kLm5nPqRs7tUv.a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3\",\n  \"record\": {\n    \"tokenId\": \"9Xj2kLm5nPqRs7tUv\",\n    \"owner\": \"user@example.com\",\n    \"isAdmin\": true,\n    \"isRevoked\": false,\n    \"createdAt\": 1704067200,\n    \"updatedAt\": 1704067200\n  }\n}\n```\n\n## Exit Codes\n\n- `0` - Success\n- `1` - Error (invalid arguments, API error, etc.)\n\n## Requirements\n\n- Node.js 20+\n- @access-tokens/express server (except generate)\n\n## Related Packages\n\n- [@access-tokens/core](https://www.npmjs.com/package/@access-tokens/core) - Core token management library\n- [@access-tokens/express](https://www.npmjs.com/package/@access-tokens/express) - Express routes and middleware\n- [@access-tokens/client](https://www.npmjs.com/package/@access-tokens/client) - HTTP client for PAT API\n\n## License\n\n[ISC](https://opensource.org/licenses/ISC) © 2025 Loan Crate, Inc.\n\n## Links\n\n- [GitHub Repository](https://github.com/loancrate/access-tokens)\n- [npm Package](https://www.npmjs.com/package/@access-tokens/cli)\n- [Documentation](https://github.com/loancrate/access-tokens#readme)\n","readmeFilename":"README.md"}