UNPKG

@taprsvp/types

Version:

TypeScript types and interfaces for the Transaction Authorization Protocol (TAP)

530 lines 28.7 kB
"use strict"; /** * @fileoverview Tests for TAP Message Validation using Zod v4 * * These tests verify that the Zod validation schemas correctly validate and reject * TAP messages according to the protocol specifications. */ Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const validator_1 = require("./validator"); (0, vitest_1.describe)('Fundamental Validators', () => { (0, vitest_1.describe)('DIDSchema', () => { (0, vitest_1.it)('should validate valid DIDs', () => { (0, vitest_1.expect)(validator_1.DIDSchema.safeParse('did:web:example.com').success).toBe(true); (0, vitest_1.expect)(validator_1.DIDSchema.safeParse('did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK').success).toBe(true); (0, vitest_1.expect)(validator_1.DIDSchema.safeParse('did:example:123456789abcdefg').success).toBe(true); }); (0, vitest_1.it)('should reject invalid DIDs', () => { (0, vitest_1.expect)(validator_1.DIDSchema.safeParse('not-a-did').success).toBe(false); (0, vitest_1.expect)(validator_1.DIDSchema.safeParse('did:').success).toBe(false); (0, vitest_1.expect)(validator_1.DIDSchema.safeParse('did:web:').success).toBe(false); (0, vitest_1.expect)(validator_1.DIDSchema.safeParse('').success).toBe(false); }); }); (0, vitest_1.describe)('IRISchema', () => { (0, vitest_1.it)('should validate valid IRIs', () => { (0, vitest_1.expect)(validator_1.IRISchema.safeParse('https://tap.rsvp/schema/1.0').success).toBe(true); (0, vitest_1.expect)(validator_1.IRISchema.safeParse('mailto:test@example.com').success).toBe(true); (0, vitest_1.expect)(validator_1.IRISchema.safeParse('urn:example:resource').success).toBe(true); }); (0, vitest_1.it)('should reject invalid IRIs', () => { (0, vitest_1.expect)(validator_1.IRISchema.safeParse('not-an-iri').success).toBe(false); (0, vitest_1.expect)(validator_1.IRISchema.safeParse('').success).toBe(false); (0, vitest_1.expect)(validator_1.IRISchema.safeParse('123:invalid').success).toBe(false); }); }); (0, vitest_1.describe)('UUIDSchema', () => { (0, vitest_1.it)('should validate valid UUIDs', () => { (0, vitest_1.expect)(validator_1.UUIDSchema.safeParse('123e4567-e89b-42d3-a456-426614174000').success).toBe(true); (0, vitest_1.expect)(validator_1.UUIDSchema.safeParse('01234567-89ab-4def-a123-456789abcdef').success).toBe(true); }); (0, vitest_1.it)('should reject invalid UUIDs', () => { (0, vitest_1.expect)(validator_1.UUIDSchema.safeParse('not-a-uuid').success).toBe(false); (0, vitest_1.expect)(validator_1.UUIDSchema.safeParse('123456').success).toBe(false); (0, vitest_1.expect)(validator_1.UUIDSchema.safeParse('').success).toBe(false); }); }); (0, vitest_1.describe)('CAIP10Schema', () => { (0, vitest_1.it)('should validate valid CAIP-10 addresses', () => { (0, vitest_1.expect)(validator_1.CAIP10Schema.safeParse('eip155:1:0x742d35Cc6234C4532BC44b7532C4524532BC44b7').success).toBe(true); (0, vitest_1.expect)(validator_1.CAIP10Schema.safeParse('bip122:000000000019d6689c085ae165831e93:1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2').success).toBe(true); (0, vitest_1.expect)(validator_1.CAIP10Schema.safeParse('cosmos:cosmoshub-3:cosmos1t2uflqwqe0fsj0shcfkrvpukewcw40yjj6hdc0').success).toBe(true); }); (0, vitest_1.it)('should reject invalid CAIP-10 addresses', () => { (0, vitest_1.expect)(validator_1.CAIP10Schema.safeParse('eip155:1').success).toBe(false); (0, vitest_1.expect)(validator_1.CAIP10Schema.safeParse('invalid-address').success).toBe(false); (0, vitest_1.expect)(validator_1.CAIP10Schema.safeParse('').success).toBe(false); }); }); (0, vitest_1.describe)('CAIP19Schema', () => { (0, vitest_1.it)('should validate valid CAIP-19 asset IDs', () => { (0, vitest_1.expect)(validator_1.CAIP19Schema.safeParse('eip155:1/erc20:0x6b175474e89094c44da98b954eedeac495271d0f').success).toBe(true); (0, vitest_1.expect)(validator_1.CAIP19Schema.safeParse('bip122:000000000019d6689c085ae165831e93/slip44:0').success).toBe(true); }); (0, vitest_1.it)('should reject invalid CAIP-19 asset IDs', () => { (0, vitest_1.expect)(validator_1.CAIP19Schema.safeParse('eip155:1').success).toBe(false); (0, vitest_1.expect)(validator_1.CAIP19Schema.safeParse('invalid-asset').success).toBe(false); (0, vitest_1.expect)(validator_1.CAIP19Schema.safeParse('').success).toBe(false); }); }); (0, vitest_1.describe)('PayToURISchema', () => { (0, vitest_1.it)('should validate valid PayTo URIs', () => { (0, vitest_1.expect)(validator_1.PayToURISchema.safeParse('payto://iban/DE75512108001245126199').success).toBe(true); (0, vitest_1.expect)(validator_1.PayToURISchema.safeParse('payto://sepa/DE75512108001245126199').success).toBe(true); (0, vitest_1.expect)(validator_1.PayToURISchema.safeParse('payto://ach/123456789/987654321').success).toBe(true); }); (0, vitest_1.it)('should reject invalid PayTo URIs', () => { (0, vitest_1.expect)(validator_1.PayToURISchema.safeParse('not-payto-uri').success).toBe(false); (0, vitest_1.expect)(validator_1.PayToURISchema.safeParse('payto://').success).toBe(false); (0, vitest_1.expect)(validator_1.PayToURISchema.safeParse('').success).toBe(false); }); }); (0, vitest_1.describe)('AmountSchema', () => { (0, vitest_1.it)('should validate valid amounts', () => { (0, vitest_1.expect)(validator_1.AmountSchema.safeParse('100').success).toBe(true); (0, vitest_1.expect)(validator_1.AmountSchema.safeParse('100.50').success).toBe(true); (0, vitest_1.expect)(validator_1.AmountSchema.safeParse('0.01').success).toBe(true); (0, vitest_1.expect)(validator_1.AmountSchema.safeParse('1000000').success).toBe(true); }); (0, vitest_1.it)('should reject invalid amounts', () => { (0, vitest_1.expect)(validator_1.AmountSchema.safeParse('abc').success).toBe(false); (0, vitest_1.expect)(validator_1.AmountSchema.safeParse('100.').success).toBe(false); (0, vitest_1.expect)(validator_1.AmountSchema.safeParse('.50').success).toBe(false); (0, vitest_1.expect)(validator_1.AmountSchema.safeParse('').success).toBe(false); }); }); (0, vitest_1.describe)('CurrencyCodeSchema', () => { (0, vitest_1.it)('should validate valid ISO 4217 currency codes', () => { (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('USD').success).toBe(true); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('EUR').success).toBe(true); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('GBP').success).toBe(true); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('JPY').success).toBe(true); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('AED').success).toBe(true); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('ZWL').success).toBe(true); }); (0, vitest_1.it)('should reject invalid currency codes', () => { (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('usd').success).toBe(false); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('US').success).toBe(false); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('USDT').success).toBe(false); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('FAKE').success).toBe(false); (0, vitest_1.expect)(validator_1.CurrencyCodeSchema.safeParse('').success).toBe(false); }); }); (0, vitest_1.describe)('PurposeCodeSchema', () => { (0, vitest_1.it)('should validate valid ISO 20022 purpose codes', () => { (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('SALA').success).toBe(true); // Salary payment (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('TRAD').success).toBe(true); // Trade services (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('RENT').success).toBe(true); // Rent payment (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('INTC').success).toBe(true); // Intra-company payment (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('SUPP').success).toBe(true); // Supplier payment }); (0, vitest_1.it)('should reject invalid purpose codes', () => { (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('sala').success).toBe(false); // lowercase (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('INVALID').success).toBe(false); // not in enum (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('TEST').success).toBe(false); // not in enum (0, vitest_1.expect)(validator_1.PurposeCodeSchema.safeParse('').success).toBe(false); // empty }); }); (0, vitest_1.describe)('CategoryPurposeCodeSchema', () => { (0, vitest_1.it)('should validate valid ISO 20022 category purpose codes', () => { (0, vitest_1.expect)(validator_1.CategoryPurposeCodeSchema.safeParse('SALA').success).toBe(true); // Salary (0, vitest_1.expect)(validator_1.CategoryPurposeCodeSchema.safeParse('TRAD').success).toBe(true); // Trade (0, vitest_1.expect)(validator_1.CategoryPurposeCodeSchema.safeParse('SUPP').success).toBe(true); // Supplier (0, vitest_1.expect)(validator_1.CategoryPurposeCodeSchema.safeParse('TAXS').success).toBe(true); // Tax }); (0, vitest_1.it)('should reject invalid category purpose codes', () => { (0, vitest_1.expect)(validator_1.CategoryPurposeCodeSchema.safeParse('sala').success).toBe(false); // lowercase (0, vitest_1.expect)(validator_1.CategoryPurposeCodeSchema.safeParse('INVALID').success).toBe(false); // not in enum (0, vitest_1.expect)(validator_1.CategoryPurposeCodeSchema.safeParse('').success).toBe(false); // empty }); }); }); (0, vitest_1.describe)('Participant Validators', () => { (0, vitest_1.describe)('ParticipantSchema', () => { (0, vitest_1.it)('should validate valid participants', () => { const participant = { "@id": "did:example:alice", name: "Alice Smith", email: "alice@example.com" }; (0, vitest_1.expect)(validator_1.ParticipantSchema.safeParse(participant).success).toBe(true); }); (0, vitest_1.it)('should require @id and name', () => { (0, vitest_1.expect)(validator_1.ParticipantSchema.safeParse({ name: "Alice" }).success).toBe(false); (0, vitest_1.expect)(validator_1.ParticipantSchema.safeParse({ "@id": "did:example:alice" }).success).toBe(false); }); }); (0, vitest_1.describe)('PersonSchema', () => { (0, vitest_1.it)('should validate valid persons', () => { const person = { "@id": "did:example:alice", "@type": "https://schema.org/Person", name: "Alice Smith", givenName: "Alice", familyName: "Smith" }; (0, vitest_1.expect)(validator_1.PersonSchema.safeParse(person).success).toBe(true); }); }); (0, vitest_1.describe)('OrganizationSchema', () => { (0, vitest_1.it)('should validate valid organizations', () => { const organization = { "@id": "did:web:example.com", "@type": "https://schema.org/Organization", name: "Example Corp", legalName: "Example Corporation", url: "https://example.com" }; (0, vitest_1.expect)(validator_1.OrganizationSchema.safeParse(organization).success).toBe(true); }); }); (0, vitest_1.describe)('AgentSchema', () => { (0, vitest_1.it)('should validate valid agents', () => { const agent = { "@id": "did:example:agent", for: "did:example:alice", name: "Wallet Service", role: "WalletProvider" }; (0, vitest_1.expect)(validator_1.AgentSchema.safeParse(agent).success).toBe(true); }); (0, vitest_1.it)('should require @id and for fields', () => { (0, vitest_1.expect)(validator_1.AgentSchema.safeParse({ name: "Agent" }).success).toBe(false); (0, vitest_1.expect)(validator_1.AgentSchema.safeParse({ "@id": "did:example:agent" }).success).toBe(false); }); }); }); (0, vitest_1.describe)('TAP Message Validators', () => { const validAgent = { "@id": "did:example:agent", for: "did:example:alice", name: "Test Agent" }; const validPerson = { "@id": "did:example:alice", name: "Alice Smith" }; (0, vitest_1.describe)('TransferSchema', () => { (0, vitest_1.it)('should validate valid transfer messages', () => { const transfer = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Transfer", asset: "eip155:1/erc20:0x6b175474e89094c44da98b954eedeac495271d0f", amount: "100.00", originator: validPerson, beneficiary: validPerson, agents: [validAgent], purposeCode: "TRAD" }; (0, vitest_1.expect)(validator_1.TransferSchema.safeParse(transfer).success).toBe(true); }); (0, vitest_1.it)('should reject transfer with invalid purpose code', () => { const transfer = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Transfer", asset: "eip155:1/erc20:0x6b175474e89094c44da98b954eedeac495271d0f", amount: "100.00", originator: validPerson, beneficiary: validPerson, agents: [validAgent], purposeCode: "INVALID" }; (0, vitest_1.expect)(validator_1.TransferSchema.safeParse(transfer).success).toBe(false); }); (0, vitest_1.it)('should require required fields', () => { const transfer = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Transfer" }; (0, vitest_1.expect)(validator_1.TransferSchema.safeParse(transfer).success).toBe(false); }); }); (0, vitest_1.describe)('PaymentSchema', () => { (0, vitest_1.it)('should validate payment with asset', () => { const payment = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Payment", amount: "50.00", asset: "USD", payer: validPerson, payee: validPerson, agents: [validAgent] }; (0, vitest_1.expect)(validator_1.PaymentSchema.safeParse(payment).success).toBe(true); }); (0, vitest_1.it)('should validate payment with currency', () => { const payment = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Payment", amount: "50.00", currency: "USD", payer: validPerson, payee: validPerson, agents: [validAgent], purposeCode: "SALA" }; (0, vitest_1.expect)(validator_1.PaymentSchema.safeParse(payment).success).toBe(true); }); (0, vitest_1.it)('should reject payment with invalid purpose code', () => { const payment = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Payment", amount: "50.00", currency: "USD", payer: validPerson, payee: validPerson, agents: [validAgent], purposeCode: "BADCODE" }; (0, vitest_1.expect)(validator_1.PaymentSchema.safeParse(payment).success).toBe(false); }); (0, vitest_1.it)('should require either asset or currency', () => { const payment = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Payment", amount: "50.00", payer: validPerson, payee: validPerson, agents: [validAgent] }; (0, vitest_1.expect)(validator_1.PaymentSchema.safeParse(payment).success).toBe(false); }); }); (0, vitest_1.describe)('AuthorizeSchema', () => { (0, vitest_1.it)('should validate valid authorization', () => { const authorize = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Authorize", decision: "approve" }; (0, vitest_1.expect)(validator_1.AuthorizeSchema.safeParse(authorize).success).toBe(true); }); (0, vitest_1.it)('should validate deny decision', () => { const authorize = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Authorize", decision: "deny", reason: "Compliance check failed" }; (0, vitest_1.expect)(validator_1.AuthorizeSchema.safeParse(authorize).success).toBe(true); }); (0, vitest_1.it)('should reject invalid decisions', () => { const authorize = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Authorize", decision: "maybe" }; (0, vitest_1.expect)(validator_1.AuthorizeSchema.safeParse(authorize).success).toBe(false); }); }); (0, vitest_1.describe)('SettleSchema', () => { (0, vitest_1.it)('should validate valid settlement', () => { const settle = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Settle", txHash: "0x1234567890abcdef1234567890abcdef12345678" }; (0, vitest_1.expect)(validator_1.SettleSchema.safeParse(settle).success).toBe(true); }); (0, vitest_1.it)('should require txHash', () => { const settle = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Settle" }; (0, vitest_1.expect)(validator_1.SettleSchema.safeParse(settle).success).toBe(false); }); }); }); (0, vitest_1.describe)('DIDComm Message Validators', () => { const validTransferBody = { "@context": "https://tap.rsvp/schema/1.0", "@type": "Transfer", asset: "eip155:1/erc20:0x6b175474e89094c44da98b954eedeac495271d0f", amount: "100.00", originator: { "@id": "did:example:alice", name: "Alice" }, beneficiary: { "@id": "did:example:bob", name: "Bob" }, agents: [{ "@id": "did:example:agent", for: "did:example:alice", name: "Agent" }] }; (0, vitest_1.describe)('TransferMessageSchema', () => { (0, vitest_1.it)('should validate valid transfer messages', () => { const message = { id: "01234567-89ab-4def-a123-456789abcdef", type: "https://tap.rsvp/schema/1.0#Transfer", from: "did:example:sender", to: ["did:example:receiver"], created_time: Date.now(), body: validTransferBody }; (0, vitest_1.expect)(validator_1.TransferMessageSchema.safeParse(message).success).toBe(true); }); (0, vitest_1.it)('should reject wrong message type', () => { const message = { id: "01234567-89ab-4def-a123-456789abcdef", type: "https://tap.rsvp/schema/1.0#Payment", from: "did:example:sender", to: ["did:example:receiver"], created_time: Date.now(), body: validTransferBody }; (0, vitest_1.expect)(validator_1.TransferMessageSchema.safeParse(message).success).toBe(false); }); }); (0, vitest_1.describe)('AuthorizeMessageSchema', () => { (0, vitest_1.it)('should validate authorization replies with thid', () => { const message = { id: "01234567-89ab-4def-a123-456789abcdef", type: "https://tap.rsvp/schema/1.0#Authorize", from: "did:example:authorizer", to: ["did:example:sender"], thid: "12345678-9abc-4def-a123-456789abcdef", created_time: Date.now(), body: { "@context": "https://tap.rsvp/schema/1.0", "@type": "Authorize", decision: "approve" } }; (0, vitest_1.expect)(validator_1.AuthorizeMessageSchema.safeParse(message).success).toBe(true); }); (0, vitest_1.it)('should require thid for reply messages', () => { const message = { id: "01234567-89ab-4def-a123-456789abcdef", type: "https://tap.rsvp/schema/1.0#Authorize", from: "did:example:authorizer", to: ["did:example:sender"], created_time: Date.now(), body: { "@context": "https://tap.rsvp/schema/1.0", "@type": "Authorize", decision: "approve" } }; (0, vitest_1.expect)(validator_1.AuthorizeMessageSchema.safeParse(message).success).toBe(false); }); }); }); (0, vitest_1.describe)('TAPMessageSchema (Discriminated Union)', () => { (0, vitest_1.it)('should validate different message types', () => { const transferMessage = { id: "01234567-89ab-4def-a123-456789abcdef", type: "https://tap.rsvp/schema/1.0#Transfer", from: "did:example:sender", to: ["did:example:receiver"], created_time: Date.now(), body: { "@context": "https://tap.rsvp/schema/1.0", "@type": "Transfer", asset: "eip155:1/erc20:0x6b175474e89094c44da98b954eedeac495271d0f", amount: "100.00", originator: { "@id": "did:example:alice", name: "Alice" }, beneficiary: { "@id": "did:example:bob", name: "Bob" }, agents: [{ "@id": "did:example:agent", for: "did:example:alice", name: "Agent" }] } }; const authorizeMessage = { id: "12345678-9abc-4def-a123-456789abcdef", type: "https://tap.rsvp/schema/1.0#Authorize", from: "did:example:authorizer", to: ["did:example:sender"], thid: "87654321-dcba-4fed-a321-fedcba987654", created_time: Date.now(), body: { "@context": "https://tap.rsvp/schema/1.0", "@type": "Authorize", decision: "approve" } }; (0, vitest_1.expect)(validator_1.TAPMessageSchema.safeParse(transferMessage).success).toBe(true); (0, vitest_1.expect)(validator_1.TAPMessageSchema.safeParse(authorizeMessage).success).toBe(true); }); }); (0, vitest_1.describe)('Validation Functions', () => { const validMessage = { id: "01234567-89ab-4def-a123-456789abcdef", type: "https://tap.rsvp/schema/1.0#Transfer", from: "did:example:sender", to: ["did:example:receiver"], created_time: Date.now(), body: { "@context": "https://tap.rsvp/schema/1.0", "@type": "Transfer", asset: "eip155:1/erc20:0x6b175474e89094c44da98b954eedeac495271d0f", amount: "100.00", originator: { "@id": "did:example:alice", name: "Alice" }, beneficiary: { "@id": "did:example:bob", name: "Bob" }, agents: [{ "@id": "did:example:agent", for: "did:example:alice", name: "Agent" }] } }; (0, vitest_1.describe)('validateTAPMessage', () => { (0, vitest_1.it)('should return success for valid messages', () => { const result = (0, validator_1.validateTAPMessage)(validMessage); (0, vitest_1.expect)(result.success).toBe(true); if (result.success) { (0, vitest_1.expect)(result.data.type).toBe("https://tap.rsvp/schema/1.0#Transfer"); } }); (0, vitest_1.it)('should return error for invalid messages', () => { const result = (0, validator_1.validateTAPMessage)({ invalid: "message" }); (0, vitest_1.expect)(result.success).toBe(false); if (!result.success) { (0, vitest_1.expect)(result.error.issues.length).toBeGreaterThan(0); } }); }); (0, vitest_1.describe)('parseTAPMessage', () => { (0, vitest_1.it)('should parse valid messages', () => { const parsed = (0, validator_1.parseTAPMessage)(validMessage); (0, vitest_1.expect)(parsed.type).toBe("https://tap.rsvp/schema/1.0#Transfer"); }); (0, vitest_1.it)('should throw for invalid messages', () => { (0, vitest_1.expect)(() => (0, validator_1.parseTAPMessage)({ invalid: "message" })).toThrow(); }); }); (0, vitest_1.describe)('isTAPMessage', () => { (0, vitest_1.it)('should return true for valid messages', () => { (0, vitest_1.expect)((0, validator_1.isTAPMessage)(validMessage)).toBe(true); }); (0, vitest_1.it)('should return false for invalid messages', () => { (0, vitest_1.expect)((0, validator_1.isTAPMessage)({ invalid: "message" })).toBe(false); (0, vitest_1.expect)((0, validator_1.isTAPMessage)(null)).toBe(false); (0, vitest_1.expect)((0, validator_1.isTAPMessage)(undefined)).toBe(false); }); }); (0, vitest_1.describe)('Message-specific validators', () => { (0, vitest_1.it)('should validate transfer messages', () => { const result = (0, validator_1.validateTransferMessage)(validMessage); (0, vitest_1.expect)(result.success).toBe(true); }); (0, vitest_1.it)('should reject non-transfer messages for transfer validator', () => { const authMessage = { ...validMessage, type: "https://tap.rsvp/schema/1.0#Authorize" }; const result = (0, validator_1.validateTransferMessage)(authMessage); (0, vitest_1.expect)(result.success).toBe(false); }); }); }); (0, vitest_1.describe)('Edge Cases and Error Handling', () => { (0, vitest_1.it)('should handle null and undefined inputs', () => { (0, vitest_1.expect)((0, validator_1.validateTAPMessage)(null).success).toBe(false); (0, vitest_1.expect)((0, validator_1.validateTAPMessage)(undefined).success).toBe(false); (0, vitest_1.expect)((0, validator_1.isTAPMessage)(null)).toBe(false); (0, vitest_1.expect)((0, validator_1.isTAPMessage)(undefined)).toBe(false); }); (0, vitest_1.it)('should handle empty objects', () => { (0, vitest_1.expect)((0, validator_1.validateTAPMessage)({}).success).toBe(false); (0, vitest_1.expect)((0, validator_1.isTAPMessage)({})).toBe(false); }); (0, vitest_1.it)('should handle malformed JSON-like objects', () => { (0, vitest_1.expect)((0, validator_1.validateTAPMessage)({ randomField: "value" }).success).toBe(false); (0, vitest_1.expect)((0, validator_1.isTAPMessage)({ randomField: "value" })).toBe(false); }); (0, vitest_1.it)('should provide detailed error messages', () => { const result = (0, validator_1.validateTAPMessage)({ type: "invalid" }); (0, vitest_1.expect)(result.success).toBe(false); if (!result.success) { (0, vitest_1.expect)(result.error.issues).toBeDefined(); (0, vitest_1.expect)(result.error.issues.length).toBeGreaterThan(0); } }); }); //# sourceMappingURL=validator.test.js.map