@myrjfa/state 3.0.4 → 3.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/actions/chat.d.ts +1 -1
- package/dist/lib/actions/chat.d.ts.map +1 -1
- package/dist/lib/actions/chat.js +2 -2
- package/dist/lib/actions/companion.d.ts +57 -2
- package/dist/lib/actions/companion.d.ts.map +1 -1
- package/dist/lib/actions/companion.js +64 -2
- package/dist/lib/actions/fetcher.d.ts +2 -1
- package/dist/lib/actions/fetcher.d.ts.map +1 -1
- package/dist/lib/actions/fetcher.js +40 -1
- package/dist/lib/actions/itinerary.d.ts +19 -2
- package/dist/lib/actions/itinerary.d.ts.map +1 -1
- package/dist/lib/actions/itinerary.js +40 -2
- package/dist/lib/actions/itineraryOrder.d.ts +6 -2
- package/dist/lib/actions/itineraryOrder.d.ts.map +1 -1
- package/dist/lib/actions/itineraryOrder.js +4 -0
- package/dist/lib/companion/discoveryPrefill.d.ts +27 -0
- package/dist/lib/companion/discoveryPrefill.d.ts.map +1 -0
- package/dist/lib/companion/discoveryPrefill.js +80 -0
- package/dist/lib/companion/inspiration.d.ts +9 -0
- package/dist/lib/companion/inspiration.d.ts.map +1 -0
- package/dist/lib/companion/inspiration.js +15 -0
- package/dist/lib/context/ChatContext.d.ts +1 -0
- package/dist/lib/context/ChatContext.d.ts.map +1 -1
- package/dist/lib/context/ChatContext.js +1 -1
- package/dist/lib/data/itineraryDestinations.d.ts +11 -0
- package/dist/lib/data/itineraryDestinations.d.ts.map +1 -0
- package/dist/lib/data/itineraryDestinations.js +32 -0
- package/dist/lib/models/companion.d.ts +24 -0
- package/dist/lib/models/companion.d.ts.map +1 -1
- package/dist/lib/models/itinerary.d.ts +124 -0
- package/dist/lib/models/itinerary.d.ts.map +1 -1
- package/dist/lib/utils/itineraryPlacement.d.ts +24 -0
- package/dist/lib/utils/itineraryPlacement.d.ts.map +1 -0
- package/dist/lib/utils/itineraryPlacement.js +118 -0
- package/dist/lib/utils/itineraryPlanner.d.ts +7 -0
- package/dist/lib/utils/itineraryPlanner.d.ts.map +1 -0
- package/dist/lib/utils/itineraryPlanner.js +19 -0
- package/package.json +1 -1
|
@@ -354,7 +354,7 @@ export declare const chatApi: {
|
|
|
354
354
|
}>;
|
|
355
355
|
getBalances: (convId: string) => Promise<any>;
|
|
356
356
|
getExpenseCategories: (convId: string) => Promise<string[]>;
|
|
357
|
-
uploadFiles: (formData: FormData) => Promise<{
|
|
357
|
+
uploadFiles: (formData: FormData, onUploadProgress?: (percent: number) => void) => Promise<{
|
|
358
358
|
error: string;
|
|
359
359
|
data: any;
|
|
360
360
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/chat.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/chat.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/actions/chat.js
CHANGED
|
@@ -796,9 +796,9 @@ export const chatApi = {
|
|
|
796
796
|
return [];
|
|
797
797
|
}
|
|
798
798
|
},
|
|
799
|
-
uploadFiles: async (formData) => {
|
|
799
|
+
uploadFiles: async (formData, onUploadProgress) => {
|
|
800
800
|
try {
|
|
801
|
-
const response = await post(`${BASE_PATH}/upload`, formData);
|
|
801
|
+
const response = await post(`${BASE_PATH}/upload`, formData, true, { onUploadProgress });
|
|
802
802
|
return response;
|
|
803
803
|
}
|
|
804
804
|
catch (error) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CompanionSavedType } from "../models/companion";
|
|
1
|
+
import type { CompanionListingCard, CompanionListingSuggestions, CompanionSavedType, CompanionStandaloneKind } from "../models/companion";
|
|
2
2
|
export declare function getCompanionSavedStatus(type: CompanionSavedType, targetId: string): Promise<{
|
|
3
3
|
success: boolean;
|
|
4
4
|
saved: boolean;
|
|
@@ -62,7 +62,19 @@ export declare function createTravelPlan(planData: any): Promise<{
|
|
|
62
62
|
plan: any;
|
|
63
63
|
error?: undefined;
|
|
64
64
|
}>;
|
|
65
|
-
export declare function
|
|
65
|
+
export declare function uploadCompanionTripCover(file: File): Promise<{
|
|
66
|
+
success: boolean;
|
|
67
|
+
url: string;
|
|
68
|
+
error?: undefined;
|
|
69
|
+
} | {
|
|
70
|
+
success: boolean;
|
|
71
|
+
error: string;
|
|
72
|
+
url?: undefined;
|
|
73
|
+
}>;
|
|
74
|
+
export declare function createTravelPlanFromItinerary(itineraryId: string, inviteCount: number, joinPolicy?: "approval_required" | "open", options?: {
|
|
75
|
+
createAnother?: boolean;
|
|
76
|
+
requestId?: string;
|
|
77
|
+
}): Promise<{
|
|
66
78
|
success: boolean;
|
|
67
79
|
error: any;
|
|
68
80
|
plan?: undefined;
|
|
@@ -73,6 +85,49 @@ export declare function createTravelPlanFromItinerary(itineraryId: string, invit
|
|
|
73
85
|
message: any;
|
|
74
86
|
error?: undefined;
|
|
75
87
|
}>;
|
|
88
|
+
export declare function attachItineraryToTravelPlan(planId: string, itineraryId: string): Promise<{
|
|
89
|
+
success: boolean;
|
|
90
|
+
error: any;
|
|
91
|
+
plan?: undefined;
|
|
92
|
+
} | {
|
|
93
|
+
success: boolean;
|
|
94
|
+
plan: any;
|
|
95
|
+
error?: undefined;
|
|
96
|
+
}>;
|
|
97
|
+
export declare function getCompanionListingSuggestions(planId: string): Promise<{
|
|
98
|
+
success: boolean;
|
|
99
|
+
suggestions: CompanionListingSuggestions;
|
|
100
|
+
error?: undefined;
|
|
101
|
+
} | {
|
|
102
|
+
success: boolean;
|
|
103
|
+
suggestions: null;
|
|
104
|
+
error: string;
|
|
105
|
+
}>;
|
|
106
|
+
export declare function addCompanionStandaloneLink(planId: string, kind: CompanionStandaloneKind, entityId: string): Promise<{
|
|
107
|
+
success: boolean;
|
|
108
|
+
item: CompanionListingCard;
|
|
109
|
+
error?: undefined;
|
|
110
|
+
} | {
|
|
111
|
+
success: boolean;
|
|
112
|
+
error: string;
|
|
113
|
+
item?: undefined;
|
|
114
|
+
}>;
|
|
115
|
+
export declare function removeCompanionStandaloneLink(planId: string, kind: CompanionStandaloneKind, entityId: string): Promise<{
|
|
116
|
+
success: boolean;
|
|
117
|
+
error?: undefined;
|
|
118
|
+
} | {
|
|
119
|
+
success: boolean;
|
|
120
|
+
error: string;
|
|
121
|
+
}>;
|
|
122
|
+
export declare function getCompanionTripInspiration(filters: Record<string, string>): Promise<{
|
|
123
|
+
success: boolean;
|
|
124
|
+
items: CompanionListingCard[];
|
|
125
|
+
error?: undefined;
|
|
126
|
+
} | {
|
|
127
|
+
success: boolean;
|
|
128
|
+
items: never[];
|
|
129
|
+
error: string;
|
|
130
|
+
}>;
|
|
76
131
|
export declare function getTravelPlans(filters?: Record<string, string>): Promise<{
|
|
77
132
|
success: boolean;
|
|
78
133
|
error: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/companion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/companion.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,9 +65,20 @@ export async function createTravelPlan(planData) {
|
|
|
65
65
|
return { success: false, error: "Failed to create travel plan" };
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
export async function
|
|
68
|
+
export async function uploadCompanionTripCover(file) {
|
|
69
69
|
try {
|
|
70
|
-
const
|
|
70
|
+
const body = new FormData();
|
|
71
|
+
body.append("images", file);
|
|
72
|
+
const data = await post(`${BASE_PATH}/uploads/trip-cover`, body);
|
|
73
|
+
return { success: true, url: data.data.url };
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
return { success: false, error: error instanceof Error ? error.message : "Could not upload the trip cover." };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export async function createTravelPlanFromItinerary(itineraryId, inviteCount, joinPolicy = "approval_required", options = {}) {
|
|
80
|
+
try {
|
|
81
|
+
const data = await post(`${BASE_PATH}/plans/from-itinerary/${encodeURIComponent(itineraryId)}`, { inviteCount, joinPolicy, ...options });
|
|
71
82
|
if (data.statusCode >= 400)
|
|
72
83
|
return { success: false, error: data.message };
|
|
73
84
|
return { success: true, plan: data.data, message: data.message };
|
|
@@ -76,6 +87,57 @@ export async function createTravelPlanFromItinerary(itineraryId, inviteCount, jo
|
|
|
76
87
|
return { success: false, error: "We could not post this trip. Please try again." };
|
|
77
88
|
}
|
|
78
89
|
}
|
|
90
|
+
export async function attachItineraryToTravelPlan(planId, itineraryId) {
|
|
91
|
+
try {
|
|
92
|
+
const data = await put(`${BASE_PATH}/plans/${encodeURIComponent(planId)}/itinerary`, { itineraryId });
|
|
93
|
+
if (data.statusCode >= 400)
|
|
94
|
+
return { success: false, error: data.message };
|
|
95
|
+
return { success: true, plan: data.data };
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const message = typeof error === "object" && error !== null && "message" in error
|
|
99
|
+
? String(error.message)
|
|
100
|
+
: "We could not link this itinerary. Please try again.";
|
|
101
|
+
return { success: false, error: message };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export async function getCompanionListingSuggestions(planId) {
|
|
105
|
+
try {
|
|
106
|
+
const data = await get(`${BASE_PATH}/plans/${encodeURIComponent(planId)}/listing-suggestions`);
|
|
107
|
+
return { success: true, suggestions: data.data };
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
return { success: false, suggestions: null, error: error instanceof Error ? error.message : "Could not load trip suggestions." };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export async function addCompanionStandaloneLink(planId, kind, entityId) {
|
|
114
|
+
try {
|
|
115
|
+
const data = await post(`${BASE_PATH}/plans/${encodeURIComponent(planId)}/standalone-links`, { kind, entityId });
|
|
116
|
+
return { success: true, item: data.data };
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return { success: false, error: error instanceof Error ? error.message : "Could not add this listing to your trip." };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export async function removeCompanionStandaloneLink(planId, kind, entityId) {
|
|
123
|
+
try {
|
|
124
|
+
await del(`${BASE_PATH}/plans/${encodeURIComponent(planId)}/standalone-links/${encodeURIComponent(kind)}/${encodeURIComponent(entityId)}`);
|
|
125
|
+
return { success: true };
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
return { success: false, error: error instanceof Error ? error.message : "Could not remove this listing from your trip." };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export async function getCompanionTripInspiration(filters) {
|
|
132
|
+
try {
|
|
133
|
+
const query = new URLSearchParams(filters).toString();
|
|
134
|
+
const data = await get(`${BASE_PATH}/trips/inspiration${query ? `?${query}` : ""}`);
|
|
135
|
+
return { success: true, items: data.data || [] };
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return { success: false, items: [], error: error instanceof Error ? error.message : "Could not load trip inspiration." };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
79
141
|
export async function getTravelPlans(filters = {}) {
|
|
80
142
|
try {
|
|
81
143
|
const query = new URLSearchParams(filters).toString();
|
|
@@ -4,9 +4,10 @@ interface FetchOptions {
|
|
|
4
4
|
signal?: AbortSignal;
|
|
5
5
|
headers?: Record<string, string>;
|
|
6
6
|
keepalive?: boolean;
|
|
7
|
+
onUploadProgress?: (percent: number) => void;
|
|
7
8
|
}
|
|
8
9
|
export declare function get<T>(url: string, includeAuth?: boolean): Promise<T>;
|
|
9
|
-
export declare function post<T>(url: string, body: any, includeAuth?: boolean, options?: Pick<FetchOptions, 'signal' | 'headers' | 'retry' | 'keepalive'>): Promise<T>;
|
|
10
|
+
export declare function post<T>(url: string, body: any, includeAuth?: boolean, options?: Pick<FetchOptions, 'signal' | 'headers' | 'retry' | 'keepalive' | 'onUploadProgress'>): Promise<T>;
|
|
10
11
|
export declare function put<T>(url: string, body: any): Promise<T>;
|
|
11
12
|
export declare function patch<T>(url: string, body: any): Promise<T>;
|
|
12
13
|
export declare function del<T>(url: string, body?: any, includeAuth?: boolean, options?: Pick<FetchOptions, 'signal' | 'headers' | 'retry'>): Promise<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/fetcher.ts"],"names":[],"mappings":"AAyBA,UAAU,YAAY;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/fetcher.ts"],"names":[],"mappings":"AAyBA,UAAU,YAAY;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AA0MD,wBAAsB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,cAEpE;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,GAAE,OAAc,EAAE,OAAO,GAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,kBAAkB,CAAM,cAErL;AAED,wBAAsB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,cAElD;AAED,wBAAsB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,cAEpD;AAED,wBAAsB,GAAG,CAAC,CAAC,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,WAAW,GAAE,OAAc,EAC3B,OAAO,GAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAM,cAGnE"}
|
|
@@ -10,6 +10,41 @@ class ApiError extends Error {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
const baseURL = process.env.NEXT_PUBLIC_API_URL;
|
|
13
|
+
// Browser upload events provide byte counts; response parsing and auth retry
|
|
14
|
+
// still run through customFetch. Ordinary and server requests retain fetch.
|
|
15
|
+
function uploadWithProgress(url, init, onProgress) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
if (init.signal?.aborted) {
|
|
18
|
+
reject(new DOMException('Upload cancelled', 'AbortError'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const request = new XMLHttpRequest();
|
|
22
|
+
request.open(init.method || 'POST', url);
|
|
23
|
+
request.withCredentials = true;
|
|
24
|
+
new Headers(init.headers).forEach((value, key) => request.setRequestHeader(key, value));
|
|
25
|
+
const abort = () => request.abort();
|
|
26
|
+
const cleanup = () => {
|
|
27
|
+
init.signal?.removeEventListener('abort', abort);
|
|
28
|
+
request.upload.onprogress = null;
|
|
29
|
+
};
|
|
30
|
+
request.upload.onprogress = (event) => {
|
|
31
|
+
if (event.lengthComputable && event.total > 0) {
|
|
32
|
+
onProgress(Math.round(event.loaded / event.total * 100));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
request.onload = () => {
|
|
36
|
+
cleanup();
|
|
37
|
+
resolve(new Response(request.status === 204 ? null : request.responseText, {
|
|
38
|
+
status: request.status,
|
|
39
|
+
headers: { 'Content-Type': request.getResponseHeader('Content-Type') || 'application/json' },
|
|
40
|
+
}));
|
|
41
|
+
};
|
|
42
|
+
request.onerror = () => { cleanup(); reject(new TypeError('Failed to fetch')); };
|
|
43
|
+
request.onabort = () => { cleanup(); reject(new DOMException('Upload cancelled', 'AbortError')); };
|
|
44
|
+
init.signal?.addEventListener('abort', abort, { once: true });
|
|
45
|
+
request.send(init.body);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
13
48
|
/**
|
|
14
49
|
* #2 — Stable device fingerprint stored in localStorage.
|
|
15
50
|
* Survives browser sessions (unlike cookies which can expire/be cleared).
|
|
@@ -68,7 +103,9 @@ async function customFetch(input, method, body, options = {}) {
|
|
|
68
103
|
keepalive,
|
|
69
104
|
...(body ? { body: isFormData ? body : JSON.stringify(body) } : {}),
|
|
70
105
|
};
|
|
71
|
-
const response =
|
|
106
|
+
const response = options.onUploadProgress && isFormData && includeAuth && typeof window !== 'undefined'
|
|
107
|
+
? await uploadWithProgress(url, init, options.onUploadProgress)
|
|
108
|
+
: await fetch(url, init);
|
|
72
109
|
if (response.ok) {
|
|
73
110
|
return response.status !== 204 ? (await response.json()) : {};
|
|
74
111
|
}
|
|
@@ -141,6 +178,8 @@ async function refreshToken(input, method, body, options = {}) {
|
|
|
141
178
|
return customFetch(input, method, body, { ...options, includeAuth: true, retry: false });
|
|
142
179
|
}
|
|
143
180
|
catch (error) {
|
|
181
|
+
if (error?.name === 'AbortError')
|
|
182
|
+
throw error;
|
|
144
183
|
if (error && typeof error === 'object' && ('$$typeof' in error || error.digest === 'DYNAMIC_SERVER_USAGE')) {
|
|
145
184
|
throw error; // Re-throw Next.js PPR bail-out
|
|
146
185
|
}
|
|
@@ -1,11 +1,28 @@
|
|
|
1
|
-
import type { ItinerarySummary } from "../models/itinerary";
|
|
1
|
+
import type { ContextualDestinationSuggestion, GenerateItineraryInput, ItineraryRouteInput, ItinerarySummary } from "../models/itinerary";
|
|
2
|
+
export type { ContextualDestinationSuggestion, GenerateItineraryInput, ItineraryReturnMode, ItineraryRouteInput, } from "../models/itinerary";
|
|
2
3
|
export declare function getTrendingItineraries(limit?: number): Promise<{
|
|
3
4
|
success: boolean;
|
|
4
5
|
itineraries: ItinerarySummary[];
|
|
5
6
|
error?: string;
|
|
6
7
|
}>;
|
|
7
|
-
export declare function generateItinerary<T = any>(input:
|
|
8
|
+
export declare function generateItinerary<T = any>(input: GenerateItineraryInput): Promise<{
|
|
9
|
+
success: true;
|
|
10
|
+
itinerary: T;
|
|
11
|
+
} | {
|
|
12
|
+
success: false;
|
|
13
|
+
error: string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function getContextualDestinationSuggestions(route: ItineraryRouteInput): Promise<{
|
|
16
|
+
success: boolean;
|
|
17
|
+
suggestions: ContextualDestinationSuggestion[];
|
|
18
|
+
error?: string;
|
|
19
|
+
}>;
|
|
8
20
|
export declare function getItineraryById<T = any>(id: string): Promise<T>;
|
|
21
|
+
export declare function getMyItineraries(): Promise<{
|
|
22
|
+
success: boolean;
|
|
23
|
+
itineraries: ItinerarySummary[];
|
|
24
|
+
error?: string;
|
|
25
|
+
}>;
|
|
9
26
|
export declare function regenerateItinerary<T = any>(id: string): Promise<T>;
|
|
10
27
|
export declare function customizeItinerary<T = any>(id: string, input: unknown): Promise<T>;
|
|
11
28
|
export declare function getPublicItinerary<T = any>(slug: string): Promise<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itinerary.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/itinerary.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"itinerary.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/itinerary.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,+BAA+B,EAC/B,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,+BAA+B,EAC/B,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAK7B,wBAAsB,sBAAsB,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAeD;AAED,wBAAsB,iBAAiB,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CACpF;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,CAAC,CAAA;CAAE,GAC/B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CACpC,CAcA;AAED,wBAAsB,mCAAmC,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAC7F,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,+BAA+B,EAAE,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAWD;AAED,wBAAsB,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAGtE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAOD;AAED,wBAAsB,mBAAmB,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAOzE;AAED,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAOxF;AAED,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAM1E"}
|
|
@@ -15,13 +15,51 @@ export async function getTrendingItineraries(limit = 6) {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
export async function generateItinerary(input) {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
try {
|
|
19
|
+
const payload = await post("/itineraries/generate", input, true);
|
|
20
|
+
return { success: true, itinerary: payload.data };
|
|
21
|
+
}
|
|
22
|
+
catch (caught) {
|
|
23
|
+
const status = typeof caught === "object" && caught !== null && "statusCode" in caught
|
|
24
|
+
? Number(caught.statusCode)
|
|
25
|
+
: 0;
|
|
26
|
+
if (status === 401 || status === 403)
|
|
27
|
+
return { success: false, error: "Your session has expired. Please sign in again, then create your itinerary." };
|
|
28
|
+
if (status === 429)
|
|
29
|
+
return { success: false, error: "Our trip planner is busy right now. Please try again in a little while." };
|
|
30
|
+
if (status === 503 || status === 502)
|
|
31
|
+
return { success: false, error: "The AI trip planner is temporarily unavailable. Your answers are safe here; please try again shortly." };
|
|
32
|
+
if (status === 400 || status === 422)
|
|
33
|
+
return { success: false, error: "Please check your route, dates and budget, then try again." };
|
|
34
|
+
return { success: false, error: "We couldn't create your itinerary right now. Please try again shortly." };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function getContextualDestinationSuggestions(route) {
|
|
38
|
+
try {
|
|
39
|
+
const payload = await post("/itineraries/destination-suggestions", { route }, true);
|
|
40
|
+
return { success: true, suggestions: (payload.data ?? []).slice(0, 3) };
|
|
41
|
+
}
|
|
42
|
+
catch (caught) {
|
|
43
|
+
const statusCode = typeof caught === "object" && caught !== null && "statusCode" in caught
|
|
44
|
+
? Number(caught.statusCode)
|
|
45
|
+
: 0;
|
|
46
|
+
console.error("Itinerary destination suggestions unavailable", { statusCode });
|
|
47
|
+
return { success: false, suggestions: [] };
|
|
48
|
+
}
|
|
20
49
|
}
|
|
21
50
|
export async function getItineraryById(id) {
|
|
22
51
|
const payload = await get(`/itineraries/${encodeURIComponent(id)}`, true);
|
|
23
52
|
return payload.data;
|
|
24
53
|
}
|
|
54
|
+
export async function getMyItineraries() {
|
|
55
|
+
try {
|
|
56
|
+
const payload = await get("/itineraries", true);
|
|
57
|
+
return { success: true, itineraries: payload.data ?? [] };
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return { success: false, itineraries: [], error: "Your itineraries could not be loaded" };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
25
63
|
export async function regenerateItinerary(id) {
|
|
26
64
|
const payload = await post(`/itineraries/${encodeURIComponent(id)}/regenerate`, {}, true);
|
|
27
65
|
return payload.data;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import type { AssistedFulfillmentItem, ItineraryCandidate, ItineraryOrder, ItineraryReplacementResult, ItineraryV3 } from "../models/itinerary";
|
|
1
|
+
import type { AssistedFulfillmentItem, ItineraryCandidate, ItineraryOrder, ItineraryReplacementResult, ItineraryRecommendation, ItineraryV3 } from "../models/itinerary";
|
|
2
2
|
export type { AssistedFulfillmentItem } from "../models/itinerary";
|
|
3
3
|
export declare const refineItinerary: (itineraryId: string, message: string) => Promise<ItineraryV3>;
|
|
4
4
|
export declare const getItineraryAlternatives: (itineraryId: string, itemId: string) => Promise<ItineraryCandidate[]>;
|
|
5
|
+
export declare const getItineraryRecommendationAlternatives: (itineraryId: string, recommendationId: string) => Promise<ItineraryRecommendation[]>;
|
|
6
|
+
export declare const selectItineraryRecommendationAlternative: (itineraryId: string, recommendationId: string, alternativeId: string) => Promise<ItineraryV3>;
|
|
7
|
+
export declare const getItineraryDayCandidates: (itineraryId: string, day: number, category?: string) => Promise<ItineraryCandidate[]>;
|
|
8
|
+
export declare const addItineraryItem: (itineraryId: string, day: number, candidateId: string) => Promise<ItineraryV3>;
|
|
5
9
|
export declare const selectItineraryAlternative: (itineraryId: string, itemId: string, candidateId: string, locked?: boolean) => Promise<ItineraryV3>;
|
|
6
10
|
export declare const requoteItinerary: (itineraryId: string) => Promise<ItineraryV3>;
|
|
7
11
|
export declare const createItineraryOrder: (itineraryId: string, contactDetails: {
|
|
@@ -46,7 +50,7 @@ export declare const useItineraryTemplate: (slug: string, input: {
|
|
|
46
50
|
}) => Promise<ItineraryV3>;
|
|
47
51
|
export declare const getAssistedItineraryQueue: () => Promise<AssistedFulfillmentItem[]>;
|
|
48
52
|
export declare const updateAssistedItineraryItem: (itemId: string, input: {
|
|
49
|
-
action: "assign" | "confirm" | "cannot_fulfill" | "confirm_cancellation";
|
|
53
|
+
action: "assign" | "release" | "confirm" | "cannot_fulfill" | "confirm_cancellation";
|
|
50
54
|
supplierAmount?: number;
|
|
51
55
|
taxes?: number;
|
|
52
56
|
confirmation?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itineraryOrder.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/itineraryOrder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAKnE,eAAO,MAAM,eAAe,GAAU,aAAa,MAAM,EAAE,SAAS,MAAM,yBAAoG,CAAC;AAE/K,eAAO,MAAM,wBAAwB,GAAU,aAAa,MAAM,EAAE,QAAQ,MAAM,kCAAqH,CAAC;AAExM,eAAO,MAAM,0BAA0B,GAAU,aAAa,MAAM,EAAE,QAAQ,MAAM,EAAE,aAAa,MAAM,EAAE,gBAAa,yBAAoI,CAAC;AAE7P,eAAO,MAAM,gBAAgB,GAAU,aAAa,MAAM,yBAA4F,CAAC;AAEvJ,eAAO,MAAM,oBAAoB,GAAU,aAAa,MAAM,EAAE,gBAAgB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,gBAAgB,MAAM;WAA4C,cAAc;qBAAmB,MAAM;mBAAiB,MAAM;YAAU,MAAM;cAAY,KAAK;EAAuK,CAAC;AAEzc,eAAO,MAAM,2BAA2B,GAAU,SAAS,MAAM,EAAE,SAAS;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,4BAA4G,CAAC;AAE/Q,eAAO,MAAM,iBAAiB,GAAU,SAAS,MAAM,4BAAmF,CAAC;AAE3I,eAAO,MAAM,6BAA6B,GAAU,SAAS,MAAM;cAA+C,KAAK;qBAAmB,MAAM;WAAS,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;EAA4D,CAAC;AAElS,eAAO,MAAM,oBAAoB,GAAU,SAAS,MAAM,EAAE,QAAQ,MAAM,4BAAuG,CAAC;AAElL,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,aAAa,MAAM,EACnB,aAAa,MAAM,EACnB,sBAAsB;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,wCACwD,CAAC;AAEvK,eAAO,MAAM,oBAAoB,GAAU,MAAM,MAAM,EAAE,OAAO;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,yBAA+G,CAAC;AAE/Q,eAAO,MAAM,yBAAyB,0CAA+G,CAAC;AAEtJ,eAAO,MAAM,2BAA2B,GAAU,QAAQ,MAAM,EAAE,OAAO;IAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,qCAAsH,CAAC"}
|
|
1
|
+
{"version":3,"file":"itineraryOrder.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/itineraryOrder.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,10 @@ import { get, patch, post } from "./fetcher";
|
|
|
2
2
|
const unwrap = (payload) => payload.data;
|
|
3
3
|
export const refineItinerary = async (itineraryId, message) => unwrap(await post(`/itineraries/${itineraryId}/refine`, { message }));
|
|
4
4
|
export const getItineraryAlternatives = async (itineraryId, itemId) => unwrap(await get(`/itineraries/${itineraryId}/items/${itemId}/alternatives`));
|
|
5
|
+
export const getItineraryRecommendationAlternatives = async (itineraryId, recommendationId) => unwrap(await get(`/itineraries/${encodeURIComponent(itineraryId)}/recommendations/${encodeURIComponent(recommendationId)}/alternatives`));
|
|
6
|
+
export const selectItineraryRecommendationAlternative = async (itineraryId, recommendationId, alternativeId) => unwrap(await patch(`/itineraries/${encodeURIComponent(itineraryId)}/recommendations/${encodeURIComponent(recommendationId)}`, { alternativeId }));
|
|
7
|
+
export const getItineraryDayCandidates = async (itineraryId, day, category) => unwrap(await get(`/itineraries/${encodeURIComponent(itineraryId)}/candidates?day=${day}${category ? `&category=${encodeURIComponent(category)}` : ""}`));
|
|
8
|
+
export const addItineraryItem = async (itineraryId, day, candidateId) => unwrap(await post(`/itineraries/${encodeURIComponent(itineraryId)}/items`, { day, candidateId }));
|
|
5
9
|
export const selectItineraryAlternative = async (itineraryId, itemId, candidateId, locked = true) => unwrap(await patch(`/itineraries/${itineraryId}/items/${itemId}/selection`, { candidateId, locked }));
|
|
6
10
|
export const requoteItinerary = async (itineraryId) => unwrap(await post(`/itineraries/${itineraryId}/requote`, {}));
|
|
7
11
|
export const createItineraryOrder = async (itineraryId, contactDetails, idempotencyKey) => unwrap(await post(`/itineraries?itineraryId=${encodeURIComponent(itineraryId)}`, { contactDetails, termsAccepted: true }, true, { headers: { "Idempotency-Key": idempotencyKey } }));
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type CompanionDiscoveryPrefill = Partial<{
|
|
2
|
+
country: string;
|
|
3
|
+
state: string;
|
|
4
|
+
city: string;
|
|
5
|
+
style: string;
|
|
6
|
+
minBudget: string;
|
|
7
|
+
maxBudget: string;
|
|
8
|
+
minDays: string;
|
|
9
|
+
maxDays: string;
|
|
10
|
+
startDate: string;
|
|
11
|
+
endDate: string;
|
|
12
|
+
openSpots: string;
|
|
13
|
+
maxGroupSize: string;
|
|
14
|
+
interest: string;
|
|
15
|
+
}>;
|
|
16
|
+
export interface CompanionDiscoveryLocation {
|
|
17
|
+
name: string;
|
|
18
|
+
state: string;
|
|
19
|
+
country: string;
|
|
20
|
+
}
|
|
21
|
+
type SearchParamsReader = {
|
|
22
|
+
get(name: string): string | null;
|
|
23
|
+
};
|
|
24
|
+
export declare function parseCompanionDiscoveryPrefill(params: SearchParamsReader, locations?: readonly CompanionDiscoveryLocation[]): CompanionDiscoveryPrefill;
|
|
25
|
+
export declare function serializeCompanionDiscoveryPrefill(prefill: CompanionDiscoveryPrefill): URLSearchParams;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=discoveryPrefill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoveryPrefill.d.ts","sourceRoot":"","sources":["../../../src/lib/companion/discoveryPrefill.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,kBAAkB,GAAG;IAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AA0B/D,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,kBAAkB,EAC1B,SAAS,GAAE,SAAS,0BAA0B,EAAO,GACpD,yBAAyB,CA2C3B;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,yBAAyB,mBAOpF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
const KEYS = [
|
|
2
|
+
"country", "state", "city", "style", "minBudget", "maxBudget", "minDays",
|
|
3
|
+
"maxDays", "startDate", "endDate", "openSpots", "maxGroupSize", "interest",
|
|
4
|
+
];
|
|
5
|
+
const STYLES = new Set(["budget", "backpacker", "flashpacker", "mid-range", "luxury"]);
|
|
6
|
+
const INTERESTS = new Set(["adventure", "culture", "food", "hiking", "nature", "nightlife", "photography", "wellness"]);
|
|
7
|
+
const SAFE_LABEL = /^[\p{L}\p{M} .'-]{1,80}$/u;
|
|
8
|
+
const exactDate = (value) => {
|
|
9
|
+
if (!value || !/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
10
|
+
return "";
|
|
11
|
+
const date = new Date(`${value}T00:00:00.000Z`);
|
|
12
|
+
return Number.isNaN(date.getTime()) || date.toISOString().slice(0, 10) !== value ? "" : value;
|
|
13
|
+
};
|
|
14
|
+
const boundedInteger = (value, min, max) => {
|
|
15
|
+
if (!value || !/^\d+$/.test(value))
|
|
16
|
+
return "";
|
|
17
|
+
const number = Number(value);
|
|
18
|
+
return Number.isSafeInteger(number) && number >= min && number <= max ? String(number) : "";
|
|
19
|
+
};
|
|
20
|
+
const findCaseInsensitive = (values, value) => (value ? values.find((candidate) => candidate.toLocaleLowerCase() === value.trim().toLocaleLowerCase()) || "" : "");
|
|
21
|
+
export function parseCompanionDiscoveryPrefill(params, locations = []) {
|
|
22
|
+
const result = {};
|
|
23
|
+
const cityInput = params.get("city")?.trim() || "";
|
|
24
|
+
const countryInput = params.get("country")?.trim() || "";
|
|
25
|
+
const stateInput = params.get("state")?.trim() || "";
|
|
26
|
+
const location = cityInput && SAFE_LABEL.test(cityInput)
|
|
27
|
+
? locations.find((candidate) => candidate.name.toLocaleLowerCase() === cityInput.toLocaleLowerCase()
|
|
28
|
+
&& (!countryInput || candidate.country.toLocaleLowerCase() === countryInput.toLocaleLowerCase())
|
|
29
|
+
&& (!stateInput || candidate.state.toLocaleLowerCase() === stateInput.toLocaleLowerCase()))
|
|
30
|
+
: undefined;
|
|
31
|
+
if (location) {
|
|
32
|
+
result.country = location.country;
|
|
33
|
+
result.state = location.state;
|
|
34
|
+
result.city = location.name;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const country = findCaseInsensitive([...new Set(locations.map((item) => item.country))], countryInput);
|
|
38
|
+
const states = locations.filter((item) => !country || item.country === country).map((item) => item.state);
|
|
39
|
+
const state = findCaseInsensitive([...new Set(states)], stateInput);
|
|
40
|
+
if (country)
|
|
41
|
+
result.country = country;
|
|
42
|
+
if (state)
|
|
43
|
+
result.state = state;
|
|
44
|
+
}
|
|
45
|
+
const style = params.get("style")?.trim().toLowerCase() || "";
|
|
46
|
+
if (STYLES.has(style))
|
|
47
|
+
result.style = style;
|
|
48
|
+
const interest = params.get("interest")?.trim().toLowerCase() || "";
|
|
49
|
+
if (INTERESTS.has(interest))
|
|
50
|
+
result.interest = interest;
|
|
51
|
+
const numericBounds = {
|
|
52
|
+
minBudget: [0, 10000000], maxBudget: [0, 10000000],
|
|
53
|
+
minDays: [1, 365], maxDays: [1, 365], openSpots: [1, 19], maxGroupSize: [2, 20],
|
|
54
|
+
};
|
|
55
|
+
for (const [key, [min, max]] of Object.entries(numericBounds)) {
|
|
56
|
+
const value = boundedInteger(params.get(key), min, max);
|
|
57
|
+
if (value)
|
|
58
|
+
result[key] = value;
|
|
59
|
+
}
|
|
60
|
+
const startDate = exactDate(params.get("startDate"));
|
|
61
|
+
const endDate = exactDate(params.get("endDate"));
|
|
62
|
+
if (startDate)
|
|
63
|
+
result.startDate = startDate;
|
|
64
|
+
if (endDate && (!startDate || endDate >= startDate))
|
|
65
|
+
result.endDate = endDate;
|
|
66
|
+
if (result.minBudget && result.maxBudget && Number(result.maxBudget) < Number(result.minBudget))
|
|
67
|
+
delete result.maxBudget;
|
|
68
|
+
if (result.minDays && result.maxDays && Number(result.maxDays) < Number(result.minDays))
|
|
69
|
+
delete result.maxDays;
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
export function serializeCompanionDiscoveryPrefill(prefill) {
|
|
73
|
+
const params = new URLSearchParams();
|
|
74
|
+
for (const key of KEYS) {
|
|
75
|
+
const value = prefill[key];
|
|
76
|
+
if (value)
|
|
77
|
+
params.set(key, value);
|
|
78
|
+
}
|
|
79
|
+
return params;
|
|
80
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const COMPANION_INSPIRATION_DECISION_INTERVAL = 4;
|
|
2
|
+
export declare function shouldShowTripInspiration({ mode, organicDecisionCount, hasCandidate, shown, }: {
|
|
3
|
+
mode: "trips" | "travelers";
|
|
4
|
+
organicDecisionCount: number;
|
|
5
|
+
hasCandidate: boolean;
|
|
6
|
+
shown: boolean;
|
|
7
|
+
}): boolean;
|
|
8
|
+
export declare function companionInspirationSessionKey(filters: Record<string, string>): string;
|
|
9
|
+
//# sourceMappingURL=inspiration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspiration.d.ts","sourceRoot":"","sources":["../../../src/lib/companion/inspiration.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uCAAuC,IAAI,CAAC;AAEzD,wBAAgB,yBAAyB,CAAC,EACxC,IAAI,EACJ,oBAAoB,EACpB,YAAY,EACZ,KAAK,GACN,EAAE;IACD,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB,WAKA;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAO7E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const COMPANION_INSPIRATION_DECISION_INTERVAL = 4;
|
|
2
|
+
export function shouldShowTripInspiration({ mode, organicDecisionCount, hasCandidate, shown, }) {
|
|
3
|
+
return mode === "trips"
|
|
4
|
+
&& organicDecisionCount >= COMPANION_INSPIRATION_DECISION_INTERVAL
|
|
5
|
+
&& hasCandidate
|
|
6
|
+
&& !shown;
|
|
7
|
+
}
|
|
8
|
+
export function companionInspirationSessionKey(filters) {
|
|
9
|
+
const signature = Object.entries(filters)
|
|
10
|
+
.filter(([, value]) => Boolean(value))
|
|
11
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
12
|
+
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
|
|
13
|
+
.join("&");
|
|
14
|
+
return `trippeaze:companion-inspiration:v1:${signature || "all"}`;
|
|
15
|
+
}
|
|
@@ -25,6 +25,7 @@ interface ChatContextType {
|
|
|
25
25
|
actorModel: ChatActorModel;
|
|
26
26
|
}>;
|
|
27
27
|
type?: "text" | "media" | "announcement";
|
|
28
|
+
onUploadProgress?: (percent: number) => void;
|
|
28
29
|
}) => Promise<void>;
|
|
29
30
|
createPoll: (conversationId: string, question: string, options: string[], allowMultiple: boolean) => void;
|
|
30
31
|
votePoll: (pollId: string, optionIndex: number) => Promise<Poll | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../../src/lib/context/ChatContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAO/C,OAAO,EAGH,KAAK,cAAc,EAEnB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,IAAI,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,sBAAsB;IACnC,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC;IAC3E,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,kBAAkB,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,qBAAqB,EAAE,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACnE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,oBAAoB,EAAE,CAAC,MAAM,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,WAAW,EAAE,CACT,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,IAAI,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,cAAc,CAAA;SAAE,CAAC,CAAC;QAClE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../../src/lib/context/ChatContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -73,7 +73,7 @@ export function ChatProvider({ children }) {
|
|
|
73
73
|
if (files?.length) {
|
|
74
74
|
const formData = new FormData();
|
|
75
75
|
files.forEach((file) => formData.append("files", file));
|
|
76
|
-
const upload = await chatApi.uploadFiles(formData);
|
|
76
|
+
const upload = await chatApi.uploadFiles(formData, options?.onUploadProgress);
|
|
77
77
|
media = upload?.data?.files || [];
|
|
78
78
|
if (!media.length) {
|
|
79
79
|
const errMsg = upload?.error?.message || "Unable to upload attachments";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type ItineraryLocationKind = "city" | "state" | "country";
|
|
2
|
+
export interface ItineraryLocationOption {
|
|
3
|
+
name: string;
|
|
4
|
+
region: string;
|
|
5
|
+
kind: ItineraryLocationKind;
|
|
6
|
+
emoji: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const ITINERARY_LOCATION_OPTIONS: ItineraryLocationOption[];
|
|
9
|
+
export declare function findItineraryLocations(query: string, excluded?: string[], limit?: number): ItineraryLocationOption[];
|
|
10
|
+
export declare function canonicalItineraryLocation(name: string): string | undefined;
|
|
11
|
+
//# sourceMappingURL=itineraryDestinations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"itineraryDestinations.d.ts","sourceRoot":"","sources":["../../../src/lib/data/itineraryDestinations.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAyBD,eAAO,MAAM,0BAA0B,2BACkG,CAAC;AAE1I,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,EAAE,KAAK,SAAI,6BAQvF;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,sBAGtD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { COUNTRIES } from "./countryStates";
|
|
2
|
+
const CURATED_CITIES = [
|
|
3
|
+
["Delhi", "India", "🏛️"], ["Goa", "India", "🏖️"], ["Kochi", "India", "🌴"],
|
|
4
|
+
["Munnar", "India", "🍃"], ["Bengaluru", "India", "🌇"], ["Mumbai", "India", "🌆"],
|
|
5
|
+
["Jaipur", "India", "🏯"], ["Manali", "India", "🏔️"], ["Varanasi", "India", "🕌"],
|
|
6
|
+
["Chennai", "India", "🌊"], ["Hyderabad", "India", "🍲"], ["Kolkata", "India", "🎭"],
|
|
7
|
+
["Tokyo", "Japan", "🗼"], ["Kyoto", "Japan", "⛩️"], ["Bangkok", "Thailand", "🏯"],
|
|
8
|
+
["Bali", "Indonesia", "🌺"], ["Singapore", "Singapore", "🦁"], ["Paris", "France", "🗼"],
|
|
9
|
+
["London", "United Kingdom", "🎡"], ["Rome", "Italy", "🏛️"], ["Dubai", "United Arab Emirates", "🏙️"],
|
|
10
|
+
["Sydney", "Australia", "🦘"], ["New York", "United States", "🗽"], ["Kathmandu", "Nepal", "⛰️"],
|
|
11
|
+
];
|
|
12
|
+
const countryOptions = COUNTRIES.map((country) => ({
|
|
13
|
+
name: country.name, region: "Country", kind: "country", emoji: "🌍",
|
|
14
|
+
}));
|
|
15
|
+
const stateOptions = COUNTRIES.flatMap((country) => country.states.map((state) => ({ name: state, region: country.name, kind: "state", emoji: "📍" })));
|
|
16
|
+
const cityOptions = CURATED_CITIES.map(([name, region, emoji]) => ({
|
|
17
|
+
name, region, kind: "city", emoji,
|
|
18
|
+
}));
|
|
19
|
+
export const ITINERARY_LOCATION_OPTIONS = [...cityOptions, ...stateOptions, ...countryOptions]
|
|
20
|
+
.filter((item, index, all) => all.findIndex((candidate) => candidate.name === item.name && candidate.region === item.region) === index);
|
|
21
|
+
export function findItineraryLocations(query, excluded = [], limit = 8) {
|
|
22
|
+
const normalized = query.trim().toLocaleLowerCase();
|
|
23
|
+
if (!normalized)
|
|
24
|
+
return [];
|
|
25
|
+
const blocked = new Set(excluded.map((value) => value.toLocaleLowerCase()));
|
|
26
|
+
return ITINERARY_LOCATION_OPTIONS.filter((option) => !blocked.has(option.name.toLocaleLowerCase()) &&
|
|
27
|
+
(option.name.toLocaleLowerCase().includes(normalized) || option.region.toLocaleLowerCase().includes(normalized))).slice(0, limit);
|
|
28
|
+
}
|
|
29
|
+
export function canonicalItineraryLocation(name) {
|
|
30
|
+
const normalized = name.trim().toLocaleLowerCase();
|
|
31
|
+
return ITINERARY_LOCATION_OPTIONS.find((option) => option.name.toLocaleLowerCase() === normalized)?.name;
|
|
32
|
+
}
|
|
@@ -16,4 +16,28 @@ export interface CompanionSavedPage {
|
|
|
16
16
|
items: CompanionSavedItem[];
|
|
17
17
|
nextCursor: string | null;
|
|
18
18
|
}
|
|
19
|
+
export type CompanionStandaloneKind = "stay" | "adventure" | "event" | "package";
|
|
20
|
+
export interface CompanionListingCard {
|
|
21
|
+
kind: CompanionStandaloneKind;
|
|
22
|
+
entityId: string;
|
|
23
|
+
title: string;
|
|
24
|
+
unavailable?: boolean;
|
|
25
|
+
slug?: string;
|
|
26
|
+
href?: string;
|
|
27
|
+
image?: string;
|
|
28
|
+
location?: string;
|
|
29
|
+
price?: number;
|
|
30
|
+
currency?: string;
|
|
31
|
+
priceBasis?: string;
|
|
32
|
+
sponsored?: boolean;
|
|
33
|
+
trendingScore?: number;
|
|
34
|
+
durationDays?: number;
|
|
35
|
+
category?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CompanionListingSuggestions {
|
|
38
|
+
stays: CompanionListingCard[];
|
|
39
|
+
adventures: CompanionListingCard[];
|
|
40
|
+
events: CompanionListingCard[];
|
|
41
|
+
packages: CompanionListingCard[];
|
|
42
|
+
}
|
|
19
43
|
//# sourceMappingURL=companion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../../../src/lib/models/companion.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../../../src/lib/models/companion.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC"}
|
|
@@ -10,10 +10,64 @@ export interface ItinerarySummary {
|
|
|
10
10
|
interests?: string[];
|
|
11
11
|
totalEstimatedCost?: number;
|
|
12
12
|
overview?: string;
|
|
13
|
+
route?: ItineraryRouteInput;
|
|
14
|
+
dateRecommendation?: ItineraryDateRecommendation;
|
|
13
15
|
slug: string;
|
|
14
16
|
viewCount?: number;
|
|
15
17
|
companionPlanId?: string;
|
|
18
|
+
companionPlans?: Array<{
|
|
19
|
+
_id: string;
|
|
20
|
+
status: "open" | "full" | "completed" | "cancelled";
|
|
21
|
+
destination?: {
|
|
22
|
+
city?: string;
|
|
23
|
+
state?: string;
|
|
24
|
+
country?: string;
|
|
25
|
+
};
|
|
26
|
+
startDate?: string;
|
|
27
|
+
endDate?: string;
|
|
28
|
+
}>;
|
|
16
29
|
createdAt?: string;
|
|
30
|
+
status?: "draft" | "saved" | "booking_in_progress" | "booked";
|
|
31
|
+
activeOrderId?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ItineraryDateRecommendation {
|
|
34
|
+
startDate: string;
|
|
35
|
+
endDate: string;
|
|
36
|
+
reasonType: "inventory_availability" | "budget_fit" | "route_feasibility" | "relevant_event" | "seasonal_access";
|
|
37
|
+
reason: string;
|
|
38
|
+
}
|
|
39
|
+
export type ItineraryReturnMode = "origin" | "none" | "different";
|
|
40
|
+
export interface ItineraryRouteInput {
|
|
41
|
+
origin: string;
|
|
42
|
+
destinations: string[];
|
|
43
|
+
return: {
|
|
44
|
+
mode: ItineraryReturnMode;
|
|
45
|
+
location?: string;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export interface GenerateItineraryInput {
|
|
49
|
+
route: ItineraryRouteInput;
|
|
50
|
+
destination: string;
|
|
51
|
+
origin: string;
|
|
52
|
+
startDate: string;
|
|
53
|
+
endDate: string;
|
|
54
|
+
numberOfPeople: number;
|
|
55
|
+
budget: number;
|
|
56
|
+
interests: string[];
|
|
57
|
+
pace: "relaxed" | "balanced" | "packed";
|
|
58
|
+
includeOriginTravel: boolean;
|
|
59
|
+
budgetFlexibility: "strict" | "little";
|
|
60
|
+
flexibleDates: {
|
|
61
|
+
enabled: boolean;
|
|
62
|
+
marginDays: number;
|
|
63
|
+
preserveDuration: true;
|
|
64
|
+
};
|
|
65
|
+
specialRequirements?: string;
|
|
66
|
+
}
|
|
67
|
+
export interface ContextualDestinationSuggestion {
|
|
68
|
+
name: string;
|
|
69
|
+
region: string;
|
|
70
|
+
reason: string;
|
|
17
71
|
}
|
|
18
72
|
export type ItineraryItemCategory = "flight" | "stay" | "transfer" | "restaurant" | "activity" | "event" | "guide" | "rental" | "package";
|
|
19
73
|
export type ItineraryFulfillmentMode = "direct" | "assisted" | "advisory";
|
|
@@ -22,6 +76,9 @@ export interface ItineraryQuote {
|
|
|
22
76
|
base: number;
|
|
23
77
|
taxes: number;
|
|
24
78
|
trippeazeFee: number;
|
|
79
|
+
bufferAmount?: number;
|
|
80
|
+
estimated?: boolean;
|
|
81
|
+
estimateSource?: string;
|
|
25
82
|
total: number;
|
|
26
83
|
quotedAt: string;
|
|
27
84
|
expiresAt: string;
|
|
@@ -31,9 +88,12 @@ export interface ItineraryCandidate {
|
|
|
31
88
|
category: ItineraryItemCategory;
|
|
32
89
|
title: string;
|
|
33
90
|
description?: string;
|
|
91
|
+
relatedPick?: string;
|
|
34
92
|
imageUrl?: string;
|
|
35
93
|
location?: string;
|
|
36
94
|
publicPath?: string;
|
|
95
|
+
sourceUrl?: string;
|
|
96
|
+
sourceName?: string;
|
|
37
97
|
source: "trippeaze" | "external";
|
|
38
98
|
fulfillmentMode: ItineraryFulfillmentMode;
|
|
39
99
|
score: number;
|
|
@@ -56,12 +116,64 @@ export interface ItineraryItem {
|
|
|
56
116
|
userLocked: boolean;
|
|
57
117
|
requiredForCheckout: boolean;
|
|
58
118
|
}
|
|
119
|
+
/** Planning suggestions booked directly with the source, never checkout items. */
|
|
120
|
+
export interface ItineraryRecommendation {
|
|
121
|
+
recommendationId: string;
|
|
122
|
+
day: number;
|
|
123
|
+
category: ItineraryItemCategory;
|
|
124
|
+
title: string;
|
|
125
|
+
description?: string;
|
|
126
|
+
location?: string;
|
|
127
|
+
sourceUrl: string;
|
|
128
|
+
sourceName: string;
|
|
129
|
+
linkKind: "listing" | "search";
|
|
130
|
+
price?: {
|
|
131
|
+
amount: number;
|
|
132
|
+
currency: "INR";
|
|
133
|
+
basis: "per_person" | "per_night" | "total";
|
|
134
|
+
kind: "quoted" | "estimated";
|
|
135
|
+
source: string;
|
|
136
|
+
expiresAt?: string;
|
|
137
|
+
};
|
|
138
|
+
priceStatus: "quoted" | "estimated" | "unavailable";
|
|
139
|
+
alternatives?: ItineraryRecommendation[];
|
|
140
|
+
}
|
|
59
141
|
export interface ItineraryV3 extends ItinerarySummary {
|
|
60
142
|
schemaVersion: 3;
|
|
61
143
|
revision: number;
|
|
62
144
|
origin?: string;
|
|
145
|
+
route?: ItineraryRouteInput;
|
|
63
146
|
status: "draft" | "saved" | "booking_in_progress" | "booked";
|
|
147
|
+
days?: Array<{
|
|
148
|
+
day: number;
|
|
149
|
+
date?: string;
|
|
150
|
+
title?: string;
|
|
151
|
+
location?: string;
|
|
152
|
+
activities?: Array<{
|
|
153
|
+
time?: string;
|
|
154
|
+
title?: string;
|
|
155
|
+
description?: string;
|
|
156
|
+
relatedPick?: string;
|
|
157
|
+
category?: string;
|
|
158
|
+
location?: string;
|
|
159
|
+
}>;
|
|
160
|
+
transport?: {
|
|
161
|
+
mode?: string;
|
|
162
|
+
from?: string;
|
|
163
|
+
to?: string;
|
|
164
|
+
notes?: string;
|
|
165
|
+
};
|
|
166
|
+
accommodation?: {
|
|
167
|
+
name?: string;
|
|
168
|
+
location?: string;
|
|
169
|
+
};
|
|
170
|
+
}>;
|
|
64
171
|
items: ItineraryItem[];
|
|
172
|
+
recommendations?: ItineraryRecommendation[];
|
|
173
|
+
refinementHistory?: Array<{
|
|
174
|
+
message: string;
|
|
175
|
+
createdAt: string;
|
|
176
|
+
}>;
|
|
65
177
|
activeOrderId?: string;
|
|
66
178
|
}
|
|
67
179
|
export type ItineraryOrderStatus = "awaiting_payment" | "fulfillment_in_progress" | "partially_confirmed" | "confirmed" | "needs_attention" | "cancellation_pending" | "cancelled" | "refund_pending" | "refunded";
|
|
@@ -78,6 +190,9 @@ export interface ItineraryOrderItem {
|
|
|
78
190
|
supplierAmount: number;
|
|
79
191
|
taxes: number;
|
|
80
192
|
serviceFee: number;
|
|
193
|
+
bufferAmount?: number;
|
|
194
|
+
estimated?: boolean;
|
|
195
|
+
estimateSource?: string;
|
|
81
196
|
capturedAllocation: number;
|
|
82
197
|
finalAmount?: number;
|
|
83
198
|
};
|
|
@@ -106,14 +221,20 @@ export interface ItineraryReplacementResult extends ItineraryOrder {
|
|
|
106
221
|
export interface AssistedFulfillmentItem {
|
|
107
222
|
_id: string;
|
|
108
223
|
orderId: string;
|
|
224
|
+
itineraryId?: string;
|
|
109
225
|
title: string;
|
|
110
226
|
category: string;
|
|
111
227
|
supplierSource?: string;
|
|
112
228
|
supplierReference?: string;
|
|
229
|
+
pricingSource?: string;
|
|
230
|
+
pricingConfidence?: number;
|
|
231
|
+
confidence?: number;
|
|
113
232
|
fulfillmentMode: "assisted" | "direct";
|
|
114
233
|
status: string;
|
|
115
234
|
fulfillmentDeadline?: string;
|
|
116
235
|
assignedStaffId?: string;
|
|
236
|
+
scheduledFor?: string;
|
|
237
|
+
startTime?: string;
|
|
117
238
|
travellerRequirements?: {
|
|
118
239
|
numberOfPeople?: number;
|
|
119
240
|
contactDetails?: {
|
|
@@ -126,6 +247,9 @@ export interface AssistedFulfillmentItem {
|
|
|
126
247
|
supplierAmount: number;
|
|
127
248
|
taxes: number;
|
|
128
249
|
serviceFee: number;
|
|
250
|
+
bufferAmount?: number;
|
|
251
|
+
estimated?: boolean;
|
|
252
|
+
estimateSource?: string;
|
|
129
253
|
capturedAllocation: number;
|
|
130
254
|
finalAmount?: number;
|
|
131
255
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itinerary.d.ts","sourceRoot":"","sources":["../../../src/lib/models/itinerary.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"itinerary.d.ts","sourceRoot":"","sources":["../../../src/lib/models/itinerary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ItineraryItem, ItineraryRecommendation, ItineraryV3 } from "../models/itinerary";
|
|
2
|
+
type ItineraryDay = NonNullable<ItineraryV3["days"]>[number];
|
|
3
|
+
export declare function placeDayBookings(day: ItineraryDay, items: readonly ItineraryItem[], city: string): {
|
|
4
|
+
activityItems: Map<number, ItineraryItem[]>;
|
|
5
|
+
accommodationItems: ItineraryItem[];
|
|
6
|
+
logisticsItems: ItineraryItem[];
|
|
7
|
+
fallbackGroups: {
|
|
8
|
+
items: ItineraryItem[];
|
|
9
|
+
key: string;
|
|
10
|
+
title: string;
|
|
11
|
+
}[];
|
|
12
|
+
};
|
|
13
|
+
export declare function placeDayRecommendations(day: ItineraryDay, recommendations: readonly ItineraryRecommendation[], city: string): {
|
|
14
|
+
activityItems: Map<number, ItineraryRecommendation[]>;
|
|
15
|
+
accommodationItems: ItineraryRecommendation[];
|
|
16
|
+
logisticsItems: ItineraryRecommendation[];
|
|
17
|
+
fallbackGroups: {
|
|
18
|
+
items: ItineraryRecommendation[];
|
|
19
|
+
key: string;
|
|
20
|
+
title: string;
|
|
21
|
+
}[];
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=itineraryPlacement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"itineraryPlacement.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/itineraryPlacement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE/F,KAAK,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAwH7D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM;;;;;;;;;EAEhG;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,uBAAuB,EAAE,EAAE,IAAI,EAAE,MAAM;;;;;;;;;EAE3H"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
const logisticsCategories = new Set(["flight", "transfer", "rental", "package"]);
|
|
2
|
+
function normalize(value) {
|
|
3
|
+
return (value || "").normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
|
|
4
|
+
}
|
|
5
|
+
function startTime(value) {
|
|
6
|
+
const match = /^\s*([01]?\d|2[0-3]):([0-5]\d)\b/.exec(value || "");
|
|
7
|
+
return match?.[1] && match[2] ? `${match[1].padStart(2, "0")}:${match[2]}` : "";
|
|
8
|
+
}
|
|
9
|
+
function compatible(activity, category) {
|
|
10
|
+
if (!activity.category)
|
|
11
|
+
return true; // Older saved narratives have no category.
|
|
12
|
+
const categories = {
|
|
13
|
+
stay: ["logistics", "stay", "accommodation"],
|
|
14
|
+
restaurant: ["dining", "food", "restaurant"],
|
|
15
|
+
activity: ["adventure", "experience", "activity", "sightseeing", "attraction"],
|
|
16
|
+
event: ["experience", "activity", "event"],
|
|
17
|
+
guide: ["sightseeing", "attraction", "adventure", "experience", "activity", "guide"],
|
|
18
|
+
};
|
|
19
|
+
return categories[category]?.includes(activity.category) || false;
|
|
20
|
+
}
|
|
21
|
+
function matchesVenue(activity, item, city) {
|
|
22
|
+
const candidateName = normalize(item.title);
|
|
23
|
+
if (!candidateName || !compatible(activity, item.category))
|
|
24
|
+
return false;
|
|
25
|
+
const title = normalize(activity.title);
|
|
26
|
+
const withoutPrefix = item.category === "stay"
|
|
27
|
+
? title.replace(/^(?:accommodation )?check in(?: at| into)?\s+/, "")
|
|
28
|
+
: item.category === "restaurant"
|
|
29
|
+
? title.replace(/^(?:breakfast|brunch|lunch|dinner|dining)(?: at)?\s+/, "")
|
|
30
|
+
: title;
|
|
31
|
+
const unnamedStop = !title || title === normalize(city) || isGeneric(activity, item.category, city);
|
|
32
|
+
return candidateName === title || candidateName === withoutPrefix || (unnamedStop && candidateName === normalize(activity.location));
|
|
33
|
+
}
|
|
34
|
+
function isGeneric(activity, category, city) {
|
|
35
|
+
const title = normalize(activity.title);
|
|
36
|
+
const place = normalize(city);
|
|
37
|
+
const labels = category === "stay"
|
|
38
|
+
? ["accommodation", "accommodation check in", "hotel check in", "check in", "settle in"]
|
|
39
|
+
: category === "restaurant"
|
|
40
|
+
? ["breakfast", "brunch", "lunch", "dinner", "dining"]
|
|
41
|
+
: category === "event"
|
|
42
|
+
? ["event", "local event", "evening event"]
|
|
43
|
+
: category === "guide"
|
|
44
|
+
? ["guided walk", "guided tour", "sightseeing"]
|
|
45
|
+
: ["activity", "local activity", "adventure activity", "local experience"];
|
|
46
|
+
return labels.some((label) => title === label || (place && title === `${label} in ${place}`))
|
|
47
|
+
|| (category === "stay" && ["check in at your hotel", "check in at your stay", "check in at accommodation"].includes(title));
|
|
48
|
+
}
|
|
49
|
+
/** Presentation only: every supplied booking stays intact and is placed once.
|
|
50
|
+
* A matching clock alone never links two different named venues.
|
|
51
|
+
*/
|
|
52
|
+
function placeDayEntries(day, items, city) {
|
|
53
|
+
const activities = day.activities || [];
|
|
54
|
+
const activityItems = new Map();
|
|
55
|
+
const accommodationItems = [];
|
|
56
|
+
const logisticsItems = [];
|
|
57
|
+
const unmatched = [];
|
|
58
|
+
const hasCheckIn = activities.some((activity) => compatible(activity, "stay")
|
|
59
|
+
&& /accommodation|check.?in|hotel|stay/i.test(activity.title || ""));
|
|
60
|
+
const stayCount = items.filter((item) => item.category === "stay").length;
|
|
61
|
+
for (const item of items) {
|
|
62
|
+
if (logisticsCategories.has(item.category)) {
|
|
63
|
+
logisticsItems.push(item);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const exact = activities.flatMap((activity, index) => matchesVenue(activity, item, city) ? [index] : []);
|
|
67
|
+
const timedExact = exact.filter((index) => startTime(activities[index]?.time) && startTime(activities[index]?.time) === startTime(item.startTime));
|
|
68
|
+
let target = exact.length === 1 ? exact[0] : timedExact.length === 1 ? timedExact[0] : undefined;
|
|
69
|
+
if (target === undefined && exact.length === 0) {
|
|
70
|
+
const generic = activities.flatMap((activity, index) => {
|
|
71
|
+
if (!activity.category || !compatible(activity, item.category) || !isGeneric(activity, item.category, city))
|
|
72
|
+
return [];
|
|
73
|
+
if (item.category === "stay")
|
|
74
|
+
return stayCount === 1 ? [index] : [];
|
|
75
|
+
if (!item.startTime)
|
|
76
|
+
return items.filter((other) => other.category === item.category).length === 1 ? [index] : [];
|
|
77
|
+
if (!startTime(item.startTime) || startTime(activity.time) !== startTime(item.startTime))
|
|
78
|
+
return [];
|
|
79
|
+
const competing = items.filter((other) => other.category === item.category && startTime(other.startTime) === startTime(item.startTime));
|
|
80
|
+
return competing.length === 1 ? [index] : [];
|
|
81
|
+
});
|
|
82
|
+
if (generic.length === 1)
|
|
83
|
+
target = generic[0];
|
|
84
|
+
}
|
|
85
|
+
if (target !== undefined) {
|
|
86
|
+
activityItems.set(target, [...(activityItems.get(target) || []), item]);
|
|
87
|
+
}
|
|
88
|
+
else if (item.category === "stay" && !hasCheckIn && day.accommodation?.name
|
|
89
|
+
&& ((normalize(item.title) && normalize(day.accommodation.name) === normalize(item.title))
|
|
90
|
+
|| (stayCount === 1 && isGeneric({ title: day.accommodation.name }, "stay", city)))) {
|
|
91
|
+
accommodationItems.push(item);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
unmatched.push(item);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const fallbackGroups = [
|
|
98
|
+
{ key: "accommodation", title: city ? `Accommodation in ${city}` : "Accommodation", categories: ["stay"] },
|
|
99
|
+
{ key: "dining", title: "Dining", categories: ["restaurant"] },
|
|
100
|
+
{ key: "activities", title: "Activities and events", categories: ["activity", "event", "guide"] },
|
|
101
|
+
].map(({ key, title, categories }) => ({ key, title, items: unmatched.filter((item) => categories.includes(item.category)) }))
|
|
102
|
+
.filter((group) => group.items.length);
|
|
103
|
+
return { activityItems, accommodationItems, logisticsItems, fallbackGroups };
|
|
104
|
+
}
|
|
105
|
+
function unwrapPlacement(placement) {
|
|
106
|
+
return {
|
|
107
|
+
activityItems: new Map(Array.from(placement.activityItems.entries()).map(([index, entries]) => [index, entries.map((entry) => entry.value)])),
|
|
108
|
+
accommodationItems: placement.accommodationItems.map((entry) => entry.value),
|
|
109
|
+
logisticsItems: placement.logisticsItems.map((entry) => entry.value),
|
|
110
|
+
fallbackGroups: placement.fallbackGroups.map((group) => ({ ...group, items: group.items.map((entry) => entry.value) })),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export function placeDayBookings(day, items, city) {
|
|
114
|
+
return unwrapPlacement(placeDayEntries(day, items.map((value) => ({ value, category: value.category, title: value.selectedCandidate?.title || "", startTime: value.startTime })), city));
|
|
115
|
+
}
|
|
116
|
+
export function placeDayRecommendations(day, recommendations, city) {
|
|
117
|
+
return unwrapPlacement(placeDayEntries(day, recommendations.map((value) => ({ value, category: value.category, title: value.title })), city));
|
|
118
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ItineraryRouteInput } from "../models/itinerary";
|
|
2
|
+
export declare function formatPlannerDate(date: Date | null): string;
|
|
3
|
+
export declare function getItineraryRouteSummary(route: ItineraryRouteInput): {
|
|
4
|
+
locations: string[];
|
|
5
|
+
timelineEnd: string;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=itineraryPlanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"itineraryPlanner.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/itineraryPlanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAM3D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB;;;EAUlE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function formatPlannerDate(date) {
|
|
2
|
+
if (!date)
|
|
3
|
+
return "";
|
|
4
|
+
const year = date.getFullYear();
|
|
5
|
+
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
6
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
7
|
+
return `${year}-${month}-${day}`;
|
|
8
|
+
}
|
|
9
|
+
export function getItineraryRouteSummary(route) {
|
|
10
|
+
const stops = [route.origin, ...route.destinations].filter(Boolean);
|
|
11
|
+
const lastDestination = route.destinations.at(-1) || route.origin;
|
|
12
|
+
if (route.return.mode === "origin") {
|
|
13
|
+
return { locations: [...stops, route.origin], timelineEnd: `Returns to ${route.origin}` };
|
|
14
|
+
}
|
|
15
|
+
if (route.return.mode === "different" && route.return.location) {
|
|
16
|
+
return { locations: [...stops, route.return.location], timelineEnd: `Ends in ${route.return.location}` };
|
|
17
|
+
}
|
|
18
|
+
return { locations: stops, timelineEnd: `Ends here in ${lastDestination}` };
|
|
19
|
+
}
|