Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/pages/_api/api/demo/chat.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { mppx } from "../../../../mppx.server";
import { getProxyFetch } from "../../../../mppx-proxy-client";
import { sessionUpdateResponse } from "../../../../session-response";

const responses = [
[
Expand Down Expand Up @@ -82,7 +83,7 @@ export default async function handler(request: Request) {
if (result.status === 402) return result.challenge;

// POST = voucher update (no body needed)
if (request.method === "POST") return result.withReceipt();
if (request.method === "POST") return sessionUpdateResponse(result);

// GET = stream a chat response
const proxyFetch = getProxyFetch();
Expand Down
3 changes: 2 additions & 1 deletion src/pages/_api/api/demo/poem.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { mppx } from "../../../../mppx.server";
import { sessionUpdateResponse } from "../../../../session-response";

const poems = [
[
Expand Down Expand Up @@ -116,7 +117,7 @@ export default async function handler(request: Request) {
if (result.status === 402) return result.challenge;

// POST = voucher update (no body needed)
if (request.method === "POST") return result.withReceipt();
if (request.method === "POST") return sessionUpdateResponse(result);

// GET = stream a poem
const poem = poems[Math.floor(Math.random() * poems.length)];
Expand Down
3 changes: 2 additions & 1 deletion src/pages/_api/api/sessions/poem.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { mppx } from "../../../../mppx.server";
import { sessionUpdateResponse } from "../../../../session-response";

const poems = [
{
Expand Down Expand Up @@ -75,7 +76,7 @@ export default async function handler(request: Request) {
if (result.status === 402) return result.challenge;

// POST = voucher update (no body needed)
if (request.method === "POST") return result.withReceipt();
if (request.method === "POST") return sessionUpdateResponse(result);

// GET = stream a poem
const poem = poems[Math.floor(Math.random() * poems.length)];
Expand Down
15 changes: 15 additions & 0 deletions src/session-response.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { describe, expect, it } from "vitest";
import { sessionUpdateResponse } from "./session-response";

describe("sessionUpdateResponse", () => {
it("passes an explicit empty response to withReceipt", () => {
const response = sessionUpdateResponse({
withReceipt(inner) {
expect(inner.status).toBe(204);
return new Response(null, { status: inner.status });
},
});

expect(response.status).toBe(204);
});
});
7 changes: 7 additions & 0 deletions src/session-response.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
type ReceiptResult = {
withReceipt(response: Response): Response;
};

export function sessionUpdateResponse(result: ReceiptResult): Response {
return result.withReceipt(new Response(null, { status: 204 }));
}
Loading