@myrjfa/state 3.0.7 → 3.0.9

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.
Files changed (202) hide show
  1. package/dist/lib/actions/adminDashboard.d.ts.map +1 -1
  2. package/dist/lib/actions/adminDashboard.js +2 -1
  3. package/dist/lib/actions/adventure.d.ts.map +1 -1
  4. package/dist/lib/actions/adventure.js +3 -2
  5. package/dist/lib/actions/application.d.ts +5 -3
  6. package/dist/lib/actions/application.d.ts.map +1 -1
  7. package/dist/lib/actions/application.js +46 -2
  8. package/dist/lib/actions/auth.d.ts +18 -3
  9. package/dist/lib/actions/auth.d.ts.map +1 -1
  10. package/dist/lib/actions/auth.js +22 -0
  11. package/dist/lib/actions/blog.d.ts.map +1 -1
  12. package/dist/lib/actions/blog.js +4 -2
  13. package/dist/lib/actions/booking.d.ts +29 -1
  14. package/dist/lib/actions/booking.d.ts.map +1 -1
  15. package/dist/lib/actions/booking.js +186 -0
  16. package/dist/lib/actions/brand.d.ts +7 -0
  17. package/dist/lib/actions/brand.d.ts.map +1 -1
  18. package/dist/lib/actions/brand.js +4 -0
  19. package/dist/lib/actions/chat.d.ts +3 -0
  20. package/dist/lib/actions/chat.d.ts.map +1 -1
  21. package/dist/lib/actions/chat.js +40 -1
  22. package/dist/lib/actions/community.d.ts +5 -2
  23. package/dist/lib/actions/community.d.ts.map +1 -1
  24. package/dist/lib/actions/community.js +16 -4
  25. package/dist/lib/actions/companion.d.ts +27 -15
  26. package/dist/lib/actions/companion.d.ts.map +1 -1
  27. package/dist/lib/actions/companion.js +22 -15
  28. package/dist/lib/actions/companionUpload.d.ts +11 -0
  29. package/dist/lib/actions/companionUpload.d.ts.map +1 -0
  30. package/dist/lib/actions/companionUpload.js +14 -0
  31. package/dist/lib/actions/event.d.ts +1 -1
  32. package/dist/lib/actions/event.d.ts.map +1 -1
  33. package/dist/lib/actions/event.js +8 -4
  34. package/dist/lib/actions/fetcher.d.ts +9 -3
  35. package/dist/lib/actions/fetcher.d.ts.map +1 -1
  36. package/dist/lib/actions/fetcher.js +60 -15
  37. package/dist/lib/actions/guide.d.ts.map +1 -1
  38. package/dist/lib/actions/guide.js +4 -2
  39. package/dist/lib/actions/homeBanner.d.ts +8 -0
  40. package/dist/lib/actions/homeBanner.d.ts.map +1 -0
  41. package/dist/lib/actions/homeBanner.js +33 -0
  42. package/dist/lib/actions/hostDashboard.d.ts +1 -11
  43. package/dist/lib/actions/hostDashboard.d.ts.map +1 -1
  44. package/dist/lib/actions/hostDashboard.js +1 -146
  45. package/dist/lib/actions/itinerary.d.ts +1 -1
  46. package/dist/lib/actions/itinerary.d.ts.map +1 -1
  47. package/dist/lib/actions/itinerary.js +2 -2
  48. package/dist/lib/actions/listingInterest.d.ts +2 -5
  49. package/dist/lib/actions/listingInterest.d.ts.map +1 -1
  50. package/dist/lib/actions/listingInterest.js +18 -3
  51. package/dist/lib/actions/location.d.ts +4 -0
  52. package/dist/lib/actions/location.d.ts.map +1 -1
  53. package/dist/lib/actions/location.js +10 -6
  54. package/dist/lib/actions/marketplaceContract.d.ts.map +1 -1
  55. package/dist/lib/actions/marketplaceContract.js +3 -2
  56. package/dist/lib/actions/nativeTransport.d.ts +25 -0
  57. package/dist/lib/actions/nativeTransport.d.ts.map +1 -0
  58. package/dist/lib/actions/nativeTransport.js +50 -0
  59. package/dist/lib/actions/notification.d.ts +54 -2
  60. package/dist/lib/actions/notification.d.ts.map +1 -1
  61. package/dist/lib/actions/notification.js +13 -1
  62. package/dist/lib/actions/opportunity.d.ts.map +1 -1
  63. package/dist/lib/actions/opportunity.js +3 -2
  64. package/dist/lib/actions/package.d.ts +5 -3
  65. package/dist/lib/actions/package.d.ts.map +1 -1
  66. package/dist/lib/actions/package.js +15 -9
  67. package/dist/lib/actions/portfolio.d.ts.map +1 -1
  68. package/dist/lib/actions/portfolio.js +2 -1
  69. package/dist/lib/actions/profile.d.ts +5 -0
  70. package/dist/lib/actions/profile.d.ts.map +1 -1
  71. package/dist/lib/actions/profile.js +15 -2
  72. package/dist/lib/actions/rental.d.ts.map +1 -1
  73. package/dist/lib/actions/rental.js +3 -2
  74. package/dist/lib/actions/review.d.ts +7 -0
  75. package/dist/lib/actions/review.d.ts.map +1 -1
  76. package/dist/lib/actions/review.js +65 -31
  77. package/dist/lib/actions/room.d.ts +0 -4
  78. package/dist/lib/actions/room.d.ts.map +1 -1
  79. package/dist/lib/actions/room.js +3 -2
  80. package/dist/lib/actions/serverActions.native.d.ts +4 -0
  81. package/dist/lib/actions/serverActions.native.d.ts.map +1 -0
  82. package/dist/lib/actions/serverActions.native.js +5 -0
  83. package/dist/lib/actions/socialAutomation.d.ts.map +1 -1
  84. package/dist/lib/actions/socialAutomation.js +3 -2
  85. package/dist/lib/actions/socket.d.ts.map +1 -1
  86. package/dist/lib/actions/socket.js +6 -5
  87. package/dist/lib/actions/stay.d.ts +14 -1
  88. package/dist/lib/actions/stay.d.ts.map +1 -1
  89. package/dist/lib/actions/stay.js +32 -4
  90. package/dist/lib/actions/store.d.ts +1 -0
  91. package/dist/lib/actions/store.d.ts.map +1 -1
  92. package/dist/lib/actions/store.js +9 -0
  93. package/dist/lib/actions/user.d.ts +2 -0
  94. package/dist/lib/actions/user.d.ts.map +1 -1
  95. package/dist/lib/actions/user.js +5 -0
  96. package/dist/lib/companion/discoveryPrefill.d.ts +17 -0
  97. package/dist/lib/companion/discoveryPrefill.d.ts.map +1 -1
  98. package/dist/lib/companion/discoveryPrefill.js +20 -0
  99. package/dist/lib/context/ChatContext.d.ts.map +1 -1
  100. package/dist/lib/context/ChatContext.js +59 -51
  101. package/dist/lib/data/catalogueLocations.d.ts +3 -0
  102. package/dist/lib/data/catalogueLocations.d.ts.map +1 -0
  103. package/dist/lib/data/catalogueLocations.js +21 -0
  104. package/dist/lib/data/skills.d.ts +5 -0
  105. package/dist/lib/data/skills.d.ts.map +1 -0
  106. package/dist/lib/data/skills.js +97 -0
  107. package/dist/lib/forms/application.d.ts +4 -0
  108. package/dist/lib/forms/application.d.ts.map +1 -0
  109. package/dist/lib/forms/application.js +17 -0
  110. package/dist/lib/forms/packageEnquiry.d.ts +4 -0
  111. package/dist/lib/forms/packageEnquiry.d.ts.map +1 -0
  112. package/dist/lib/forms/packageEnquiry.js +12 -0
  113. package/dist/lib/forms/review.d.ts +6 -0
  114. package/dist/lib/forms/review.d.ts.map +1 -0
  115. package/dist/lib/forms/review.js +20 -0
  116. package/dist/lib/hooks/useSubmissionGuard.d.ts +2 -0
  117. package/dist/lib/hooks/useSubmissionGuard.d.ts.map +1 -0
  118. package/dist/lib/hooks/useSubmissionGuard.js +12 -0
  119. package/dist/lib/hooks/useUploadTasks.d.ts +7 -0
  120. package/dist/lib/hooks/useUploadTasks.d.ts.map +1 -0
  121. package/dist/lib/hooks/useUploadTasks.js +11 -0
  122. package/dist/lib/models/application.d.ts +21 -0
  123. package/dist/lib/models/application.d.ts.map +1 -1
  124. package/dist/lib/models/authorization.d.ts +1 -1
  125. package/dist/lib/models/authorization.d.ts.map +1 -1
  126. package/dist/lib/models/authorization.js +2 -0
  127. package/dist/lib/models/blog.d.ts +2 -2
  128. package/dist/lib/models/booking.d.ts +3 -0
  129. package/dist/lib/models/booking.d.ts.map +1 -1
  130. package/dist/lib/models/chat.d.ts +8 -0
  131. package/dist/lib/models/chat.d.ts.map +1 -1
  132. package/dist/lib/models/chat.js +10 -0
  133. package/dist/lib/models/community.d.ts +15 -0
  134. package/dist/lib/models/community.d.ts.map +1 -1
  135. package/dist/lib/models/community.js +2 -1
  136. package/dist/lib/models/companion.d.ts +46 -0
  137. package/dist/lib/models/companion.d.ts.map +1 -1
  138. package/dist/lib/models/discount.d.ts +20 -20
  139. package/dist/lib/models/enquiry.d.ts +13 -0
  140. package/dist/lib/models/enquiry.d.ts.map +1 -1
  141. package/dist/lib/models/homeBanner.d.ts +17 -0
  142. package/dist/lib/models/homeBanner.d.ts.map +1 -0
  143. package/dist/lib/models/homeBanner.js +1 -0
  144. package/dist/lib/models/interest.d.ts +42 -0
  145. package/dist/lib/models/interest.d.ts.map +1 -0
  146. package/dist/lib/models/interest.js +1 -0
  147. package/dist/lib/models/location.d.ts +1 -0
  148. package/dist/lib/models/location.d.ts.map +1 -1
  149. package/dist/lib/models/notifications.d.ts +30 -2
  150. package/dist/lib/models/notifications.d.ts.map +1 -1
  151. package/dist/lib/models/notifications.js +6 -0
  152. package/dist/lib/models/opportunities/freelance.d.ts +37 -4
  153. package/dist/lib/models/opportunities/freelance.d.ts.map +1 -1
  154. package/dist/lib/models/opportunities/internship.d.ts +37 -4
  155. package/dist/lib/models/opportunities/internship.d.ts.map +1 -1
  156. package/dist/lib/models/opportunities/job.d.ts +37 -4
  157. package/dist/lib/models/opportunities/job.d.ts.map +1 -1
  158. package/dist/lib/models/opportunities/opportunity.d.ts +38 -5
  159. package/dist/lib/models/opportunities/opportunity.d.ts.map +1 -1
  160. package/dist/lib/models/opportunities/opportunity.js +1 -1
  161. package/dist/lib/models/opportunities/volunteerJob.d.ts +37 -4
  162. package/dist/lib/models/opportunities/volunteerJob.d.ts.map +1 -1
  163. package/dist/lib/models/pricing.d.ts +2 -0
  164. package/dist/lib/models/pricing.d.ts.map +1 -1
  165. package/dist/lib/models/pricing.js +4 -0
  166. package/dist/lib/models/props.d.ts +4 -43
  167. package/dist/lib/models/props.d.ts.map +1 -1
  168. package/dist/lib/models/props.js +3 -121
  169. package/dist/lib/models/question.d.ts +14 -0
  170. package/dist/lib/models/question.d.ts.map +1 -0
  171. package/dist/lib/models/question.js +6 -0
  172. package/dist/lib/models/review.d.ts +13 -1
  173. package/dist/lib/models/review.d.ts.map +1 -1
  174. package/dist/lib/models/review.js +4 -0
  175. package/dist/lib/models/tile.d.ts +7 -1
  176. package/dist/lib/models/tile.d.ts.map +1 -1
  177. package/dist/lib/models/travelPackage.d.ts +37 -4
  178. package/dist/lib/models/travelPackage.d.ts.map +1 -1
  179. package/dist/lib/models/travelPackage.js +1 -1
  180. package/dist/lib/models/user.d.ts +25 -2
  181. package/dist/lib/models/user.d.ts.map +1 -1
  182. package/dist/lib/models/user.js +1 -0
  183. package/dist/lib/userAtom.d.ts +30 -5
  184. package/dist/lib/userAtom.d.ts.map +1 -1
  185. package/dist/lib/utils/entityTiles.d.ts.map +1 -1
  186. package/dist/lib/utils/entityTiles.js +3 -2
  187. package/dist/lib/utils/htmlDescription.d.ts +3 -0
  188. package/dist/lib/utils/htmlDescription.d.ts.map +1 -0
  189. package/dist/lib/utils/htmlDescription.js +7 -0
  190. package/dist/lib/utils/htmlDescription.native.d.ts +3 -0
  191. package/dist/lib/utils/htmlDescription.native.d.ts.map +1 -0
  192. package/dist/lib/utils/htmlDescription.native.js +7 -0
  193. package/dist/lib/utils/text.d.ts +5 -1
  194. package/dist/lib/utils/text.d.ts.map +1 -1
  195. package/dist/lib/utils/text.js +18 -6
  196. package/dist/lib/utils/uploadFile.d.ts +9 -0
  197. package/dist/lib/utils/uploadFile.d.ts.map +1 -0
  198. package/dist/lib/utils/uploadFile.js +9 -0
  199. package/dist/lib/utils/uploadTasks.d.ts +76 -0
  200. package/dist/lib/utils/uploadTasks.d.ts.map +1 -0
  201. package/dist/lib/utils/uploadTasks.js +102 -0
  202. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { getAccountType, getCookieHeader, getRole } from "./serverActions";
