
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
nextjs-cache-handler-test-dy-2
Advanced tools
Custom cache handler for Next.js with support for Google Cloud Storage and file-based caching
Custom cache handler for Next.js with support for Google Cloud Storage and file-based caching. Designed for Pantheon's Next.js hosting platform.
npm install @pantheon-systems/nextjs-cache-handler
// cacheHandler.ts
import { createCacheHandler } from '@pantheon-systems/nextjs-cache-handler';
const CacheHandler = createCacheHandler({
type: 'auto', // Auto-detect: GCS if CACHE_BUCKET exists, else file-based
});
export default CacheHandler;
// next.config.mjs
const nextConfig = {
cacheHandler: require.resolve('./cacheHandler'),
cacheMaxMemorySize: 0, // Disable in-memory caching to use custom handler
};
export default nextConfig;
createCacheHandler(config?)Creates a cache handler based on the provided configuration.
interface CacheHandlerConfig {
/**
* Handler type selection:
* - 'auto': Automatically detect based on environment (GCS if CACHE_BUCKET is set, otherwise file)
* - 'file': Use file-based caching (local development)
* - 'gcs': Use Google Cloud Storage (production/Pantheon)
*/
type?: 'auto' | 'file' | 'gcs';
}
Note: Debug logging is controlled via the
CACHE_DEBUGenvironment variable. See the Debugging section for details.
| Variable | Description | Required |
|---|---|---|
CACHE_BUCKET | GCS bucket name for storing cache | Required for GCS handler |
OUTBOUND_PROXY_ENDPOINT | Edge cache proxy endpoint | Optional (enables edge cache clearing) |
CACHE_DEBUG | Enable debug logging (true or 1) | Optional |
createCacheHandler(config?)Factory function that returns the appropriate cache handler class based on configuration.
import { createCacheHandler } from '@pantheon-systems/nextjs-cache-handler';
// Auto-detect based on environment
const CacheHandler = createCacheHandler();
// Force file-based caching
const FileCacheHandler = createCacheHandler({ type: 'file' });
// Force GCS caching
const GcsCacheHandler = createCacheHandler({ type: 'gcs' });
getSharedCacheStats()Returns cache statistics for the current environment.
import { getSharedCacheStats } from '@pantheon-systems/nextjs-cache-handler';
const stats = await getSharedCacheStats();
console.log(stats);
// {
// size: 10,
// keys: ['fetch:abc123', 'route:_index'],
// entries: [
// { key: 'fetch:abc123', tags: ['posts'], type: 'fetch', lastModified: 1234567890 }
// ]
// }
clearSharedCache()Clears all cache entries (preserving static SSG routes).
import { clearSharedCache } from '@pantheon-systems/nextjs-cache-handler';
const clearedCount = await clearSharedCache();
console.log(`Cleared ${clearedCount} cache entries`);
For advanced use cases, you can import the handlers directly:
import { FileCacheHandler, GcsCacheHandler } from '@pantheon-systems/nextjs-cache-handler';
// Use directly in your configuration
export default FileCacheHandler;
The handler distinguishes between two cache types:
fetch() calls with caching enabledThe handler maintains a tag-to-keys mapping for efficient O(1) cache invalidation:
// When setting cache with tags
await cacheHandler.set('post-1', data, { tags: ['posts', 'blog'] });
// When invalidating by tag
await cacheHandler.revalidateTag('posts');
// All entries tagged with 'posts' are invalidated
On each new build, the handler automatically:
This matches Next.js's expected behavior where route cache is invalidated on each deploy but data cache persists.
Enable debug logging to see detailed cache operations by setting the CACHE_DEBUG environment variable:
# Enable debug logging
CACHE_DEBUG=true npm run start
# Or
CACHE_DEBUG=1 npm run start
The cache handler uses four log levels:
| Level | When Shown | Use Case |
|---|---|---|
debug | Only when CACHE_DEBUG=true | Verbose operational logs (GET, SET, HIT, MISS) |
info | Only when CACHE_DEBUG=true | Important events (initialization, cache cleared) |
warn | Always | Recoverable issues that might need attention |
error | Always | Errors that affect cache operations |
When debug logging is enabled, you'll see output like:
[GcsCacheHandler] Initializing cache handler
[GcsCacheHandler] GET: /api/posts
[GcsCacheHandler] HIT: /api/posts (route)
[GcsCacheHandler] SET: /api/users (fetch)
[EdgeCacheClear] Cleared 3 paths in 45ms
[GcsCacheHandler] Revalidated 5 entries for tags: posts, blog
This helps diagnose cache behavior, verify cache hits/misses, and troubleshoot invalidation issues.
Ensure you're logged into npm with access to the @pantheon-systems scope:
npm login --scope=@pantheon-systems
Verify your login:
npm whoami
Update the version in package.json:
# Patch release (0.1.0 -> 0.1.1)
npm version patch
# Minor release (0.1.0 -> 0.2.0)
npm version minor
# Major release (0.1.0 -> 1.0.0)
npm version major
Build and test:
npm run build
npm test
Publish to npm:
npm publish --access public
The --access public flag is required for scoped packages to be publicly accessible.
After publishing, verify the package is available:
npm view @pantheon-systems/nextjs-cache-handler
Or install it in a test project:
npm install @pantheon-systems/nextjs-cache-handler
MIT
FAQs
Custom cache handler for Next.js with support for Google Cloud Storage and file-based caching
We found that nextjs-cache-handler-test-dy-2 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.