diff --git a/rivetkit-rust/packages/rivetkit-core/src/serverless.rs b/rivetkit-rust/packages/rivetkit-core/src/serverless.rs index c77d0ce523..20f5f6ef1c 100644 --- a/rivetkit-rust/packages/rivetkit-core/src/serverless.rs +++ b/rivetkit-rust/packages/rivetkit-core/src/serverless.rs @@ -483,8 +483,15 @@ fn route_path(base_path: &str, url: &str) -> Result { } fn parse_start_headers(headers: &HashMap) -> Result { - let pool_name = required_header(headers, "x-rivet-pool-name") - .or_else(|_| required_header(headers, "x-rivet-runner-name"))?; + let pool_name = match optional_header(headers, "x-rivet-pool-name") { + Some(pool_name) => pool_name, + None => optional_header(headers, "x-rivet-runner-name").ok_or_else(|| { + InvalidRequest { + reason: "x-rivet-pool-name header is required".to_string(), + } + .build() + })?, + }; Ok(StartHeaders { endpoint: required_header(headers, "x-rivet-endpoint")?, diff --git a/rivetkit-typescript/packages/rivetkit/tests/driver/serverless-handler.test.ts b/rivetkit-typescript/packages/rivetkit/tests/driver/serverless-handler.test.ts index 5c1428da60..093de6bd34 100644 --- a/rivetkit-typescript/packages/rivetkit/tests/driver/serverless-handler.test.ts +++ b/rivetkit-typescript/packages/rivetkit/tests/driver/serverless-handler.test.ts @@ -169,14 +169,15 @@ describeDriverMatrix( ); expect(response.status).toBe(400); - expect(await response.json()).toMatchObject({ + const body = await response.json(); + expect(body).toMatchObject({ group: "request", code: "invalid", - metadata: { - reason: "x-rivet-endpoint header is required", - }, + }); + expect(body.metadata?.reason).toMatch( + /^x-rivet-(endpoint|pool-name|namespace-name) header is required$/, + ); }); - }); test("accepts a serverless start payload and streams pings", async (c) => { const { client, namespace } = await setupDriverTest(c, driverTestConfig);