@instantdb/resumable-stream
v0.22.169
Published
Instant's drop-in replacement for Vercel's resumable-stream package.
Downloads
17,008
Readme
Welcome to Instant's resumable-stream library.
This is a drop-in replacement for Vercel's resumable-stream library using InstantDB streams.
Instant's streams have no dependency on Redis and they never expire.
Usage
You can provide your appId and adminToken as arguments to createResumableStreamContext or export INSTANT_APP_ID and INSTANT_APP_ADMIN_TOKEN.
Idempotent API
import { createResumableStreamContext } from '@instantdb/resumable-stream';
import { after } from 'next/server';
const streamContext = createResumableStreamContext({
waitUntil: after,
appId: YOUR_INSTANT_APP_ID, // or export INSTANT_APP_ID
adminToken: YOUR_INSTANT_APP_ADMIN_TOKEN, // or export INSTANT_APP_ADMIN_TOKEN
});
export async function GET(
req: NextRequest,
{ params }: { params: Promise<{ streamId: string }> },
) {
const { streamId } = await params;
const resumeAt = req.nextUrl.searchParams.get('resumeAt');
const stream = await streamContext.resumableStream(
streamId,
makeTestStream,
resumeAt ? parseInt(resumeAt) : undefined,
);
return new Response(stream, {
headers: {
'Content-Type': 'text/event-stream',
},
});
}Usage with explicit resumption
import { createResumableStreamContext } from '@instantdb/resumable-stream';
import { after } from 'next/server';
const streamContext = createResumableStreamContext({
waitUntil: after,
appId: YOUR_INSTANT_APP_ID, // or export INSTANT_APP_ID
adminToken: YOUR_INSTANT_APP_ADMIN_TOKEN, // or export INSTANT_APP_ADMIN_TOKEN
});
export async function POST(
req: NextRequest,
{ params }: { params: Promise<{ streamId: string }> },
) {
const { streamId } = await params;
const stream = await streamContext.createNewResumableStream(
streamId,
makeTestStream,
);
return new Response(stream, {
headers: {
'Content-Type': 'text/event-stream',
},
});
}
export async function GET(
req: NextRequest,
{ params }: { params: Promise<{ streamId: string }> },
) {
const { streamId } = await params;
const resumeAt = req.nextUrl.searchParams.get('resumeAt');
const stream = await streamContext.resumeExistingStream(
streamId,
resumeAt ? parseInt(resumeAt) : undefined,
);
return new Response(stream, {
headers: {
'Content-Type': 'text/event-stream',
},
});
}Questions?
If you have any questions, feel free to drop us a line on our Discord
