Dossier interne — non public

Docs · Technical · plugin 1.1.16-dev

Technical dossier

For developers and technical partners. Request/response JSON fields are not invented: if the code does not reveal a field, it is marked NOT DETERMINED FROM CURRENT EVIDENCE.

1. Architecture

Browser (traveler / staff)↓ WordPress 7.1 + Traveler 3.2.9↓ Alya Hotel System 1.1.16-dev↓ REST alya/v1 (nonce + capabilities)↓ Nuitee / LiteAPI (X-API-Key from vault)↓ Stripe Payment SDK where applicable↓ Booking services (supplier of record = bookingId)

Browser never calls LiteAPI with the private key. Full diagram: architecture.md.

2. WordPress

Live (SSH read-only 30 Aug 2026): WordPress 7.1, PHP 8.5.4. Plugin header requires PHP ≥ 8.1. REST namespace registered by the plugin. Production files were not modified for documentation.

3. Traveler

Live theme: Traveler 3.2.9 (Shinetheme), no child theme. Elementor present. Alya injects shortcodes; Traveler owns header/footer/chrome.

Theme / Website Architecture Context

hoteldz.tech is not the currently identified live WordPress theme. If it appears in older notes, treat it as historical/context only — not the live stack on alyatrip.com.

Traveler chrome
Traveler header + Alya search widget.

4. Plugin architecture

Entry: alya-hotel-system.php. Asset rev ALYA_HS_ASSET_REV r64pay. Schema version 1.1.21-perf-idx.

Shortcodes: alya_hotel_search|details|rates|checkout|confirmation|voucher, alya_flight_booking, alya_unified_search, alya_my_bookings, alya_account, alya_faq, alya_support / alya_helpdesk.

Cron (code): alya_hs_cron_purge_logs, alya_hs_cron_ops_alerts, alya_hs_cron_ops_digest, alya_hs_cron_ops_tick, destination sync, BookingRetryJob, helpdesk SLA.

Host cron execution on production: Requires access (not claimed from WP-CLI this pass).

5. REST API

Namespace alya/v1. ~100 register_rest_route registrations across hotel, flights, cockpit, helpdesk, ops, webhooks.

Public: wp_rest nonce + IP buckets. Staff: capabilities. Errors: WP_Error JSON. Rate limit → 429 + Retry-After. Circuit open → 429.

MethodEndpointPurposeAuthExternalDB
GET/placesAutocompletenonce 30/600LiteAPI places—
GET/searchHotel listnonce 40/600hotels searchcache possible
GET/hotel-detailsFichenoncehotelcache possible
POST/ratesOffers + marginnonce 20/600hotels/rates—
POST/prebookLock ratenoncerates/prebookprebook CPT/index
POST/bookConfirmnonce 10/600rates/bookCPT confirmed — not called this audit
POST/cancelHotel cancelstaffcancelstatus log
GET/configPublic configpublicnonenone — no secrets
POST/webhooks/nuiteeInboundtoken; HMAC optionalinboundwebhook_events

Request/response field lists: NOT DETERMINED FROM CURRENT EVIDENCE beyond what PHP services expose. See rest-api-reference.md.

Flights: airports 30/600, search 10/600, verify 15/600, prebook 8/600. Live search this pass failed on nonce before LiteAPI.

6. Nuitee / LiteAPI

Hosts: https://api.liteapi.travel/v3.0, https://book.liteapi.travel/v3.0. Header X-API-Key from vault (sand_ / prod_). Secrets are not published in this dossier.

Architecture: Alya → REST alya/v1 → Nuitee → hotel/flight services.

Dashboard fournisseur : https://connect.nuitee.com/ (pas le cockpit Alya).

Canvas complet (14 août 2026, lecture seule) : connector/alya-connector-audit.html. Plugin 1.1.16-dev : vols via LiteAPI / alya/v1. Offres / Pay / book : REQUIRES ACCESS.

Full mapping: nuitee-liteapi-audit.md.

7. Payment

See payment-complete-guide.html. Traveler: TRANSACTION_ID. Agency: ACC_CREDIT_CARD, WALLET, CREDIT (production only in JS).

8. Pricing

includes/Pricing/PricingEngine.php injects LiteAPI margin. Live 10%, overlay 0. Cap 0–90.

9. Commission

DataProvider::commission_estimate = selling × margin / (100 + margin) when net not persisted. Reports observed 313.30 vs 313.34. Commission guide.

10. Database

CPT alya_booking is the WP operational row. Custom tables prefix alya_hs_ are mirrors. Supplier of record remains LiteAPI bookingId.

WP user — agency_users — agencies (id=1 in test) Holder email → customers upsert alya_booking ← booking_index / rooms / guests / prices / policies booking_index.nuitee_booking_id = LiteAPI bookingId payments · documents · webhook_events · flight_sessions

Tables (schema): agencies, agency_users, customers, hotels (cache), destinations, pricing_rules, booking_index, booking_rooms, booking_guests, booking_prices, booking_policies, payments, audit_log, credit_tx, api_logs, webhook_events, booking_status_log, documents, email_log, flight_sessions, booking_amendments, flight_services, helpdesk_*.

credit_tx: schema only, no INSERT. Relationships only as supported by repositories — no invented FKs. database-architecture.md.

11. Roles

Verified: Administrator, Alya Agency Admin, Alya Agency Staff, public traveler (no WP role).

NOT FOUND: Hotel Manager, Reception, Accountant, Corporate.

12. Permissions

Caps in AdminCapabilities.php / AgencyRoles.php. Staff cannot vault, purge, or agent-book. Agency Admin has no manage_options. Matrix: 03-permissions-matrix.csv.

13. Webhooks

Inbound POST /alya/v1/webhooks/nuitee. HMAC inbound OFF live and default. Authorization token path exists. Do not claim HMAC-verified ingest on this environment.

Webhooks
HMAC OFF · 4 events.

14. Security

  • REST namespace isolation
  • Nonces + rate limits + circuit breaker
  • Capabilities
  • Server-side API key vault (encrypted)
  • Log redaction (no secretKey in public REST)
  • HMAC inbound currently OFF

No invented certifications. Vault screenshot: hints only if captured. GDPR: WP exporters/erasers in Compliance/Gdpr.php — they do not cancel supplier LiteAPI bookings. security-audit.md.

15. Logs

alya_hs_api_logs indexes: created_at, channel, level, http_status, prebook_id, booking_id. Daily purge cron in code. Live log screen: SCREENSHOT REQUIRED.

16. Documents

Templates under templates/documents/. PDF via Dompdf if installed. QR Not found. Voucher not generated this audit.

17. Emails

Booking confirmed/cancelled, helpdesk, ops via wp_mail. SMTP host config: Requires access. WhatsApp: not implemented (comment only).

18. Infrastructure

Hostinger de-fra-web2149.main-hosting.eu, LiteSpeed, WPvivid present. HTTPS. DNS A/CNAME: UNKNOWN this pass. infrastructure-audit.md.

19. WooCommerce

Plugin may be installed. Not the Nuitee booking payment engine. woocommerce.md.

20. Front-end architecture

Traveler + Elementor pages host Alya shortcodes. JS: alya-hotel.js, alya-flights.js, cockpit hashes in FrontDashboard/RenderHelpers.php nav(). Favorites: localStorage. Public pages never send X-API-Key.

Cockpit URL: /function-user-settings/. WP admin: page=alya-hotel-system (SCREENSHOT REQUIRED this pass).