Skip to main content
Glama

@arizeai/phoenix-mcp

Official
by Arize-ai
httpHeadersSchema.test.ts4.86 kB
import { stringToHttpHeadersSchema } from "../httpHeadersSchema"; describe("httpHeadersSchema", () => { describe("stringToHttpHeadersSchema", () => { // Empty states it("should return null for empty states", () => { expect(stringToHttpHeadersSchema.safeParse("").data).toBeNull(); expect(stringToHttpHeadersSchema.safeParse("{}").data).toBeNull(); expect(stringToHttpHeadersSchema.safeParse("{\n \n}").data).toBeNull(); }); // Valid headers it("should parse valid HTTP headers", () => { const input = '{"Authorization": "Bearer token", "Content-Type": "application/json"}'; const result = stringToHttpHeadersSchema.safeParse(input); expect(result.success).toBe(true); expect(result.data).toEqual({ Authorization: "Bearer token", "Content-Type": "application/json", }); }); // Duplicate key detection it("should detect exact duplicate keys", () => { const input = '{"Authorization": "token1", "Authorization": "token2"}'; const result = stringToHttpHeadersSchema.safeParse(input); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toBe( "Duplicate keys found in JSON object" ); }); it("should detect case-insensitive duplicate headers", () => { const input = '{"Authorization": "token1", "authorization": "token2"}'; const result = stringToHttpHeadersSchema.safeParse(input); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toBe( "Duplicate header names found (header names are case-insensitive)" ); }); // Conservative approach - skip complex JSON it("should skip duplicate detection for nested objects", () => { const input = '{"config": {"timeout": 30}, "headers": {"timeout": "5s"}}'; const result = stringToHttpHeadersSchema.safeParse(input); // These should fail validation due to invalid header structure (objects as values) // but NOT due to duplicate detection expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).not.toContain("Duplicate"); }); it("should skip duplicate detection for arrays", () => { const input = '{"items": [1, 2, 3], "count": 3}'; const result = stringToHttpHeadersSchema.safeParse(input); // Should fail due to array value, not duplicate detection expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).not.toContain("Duplicate"); }); it("should successfully skip duplicate detection for valid flat objects", () => { // This would normally trigger duplicate detection if it wasn't conservative const input = '{"Authorization": "Bearer token", "X-Custom": "value"}'; const result = stringToHttpHeadersSchema.safeParse(input); expect(result.success).toBe(true); expect(result.data).toEqual({ Authorization: "Bearer token", "X-Custom": "value", }); }); // Escape sequence handling it("should handle escaped quotes in header names", () => { const input = '{"key\\"with\\"quotes": "value", "other": "test"}'; const result = stringToHttpHeadersSchema.safeParse(input); // This should fail because quotes in header names are invalid per RFC 7230 expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toContain( "valid HTTP header characters" ); }); // Header validation it("should reject invalid header names", () => { const input = '{"invalid header name": "value"}'; const result = stringToHttpHeadersSchema.safeParse(input); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toContain( "valid HTTP header characters" ); }); it("should reject invalid header values", () => { const input = '{"Authorization": "value\\u0001with\\u0001control\\u0001chars"}'; const result = stringToHttpHeadersSchema.safeParse(input); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toContain( "visible ASCII characters" ); }); // Invalid JSON it("should handle invalid JSON gracefully", () => { const input = '{"invalid": json}'; const result = stringToHttpHeadersSchema.safeParse(input); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toBe("Invalid JSON format"); }); it("should reject non-object JSON", () => { const input = '"just a string"'; const result = stringToHttpHeadersSchema.safeParse(input); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toBe( "Must be a valid JSON object" ); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Arize-ai/phoenix'

If you have feedback or need assistance with the MCP directory API, please join our Discord server