@cmdoss/cryptoguard-manifest-astro
v0.1.0
Published
Astro integration for CryptoGuard manifest generation
Readme
@cryptoguard/manifest-astro
Astro integration for CryptoGuard manifest generation. Automatically generates a manifest file mapping your Astro build output to served URL paths for binary transparency verification.
Installation
pnpm add @cryptoguard/manifest-astroUsage
Add the integration to your astro.config.mjs:
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
import { cryptoGuardManifest } from '@cryptoguard/manifest-astro';
export default defineConfig({
output: 'server',
adapter: node({ mode: 'standalone' }),
integrations: [cryptoGuardManifest()]
});Configuration
With Astro Config
Pass your Astro configuration to the integration:
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
import { cryptoGuardManifest } from '@cryptoguard/manifest-astro';
const astroConfig = {
base: '/docs'
};
export default defineConfig({
base: astroConfig.base,
output: 'server',
adapter: node({ mode: 'standalone' }),
integrations: [cryptoGuardManifest(astroConfig)]
});Integration Options
cryptoGuardManifest(astroConfig, {
verbose: true, // Enable detailed logging
disabled: false, // Disable manifest generation
projectRoot: process.cwd() // Project root directory
})Environment Variables
You can use environment variables for dynamic configuration:
const astroConfig = {
base: process.env.PUBLIC_BASE_PATH || ''
};
export default defineConfig({
base: astroConfig.base,
output: 'server',
adapter: node({ mode: 'standalone' }),
integrations: [
cryptoGuardManifest(astroConfig, {
verbose: process.env.MANIFEST_VERBOSE === 'true',
disabled: process.env.MANIFEST_DISABLED === 'true'
})
]
});Generated Manifest
The integration generates a manifest.json file in your project root:
{
"version": "1.0",
"framework": "astro",
"frameworkVersion": "5.0.0",
"sources": [
{
"dir": "dist/client",
"serveAt": "/"
}
]
}With Base Path
When using base configuration:
{
"version": "1.0",
"framework": "astro",
"frameworkVersion": "5.0.0",
"sources": [
{
"dir": "dist/client",
"serveAt": "/docs"
}
]
}How It Works
- Build Hook: Runs after Astro build completes (
astro:build:done) - Path Detection: Extracts
baseandoutDirfrom your config - Manifest Generation: Maps
dist/client/to the appropriate serve path - Smart Updates: Only updates manifest.json when content changes
- Validation: Ensures manifest security (no path traversal, proper structure)
Astro Build Output Structure
Astro generates:
dist/client/- Static client assets and application codedist/client/_astro/- Framework assets (chunks, CSS, etc.)dist/server/- Server-side rendering code (not served to clients)
The integration maps the dist/client/ directory to your configured base path, as Astro serves all client assets (including _astro/) from this location.
License
MIT