2
2
  import { normalizeRefreshFailureStatus } from "../authSessionPolicy";
3
+ import { acceptNativeSession, getNativeTransport, nativeSessionGeneration } from "./nativeTransport";
3
4
  // Custom API error class — do NOT import from next/dist internals
4
5
  class ApiError extends Error {
5
6
  constructor(statusCode, message, data) {
@@ -20,7 +21,7 @@ function uploadWithProgress(url, init, onProgress) {
20
21
  }
21
22
  const request = new XMLHttpRequest();
22
23
  request.open(init.method || 'POST', url);
23
- request.withCredentials = true;
24
+ request.withCredentials = init.credentials === 'include';
24
25
  new Headers(init.headers).forEach((value, key) => request.setRequestHeader(key, value));
25
26
  const abort = () => request.abort();
26
27
  const cleanup = () => {
@@ -50,7 +51,7 @@ function uploadWithProgress(url, init, onProgress) {
50
51
  * Survives browser sessions (unlike cookies which can expire/be cleared).
51
52
  * Generated once per browser using crypto.randomUUID().
52
53
  */
53
- function getOrCreateDeviceId() {
54
+ export function getOrCreateDeviceId() {
54
55
  if (typeof window === 'undefined')
55
56
  return null; // SSR guard
56
57
  try {
@@ -67,22 +68,33 @@ function getOrCreateDeviceId() {
67
68
  }
68
69
  async function customFetch(input, method, body, options = {}) {
69
70
  const { includeAuth = false, retry = true, signal, keepalive } = options;
70
- const url = `${baseURL}${input}`;
71
+ const native = getNativeTransport();
72
+ const nativeEpoch = nativeSessionGeneration();
73
+ if (!native && !baseURL)
74
+ throw new ApiError(503, 'API configuration is missing');
75
+ const url = `${native?.apiUrl.replace(/\/$/, '') ?? baseURL}${input}`;
71
76
  const isFormData = typeof FormData !== 'undefined' && body instanceof FormData;
72
77
  let headers = isFormData
73
78
  ? { Accept: 'application/json' }
74
79
  : { 'Content-Type': 'application/json', Accept: 'application/json' };
75
80
  // #2: Attach stable device ID so backend can correctly identify the same browser
76
- const deviceId = getOrCreateDeviceId();
81
+ const deviceId = native?.deviceId ?? getOrCreateDeviceId();
77
82
  if (deviceId) {
78
83
  headers['X-Device-Id'] = deviceId;
79
84
  }
80
85
  headers = { ...headers, ...(options.headers || {}) };
86
+ if (native) {
87
+ const token = includeAuth ? native.accessToken() : null;
88
+ if (token || /^\/users\/(login|verify-otp|refresh-token)(?:$|\?)/.test(input))
89
+ headers = { ...headers, 'X-Trippeaze-Client': 'native' };
90
+ if (token)
91
+ headers = { ...headers, Authorization: `Bearer ${token}` };
92
+ }
81
93
  // Browsers attach HTTP-only cookies through credentials. Calling a Next
82
94
  // server action here creates an avoidable production-only RSC round trip
83
95
  // and can block the actual REST request. Explicit Cookie forwarding is
84
96
  // needed only for fetches executing on the server.
85
- if (includeAuth && typeof window === 'undefined') {
97
+ if (!native && includeAuth && typeof window === 'undefined') {
86
98
  try {
87
99
  const cookieHeader = await getCookieHeader();
88
100
  headers = { ...headers, Cookie: cookieHeader };
@@ -97,17 +109,22 @@ async function customFetch(input, method, body, options = {}) {
97
109
  }
98
110
  const init = {
99
111
  method,
100
- credentials: includeAuth ? 'include' : 'omit',
112
+ credentials: !native && includeAuth ? 'include' : 'omit',
101
113
  headers,
102
114
  signal,
103
115
  keepalive,
104
116
  ...(body ? { body: isFormData ? body : JSON.stringify(body) } : {}),
105
117
  };
106
- const response = options.onUploadProgress && isFormData && includeAuth && typeof window !== 'undefined'
118
+ const response = options.onUploadProgress && isFormData && includeAuth && (native || typeof window !== 'undefined')
107
119
  ? await uploadWithProgress(url, init, options.onUploadProgress)
108
120
  : await fetch(url, init);
121
+ if (native && (getNativeTransport() !== native || nativeEpoch !== nativeSessionGeneration()))
122
+ throw new ApiError(401, 'The account changed. Return to your draft before continuing.');
109
123
  if (response.ok) {
110
- return response.status !== 204 ? (await response.json()) : {};
124
+ const result = response.status !== 204 ? (await response.json()) : {};
125
+ if (native && (getNativeTransport() !== native || nativeEpoch !== nativeSessionGeneration()))
126
+ throw new ApiError(401, 'The account changed. Return to your draft before continuing.');
127
+ return result;
111
128
  }
112
129
  // Token refresh logic on 401 (only for authenticated requests)
113
130
  if (response.status === 401 && retry && includeAuth && !input.includes('/login')) {
@@ -124,12 +141,40 @@ async function customFetch(input, method, body, options = {}) {
124
141
  error: typeof error === 'string' ? error : 'Unknown error',
125
142
  };
126
143
  }
127
- throw new ApiError(errorBody.statusCode, errorBody.error, errorBody.data);
144
+ throw new ApiError(errorBody.statusCode || response.status, errorBody.error || errorBody.message || `Request failed (${response.status})`, errorBody.data);
128
145
  }
129
146
  // Single in-flight refresh promise — prevents concurrent 401s from firing multiple refresh calls
130
147
  let refreshPromise = null;
131
148
  // Token refresh function — internal only, not exported
132
149
  async function refreshToken(input, method, body, options = {}) {
150
+ const native = getNativeTransport();
151
+ if (native) {
152
+ const generation = nativeSessionGeneration();
153
+ if (!refreshPromise)
154
+ refreshPromise = (async () => {
155
+ const refresh = await native.refreshToken();
156
+ if (!refresh)
157
+ throw new ApiError(401, 'Please sign in again');
158
+ const response = await fetch(`${native.apiUrl.replace(/\/$/, '')}/users/refresh-token`, {
159
+ method: 'POST', credentials: 'omit',
160
+ headers: { 'Content-Type': 'application/json', 'X-Device-Id': native.deviceId, 'X-Trippeaze-Client': 'native' },
161
+ body: JSON.stringify({ refreshToken: refresh }),
162
+ });
163
+ const payload = await response.json();
164
+ if (generation !== nativeSessionGeneration())
165
+ throw new ApiError(401, 'Session changed');
166
+ if (!response.ok) {
167
+ if ([400, 401, 403, 422].includes(response.status))
168
+ await native.clearSession();
169
+ throw new ApiError(normalizeRefreshFailureStatus(response.status), payload.error || 'Session expired');
170
+ }
171
+ await acceptNativeSession(payload.data?.session, generation);
172
+ })().finally(() => { refreshPromise = null; });
173
+ await refreshPromise;
174
+ if (generation !== nativeSessionGeneration())
175
+ throw new ApiError(401, 'Session changed');
176
+ return customFetch(input, method, body, { ...options, includeAuth: true, retry: false });
177
+ }
133
178
  let refreshEndpoint = "/auth/session/refresh";
134
179
  if (typeof window === "undefined") {
135
180
  const accountType = await getAccountType();
@@ -187,17 +232,17 @@ async function refreshToken(input, method, body, options = {}) {
187
232
  }
188
233
  }
189
234
  // ✅ Server-safe exported functions
190
- export async function get(url, includeAuth = true) {
191
- return customFetch(url, 'GET', undefined, { includeAuth });
235
+ export async function get(url, includeAuth = true, options = {}) {
236
+ return customFetch(url, 'GET', undefined, { includeAuth, ...options });
192
237
  }
193
238
  export async function post(url, body, includeAuth = true, options = {}) {
194
239
  return customFetch(url, 'POST', body, { includeAuth, ...options });
195
240
  }
196
- export async function put(url, body) {
197
- return customFetch(url, 'PUT', body, { includeAuth: true });
241
+ export async function put(url, body, options = {}) {
242
+ return customFetch(url, 'PUT', body, { includeAuth: true, ...options });
198
243
  }
199
- export async function patch(url, body) {
200
- return customFetch(url, 'PATCH', body, { includeAuth: true });
244
+ export async function patch(url, body, options = {}) {
245
+ return customFetch(url, 'PATCH', body, { includeAuth: true, ...options });
201
246
  }
202
247
  export async function del(url, body, includeAuth = true, options = {}) {
203
248
  return customFetch(url, 'DELETE', body, { includeAuth, ...options });
@@ -1 +1 @@
1
- {"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/guide.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,wBAAsB,aAAa,CACjC,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAgBD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAUD;AAID,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAcD;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAWD;AAED,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAWjE;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOjE;AAID,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAQD;AAGD,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjE;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjE"}
1
+ {"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/guide.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,wBAAsB,aAAa,CACjC,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAgBD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAUD;AAID,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAcD;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAUD;AAED,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjE;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOjE;AAID,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAQD;AAGD,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjE;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjE"}
@@ -1,3 +1,4 @@
1
+ import { runUploadTask } from "../utils/uploadTasks";
1
2
  import { del, get, patch, post } from "./fetcher";
2
3
  import { calculatePricingStrategyDisplayUnitPrice, getPrimaryPricingStrategy, getPricingCurrency } from "../models/pricing";
3
4
  // ─── Public ───────────────────────────────────────────────────────────────────
@@ -47,7 +48,7 @@ export async function guidesByHost() {
47
48
  }
48
49
  export async function createGuide(formData) {
49
50
  try {
50
- const data = await post(`/guides/create`, formData);
51
+ const data = await runUploadTask({ title: 'Guide listing', retrySafe: false, href: "/dashboard/host/guides", body: formData, operation: ({ progress }) => post(`/guides/create`, formData, true, { onUploadProgress: progress }) });
51
52
  return { success: true, slug: data.data, message: data.message };
52
53
  }
53
54
  catch (error) {
@@ -57,7 +58,7 @@ export async function createGuide(formData) {
57
58
  }
58
59
  export async function editGuide(formData, slug) {
59
60
  try {
60
- const data = await patch(`/guides/update/${slug}`, formData);
61
+ const data = await runUploadTask({ title: 'Guide listing', retrySafe: false, href: "/dashboard/host/guides", body: formData, operation: ({ progress }) => patch(`/guides/update/${slug}`, formData, { onUploadProgress: progress }) });
61
62
  return { success: true, message: data.message };
62
63
  }
63
64
  catch (error) {
@@ -125,6 +126,7 @@ function guideToTile(guide) {
125
126
  price: calculatePricingStrategyDisplayUnitPrice(getPrimaryPricingStrategy(guide)),
126
127
  currency: getPricingCurrency(guide),
127
128
  tileType: "guides",
129
+ specialties: guide.specialties,
128
130
  host: guide.host,
129
131
  };
130
132
  }
@@ -0,0 +1,8 @@
1
+ import type { HomeBanner, HomeBannerInput } from "../models/homeBanner";
2
+ export declare function getPublicHomeBanners(): Promise<HomeBanner[]>;
3
+ export declare function getStaffHomeBanners(): Promise<HomeBanner[]>;
4
+ export declare function createHomeBanner(input: HomeBannerInput): Promise<HomeBanner>;
5
+ export declare function updateHomeBanner(id: string, input: HomeBannerInput): Promise<HomeBanner>;
6
+ export declare function reorderHomeBanners(ids: string[]): Promise<void>;
7
+ export declare function deleteHomeBanner(id: string): Promise<void>;
8
+ //# sourceMappingURL=homeBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homeBanner.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/homeBanner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIxE,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAGlE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAGjE;AAYD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAGlF;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAG9F;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE"}
@@ -0,0 +1,33 @@
1
+ import { del, get, patch, post, put } from "./fetcher";
2
+ export async function getPublicHomeBanners() {
3
+ const response = await get("/home-banners", false);
4
+ return response.data;
5
+ }
6
+ export async function getStaffHomeBanners() {
7
+ const response = await get("/home-banners/admin");
8
+ return response.data;
9
+ }
10
+ function form(input) {
11
+ const body = new FormData();
12
+ body.set("description", input.description);
13
+ body.set("buttonLabel", input.buttonLabel || "");
14
+ body.set("href", input.href);
15
+ body.set("published", String(Boolean(input.published)));
16
+ if (input.photo)
17
+ body.set("photo", input.photo);
18
+ return body;
19
+ }
20
+ export async function createHomeBanner(input) {
21
+ const response = await post("/home-banners/admin", form(input));
22
+ return response.data;
23
+ }
24
+ export async function updateHomeBanner(id, input) {
25
+ const response = await patch(`/home-banners/admin/${encodeURIComponent(id)}`, form(input));
26
+ return response.data;
27
+ }
28
+ export async function reorderHomeBanners(ids) {
29
+ await put("/home-banners/admin/order", { ids });
30
+ }
31
+ export async function deleteHomeBanner(id) {
32
+ await del(`/home-banners/admin/${encodeURIComponent(id)}`);
33
+ }
@@ -173,17 +173,7 @@ export declare function getHostBookingDetail(id: string, type: string): Promise<
173
173
  error: any;
174
174
  type?: undefined;
175
175
  }>;
176
- export declare function getMyBookings(): Promise<{
177
- success: boolean;
178
- bookings: any[];
179
- packageEnquiries: any[];
180
- error?: undefined;
181
- } | {
182
- success: boolean;
183
- bookings: never[];
184
- packageEnquiries: never[];
185
- error: any;
186
- }>;
176
+ export { getMyBookings } from "./booking";
187
177
  export declare function verifyBookingCodeHost(code: string): Promise<any>;
188
178
  export declare function manageAdventureSlots(id: string, slots: any[]): Promise<{
189
179
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"hostDashboard.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/hostDashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hostDashboard.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/hostDashboard.ts"],"names":[],"mappings":"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"}
@@ -3,112 +3,6 @@ export async function updateHostBankDetails(bankDetails) {
3
3
  const response = await patch("/hosts/update", { bankDetails });
4
4
  return response.data;
5
5
  }
6
- function resolvePaymentStatus(record) {
7
- if (record.paymentStatus === "paid" || record.paymentStatus === "refunded" || record.paymentStatus === "failed") {
8
- return record.paymentStatus;
9
- }
10
- if (record.paymentId && record.paymentStatus !== "failed") {
11
- return "paid";
12
- }
13
- if (["confirmed", "completed", "attended"].includes(record.status)) {
14
- return "paid";
15
- }
16
- return "pending";
17
- }
18
- function normalizeGenericBooking(booking) {
19
- const rawHostId = booking.hostId || booking.operatorId || booking.entityId?.host || booking.entityId?.hostId || booking.host;
20
- const hostId = typeof rawHostId === "object" ? (rawHostId?._id || "") : (rawHostId || "");
21
- return {
22
- ...booking,
23
- hostId: hostId || booking.hostId,
24
- paymentStatus: resolvePaymentStatus(booking),
25
- };
26
- }
27
- function normalizeStayBooking(booking) {
28
- const rawHostId = booking.hostId || booking.stayId?.host || booking.stayId?.hostId || booking.entityId?.host || booking.host;
29
- const hostId = typeof rawHostId === "object" ? (rawHostId?._id || "") : (rawHostId || "");
30
- return {
31
- ...booking,
32
- hostId: hostId || booking.hostId,
33
- entityId: booking.entityId || booking.stayId,
34
- entityType: "Stay",
35
- startDate: booking.startDate || booking.checkIn,
36
- endDate: booking.endDate || booking.checkOut,
37
- numberOfPeople: booking.numberOfPeople || booking.guests || 1,
38
- totalPrice: booking.totalPrice || 0,
39
- currency: booking.currency || "INR",
40
- paymentStatus: resolvePaymentStatus(booking),
41
- bookingCode: booking.bookingCode,
42
- };
43
- }
44
- function normalizeEventBooking(booking) {
45
- const rawHostId = booking.hostId || booking.eventId?.host || booking.eventId?.hostId || booking.entityId?.host || booking.host;
46
- const hostId = typeof rawHostId === "object" ? (rawHostId?._id || "") : (rawHostId || "");
47
- return {
48
- ...booking,
49
- hostId: hostId || booking.hostId,
50
- entityId: booking.entityId || booking.eventId,
51
- entityType: "Event",
52
- startDate: booking.startDate || booking.eventDate,
53
- numberOfPeople: booking.numberOfPeople || booking.numberOfSeats || 1,
54
- totalPrice: booking.totalPrice || 0,
55
- currency: booking.currency || "INR",
56
- paymentStatus: resolvePaymentStatus(booking),
57
- bookingCode: booking.bookingCode,
58
- };
59
- }
60
- function normalizePackageEnquiry(enquiry) {
61
- const rawHostId = enquiry.operatorId || enquiry.hostId || enquiry.packageId?.host || enquiry.packageId?.hostId;
62
- const hostId = typeof rawHostId === "object" ? (rawHostId?._id || "") : (rawHostId || "");
63
- return {
64
- ...enquiry,
65
- hostId: hostId || enquiry.operatorId,
66
- operatorId: hostId || enquiry.operatorId,
67
- entityId: {
68
- _id: enquiry.packageId?._id || enquiry.packageId,
69
- title: enquiry.packageTitle,
70
- slug: enquiry.packageSlug,
71
- host: hostId || enquiry.operatorId,
72
- },
73
- entityType: "TravelPackage",
74
- bookingKind: "package_enquiry",
75
- entityLabel: "Package Enquiry",
76
- startDate: enquiry.createdAt,
77
- endDate: undefined,
78
- numberOfPeople: (Number(enquiry.males) || 0) + (Number(enquiry.females) || 0) || 1,
79
- totalPrice: enquiry.totalPrice || 0,
80
- currency: enquiry.currency || "INR",
81
- paymentStatus: "not_applicable",
82
- bookingCode: enquiry.bookingCode,
83
- status: enquiry.status === "denied" ? "cancelled" : enquiry.status,
84
- };
85
- }
86
- function dedupeBookings(bookings) {
87
- const seen = new Set();
88
- return bookings.filter((booking) => {
89
- const key = String(booking._id || "") || `${booking.entityType}:${booking.bookingCode || booking.startDate}`;
90
- if (seen.has(key))
91
- return false;
92
- seen.add(key);
93
- return true;
94
- });
95
- }
96
- function hideSupersededPackageEnquiries(bookings) {
97
- const bookedPackageIds = new Set(bookings
98
- .filter((booking) => booking.entityType === "TravelPackage" &&
99
- booking.bookingKind !== "package_enquiry")
100
- .map((booking) => {
101
- const packageId = booking.entityId?._id || booking.entityId;
102
- return String(packageId || "");
103
- })
104
- .filter(Boolean));
105
- return bookings.filter((booking) => {
106
- if (booking.bookingKind !== "package_enquiry")
107
- return true;
108
- const packageId = booking.entityId?._id || booking.packageId || booking.entityId;
109
- return !bookedPackageIds.has(String(packageId || ""));
110
- });
111
- }
112
6
  // ── Overview ──────────────────────────────────────────────────────────────────
113
7
  export async function getHostDashboardOverview() {
114
8
  try {
@@ -363,46 +257,7 @@ export async function getHostBookingDetail(id, type) {
363
257
  return { success: false, booking: null, error: error.message };
364
258
  }
365
259
  }
366
- export async function getMyBookings() {
367
- try {
368
- const [genericResult, stayResult, eventResult, packageResult] = await Promise.allSettled([
369
- get("/bookings/my"),
370
- get("/stays/bookings/me"),
371
- get("/events/bookings/me"),
372
- get("/enquiries/my"),
373
- ]);
374
- const genericBookings = genericResult.status === "fulfilled"
375
- ? (genericResult.value?.data || []).map((booking) => ({
376
- ...normalizeGenericBooking(booking),
377
- entityLabel: booking.entityType === "TravelPackage"
378
- ? "Package Booking"
379
- : booking.entityType,
380
- }))
381
- : [];
382
- const stayBookings = stayResult.status === "fulfilled"
383
- ? (stayResult.value?.data || []).map(normalizeStayBooking)
384
- : [];
385
- const eventBookings = eventResult.status === "fulfilled"
386
- ? (eventResult.value?.data || []).map(normalizeEventBooking)
387
- : [];
388
- const packageBookings = packageResult.status === "fulfilled"
389
- ? (packageResult.value?.data || []).map(normalizePackageEnquiry)
390
- : [];
391
- const combined = hideSupersededPackageEnquiries(dedupeBookings([
392
- ...genericBookings,
393
- ...stayBookings,
394
- ...eventBookings,
395
- ...packageBookings,
396
- ])).sort((a, b) => new Date(b.createdAt || b.startDate || 0).getTime() -
397
- new Date(a.createdAt || a.startDate || 0).getTime());
398
- const packageEnquiries = combined.filter((booking) => booking.bookingKind === "package_enquiry");
399
- const bookings = combined.filter((booking) => booking.bookingKind !== "package_enquiry");
400
- return { success: true, bookings, packageEnquiries };
401
- }
402
- catch (error) {
403
- return { success: false, bookings: [], packageEnquiries: [], error: error.message };
404
- }
405
- }
260
+ export { getMyBookings } from "./booking";
406
261
  export async function verifyBookingCodeHost(code) {
407
262
  try {
408
263
  const data = (await get(`/bookings/verify/${code}`));
@@ -17,7 +17,7 @@ export declare function getContextualDestinationSuggestions(route: ItineraryRout
17
17
  suggestions: ContextualDestinationSuggestion[];
18
18
  error?: string;
19
19
  }>;
20
- export declare function getItineraryById<T = any>(id: string): Promise<T>;
20
+ export declare function getItineraryById<T = any>(id: string, signal?: AbortSignal): Promise<T>;
21
21
  export declare function getMyItineraries(): Promise<{
22
22
  success: boolean;
23
23
  itineraries: ItinerarySummary[];
@@ -1 +1 @@
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"}
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,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAG5F;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"}
@@ -47,8 +47,8 @@ export async function getContextualDestinationSuggestions(route) {
47
47
  return { success: false, suggestions: [] };
48
48
  }
49
49
  }
50
- export async function getItineraryById(id) {
51
- const payload = await get(`/itineraries/${encodeURIComponent(id)}`, true);
50
+ export async function getItineraryById(id, signal) {
51
+ const payload = await get(`/itineraries/${encodeURIComponent(id)}`, true, { signal });
52
52
  return payload.data;
53
53
  }
54
54
  export async function getMyItineraries() {
@@ -1,6 +1,3 @@
1
- import type { Interest } from "../models/props";
2
- export declare function submitInterestRequest(data: Interest): Promise<{
3
- success: boolean;
4
- error?: string;
5
- }>;
1
+ import type { Interest, InterestResult } from "../models/interest";
2
+ export declare function submitInterestRequest(data: Interest): Promise<InterestResult>;
6
3
  //# sourceMappingURL=listingInterest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"listingInterest.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/listingInterest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAYhD,wBAAsB,qBAAqB,CACvC,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAO/C"}
1
+ {"version":3,"file":"listingInterest.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/listingInterest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAYnE,wBAAsB,qBAAqB,CACvC,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC,cAAc,CAAC,CAwBzB"}
@@ -9,10 +9,25 @@ const INTEREST_ENDPOINTS = {
9
9
  };
10
10
  export async function submitInterestRequest(data) {
11
11
  try {
12
- await post(INTEREST_ENDPOINTS[data.type] ?? "/interest", data);
13
- return { success: true };
12
+ const result = await post(INTEREST_ENDPOINTS[data.type] ?? "/interest", data);
13
+ const saved = result?.data;
14
+ if (!saved || typeof saved._id !== "string" ||
15
+ !/^[a-zA-Z0-9_-]{1,100}$/.test(saved._id) || saved.type !== data.type) {
16
+ return {
17
+ success: false,
18
+ outcome: "uncertain",
19
+ error: "The request outcome could not be confirmed. It may already have been received.",
20
+ };
21
+ }
22
+ return { success: true, receipt: { id: saved._id, type: data.type } };
14
23
  }
15
24
  catch (error) {
16
- return { success: false, error: error.message };
25
+ // The controller saves before sending its notification email. A 5xx or
26
+ // lost response cannot establish absence and must never invite replay.
27
+ return {
28
+ success: false,
29
+ error: error?.message || "Could not submit your request",
30
+ outcome: "uncertain",
31
+ };
17
32
  }
18
33
  }
@@ -31,6 +31,8 @@ export declare function fetchThreads(locationId: string, opts?: {
31
31
  }): Promise<{
32
32
  threads: ForumThread[];
33
33
  total: number;
34
+ success: boolean;
35
+ error?: string;
34
36
  }>;
35
37
  export declare function createThread(payload: {
36
38
  locationId: string;
@@ -48,6 +50,8 @@ export declare function createThread(payload: {
48
50
  export declare function fetchComments(threadId: string, page?: number): Promise<{
49
51
  comments: ForumComment[];
50
52
  total: number;
53
+ success: boolean;
54
+ error?: string;
51
55
  }>;
52
56
  export declare function fetchThread(threadId: string): Promise<{
53
57
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/location.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/location.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAM7E;AAID,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACvD,CAAC,CAOD;AAED,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/D,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzD,CAAC,CAOD;AAED,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAOrF;AAED,wBAAsB,eAAe,CACnC,CAAC,EAAE,MAAM,EACT,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3C,OAAO,CAAC;IAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CASjD;AAID,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,MAAM,EACV,IAAI,SAAI,GACP,OAAO,CAAC;IAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAO7D;AAID,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAetF;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOtE;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,SAAI,GACP,OAAO,CAAC;IAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CASxF;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOrE;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACzF,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOvE;AAED,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAO/C"}
@@ -64,10 +64,12 @@ export async function fetchThreads(locationId, opts = {}) {
64
64
  if (opts.category)
65
65
  params.set("category", opts.category);
66
66
  const data = await get(`/locations/${locationId}/threads?${params}`);
67
- return data.data ?? { threads: [], total: 0 };
67
+ if (!data.data || !Array.isArray(data.data.threads) || !Number.isFinite(data.data.total) || data.data.total < 0)
68
+ throw new Error("Discussions response was incomplete. Please retry.");
69
+ return { ...data.data, success: true };
68
70
  }
69
- catch {
70
- return { threads: [], total: 0 };
71
+ catch (error) {
72
+ return { threads: [], total: 0, success: false, error: error instanceof Error ? error.message : "Discussions could not load." };
71
73
  }
72
74
  }
73
75
  export async function createThread(payload) {
@@ -82,10 +84,12 @@ export async function createThread(payload) {
82
84
  export async function fetchComments(threadId, page = 1) {
83
85
  try {
84
86
  const data = await get(`/locations/threads/${threadId}/comments?page=${page}&limit=50`);
85
- return data.data ?? { comments: [], total: 0 };
87
+ if (!data.data || !Array.isArray(data.data.comments) || !Number.isFinite(data.data.total) || data.data.total < 0)
88
+ throw new Error("Replies response was incomplete. Please retry.");
89
+ return { ...data.data, success: true };
86
90
  }
87
- catch {
88
- return { comments: [], total: 0 };
91
+ catch (error) {
92
+ return { comments: [], total: 0, success: false, error: error instanceof Error ? error.message : "Replies could not load." };
89
93
  }
90
94
  }
91
95
  export async function fetchThread(threadId) {
@@ -1 +1 @@
1
- {"version":3,"file":"marketplaceContract.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/marketplaceContract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGrF,eAAO,MAAM,uBAAuB,sCAA0F,CAAC;AAC/H,eAAO,MAAM,sBAAsB,GAAU,cAAc,MAAM,iCAAkH,CAAC;AACpL,eAAO,MAAM,yBAAyB,GAAU,OAAO,OAAO,iCAAuF,CAAC;AACtJ,eAAO,MAAM,wBAAwB,GAAU,YAAY,MAAM,EAAE,QAAQ,SAAS,GAAG,QAAQ,GAAG,QAAQ,EAAE,QAAO,OAAY,iCAAuH,CAAC;AACvP,eAAO,MAAM,yBAAyB,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,EAAE,QAAQ,QAAQ,GAAG,kBAAkB,GAAG,SAAS,EAAE,QAAO,OAAY,iCAAiJ,CAAC;AACjT,eAAO,MAAM,sBAAsB,GAAU,YAAY,MAAM,EAAE,OAAO;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,qBAAkG,CAAC;AACnN,eAAO,MAAM,uBAAuB,GAAU,YAAY,MAAM,EAAE,OAAO;IAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,iCAA8G,CAAC;AAClP,eAAO,MAAM,qBAAqB,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,uCAAoI,CAAC;AACxN,eAAO,MAAM,6BAA6B,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,gCAAyI,CAAC;AACrO,eAAO,MAAM,wBAAwB,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,EAAE,OAAO;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,gCAA6I,CAAC;AACnU,eAAO,MAAM,yBAAyB,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,gCAA2I,CAAC;AACnO,eAAO,MAAM,gCAAgC,GAAI,YAAY,MAAM,EAAE,WAAW,MAAM,WAGrF,CAAC"}
1
+ {"version":3,"file":"marketplaceContract.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/marketplaceContract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGrF,eAAO,MAAM,uBAAuB,sCAA0F,CAAC;AAC/H,eAAO,MAAM,sBAAsB,GAAU,cAAc,MAAM,iCAAkH,CAAC;AACpL,eAAO,MAAM,yBAAyB,GAAU,OAAO,OAAO,iCAAuF,CAAC;AACtJ,eAAO,MAAM,wBAAwB,GAAU,YAAY,MAAM,EAAE,QAAQ,SAAS,GAAG,QAAQ,GAAG,QAAQ,EAAE,QAAO,OAAY,iCAAuH,CAAC;AACvP,eAAO,MAAM,yBAAyB,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,EAAE,QAAQ,QAAQ,GAAG,kBAAkB,GAAG,SAAS,EAAE,QAAO,OAAY,iCAAiJ,CAAC;AACjT,eAAO,MAAM,sBAAsB,GAAU,YAAY,MAAM,EAAE,OAAO;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,qBAAkG,CAAC;AACnN,eAAO,MAAM,uBAAuB,GAAU,YAAY,MAAM,EAAE,OAAO;IAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,iCAA8G,CAAC;AAClP,eAAO,MAAM,qBAAqB,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,uCAAoI,CAAC;AACxN,eAAO,MAAM,6BAA6B,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,gCAAyI,CAAC;AACrO,eAAO,MAAM,wBAAwB,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,EAAE,OAAO;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,gCAA6I,CAAC;AACnU,eAAO,MAAM,yBAAyB,GAAU,YAAY,MAAM,EAAE,aAAa,MAAM,gCAA2I,CAAC;AACnO,eAAO,MAAM,gCAAgC,GAAI,YAAY,MAAM,EAAE,WAAW,MAAM,WAGrF,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { get, post } from "./fetcher";
2
- const withIdempotency = async (path, body) => post(path, body, true, { headers: { "Idempotency-Key": crypto.randomUUID() } });
2
+ import { getNativeTransport } from './nativeTransport';
3
+ const withIdempotency = async (path, body) => post(path, body, true, { headers: { "Idempotency-Key": getNativeTransport()?.randomUUID?.() ?? crypto.randomUUID() } });
3
4
  export const getMarketplaceContracts = async () => (await get("/marketplace-contracts")).data;
4
5
  export const getMarketplaceContract = async (contractSlug) => (await get(`/marketplace-contracts/${encodeURIComponent(contractSlug)}`)).data;
5
6
  export const createMarketplaceContract = async (input) => (await withIdempotency("/marketplace-contracts", input)).data;
@@ -12,6 +13,6 @@ export const createMarketplacePaymentOrder = async (contractId, milestoneId) =>
12
13
  export const verifyMarketplacePayment = async (contractId, milestoneId, input) => (await withIdempotency(`/marketplace-contracts/${contractId}/milestones/${milestoneId}/payment/verify`, input)).data;
13
14
  export const releaseMarketplacePayment = async (contractId, milestoneId) => (await withIdempotency(`/marketplace-contracts/${contractId}/milestones/${milestoneId}/payment/release`, {})).data;
14
15
  export const getMarketplaceInvoiceDownloadUrl = (contractId, invoiceId) => {
15
- const baseUrl = String(process.env.NEXT_PUBLIC_API_URL || "").replace(/\/$/, "");
16
+ const baseUrl = String(getNativeTransport()?.apiUrl || process.env.NEXT_PUBLIC_API_URL || "").replace(/\/$/, "");
16
17
  return `${baseUrl}/marketplace-contracts/${encodeURIComponent(contractId)}/invoices/${encodeURIComponent(invoiceId)}/download`;
17
18
  };
@@ -0,0 +1,25 @@
1
+ /** Native credentials are supplied by the app's secure-storage adapter, never persisted here. */
2
+ export type NativeSessionTokens = {
3
+ accessToken: string;
4
+ refreshToken: string;
5
+ deviceId: string;
6
+ accountType: "user";
7
+ };
8
+ export interface NativeTransportAdapter {
9
+ apiUrl: string;
10
+ deviceId: string;
11
+ randomUUID?(): string;
12
+ accessToken(): string | null;
13
+ refreshToken(): Promise<string | null>;
14
+ setTokens(tokens: NativeSessionTokens, isCurrent: () => boolean): Promise<void>;
15
+ clearSession(): Promise<void>;
16
+ }
17
+ export declare const subscribeNativeSession: (listener: () => void) => () => void;
18
+ export declare function configureNativeTransport(next: NativeTransportAdapter | null): void;
19
+ export declare const getNativeTransport: () => NativeTransportAdapter | null;
20
+ export declare const nativeSessionGeneration: () => number;
21
+ export declare function invalidateNativeSession(): void;
22
+ /** Capture at the start of a user interaction, before any await. */
23
+ export declare function nativeInteractionGuard(): () => void;
24
+ export declare function acceptNativeSession(value: unknown, expectedGeneration?: number, newIdentity?: boolean): Promise<void>;
25
+ //# sourceMappingURL=nativeTransport.d.ts.map