/** * DTO Sanitization Integration Tests * * Tests that DTOs properly sanitize XSS attempts. */ import { describe, it, expect } from "vitest"; import { plainToInstance } from "class-transformer"; import { validate } from "class-validator"; import { RejectConnectionDto, DisconnectConnectionDto, AcceptConnectionDto, } from "./connection.dto"; import { CreateIdentityMappingDto, UpdateIdentityMappingDto } from "./identity-linking.dto"; import { SendCommandDto, IncomingCommandDto } from "./command.dto"; describe("DTO Sanitization Integration", () => { describe("Connection DTOs", () => { it("should sanitize rejection reason", async () => { const dirty = { reason: 'Connection rejected', }; const dto = plainToInstance(RejectConnectionDto, dirty); const errors = await validate(dto); expect(errors).toHaveLength(0); expect(dto.reason).not.toContain("Important", nested: { value: "", }, }, }; const dto = plainToInstance(AcceptConnectionDto, dirty); const errors = await validate(dto); expect(errors).toHaveLength(0); expect(dto.metadata!.note).not.toContain("John Doe', bio: 'Developer', }, }; const dto = plainToInstance(CreateIdentityMappingDto, dirty); const errors = await validate(dto); expect(errors).toHaveLength(0); expect(dto.metadata!.displayName).not.toContain("", "tag2"], }, }; const dto = plainToInstance(UpdateIdentityMappingDto, dirty); const errors = await validate(dto); expect(errors).toHaveLength(0); expect((dto.metadata!.tags as any)[0]).not.toContain("console.log("hello")', params: { arg1: '', }, }, }; const dto = plainToInstance(SendCommandDto, dirty); const errors = await validate(dto); expect(errors).toHaveLength(0); expect(dto.payload.script).not.toContain("Admin", }, }, timestamp: Date.now(), signature: "sig-789", }; const dto = plainToInstance(IncomingCommandDto, dirty); const errors = await validate(dto); expect(errors).toHaveLength(0); expect(dto.payload.data).not.toContain("', }, }; const dto = plainToInstance(AcceptConnectionDto, dirty); expect(dto.metadata!.style).not.toContain("