| 1 |
/** |
| 2 |
* API Endpoints Configuration |
| 3 |
* |
| 4 |
* Central path definitions for `yatra/v1`. Use `resources/js/api/*-api.ts` |
| 5 |
* modules for typed `apiClient` calls instead of hardcoding strings in pages. |
| 6 |
*/ |
| 7 |
|
| 8 |
export const API_ENDPOINTS = { |
| 9 |
// Bookings |
| 10 |
BOOKINGS: "/bookings", |
| 11 |
BOOKING_GET: (id: string | number) => `/bookings/${id}`, |
| 12 |
BOOKING_STATUS: (id: string | number) => `/bookings/${id}/status`, |
| 13 |
BOOKING_DELETE: (id: string | number) => `/bookings/${id}`, |
| 14 |
BOOKINGS_BULK: "/bookings/bulk", |
| 15 |
BOOKINGS_STATS: "/bookings/stats", |
| 16 |
/** POST body: `{ booking_id }` — returns `{ checkout_url }` in `data`. */ |
| 17 |
PAYMENT_REMAINING_SESSION: "/payment/remaining/session", |
| 18 |
BOOKING_CONSENT_STATUS: (id: string | number) => |
| 19 |
`/bookings/${id}/consent-status`, |
| 20 |
|
| 21 |
// Customers |
| 22 |
CUSTOMERS: "/customers", |
| 23 |
CUSTOMER_GET: (id: string | number) => `/customers/${id}`, |
| 24 |
CUSTOMER_DELETE: (id: string | number) => `/customers/${id}`, |
| 25 |
CUSTOMERS_BULK: "/customers/bulk", |
| 26 |
CUSTOMER_STATS: "/customers/stats", |
| 27 |
CUSTOMER_BOOKINGS: (id: string | number) => `/customers/${id}/bookings`, |
| 28 |
CUSTOMER_ME: "/customers/me", |
| 29 |
CUSTOMER_CHANGE_PASSWORD: "/customers/me/password", |
| 30 |
CUSTOMER_CHANGE_EMAIL: "/customers/me/email", |
| 31 |
CUSTOMER_RESEND_EMAIL_CHANGE: "/customers/me/email/resend", |
| 32 |
CUSTOMER_MY_BOOKINGS: "/customers/my-bookings", |
| 33 |
CUSTOMER_MY_PAYMENTS: "/customers/my-payments", |
| 34 |
CUSTOMER_MY_DOCUMENTS: "/customers/my-documents", |
| 35 |
CUSTOMER_MY_SUPPORT_TICKETS: "/customers/my-support-tickets", |
| 36 |
/** GET single booking for current user (details view). */ |
| 37 |
CUSTOMER_MY_BOOKING: (id: string | number) => `/customers/my-bookings/${id}`, |
| 38 |
|
| 39 |
// Travelers |
| 40 |
TRAVELERS: "/travelers", |
| 41 |
TRAVELERS_BULK: "/travelers/bulk", |
| 42 |
|
| 43 |
// Reviews |
| 44 |
REVIEWS: "/reviews", |
| 45 |
REVIEW_DELETE: (id: string | number) => `/reviews/${id}`, |
| 46 |
REVIEW_STATUS: (id: string | number) => `/reviews/${id}/status`, |
| 47 |
REVIEWS_BULK: "/reviews/bulk", |
| 48 |
|
| 49 |
// Trips |
| 50 |
TRIPS: "/trips", |
| 51 |
TRIP_GET: (id: string | number) => `/trips/${id}`, |
| 52 |
TRIP_DELETE: (id: string | number) => `/trips/${id}`, |
| 53 |
TRIP_PERMANENT_DELETE: (id: string | number) => |
| 54 |
`/trips/${id}/permanent-delete`, |
| 55 |
TRIP_DUPLICATE: (id: string | number) => `/trips/${id}/duplicate`, |
| 56 |
TRIPS_STATS: "/trips/stats", |
| 57 |
TRIP_ATTRIBUTES: (id: string | number) => `/trips/${id}/attributes`, |
| 58 |
TRIP_AVAILABLE_DATES: (id: string | number) => `/trips/${id}/available-dates`, |
| 59 |
|
| 60 |
// Departures |
| 61 |
DEPARTURES: "/departures", |
| 62 |
TRIP_DEPARTURES: (tripId: string | number) => `/trips/${tripId}/departures`, |
| 63 |
DEPARTURE_GET: (tripId: string | number, id: string | number) => |
| 64 |
`/trips/${tripId}/departures/${id}`, |
| 65 |
DEPARTURE_UPDATE: (tripId: string | number, id: string | number) => |
| 66 |
`/trips/${tripId}/departures/${id}`, |
| 67 |
DEPARTURE_DELETE: (tripId: string | number, id: string | number) => |
| 68 |
`/trips/${tripId}/departures/${id}`, |
| 69 |
TRIP_DEPARTURES_PAST: (tripId: string | number) => |
| 70 |
`/trips/${tripId}/departures/past`, |
| 71 |
|
| 72 |
// Recurring Rules |
| 73 |
RECURRING_RULES: (tripId: string | number) => |
| 74 |
`/trips/${tripId}/recurring-rules`, |
| 75 |
RECURRING_RULE_GET: (tripId: string | number, ruleId: string | number) => |
| 76 |
`/trips/${tripId}/recurring-rules/${ruleId}`, |
| 77 |
|
| 78 |
// Payments |
| 79 |
PAYMENTS: "/payments", |
| 80 |
PAYMENTS_STATS: "/payments/stats", |
| 81 |
PAYMENT_GET: (id: string | number) => `/payments/${id}`, |
| 82 |
PAYMENT_DELETE: (id: string | number) => `/payments/${id}`, |
| 83 |
|
| 84 |
// Usage tracking (opt-in telemetry) |
| 85 |
USAGE_TRACKING_STATUS: "/usage-tracking/status", |
| 86 |
USAGE_TRACKING_SETTINGS: "/usage-tracking/settings", |
| 87 |
USAGE_TRACKING_SEND: "/usage-tracking/send", |
| 88 |
USAGE_TRACKING_PREVIEW: "/usage-tracking/preview", |
| 89 |
USAGE_TRACKING_CLEAR_CACHE: "/usage-tracking/clear-cache", |
| 90 |
USAGE_TRACKING_DELETE_SNAPSHOTS: "/usage-tracking/delete-snapshots", |
| 91 |
|
| 92 |
// Settings |
| 93 |
SETTINGS: "/settings", |
| 94 |
SETTINGS_GROUP: (group: string) => `/settings?group=${group}`, |
| 95 |
SETTINGS_PAGES: "/settings/pages", |
| 96 |
SETTINGS_FLUSH_REWRITE_RULES: "/settings/flush-rewrite-rules", |
| 97 |
SETTINGS_CHECK_SHORTCODE: (pageId: string | number) => |
| 98 |
`/settings/check-shortcode/${pageId}`, |
| 99 |
SETTINGS_INSERT_SHORTCODE: (pageId: string | number) => |
| 100 |
`/settings/insert-shortcode/${pageId}`, |
| 101 |
SETTINGS_EMAIL_TEMPLATE_PREVIEW: "/settings/email-template-preview", |
| 102 |
|
| 103 |
// Payment (definitions for admin Settings UI) |
| 104 |
PAYMENT_GATEWAY_DEFINITIONS: "/payment/gateways/definitions", |
| 105 |
|
| 106 |
// Enquiries |
| 107 |
ENQUIRIES: "/enquiries", |
| 108 |
ENQUIRY_GET: (id: string | number) => `/enquiries/${id}`, |
| 109 |
ENQUIRY_DELETE: (id: string | number) => `/enquiries/${id}`, |
| 110 |
ENQUIRIES_BULK: "/enquiries/bulk", |
| 111 |
ENQUIRY_STATS: "/enquiries/stats", |
| 112 |
ENQUIRY_RESPOND: (id: string | number) => `/enquiries/${id}/respond`, |
| 113 |
|
| 114 |
// Reports |
| 115 |
REPORTS: "/reports", |
| 116 |
REPORTS_EXPORT: (type: string) => `/reports/export?type=${type}`, |
| 117 |
|
| 118 |
// Modules |
| 119 |
MODULES: "/modules", |
| 120 |
|
| 121 |
// Facebook Pixel |
| 122 |
FACEBOOK_PIXEL_SETTINGS: "/facebook-pixel/settings", |
| 123 |
FACEBOOK_PIXEL_TEST: "/facebook-pixel/test", |
| 124 |
FACEBOOK_PIXEL_TEST_TOKEN: "/facebook-pixel/test-token", |
| 125 |
FACEBOOK_PIXEL_EVENTS: "/facebook-pixel/events", |
| 126 |
FACEBOOK_PIXEL_EVENT_LOGS: "/facebook-pixel/event-logs", |
| 127 |
|
| 128 |
// Google Analytics 4 |
| 129 |
GOOGLE_ANALYTICS_SETTINGS: "/google-analytics/settings", |
| 130 |
GOOGLE_ANALYTICS_TEST: "/google-analytics/test", |
| 131 |
GOOGLE_ANALYTICS_VALIDATE_MEASUREMENT_ID: |
| 132 |
"/google-analytics/validate/measurement-id", |
| 133 |
GOOGLE_ANALYTICS_VALIDATE_API_SECRET: "/google-analytics/validate/api-secret", |
| 134 |
GOOGLE_ANALYTICS_EVENTS: "/google-analytics/events", |
| 135 |
GOOGLE_ANALYTICS_EVENT_LOGS: "/google-analytics/logs", |
| 136 |
|
| 137 |
// Abandoned Bookings |
| 138 |
ABANDONED_BOOKINGS: "/abandoned-bookings", |
| 139 |
ABANDONED_BOOKING_GET: (id: string | number) => `/abandoned-bookings/${id}`, |
| 140 |
ABANDONED_BOOKING_DELETE: (id: string | number) => |
| 141 |
`/abandoned-bookings/${id}`, |
| 142 |
ABANDONED_BOOKINGS_SETTINGS: "/abandoned-bookings/settings", |
| 143 |
ABANDONED_BOOKINGS_STATISTICS: "/abandoned-bookings/statistics", |
| 144 |
ABANDONED_BOOKING_SEND_EMAIL: (id: string | number) => |
| 145 |
`/abandoned-bookings/${id}/send-email`, |
| 146 |
ABANDONED_BOOKINGS_CAMPAIGNS: "/abandoned-bookings/campaigns", |
| 147 |
ABANDONED_BOOKINGS_CAMPAIGN_GET: (id: string | number) => |
| 148 |
`/abandoned-bookings/campaigns/${id}`, |
| 149 |
|
| 150 |
// Google Calendar |
| 151 |
GOOGLE_CALENDAR_SETTINGS: "/google-calendar/settings", |
| 152 |
GOOGLE_CALENDAR_CONNECT: "/google-calendar/connect", |
| 153 |
GOOGLE_CALENDAR_DISCONNECT: "/google-calendar/disconnect", |
| 154 |
GOOGLE_CALENDAR_SYNC_ALL: "/google-calendar/sync-all", |
| 155 |
|
| 156 |
// Tools |
| 157 |
TOOLS_SYSTEM_STATUS: "/tools/system-status", |
| 158 |
TOOLS_ACTIVE_JOBS: "/tools/active-jobs", |
| 159 |
TOOLS_LOGS: (type: string, page: number) => |
| 160 |
`/tools/logs/${type}?page=${page}`, |
| 161 |
TOOLS_LOGS_CLEAR: (type: string) => `/tools/logs/${type}/clear`, |
| 162 |
TOOLS_EXPORT_JOB: "/tools/export-job", |
| 163 |
TOOLS_JOB_ACTION: (endpoint: string, jobId: string) => |
| 164 |
`/tools/${endpoint}/${jobId}`, |
| 165 |
TOOLS_EXPORT_DOWNLOAD: (jobId: string) => |
| 166 |
`/tools/export-job/${jobId}/download`, |
| 167 |
TOOLS_EXPORT_DELETE: (jobId: string) => `/tools/export-job/${jobId}`, |
| 168 |
TOOLS_EXPORT_STATUS: (jobId: string) => `/tools/export-job/${jobId}`, |
| 169 |
TOOLS_IMPORT_JOB: "/tools/import-job", |
| 170 |
TOOLS_IMPORT_JOB_GET: (jobId: string) => `/tools/import-job/${jobId}`, |
| 171 |
TOOLS_ALL_JOBS: "/tools/all-jobs", |
| 172 |
TOOLS_CRON_JOBS: "/tools/cron-jobs", |
| 173 |
TOOLS_CRON_RUN: (hook: string) => `/tools/cron-jobs/${hook}/run`, |
| 174 |
TOOLS_CLEAR_CACHE: "/tools/clear-cache", |
| 175 |
TOOLS_CACHE_VIEW: "/cache/view", |
| 176 |
TOOLS_CACHE_CLEAR_ITEM: "/cache/clear-item", |
| 177 |
|
| 178 |
// Migration |
| 179 |
MIGRATION_STATUS: "/migration/status", |
| 180 |
MIGRATION_CLEAR: "/migration/clear", |
| 181 |
MIGRATION_PROGRESS: "/migration/progress", |
| 182 |
MIGRATION_MIGRATE_ALL: "/migration/migrate-all", |
| 183 |
MIGRATION_CANCEL: "/migration/cancel", |
| 184 |
|
| 185 |
// Payment Gateways |
| 186 |
PAYMENT_GATEWAYS: "/payment/gateways", |
| 187 |
|
| 188 |
// Signed Consents |
| 189 |
SIGNED_CONSENTS: "/signed-consents", |
| 190 |
SIGNED_CONSENT_GET: (id: string | number) => `/signed-consents/${id}`, |
| 191 |
SIGNED_CONSENT_PDF: (id: string | number) => `/signed-consents/${id}/pdf`, |
| 192 |
SIGNED_CONSENTS_PREVIEW: "/signed-consents/preview", |
| 193 |
|
| 194 |
// Dynamic Pricing |
| 195 |
DYNAMIC_PRICING_SETTINGS: "/dynamic-pricing/settings", |
| 196 |
|
| 197 |
// Availability |
| 198 |
AVAILABILITY: (tripId: string | number) => `/trips/${tripId}/availability`, |
| 199 |
|
| 200 |
// Itinerary |
| 201 |
ITINERARY: "/itinerary", |
| 202 |
ITINERARY_GET: (id: string | number, mode?: string) => |
| 203 |
mode ? `/itinerary/${id}?mode=${mode}` : `/itinerary/${id}`, |
| 204 |
ITINERARY_DELETE: (id: string | number, mode?: string) => |
| 205 |
mode ? `/itinerary/${id}?mode=${mode}` : `/itinerary/${id}`, |
| 206 |
ITINERARY_BY_TRIP: (tripId: string | number) => |
| 207 |
`/itinerary?trip_id=${tripId}`, |
| 208 |
ITINERARY_DAY_ENTRY_BY_DAY_ID: (dayId: string | number) => |
| 209 |
`/itinerary/day-entry-by-day-id/${dayId}`, |
| 210 |
// One-shot save of every activity for a single day. Replaces N sequential |
| 211 |
// PUTs (one per activity) with a single batch request — the controller |
| 212 |
// dispatches each row to update/create and returns per-row results. |
| 213 |
ITINERARY_DAY_ACTIVITIES_BULK: (dayId: string | number) => |
| 214 |
`/itinerary/day/${dayId}/activities/bulk`, |
| 215 |
|
| 216 |
// Saved Trips |
| 217 |
SAVED_TRIPS: "/saved-trips", |
| 218 |
|
| 219 |
// Email automation (Yatra Pro module — routes registered when module is active) |
| 220 |
EMAIL_TEMPLATES: "/email-templates", |
| 221 |
EMAIL_TEMPLATE_GET: (id: string | number) => `/email-templates/${id}`, |
| 222 |
EMAIL_TEMPLATE_PREVIEW: (id: string | number) => |
| 223 |
`/email-templates/${id}/preview`, |
| 224 |
EMAIL_TEMPLATE_TEST: (id: string | number) => `/email-templates/${id}/test`, |
| 225 |
EMAIL_TEMPLATE_DUPLICATE: (id: string | number) => |
| 226 |
`/email-templates/${id}/duplicate`, |
| 227 |
EMAIL_TEMPLATE_VARIABLES: "/email-templates/variables", |
| 228 |
EMAIL_TEMPLATE_EVENTS: "/email-templates/events", |
| 229 |
EMAIL_SEQUENCES: "/email-sequences", |
| 230 |
EMAIL_SEQUENCE_GET: (id: string | number) => `/email-sequences/${id}`, |
| 231 |
EMAIL_LOGS: "/email-logs", |
| 232 |
|
| 233 |
// Notices (Admin UI + WP notices) |
| 234 |
NOTICES: "/notices", |
| 235 |
NOTICE_DISMISS: (id: string) => `/notices/${id}/dismiss`, |
| 236 |
} as const; |
| 237 |
|
| 238 |
// Type for endpoint keys |
| 239 |
export type ApiEndpointKey = keyof typeof API_ENDPOINTS; |
| 240 |
|