Reference ChatGPT Actions + MCP adapter for the open-source HAIP Connect API.
-- This service exposes hotel search and booking to AI assistants. It proxies the - HAIP Connect API and returns guest-facing selling prices only. -
-Available operations: searchHotels, getProperty,
- prepareBooking, confirmPayment, getReservation,
- modifyReservation, cancelReservation.
This is the privacy policy for the Telivity HAIP ChatGPT gateway.
- -- Telivity HAIP is a gateway that lets a ChatGPT assistant search hotels and create, - look up, modify, or cancel reservations by calling the HAIP (Hotel AI Platform) - Connect API on your behalf. -
- -- To complete a booking, the assistant sends booking details to this gateway: stay - dates, occupancy, the selected property/room/rate, and the guest details required by - the hotel (name, and optionally email, phone, and loyalty number). These are - forwarded to the HAIP API solely to fulfil your request. -
- -- We log each request to improve the service. Before logging, we redact guest personal - information (name, email, phone, loyalty number, special requests), payment tokens, - and booking confirmation numbers. Logged records contain non-identifying details such - as location, dates, occupancy, room/rate identifiers, status, and timing, associated - with a pseudonymous per-conversation session identifier. -
- -- This gateway never stores raw card data. Payment is handled by the hotel platform via - tokenization. -
- -- Guests pay on the hotel's hosted payment page — card data never passes through this gateway or the LLM. We do not sell your data. Booking details are shared only with the hotel platform - (HAIP) needed to fulfil your reservation. -
- -For privacy questions, contact Telivity.
- - - -`; diff --git a/tools/haip-connect-gpt/src/scrub.test.ts b/tools/haip-connect-gpt/src/scrub.test.ts deleted file mode 100644 index 3e201b1a..00000000 --- a/tools/haip-connect-gpt/src/scrub.test.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { redactForLog, stripNetRate } from './scrub.js'; - -describe('redactForLog', () => { - it('redacts guest PII and booking credentials, keeps analytical fields', () => { - const input = { - body: { - city: 'New York', - checkIn: '2026-06-01', - adults: 2, - guestFirstName: 'John', - guestLastName: 'Smith', - guestEmail: 'john@example.com', - guestPhone: '+1-555-0100', - loyaltyNumber: 'GOLD-1', - specialRequests: 'high floor', - paymentToken: 'tok_123', - }, - params: { confirmationNumber: 'ABC123' }, - }; - - const out = redactForLog(input) as typeof input; - - // kept - expect(out.body.city).toBe('New York'); - expect(out.body.checkIn).toBe('2026-06-01'); - expect(out.body.adults).toBe(2); - // redacted - expect(out.body.guestFirstName).toBe('[redacted]'); - expect(out.body.guestLastName).toBe('[redacted]'); - expect(out.body.guestEmail).toBe('[redacted]'); - expect(out.body.guestPhone).toBe('[redacted]'); - expect(out.body.loyaltyNumber).toBe('[redacted]'); - expect(out.body.specialRequests).toBe('[redacted]'); - expect(out.body.paymentToken).toBe('[redacted]'); - expect(out.params.confirmationNumber).toBe('[redacted]'); - }); - - it('redacts PII nested inside arrays', () => { - const out = redactForLog({ guests: [{ guestName: 'Jane Doe', adults: 1 }] }) as { - guests: { guestName: string; adults: number }[]; - }; - expect(out.guests[0].guestName).toBe('[redacted]'); - expect(out.guests[0].adults).toBe(1); - }); - - it('does not mutate the input', () => { - const input = { guestEmail: 'a@b.com' }; - redactForLog(input); - expect(input.guestEmail).toBe('a@b.com'); - }); -}); - -describe('stripNetRate', () => { - it('removes net / wholesale / commission fields', () => { - const out = stripNetRate({ - totalAmount: 400, - netRate: 320, - wholesaleAmount: 300, - commission: 80, - markup: 25, - }) as Record