{"_id":"@cmdoss/cryptoguard-manifest-astro","_rev":"5-4b426c64cdf2f33aac3722e999c9fcb0","name":"@cmdoss/cryptoguard-manifest-astro","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@cmdoss/cryptoguard-manifest-astro","version":"0.1.0","keywords":["astro","cryptoguard","manifest","binary-transparency","verification"],"author":{"name":"CryptoGuard Team"},"license":"MIT","_id":"@cmdoss/cryptoguard-manifest-astro@0.1.0","maintainers":[{"name":"margo_cmdoss","email":"Margo.tran@commandoss.com"},{"name":"daniellam258","email":"daniellamhoang@gmail.com"},{"name":"toanzzz","email":"me@toan.io"}],"dist":{"shasum":"999186b11ea75e1c24eba4a575a4d7b14190ee41","tarball":"https://registry.npmjs.org/@cmdoss/cryptoguard-manifest-astro/-/cryptoguard-manifest-astro-0.1.0.tgz","fileCount":22,"integrity":"sha512-RSyFFzQH0lmLMPrk1aewVB3fm5nJtHe9r81U8vTDUY9o4YpZ/ltrnSGXkrnuF4sR3Ryeg5uPh2X/FichXoUCQA==","signatures":[{"sig":"MEYCIQD96fUszmvDpgh8n3iQV2IYq1478vjsmoyOYeT1cpFRoQIhAOq3J1IaBXrh/3Z7BTuRq6Bp3ZmeyYg9isc17H2u6gPx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17578},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"81f96eaab3b28f82b7f806c1a0bc0815e1644e4c","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rm -rf dist","build:watch":"tsc --watch","prepublishOnly":"pnpm run clean && pnpm run build"},"_npmUser":{"name":"margo_cmdoss","email":"Margo.tran@commandoss.com"},"_npmVersion":"11.6.0","description":"Astro integration for CryptoGuard manifest generation","directories":{},"_nodeVersion":"24.8.0","dependencies":{"@cmdoss/cryptoguard-manifest-core":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"astro":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cryptoguard-manifest-astro_0.1.0_1765870378205_0.6836584774759125","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-12-16T07:32:58.155Z","modified":"2026-05-27T18:41:53.677Z","0.1.0":"2025-12-16T07:32:58.366Z"},"author":{"name":"CryptoGuard Team"},"license":"MIT","keywords":["astro","cryptoguard","manifest","binary-transparency","verification"],"description":"Astro integration for CryptoGuard manifest generation","maintainers":[{"email":"lequocuyit@gmail.com","name":"uydev"},{"email":"mauduckiengiang@gmail.com","name":"ducnmm"},{"email":"aaron.phan@commandoss.com","name":"aaronphancommandoss"},{"email":"rowan.nguyen@commandoss.com","name":"rowanng"},{"email":"Margo.tran@commandoss.com","name":"margo_cmdoss"},{"email":"daniellamhoang@gmail.com","name":"daniellam258"},{"email":"me@toan.io","name":"toanzzz"}],"readme":"# @cryptoguard/manifest-astro\n\nAstro integration for CryptoGuard manifest generation. Automatically generates a manifest file mapping your Astro build output to served URL paths for binary transparency verification.\n\n## Installation\n\n```bash\npnpm add @cryptoguard/manifest-astro\n```\n\n## Usage\n\nAdd the integration to your `astro.config.mjs`:\n\n```javascript\nimport { defineConfig } from 'astro/config';\nimport node from '@astrojs/node';\nimport { cryptoGuardManifest } from '@cryptoguard/manifest-astro';\n\nexport default defineConfig({\n  output: 'server',\n  adapter: node({ mode: 'standalone' }),\n  integrations: [cryptoGuardManifest()]\n});\n```\n\n## Configuration\n\n### With Astro Config\n\nPass your Astro configuration to the integration:\n\n```javascript\nimport { defineConfig } from 'astro/config';\nimport node from '@astrojs/node';\nimport { cryptoGuardManifest } from '@cryptoguard/manifest-astro';\n\nconst astroConfig = {\n  base: '/docs'\n};\n\nexport default defineConfig({\n  base: astroConfig.base,\n  output: 'server',\n  adapter: node({ mode: 'standalone' }),\n  integrations: [cryptoGuardManifest(astroConfig)]\n});\n```\n\n### Integration Options\n\n```javascript\ncryptoGuardManifest(astroConfig, {\n  verbose: true,   // Enable detailed logging\n  disabled: false, // Disable manifest generation\n  projectRoot: process.cwd() // Project root directory\n})\n```\n\n### Environment Variables\n\nYou can use environment variables for dynamic configuration:\n\n```javascript\nconst astroConfig = {\n  base: process.env.PUBLIC_BASE_PATH || ''\n};\n\nexport default defineConfig({\n  base: astroConfig.base,\n  output: 'server',\n  adapter: node({ mode: 'standalone' }),\n  integrations: [\n    cryptoGuardManifest(astroConfig, {\n      verbose: process.env.MANIFEST_VERBOSE === 'true',\n      disabled: process.env.MANIFEST_DISABLED === 'true'\n    })\n  ]\n});\n```\n\n## Generated Manifest\n\nThe integration generates a `manifest.json` file in your project root:\n\n```json\n{\n  \"version\": \"1.0\",\n  \"framework\": \"astro\",\n  \"frameworkVersion\": \"5.0.0\",\n  \"sources\": [\n    {\n      \"dir\": \"dist/client\",\n      \"serveAt\": \"/\"\n    }\n  ]\n}\n```\n\n### With Base Path\n\nWhen using `base` configuration:\n\n```json\n{\n  \"version\": \"1.0\",\n  \"framework\": \"astro\",\n  \"frameworkVersion\": \"5.0.0\",\n  \"sources\": [\n    {\n      \"dir\": \"dist/client\",\n      \"serveAt\": \"/docs\"\n    }\n  ]\n}\n```\n\n## How It Works\n\n1. **Build Hook**: Runs after Astro build completes (`astro:build:done`)\n2. **Path Detection**: Extracts `base` and `outDir` from your config\n3. **Manifest Generation**: Maps `dist/client/` to the appropriate serve path\n4. **Smart Updates**: Only updates manifest.json when content changes\n5. **Validation**: Ensures manifest security (no path traversal, proper structure)\n\n## Astro Build Output Structure\n\nAstro generates:\n- `dist/client/` - Static client assets and application code\n- `dist/client/_astro/` - Framework assets (chunks, CSS, etc.)\n- `dist/server/` - Server-side rendering code (not served to clients)\n\nThe integration maps the `dist/client/` directory to your configured base path, as Astro serves all client assets (including `_astro/`) from this location.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}