
Research
/Security News
npm Package Uses Prompt Injection and Token Flooding to Disrupt AI Malware Scanners
A new npm package tests AI malware scanners with prompt injection, safety-triggering comments, context flooding, and obfuscated JavaScript.
@howells/stow-next
Advanced tools
Next.js integration for Stow file storage. Includes route handler helpers and an image loader for next/image.
npm install @howells/stow-next @howells/stow-server
# or
pnpm add @howells/stow-next @howells/stow-server
# or
yarn add @howells/stow-next @howells/stow-server
// app/api/upload/route.ts
import { createUploadHandler } from "@howells/stow-next";
import { StowServer } from "@howells/stow-server";
const stow = new StowServer(process.env.STOW_API_KEY!);
export const POST = createUploadHandler({
stow,
maxSize: 10 * 1024 * 1024, // 10MB
allowedTypes: ["image/*", "application/pdf"],
});
// app/page.tsx
import { UploadDropzone } from "@howells/stow-react";
export default function Page() {
return <UploadDropzone endpoint="/api/upload" onUploadComplete={(files) => console.log(files)} />;
}
createUploadHandler(config)Creates a Next.js route handler for file uploads.
import { createUploadHandler } from "@howells/stow-next";
export const POST = createUploadHandler({
// Required: Stow server instance
stow: new StowServer(process.env.STOW_API_KEY!),
// Optional: File restrictions
maxSize: 10 * 1024 * 1024, // Max file size in bytes
allowedTypes: ["image/*", ".pdf"], // Allowed MIME types or extensions
route: "uploads", // Default route/folder
// Optional: Custom validation
validate: async (file) => {
if (file.name.includes("secret")) {
return "Filename not allowed";
}
return true;
},
// Optional: Lifecycle hooks
onUploadBegin: async (file) => {
console.log(`Starting upload: ${file.name}`);
},
onUploadComplete: async (result) => {
console.log(`Uploaded: ${result.url}`);
// Save to database, etc.
},
});
Use Stow's image transformation with Next.js Image component.
// next.config.js
module.exports = {
images: {
loader: "custom",
loaderFile: "./lib/stow-loader.ts",
},
};
// lib/stow-loader.ts
import { stowLoader } from "@howells/stow-next/image-loader";
export default stowLoader;
import Image from "next/image";
function MyComponent() {
return (
<Image
src="https://stow.sh/files/bucket-id/image.jpg"
alt="My image"
width={800}
height={600}
quality={80}
/>
);
}
// lib/stow-loader.ts
import { createStowLoader } from "@howells/stow-next/image-loader";
export default createStowLoader({
baseUrl: "https://stow.sh",
defaultQuality: 80,
defaultFormat: "webp",
});
import type { UploadHandlerConfig, StowLoaderConfig } from "@howells/stow-next";
// app/api/upload/route.ts
import { createUploadHandler } from "@howells/stow-next";
import { StowServer } from "@howells/stow-server";
import { db } from "@/lib/db";
import { auth } from "@/lib/auth";
const stow = new StowServer(process.env.STOW_API_KEY!);
export const POST = createUploadHandler({
stow,
maxSize: 5 * 1024 * 1024,
allowedTypes: ["image/jpeg", "image/png", "image/webp"],
validate: async (file) => {
const session = await auth();
if (!session) return "Unauthorized";
return true;
},
onUploadComplete: async (result) => {
const session = await auth();
await db.insert(files).values({
key: result.key,
url: result.url,
userId: session!.user.id,
});
},
});
MIT
FAQs
Next.js integration for Stow file storage
We found that @howells/stow-next 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.

Research
/Security News
A new npm package tests AI malware scanners with prompt injection, safety-triggering comments, context flooding, and obfuscated JavaScript.

Product
Socket now detects supply chain risks in project manifests, starting with missing lockfiles that can make dependency installs non-reproducible.

Research
/Security News
The trojanized extensions use TinyGo-compiled WebAssembly and Solana transaction memos to resolve command-and-control infrastructure.