@adminide-stack/yantra-mobile 12.0.69-alpha.13 → 12.0.69-alpha.16

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 (475) hide show
  1. package/lib/components/GatewayConnector/GatewayConnector.js +2 -2
  2. package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -1
  3. package/lib/components/KeyboardComposerDock.js +8 -1
  4. package/lib/components/KeyboardComposerDock.js.map +1 -1
  5. package/lib/components/NavigationHeader/NavigationHeader.js +2 -2
  6. package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
  7. package/lib/features/apps/AppsCatalog.js +2 -2
  8. package/lib/features/apps/AppsCatalog.js.map +1 -1
  9. package/lib/features/audio-input/MicErrorBoundary.js +2 -2
  10. package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
  11. package/lib/features/canvas/AudioEditorExperience.js +308 -0
  12. package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
  13. package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
  14. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
  15. package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
  16. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
  17. package/lib/features/canvas/CanvasChatResultCard.js +113 -0
  18. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
  19. package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
  20. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
  21. package/lib/features/canvas/CanvasExperience.js +859 -0
  22. package/lib/features/canvas/CanvasExperience.js.map +1 -0
  23. package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
  24. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
  25. package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
  26. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
  27. package/lib/features/canvas/CanvasLooksPanel.js +184 -0
  28. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
  29. package/lib/features/canvas/CanvasTasksPanel.js +138 -0
  30. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
  31. package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
  32. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
  33. package/lib/features/canvas/CanvasToolDock.js +423 -0
  34. package/lib/features/canvas/CanvasToolDock.js.map +1 -0
  35. package/lib/features/canvas/FrameExtractorExperience.js +242 -0
  36. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
  37. package/lib/features/canvas/ImageEditorExperience.js +491 -0
  38. package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
  39. package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
  40. package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
  41. package/lib/features/canvas/MoodboardExperience.js +205 -0
  42. package/lib/features/canvas/MoodboardExperience.js.map +1 -0
  43. package/lib/features/canvas/NativeCanvasViewer.js +929 -0
  44. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
  45. package/lib/features/canvas/PromoContextFields.js +150 -0
  46. package/lib/features/canvas/PromoContextFields.js.map +1 -0
  47. package/lib/features/canvas/SetStudioExperience.js +323 -0
  48. package/lib/features/canvas/SetStudioExperience.js.map +1 -0
  49. package/lib/features/canvas/VideoClipsExperience.js +175 -0
  50. package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
  51. package/lib/features/canvas/VideoEditExperience.js +824 -0
  52. package/lib/features/canvas/VideoEditExperience.js.map +1 -0
  53. package/lib/features/canvas/VideoEditorExperience.js +3050 -0
  54. package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
  55. package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
  56. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
  57. package/lib/features/canvas/aiEdit.js +53 -0
  58. package/lib/features/canvas/aiEdit.js.map +1 -0
  59. package/lib/features/canvas/canvasAgentChat.js +76 -0
  60. package/lib/features/canvas/canvasAgentChat.js.map +1 -0
  61. package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
  62. package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
  63. package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
  64. package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
  65. package/lib/features/canvas/canvasChatDisplay.js +38 -0
  66. package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
  67. package/lib/features/canvas/canvasChatTemplates.js +219 -0
  68. package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
  69. package/lib/features/canvas/canvasCore.js +138 -1
  70. package/lib/features/canvas/canvasCore.js.map +1 -1
  71. package/lib/features/canvas/canvasEditOps.js +224 -0
  72. package/lib/features/canvas/canvasEditOps.js.map +1 -0
  73. package/lib/features/canvas/canvasTasks.js +187 -0
  74. package/lib/features/canvas/canvasTasks.js.map +1 -0
  75. package/lib/features/canvas/designPromptTemplates.js +3084 -0
  76. package/lib/features/canvas/designPromptTemplates.js.map +1 -0
  77. package/lib/features/canvas/editTools.js +54 -0
  78. package/lib/features/canvas/editTools.js.map +1 -0
  79. package/lib/features/canvas/extendVideo.js +5 -0
  80. package/lib/features/canvas/extendVideo.js.map +1 -0
  81. package/lib/features/canvas/frameExtract.js +33 -0
  82. package/lib/features/canvas/frameExtract.js.map +1 -0
  83. package/lib/features/canvas/generationModels.js +201 -0
  84. package/lib/features/canvas/generationModels.js.map +1 -0
  85. package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
  86. package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
  87. package/lib/features/canvas/influencer/productReel.js +72 -0
  88. package/lib/features/canvas/influencer/productReel.js.map +1 -0
  89. package/lib/features/canvas/influencer/reelPlan.js +159 -0
  90. package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
  91. package/lib/features/canvas/moodboardCore.js +13 -0
  92. package/lib/features/canvas/moodboardCore.js.map +1 -0
  93. package/lib/features/canvas/promoProjectImport.js +99 -0
  94. package/lib/features/canvas/promoProjectImport.js.map +1 -0
  95. package/lib/features/canvas/promoVideo.js +312 -0
  96. package/lib/features/canvas/promoVideo.js.map +1 -0
  97. package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
  98. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
  99. package/lib/features/canvas/sessionIdentity.js +28 -1
  100. package/lib/features/canvas/sessionIdentity.js.map +1 -1
  101. package/lib/features/canvas/set/SetViewportWebView.js +133 -0
  102. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
  103. package/lib/features/canvas/set/cameraPath.js +194 -0
  104. package/lib/features/canvas/set/cameraPath.js.map +1 -0
  105. package/lib/features/canvas/set/setProject.js +24 -0
  106. package/lib/features/canvas/set/setProject.js.map +1 -0
  107. package/lib/features/canvas/storageLibrary.js +184 -0
  108. package/lib/features/canvas/storageLibrary.js.map +1 -0
  109. package/lib/features/canvas/studioCatalog.js +129 -0
  110. package/lib/features/canvas/studioCatalog.js.map +1 -0
  111. package/lib/features/canvas/studioLooks.js +189 -0
  112. package/lib/features/canvas/studioLooks.js.map +1 -0
  113. package/lib/features/canvas/surfaceIndex.js +63 -1
  114. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  115. package/lib/features/canvas/templateImport/invideoNative.js +221 -0
  116. package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
  117. package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
  118. package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
  119. package/lib/features/canvas/templateImport/renderConfig.js +93 -0
  120. package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
  121. package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
  122. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
  123. package/lib/features/canvas/video3d.js +109 -0
  124. package/lib/features/canvas/video3d.js.map +1 -0
  125. package/lib/features/canvas/videoClips.js +42 -0
  126. package/lib/features/canvas/videoClips.js.map +1 -0
  127. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
  128. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
  129. package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
  130. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
  131. package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
  132. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
  133. package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
  134. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
  135. package/lib/features/canvas/videoEditor/editorModel.js +346 -0
  136. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
  137. package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
  138. package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
  139. package/lib/features/canvas/videoEditor/filters.js +41 -0
  140. package/lib/features/canvas/videoEditor/filters.js.map +1 -0
  141. package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
  142. package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
  143. package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
  144. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
  145. package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
  146. package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
  147. package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
  148. package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
  150. package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
  151. package/lib/features/canvas/videoRenderer.js +8 -0
  152. package/lib/features/canvas/videoRenderer.js.map +1 -0
  153. package/lib/features/canvas/withRemoteSafeArea.js +2 -2
  154. package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
  155. package/lib/features/characters/characterStudioProps.js +14 -0
  156. package/lib/features/characters/characterStudioProps.js.map +1 -0
  157. package/lib/features/design/DesignEditorExperience.js +643 -0
  158. package/lib/features/design/DesignEditorExperience.js.map +1 -0
  159. package/lib/features/design/DesignExperience.js +444 -0
  160. package/lib/features/design/DesignExperience.js.map +1 -0
  161. package/lib/features/design/designCore.js +298 -0
  162. package/lib/features/design/designCore.js.map +1 -0
  163. package/lib/features/design/designIndex.js +150 -0
  164. package/lib/features/design/designIndex.js.map +1 -0
  165. package/lib/features/design/exportDesign.js +133 -0
  166. package/lib/features/design/exportDesign.js.map +1 -0
  167. package/lib/features/job-search/ApplicationsPanel.js +907 -0
  168. package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
  169. package/lib/features/job-search/ContactsPanel.js +627 -0
  170. package/lib/features/job-search/ContactsPanel.js.map +1 -0
  171. package/lib/features/job-search/InsightsPanel.js +299 -0
  172. package/lib/features/job-search/InsightsPanel.js.map +1 -0
  173. package/lib/features/job-search/InterviewPanel.js +637 -0
  174. package/lib/features/job-search/InterviewPanel.js.map +1 -0
  175. package/lib/features/job-search/JdPastePrompt.js +130 -0
  176. package/lib/features/job-search/JdPastePrompt.js.map +1 -0
  177. package/lib/features/job-search/JobCard.js +199 -0
  178. package/lib/features/job-search/JobCard.js.map +1 -0
  179. package/lib/features/job-search/JobDetailSheet.js +255 -0
  180. package/lib/features/job-search/JobDetailSheet.js.map +1 -0
  181. package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
  182. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
  183. package/lib/features/job-search/JobSearchExperience.js +1324 -0
  184. package/lib/features/job-search/JobSearchExperience.js.map +1 -0
  185. package/lib/features/job-search/JobSearchLocationField.js +231 -0
  186. package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
  187. package/lib/features/job-search/ProfilePanel.js +679 -0
  188. package/lib/features/job-search/ProfilePanel.js.map +1 -0
  189. package/lib/features/job-search/RepliesPanel.js +344 -0
  190. package/lib/features/job-search/RepliesPanel.js.map +1 -0
  191. package/lib/features/job-search/SavedPanel.js +297 -0
  192. package/lib/features/job-search/SavedPanel.js.map +1 -0
  193. package/lib/features/job-search/chat/widgetContent.js +29 -0
  194. package/lib/features/job-search/chat/widgetContent.js.map +1 -0
  195. package/lib/features/job-search/cvText.js +91 -0
  196. package/lib/features/job-search/cvText.js.map +1 -0
  197. package/lib/features/job-search/jobAgentSwipe.js +7 -0
  198. package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
  199. package/lib/features/job-search/jobSearchClient.js +184 -0
  200. package/lib/features/job-search/jobSearchClient.js.map +1 -0
  201. package/lib/features/job-search/jobSearchExec.js +14 -0
  202. package/lib/features/job-search/jobSearchExec.js.map +1 -0
  203. package/lib/features/job-search/jobSearchRuntime.js +50 -0
  204. package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
  205. package/lib/features/job-search/jobSearchTheme.js +44 -0
  206. package/lib/features/job-search/jobSearchTheme.js.map +1 -0
  207. package/lib/features/job-search/savedJobs.js +85 -0
  208. package/lib/features/job-search/savedJobs.js.map +1 -0
  209. package/lib/features/job-search/searchHistory.js +117 -0
  210. package/lib/features/job-search/searchHistory.js.map +1 -0
  211. package/lib/features/job-search/types.js +36 -0
  212. package/lib/features/job-search/types.js.map +1 -0
  213. package/lib/features/job-search/useJobSearchSession.js +558 -0
  214. package/lib/features/job-search/useJobSearchSession.js.map +1 -0
  215. package/lib/features/messaging/ChatComponents.js +529 -0
  216. package/lib/features/messaging/ChatComponents.js.map +1 -0
  217. package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
  218. package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
  219. package/lib/features/messaging/ContactsScreen.js +230 -0
  220. package/lib/features/messaging/ContactsScreen.js.map +1 -0
  221. package/lib/features/messaging/ConversationListScreen.js +147 -0
  222. package/lib/features/messaging/ConversationListScreen.js.map +1 -0
  223. package/lib/features/messaging/MessageActions.js +283 -0
  224. package/lib/features/messaging/MessageActions.js.map +1 -0
  225. package/lib/features/messaging/NativeChatExperience.js +186 -0
  226. package/lib/features/messaging/NativeChatExperience.js.map +1 -0
  227. package/lib/features/messaging/RegistrationScreen.js +7 -7
  228. package/lib/features/messaging/RegistrationScreen.js.map +1 -1
  229. package/lib/features/messaging/ThreadScreen.js +215 -0
  230. package/lib/features/messaging/ThreadScreen.js.map +1 -0
  231. package/lib/features/messaging/chatInviteLink.js +52 -0
  232. package/lib/features/messaging/chatInviteLink.js.map +1 -0
  233. package/lib/features/messaging/chatModel.js +278 -0
  234. package/lib/features/messaging/chatModel.js.map +1 -0
  235. package/lib/features/messaging/chatOperations.js +116 -1
  236. package/lib/features/messaging/chatOperations.js.map +1 -1
  237. package/lib/features/messaging/emojiCatalog.js +36 -0
  238. package/lib/features/messaging/emojiCatalog.js.map +1 -0
  239. package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
  240. package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
  241. package/lib/features/messaging/phoneNumbers.js +52 -1
  242. package/lib/features/messaging/phoneNumbers.js.map +1 -1
  243. package/lib/features/messaging/sha256.js +68 -0
  244. package/lib/features/messaging/sha256.js.map +1 -0
  245. package/lib/features/messaging/useChatData.js +421 -0
  246. package/lib/features/messaging/useChatData.js.map +1 -0
  247. package/lib/features/messaging/useContactMatches.js +231 -0
  248. package/lib/features/messaging/useContactMatches.js.map +1 -0
  249. package/lib/features/messaging/usePhoneVerification.js +6 -5
  250. package/lib/features/messaging/usePhoneVerification.js.map +1 -1
  251. package/lib/features/messaging/yantraChatOrg.js +8 -3
  252. package/lib/features/messaging/yantraChatOrg.js.map +1 -1
  253. package/lib/features/resume/AnnotateModal.js +100 -0
  254. package/lib/features/resume/AnnotateModal.js.map +1 -0
  255. package/lib/features/resume/AnnotationBar.js +69 -0
  256. package/lib/features/resume/AnnotationBar.js.map +1 -0
  257. package/lib/features/resume/ExportSheet.js +105 -0
  258. package/lib/features/resume/ExportSheet.js.map +1 -0
  259. package/lib/features/resume/ResumeAgentChatPane.js +95 -0
  260. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
  261. package/lib/features/resume/ResumeEditor.js +676 -0
  262. package/lib/features/resume/ResumeEditor.js.map +1 -0
  263. package/lib/features/resume/ResumeExperience.js +235 -0
  264. package/lib/features/resume/ResumeExperience.js.map +1 -0
  265. package/lib/features/resume/ResumeListPanel.js +262 -0
  266. package/lib/features/resume/ResumeListPanel.js.map +1 -0
  267. package/lib/features/resume/ResumeToolbar.js +236 -0
  268. package/lib/features/resume/ResumeToolbar.js.map +1 -0
  269. package/lib/features/resume/annotations.js +17 -0
  270. package/lib/features/resume/annotations.js.map +1 -0
  271. package/lib/features/resume/documentCss.js +52 -0
  272. package/lib/features/resume/documentCss.js.map +1 -0
  273. package/lib/features/resume/draft.js +89 -0
  274. package/lib/features/resume/draft.js.map +1 -0
  275. package/lib/features/resume/exportResume.js +43 -0
  276. package/lib/features/resume/exportResume.js.map +1 -0
  277. package/lib/features/resume/pickResumePhoto.js +22 -0
  278. package/lib/features/resume/pickResumePhoto.js.map +1 -0
  279. package/lib/features/resume/renderResume.js +121 -0
  280. package/lib/features/resume/renderResume.js.map +1 -0
  281. package/lib/features/resume/resumeClient.js +69 -0
  282. package/lib/features/resume/resumeClient.js.map +1 -0
  283. package/lib/features/resume/resumeExec.js +14 -0
  284. package/lib/features/resume/resumeExec.js.map +1 -0
  285. package/lib/features/resume/resumeIndex.js +244 -0
  286. package/lib/features/resume/resumeIndex.js.map +1 -0
  287. package/lib/features/resume/resumeRuntime.js +50 -0
  288. package/lib/features/resume/resumeRuntime.js.map +1 -0
  289. package/lib/features/resume/resumeTheme.js +34 -0
  290. package/lib/features/resume/resumeTheme.js.map +1 -0
  291. package/lib/features/resume/resumeToolbox.js +49 -0
  292. package/lib/features/resume/resumeToolbox.js.map +1 -0
  293. package/lib/features/resume/templates.js +90 -0
  294. package/lib/features/resume/templates.js.map +1 -0
  295. package/lib/features/resume/types.js +10 -0
  296. package/lib/features/resume/types.js.map +1 -0
  297. package/lib/features/resume/useResumeSession.js +183 -0
  298. package/lib/features/resume/useResumeSession.js.map +1 -0
  299. package/lib/features/shopping/DealsPanel.js +254 -0
  300. package/lib/features/shopping/DealsPanel.js.map +1 -0
  301. package/lib/features/shopping/HistoryPanel.js +147 -0
  302. package/lib/features/shopping/HistoryPanel.js.map +1 -0
  303. package/lib/features/shopping/OrdersPanel.js +157 -0
  304. package/lib/features/shopping/OrdersPanel.js.map +1 -0
  305. package/lib/features/shopping/ProductCard.js +326 -0
  306. package/lib/features/shopping/ProductCard.js.map +1 -0
  307. package/lib/features/shopping/ProductDetailSheet.js +313 -0
  308. package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
  309. package/lib/features/shopping/ProductFilterBar.js +153 -0
  310. package/lib/features/shopping/ProductFilterBar.js.map +1 -0
  311. package/lib/features/shopping/ProductPhoto.js +27 -0
  312. package/lib/features/shopping/ProductPhoto.js.map +1 -0
  313. package/lib/features/shopping/SavedPanel.js +139 -0
  314. package/lib/features/shopping/SavedPanel.js.map +1 -0
  315. package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
  316. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
  317. package/lib/features/shopping/ShoppingExperience.js +888 -0
  318. package/lib/features/shopping/ShoppingExperience.js.map +1 -0
  319. package/lib/features/shopping/TrendingSections.js +199 -0
  320. package/lib/features/shopping/TrendingSections.js.map +1 -0
  321. package/lib/features/shopping/WatchlistPanel.js +148 -0
  322. package/lib/features/shopping/WatchlistPanel.js.map +1 -0
  323. package/lib/features/shopping/catalog.js +238 -0
  324. package/lib/features/shopping/catalog.js.map +1 -0
  325. package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
  326. package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
  327. package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
  328. package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
  329. package/lib/features/shopping/chat/widgetContent.js +233 -0
  330. package/lib/features/shopping/chat/widgetContent.js.map +1 -0
  331. package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
  332. package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
  333. package/lib/features/shopping/productImage.js +42 -0
  334. package/lib/features/shopping/productImage.js.map +1 -0
  335. package/lib/features/shopping/savedProducts.js +84 -0
  336. package/lib/features/shopping/savedProducts.js.map +1 -0
  337. package/lib/features/shopping/services/catalogActions.js +166 -0
  338. package/lib/features/shopping/services/catalogActions.js.map +1 -0
  339. package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
  340. package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
  341. package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
  342. package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
  343. package/lib/features/shopping/services/productAvailability.js +25 -0
  344. package/lib/features/shopping/services/productAvailability.js.map +1 -0
  345. package/lib/features/shopping/services/productFilters.js +72 -0
  346. package/lib/features/shopping/services/productFilters.js.map +1 -0
  347. package/lib/features/shopping/services/retailerUrl.js +75 -0
  348. package/lib/features/shopping/services/retailerUrl.js.map +1 -0
  349. package/lib/features/shopping/services/shoppingChatReply.js +46 -0
  350. package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
  351. package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
  352. package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
  353. package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
  354. package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
  355. package/lib/features/shopping/shopAgentSwipe.js +7 -0
  356. package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
  357. package/lib/features/shopping/shoppingCart.js +116 -0
  358. package/lib/features/shopping/shoppingCart.js.map +1 -0
  359. package/lib/features/shopping/shoppingExec.js +14 -0
  360. package/lib/features/shopping/shoppingExec.js.map +1 -0
  361. package/lib/features/shopping/shoppingHistoryStore.js +176 -0
  362. package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
  363. package/lib/features/shopping/shoppingRuntime.js +63 -0
  364. package/lib/features/shopping/shoppingRuntime.js.map +1 -0
  365. package/lib/features/shopping/timeAgo.js +14 -0
  366. package/lib/features/shopping/timeAgo.js.map +1 -0
  367. package/lib/features/shopping/useShoppingSearch.js +262 -0
  368. package/lib/features/shopping/useShoppingSearch.js.map +1 -0
  369. package/lib/features/travel/BookHeaderGlow.js +48 -0
  370. package/lib/features/travel/BookHeaderGlow.js.map +1 -0
  371. package/lib/features/travel/BookingsPanel.js +29 -0
  372. package/lib/features/travel/BookingsPanel.js.map +1 -0
  373. package/lib/features/travel/DiscoverPanel.js +155 -0
  374. package/lib/features/travel/DiscoverPanel.js.map +1 -0
  375. package/lib/features/travel/FlightCompareBar.js +86 -0
  376. package/lib/features/travel/FlightCompareBar.js.map +1 -0
  377. package/lib/features/travel/FlightDealsBoard.js +100 -0
  378. package/lib/features/travel/FlightDealsBoard.js.map +1 -0
  379. package/lib/features/travel/HistoryPanel.js +82 -0
  380. package/lib/features/travel/HistoryPanel.js.map +1 -0
  381. package/lib/features/travel/PopularDestinations.js +144 -0
  382. package/lib/features/travel/PopularDestinations.js.map +1 -0
  383. package/lib/features/travel/SavedPanel.js +27 -0
  384. package/lib/features/travel/SavedPanel.js.map +1 -0
  385. package/lib/features/travel/TravelAgentChatPane.js +303 -0
  386. package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
  387. package/lib/features/travel/TravelBookHero.js +425 -0
  388. package/lib/features/travel/TravelBookHero.js.map +1 -0
  389. package/lib/features/travel/TravelDatesField.js +234 -0
  390. package/lib/features/travel/TravelDatesField.js.map +1 -0
  391. package/lib/features/travel/TravelDetailSheet.js +106 -0
  392. package/lib/features/travel/TravelDetailSheet.js.map +1 -0
  393. package/lib/features/travel/TravelExperience.js +624 -0
  394. package/lib/features/travel/TravelExperience.js.map +1 -0
  395. package/lib/features/travel/TravelGuestsField.js +85 -0
  396. package/lib/features/travel/TravelGuestsField.js.map +1 -0
  397. package/lib/features/travel/TravelLanding.js +318 -0
  398. package/lib/features/travel/TravelLanding.js.map +1 -0
  399. package/lib/features/travel/TravelLocationField.js +179 -0
  400. package/lib/features/travel/TravelLocationField.js.map +1 -0
  401. package/lib/features/travel/TravelPropertyCard.js +266 -0
  402. package/lib/features/travel/TravelPropertyCard.js.map +1 -0
  403. package/lib/features/travel/TravelPropertyPhoto.js +22 -0
  404. package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
  405. package/lib/features/travel/TravelRailFlyout.js +79 -0
  406. package/lib/features/travel/TravelRailFlyout.js.map +1 -0
  407. package/lib/features/travel/TravelResultsMap.js +126 -0
  408. package/lib/features/travel/TravelResultsMap.js.map +1 -0
  409. package/lib/features/travel/WorkspacePanel.js +148 -0
  410. package/lib/features/travel/WorkspacePanel.js.map +1 -0
  411. package/lib/features/travel/appNav.js +244 -0
  412. package/lib/features/travel/appNav.js.map +1 -0
  413. package/lib/features/travel/calendarDays.js +50 -0
  414. package/lib/features/travel/calendarDays.js.map +1 -0
  415. package/lib/features/travel/catalog.js +72 -0
  416. package/lib/features/travel/catalog.js.map +1 -0
  417. package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
  418. package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
  419. package/lib/features/travel/chat/widgetContent.js +107 -0
  420. package/lib/features/travel/chat/widgetContent.js.map +1 -0
  421. package/lib/features/travel/flightDeals.js +65 -0
  422. package/lib/features/travel/flightDeals.js.map +1 -0
  423. package/lib/features/travel/mapCoordinates.js +36 -0
  424. package/lib/features/travel/mapCoordinates.js.map +1 -0
  425. package/lib/features/travel/parseTravelIntent.js +303 -0
  426. package/lib/features/travel/parseTravelIntent.js.map +1 -0
  427. package/lib/features/travel/savedStays.js +66 -0
  428. package/lib/features/travel/savedStays.js.map +1 -0
  429. package/lib/features/travel/services/flightDealsBoard.js +111 -0
  430. package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
  431. package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
  432. package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
  433. package/lib/features/travel/services/geocodeLocation.js +79 -0
  434. package/lib/features/travel/services/geocodeLocation.js.map +1 -0
  435. package/lib/features/travel/services/placePredictions.js +113 -0
  436. package/lib/features/travel/services/placePredictions.js.map +1 -0
  437. package/lib/features/travel/services/resolveOriginCity.js +27 -0
  438. package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
  439. package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
  440. package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
  441. package/lib/features/travel/services/travelFlightSearch.js +289 -0
  442. package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
  443. package/lib/features/travel/services/travelPropertySearch.js +377 -0
  444. package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
  445. package/lib/features/travel/travelAgentSwipe.js +7 -0
  446. package/lib/features/travel/travelAgentSwipe.js.map +1 -0
  447. package/lib/features/travel/travelExec.js +14 -0
  448. package/lib/features/travel/travelExec.js.map +1 -0
  449. package/lib/features/travel/travelHistoryStore.js +108 -0
  450. package/lib/features/travel/travelHistoryStore.js.map +1 -0
  451. package/lib/features/travel/travelRuntime.js +62 -0
  452. package/lib/features/travel/travelRuntime.js.map +1 -0
  453. package/lib/features/travel/types.js +9 -0
  454. package/lib/features/travel/types.js.map +1 -0
  455. package/lib/features/travel/useTravelSearch.js +330 -0
  456. package/lib/features/travel/useTravelSearch.js.map +1 -0
  457. package/lib/features/travel/workspaceContent.js +548 -0
  458. package/lib/features/travel/workspaceContent.js.map +1 -0
  459. package/lib/hooks/useObtainSystemToken.js +23 -5
  460. package/lib/hooks/useObtainSystemToken.js.map +1 -1
  461. package/lib/hooks/webViewRetentionPolicy.js +1 -0
  462. package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
  463. package/lib/index.js +1 -1
  464. package/lib/index.js.map +1 -1
  465. package/lib/screens/ChatNative/index.js +13 -2
  466. package/lib/screens/ChatNative/index.js.map +1 -1
  467. package/lib/screens/Home/HomeScreen.js +3 -3
  468. package/lib/screens/Home/HomeScreen.js.map +1 -1
  469. package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
  470. package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
  471. package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
  472. package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
  473. package/lib/services/brainQuickReply.js +38 -1
  474. package/lib/services/brainQuickReply.js.map +1 -1
  475. package/package.json +3 -3
@@ -0,0 +1,79 @@
1
+ import {getTravelRuntime}from'../travelRuntime.js';function viewportAround(lat, lng, delta = 0.05) {
2
+ return {
3
+ northeast: {
4
+ lat: lat + delta,
5
+ lng: lng + delta
6
+ },
7
+ southwest: {
8
+ lat: lat - delta,
9
+ lng: lng - delta
10
+ }
11
+ };
12
+ }
13
+ async function geocodeGoogle(address, apiKey) {
14
+ var _a, _b;
15
+ const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(address)}&key=${apiKey}`;
16
+ const response = await fetch(url);
17
+ const data = await response.json();
18
+ if (data.status !== "OK" || !((_a = data.results) == null ? void 0 : _a.length)) return null;
19
+ const result = data.results[0];
20
+ const {
21
+ lat,
22
+ lng
23
+ } = result.geometry.location;
24
+ const bounds = (_b = result.geometry.viewport) != null ? _b : result.geometry.bounds;
25
+ return {
26
+ formattedAddress: result.formatted_address,
27
+ place_id: result.place_id,
28
+ coordinates: {
29
+ lat,
30
+ lng
31
+ },
32
+ viewport: bounds ? {
33
+ northeast: {
34
+ lat: bounds.northeast.lat,
35
+ lng: bounds.northeast.lng
36
+ },
37
+ southwest: {
38
+ lat: bounds.southwest.lat,
39
+ lng: bounds.southwest.lng
40
+ }
41
+ } : viewportAround(lat, lng)
42
+ };
43
+ }
44
+ async function geocodeNominatim(address) {
45
+ const url = `https://nominatim.openstreetmap.org/search?format=json&limit=1&q=${encodeURIComponent(address)}`;
46
+ const response = await fetch(url, {
47
+ headers: {
48
+ "User-Agent": "yantra-native-travel/1.0"
49
+ }
50
+ });
51
+ const data = await response.json();
52
+ const row = data[0];
53
+ const lat = Number(row == null ? void 0 : row.lat);
54
+ const lng = Number(row == null ? void 0 : row.lon);
55
+ if (!Number.isFinite(lat) || !Number.isFinite(lng)) return null;
56
+ return {
57
+ formattedAddress: row.display_name || address,
58
+ coordinates: {
59
+ lat,
60
+ lng
61
+ },
62
+ viewport: viewportAround(lat, lng)
63
+ };
64
+ }
65
+ async function geocodeLocation(address) {
66
+ var _a;
67
+ const trimmed = address.trim();
68
+ if (!trimmed) return null;
69
+ try {
70
+ const apiKey = (_a = getTravelRuntime().config.GOOGLE_MAPS_API_KEY) == null ? void 0 : _a.trim();
71
+ if (apiKey) {
72
+ const google = await geocodeGoogle(trimmed, apiKey);
73
+ if (google) return google;
74
+ }
75
+ return await geocodeNominatim(trimmed);
76
+ } catch (e) {
77
+ return null;
78
+ }
79
+ }export{geocodeLocation};//# sourceMappingURL=geocodeLocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocodeLocation.js","sources":["../../../../src/features/travel/services/geocodeLocation.ts"],"sourcesContent":["import { getTravelRuntime } from '../travelRuntime';\n\nexport interface GeocodedLocation {\n formattedAddress: string;\n place_id?: string;\n coordinates: { lat: number; lng: number };\n viewport: {\n northeast: { lat: number; lng: number };\n southwest: { lat: number; lng: number };\n };\n}\n\nfunction viewportAround(lat: number, lng: number, delta = 0.05): GeocodedLocation['viewport'] {\n return {\n northeast: { lat: lat + delta, lng: lng + delta },\n southwest: { lat: lat - delta, lng: lng - delta },\n };\n}\n\nasync function geocodeGoogle(address: string, apiKey: string): Promise<GeocodedLocation | null> {\n const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(address)}&key=${apiKey}`;\n const response = await fetch(url);\n const data = await response.json();\n if (data.status !== 'OK' || !data.results?.length) return null;\n const result = data.results[0];\n const { lat, lng } = result.geometry.location;\n const bounds = result.geometry.viewport ?? result.geometry.bounds;\n return {\n formattedAddress: result.formatted_address,\n place_id: result.place_id,\n coordinates: { lat, lng },\n viewport: bounds\n ? {\n northeast: { lat: bounds.northeast.lat, lng: bounds.northeast.lng },\n southwest: { lat: bounds.southwest.lat, lng: bounds.southwest.lng },\n }\n : viewportAround(lat, lng),\n };\n}\n\nasync function geocodeNominatim(address: string): Promise<GeocodedLocation | null> {\n const url = `https://nominatim.openstreetmap.org/search?format=json&limit=1&q=${encodeURIComponent(address)}`;\n const response = await fetch(url, {\n headers: { 'User-Agent': 'yantra-native-travel/1.0' },\n });\n const data = (await response.json()) as Array<{ lat?: string; lon?: string; display_name?: string }>;\n const row = data[0];\n const lat = Number(row?.lat);\n const lng = Number(row?.lon);\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) return null;\n return {\n formattedAddress: row.display_name || address,\n coordinates: { lat, lng },\n viewport: viewportAround(lat, lng),\n };\n}\n\n/** Geocode a place name before coordinate-based hotel / car search. */\nexport async function geocodeLocation(address: string): Promise<GeocodedLocation | null> {\n const trimmed = address.trim();\n if (!trimmed) return null;\n try {\n const apiKey = getTravelRuntime().config.GOOGLE_MAPS_API_KEY?.trim();\n if (apiKey) {\n const google = await geocodeGoogle(trimmed, apiKey);\n if (google) return google;\n }\n return await geocodeNominatim(trimmed);\n } catch {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import {geocodeLocation}from'./geocodeLocation.js';import {getTravelRuntime}from'../travelRuntime.js';function nominatimHitsToPredictions(hits) {
2
+ return hits.map((hit) => {
3
+ var _a, _b;
4
+ const description = (hit.display_name || hit.name || "").trim();
5
+ if (!description) return null;
6
+ const main = (hit.name || description.split(",")[0] || description).trim();
7
+ const secondary = description.startsWith(main) ? description.slice(main.length).replace(/^,\s*/, "") : description;
8
+ return {
9
+ place_id: String((_b = (_a = hit.place_id) != null ? _a : hit.osm_id) != null ? _b : description),
10
+ description,
11
+ structured_formatting: {
12
+ main_text: main,
13
+ secondary_text: secondary || void 0
14
+ }
15
+ };
16
+ }).filter((row) => Boolean(row));
17
+ }
18
+ async function googleAutocomplete(input, apiKey, types) {
19
+ var _a;
20
+ const url = `https://maps.googleapis.com/maps/api/place/autocomplete/json?input=${encodeURIComponent(input)}&types=${encodeURIComponent(types)}&key=${encodeURIComponent(apiKey)}`;
21
+ const response = await fetch(url);
22
+ const data = await response.json();
23
+ if (data.status !== "OK" && data.status !== "ZERO_RESULTS") return [];
24
+ return ((_a = data.predictions) != null ? _a : []).filter((row) => row.place_id && row.description).map((row) => ({
25
+ place_id: row.place_id,
26
+ description: row.description,
27
+ structured_formatting: row.structured_formatting ? {
28
+ main_text: row.structured_formatting.main_text || row.description,
29
+ secondary_text: row.structured_formatting.secondary_text
30
+ } : void 0
31
+ }));
32
+ }
33
+ async function nominatimAutocomplete(input) {
34
+ const url = `https://nominatim.openstreetmap.org/search?format=json&addressdetails=0&limit=6&q=${encodeURIComponent(input)}`;
35
+ const response = await fetch(url, {
36
+ headers: {
37
+ "User-Agent": "yantra-native-travel/1.0"
38
+ }
39
+ });
40
+ const data = await response.json();
41
+ return nominatimHitsToPredictions(Array.isArray(data) ? data : []);
42
+ }
43
+ async function fetchPlacePredictions(input, types = "geocode") {
44
+ var _a;
45
+ const trimmed = input.trim();
46
+ if (trimmed.length < 2) return [];
47
+ try {
48
+ const apiKey = (_a = getTravelRuntime().config.GOOGLE_MAPS_API_KEY) == null ? void 0 : _a.trim();
49
+ if (apiKey) {
50
+ const google = await googleAutocomplete(trimmed, apiKey, types);
51
+ if (google.length) return google;
52
+ }
53
+ return await nominatimAutocomplete(trimmed);
54
+ } catch (e) {
55
+ return [];
56
+ }
57
+ }
58
+ async function resolvePrediction(prediction) {
59
+ const geo = await geocodeLocation(prediction.description);
60
+ if (geo) return toTravelLocation(geo, prediction.place_id);
61
+ return {
62
+ place_id: prediction.place_id,
63
+ formattedAddress: prediction.description
64
+ };
65
+ }
66
+ async function resolveNearbyLocation() {
67
+ var _a, _b, _c, _d;
68
+ try {
69
+ const Location = require("expo-location");
70
+ const perm = await Location.requestForegroundPermissionsAsync();
71
+ if ((perm == null ? void 0 : perm.status) !== "granted") return null;
72
+ const pos = await Location.getCurrentPositionAsync({
73
+ accuracy: (_b = (_a = Location.Accuracy) == null ? void 0 : _a.Low) != null ? _b : 1
74
+ });
75
+ const lat = (_c = pos == null ? void 0 : pos.coords) == null ? void 0 : _c.latitude;
76
+ const lng = (_d = pos == null ? void 0 : pos.coords) == null ? void 0 : _d.longitude;
77
+ if (typeof lat !== "number" || typeof lng !== "number") return null;
78
+ const geos = await Location.reverseGeocodeAsync({
79
+ latitude: lat,
80
+ longitude: lng
81
+ });
82
+ const first = geos == null ? void 0 : geos[0];
83
+ const formattedAddress = [first == null ? void 0 : first.name, first == null ? void 0 : first.city, first == null ? void 0 : first.region, first == null ? void 0 : first.country].filter(Boolean).join(", ") || "Current location";
84
+ return {
85
+ formattedAddress,
86
+ coordinates: {
87
+ lat,
88
+ lng
89
+ },
90
+ viewport: {
91
+ northeast: {
92
+ lat: lat + 0.05,
93
+ lng: lng + 0.05
94
+ },
95
+ southwest: {
96
+ lat: lat - 0.05,
97
+ lng: lng - 0.05
98
+ }
99
+ }
100
+ };
101
+ } catch (e) {
102
+ return null;
103
+ }
104
+ }
105
+ function toTravelLocation(geo, placeId) {
106
+ var _a;
107
+ return {
108
+ formattedAddress: geo.formattedAddress,
109
+ place_id: (_a = geo.place_id) != null ? _a : placeId,
110
+ coordinates: geo.coordinates,
111
+ viewport: geo.viewport
112
+ };
113
+ }export{fetchPlacePredictions,nominatimHitsToPredictions,resolveNearbyLocation,resolvePrediction};//# sourceMappingURL=placePredictions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placePredictions.js","sources":["../../../../src/features/travel/services/placePredictions.ts"],"sourcesContent":["import { geocodeLocation, type GeocodedLocation } from './geocodeLocation';\nimport { getTravelRuntime } from '../travelRuntime';\nimport type { TravelLocation } from '../types';\n\nexport interface PlacePrediction {\n place_id: string;\n description: string;\n structured_formatting?: {\n main_text: string;\n secondary_text?: string;\n };\n}\n\ninterface NominatimHit {\n place_id?: number | string;\n osm_id?: number | string;\n display_name?: string;\n name?: string;\n lat?: string;\n lon?: string;\n}\n\nexport function nominatimHitsToPredictions(hits: NominatimHit[]): PlacePrediction[] {\n return hits\n .map((hit) => {\n const description = (hit.display_name || hit.name || '').trim();\n if (!description) return null;\n const main = (hit.name || description.split(',')[0] || description).trim();\n const secondary = description.startsWith(main)\n ? description.slice(main.length).replace(/^,\\s*/, '')\n : description;\n return {\n place_id: String(hit.place_id ?? hit.osm_id ?? description),\n description,\n structured_formatting: {\n main_text: main,\n secondary_text: secondary || undefined,\n },\n } satisfies PlacePrediction;\n })\n .filter((row): row is PlacePrediction => Boolean(row));\n}\n\nasync function googleAutocomplete(input: string, apiKey: string, types: string): Promise<PlacePrediction[]> {\n const url =\n `https://maps.googleapis.com/maps/api/place/autocomplete/json` +\n `?input=${encodeURIComponent(input)}&types=${encodeURIComponent(types)}&key=${encodeURIComponent(apiKey)}`;\n const response = await fetch(url);\n const data = (await response.json()) as {\n status?: string;\n predictions?: Array<{\n place_id?: string;\n description?: string;\n structured_formatting?: { main_text?: string; secondary_text?: string };\n }>;\n };\n if (data.status !== 'OK' && data.status !== 'ZERO_RESULTS') return [];\n return (data.predictions ?? [])\n .filter((row) => row.place_id && row.description)\n .map((row) => ({\n place_id: row.place_id as string,\n description: row.description as string,\n structured_formatting: row.structured_formatting\n ? {\n main_text: row.structured_formatting.main_text || row.description!,\n secondary_text: row.structured_formatting.secondary_text,\n }\n : undefined,\n }));\n}\n\nasync function nominatimAutocomplete(input: string): Promise<PlacePrediction[]> {\n const url = `https://nominatim.openstreetmap.org/search?format=json&addressdetails=0&limit=6&q=${encodeURIComponent(input)}`;\n const response = await fetch(url, { headers: { 'User-Agent': 'yantra-native-travel/1.0' } });\n const data = (await response.json()) as NominatimHit[];\n return nominatimHitsToPredictions(Array.isArray(data) ? data : []);\n}\n\n/** Places autocomplete — Google when a maps key is set, Nominatim otherwise (same role as web LocationInput). */\nexport async function fetchPlacePredictions(input: string, types = 'geocode'): Promise<PlacePrediction[]> {\n const trimmed = input.trim();\n if (trimmed.length < 2) return [];\n try {\n const apiKey = getTravelRuntime().config.GOOGLE_MAPS_API_KEY?.trim();\n if (apiKey) {\n const google = await googleAutocomplete(trimmed, apiKey, types);\n if (google.length) return google;\n }\n return await nominatimAutocomplete(trimmed);\n } catch {\n return [];\n }\n}\n\nexport async function resolvePrediction(prediction: PlacePrediction): Promise<TravelLocation> {\n const geo = await geocodeLocation(prediction.description);\n if (geo) return toTravelLocation(geo, prediction.place_id);\n return { place_id: prediction.place_id, formattedAddress: prediction.description };\n}\n\nexport async function resolveNearbyLocation(): Promise<TravelLocation | null> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n const Location = require('expo-location');\n const perm = await Location.requestForegroundPermissionsAsync();\n if (perm?.status !== 'granted') return null;\n const pos = await Location.getCurrentPositionAsync({ accuracy: Location.Accuracy?.Low ?? 1 });\n const lat = pos?.coords?.latitude;\n const lng = pos?.coords?.longitude;\n if (typeof lat !== 'number' || typeof lng !== 'number') return null;\n const geos = await Location.reverseGeocodeAsync({ latitude: lat, longitude: lng });\n const first = geos?.[0];\n const formattedAddress =\n [first?.name, first?.city, first?.region, first?.country].filter(Boolean).join(', ') || 'Current location';\n return {\n formattedAddress,\n coordinates: { lat, lng },\n viewport: {\n northeast: { lat: lat + 0.05, lng: lng + 0.05 },\n southwest: { lat: lat - 0.05, lng: lng - 0.05 },\n },\n };\n } catch {\n return null;\n }\n}\n\nfunction toTravelLocation(geo: GeocodedLocation, placeId?: string): TravelLocation {\n return {\n formattedAddress: geo.formattedAddress,\n place_id: geo.place_id ?? placeId,\n coordinates: geo.coordinates,\n viewport: geo.viewport,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import {resolveAirportCode}from'./travelFlightSearch.js';const DEFAULT_FLIGHT_ORIGIN = "New York, NY";
2
+ async function ensureFlightOrigin(existing) {
3
+ var _a, _b, _c, _d, _e, _f;
4
+ const trimmed = existing == null ? void 0 : existing.trim();
5
+ if (trimmed && resolveAirportCode(trimmed)) return trimmed;
6
+ try {
7
+ const Location = require("expo-location");
8
+ const perm = await Location.requestForegroundPermissionsAsync();
9
+ if ((perm == null ? void 0 : perm.status) === "granted") {
10
+ const pos = await Location.getCurrentPositionAsync({
11
+ accuracy: (_b = (_a = Location.Accuracy) == null ? void 0 : _a.Low) != null ? _b : 1
12
+ });
13
+ const lat = (_c = pos == null ? void 0 : pos.coords) == null ? void 0 : _c.latitude;
14
+ const lng = (_d = pos == null ? void 0 : pos.coords) == null ? void 0 : _d.longitude;
15
+ if (typeof lat === "number" && typeof lng === "number") {
16
+ const geos = await Location.reverseGeocodeAsync({
17
+ latitude: lat,
18
+ longitude: lng
19
+ });
20
+ const city = ((_e = geos == null ? void 0 : geos[0]) == null ? void 0 : _e.city) || ((_f = geos == null ? void 0 : geos[0]) == null ? void 0 : _f.subregion);
21
+ if (city && resolveAirportCode(city)) return city;
22
+ }
23
+ }
24
+ } catch (e) {
25
+ }
26
+ return DEFAULT_FLIGHT_ORIGIN;
27
+ }export{DEFAULT_FLIGHT_ORIGIN,ensureFlightOrigin};//# sourceMappingURL=resolveOriginCity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveOriginCity.js","sources":["../../../../src/features/travel/services/resolveOriginCity.ts"],"sourcesContent":["import { resolveAirportCode } from './travelFlightSearch';\n\nexport const DEFAULT_FLIGHT_ORIGIN = 'New York, NY';\n\nexport async function ensureFlightOrigin(existing?: string): Promise<string> {\n const trimmed = existing?.trim();\n if (trimmed && resolveAirportCode(trimmed)) return trimmed;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n const Location = require('expo-location');\n const perm = await Location.requestForegroundPermissionsAsync();\n if (perm?.status === 'granted') {\n const pos = await Location.getCurrentPositionAsync({ accuracy: Location.Accuracy?.Low ?? 1 });\n const lat = pos?.coords?.latitude;\n const lng = pos?.coords?.longitude;\n if (typeof lat === 'number' && typeof lng === 'number') {\n const geos = await Location.reverseGeocodeAsync({ latitude: lat, longitude: lng });\n const city = geos?.[0]?.city || geos?.[0]?.subregion;\n if (city && resolveAirportCode(city)) return city;\n }\n }\n } catch {\n /* permission / native module missing */\n }\n return DEFAULT_FLIGHT_ORIGIN;\n}\n"],"names":[],"mappings":"yDACO,MAAM,qBAAwB,GAAA;AACrC,eAAsB,mBAAmB,QAAoC,EAAA;AAF7E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAGE,EAAA,MAAM,UAAU,QAAU,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,IAAA,EAAA;AAC1B,EAAA,IAAI,OAAW,IAAA,kBAAA,CAAmB,OAAO,CAAA,EAAU,OAAA,OAAA;AACnD,EAAI,IAAA;AAEF,IAAM,MAAA,QAAA,GAAW,QAAQ,eAAe,CAAA;AACxC,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,iCAAkC,EAAA;AAC9D,IAAI,IAAA,CAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,YAAW,SAAW,EAAA;AAC9B,MAAM,MAAA,GAAA,GAAM,MAAM,QAAA,CAAS,uBAAwB,CAAA;AAAA,QACjD,QAAU,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAA,CAAS,QAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,QAAnB,IAA0B,GAAA,EAAA,GAAA;AAAA,OACrC,CAAA;AACD,MAAM,MAAA,GAAA,GAAA,CAAM,EAAK,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,MAAA,KAAL,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA;AACzB,MAAM,MAAA,GAAA,GAAA,CAAM,EAAK,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,MAAA,KAAL,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA;AACzB,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAY,IAAA,OAAO,QAAQ,QAAU,EAAA;AACtD,QAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,mBAAoB,CAAA;AAAA,UAC9C,QAAU,EAAA,GAAA;AAAA,UACV,SAAW,EAAA;AAAA,SACZ,CAAA;AACD,QAAA,MAAM,SAAO,EAAO,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,CAAA,CAAA,KAAP,mBAAW,IAAQ,MAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAO,OAAP,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAA;AAC3C,QAAA,IAAI,IAAQ,IAAA,kBAAA,CAAmB,IAAI,CAAA,EAAU,OAAA,IAAA;AAAA;AAC/C;AACF,GACM,CAAA,OAAA,CAAA,EAAA;AAAA;AAGR,EAAO,OAAA,qBAAA;AACT"}
@@ -0,0 +1,76 @@
1
+ import {getTravelRuntime}from'../travelRuntime.js';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const RESORTIFI_CONNECTOR_ID = "yantra-resortifi";
18
+ const RESORTIFI_ACTIONS = {
19
+ SEARCH: "YANTRA_RESORTIFI_SEARCH",
20
+ SEARCH_CARS: "YANTRA_RESORTIFI_SEARCH_CARS",
21
+ SEARCH_CARS_BROWSER: "YANTRA_RESORTIFI_SEARCH_CARS_BROWSER",
22
+ SEARCH_HOTELS_BROWSER: "YANTRA_RESORTIFI_SEARCH_HOTELS_BROWSER",
23
+ SEARCH_CARS_TURO: "YANTRA_RESORTIFI_SEARCH_CARS_TURO",
24
+ DISCOVER_EXPERIENCES: "YANTRA_RESORTIFI_DISCOVER_EXPERIENCES",
25
+ DISCOVER_SOCIAL: "YANTRA_RESORTIFI_DISCOVER_SOCIAL",
26
+ LIST_TEMPLATES: "YANTRA_RESORTIFI_LIST_TEMPLATES"
27
+ };
28
+ async function invokeResortifiConnector(params, action = RESORTIFI_ACTIONS.SEARCH) {
29
+ const execParams = __spreadValues({
30
+ stream: false
31
+ }, params);
32
+ return getTravelRuntime().exec(RESORTIFI_CONNECTOR_ID, action, execParams);
33
+ }
34
+ async function discoverExperiencesViaConnector(params) {
35
+ var _a, _b, _c, _d, _e, _f;
36
+ const result = await invokeResortifiConnector(params, RESORTIFI_ACTIONS.DISCOVER_EXPERIENCES);
37
+ if (!result.success) {
38
+ throw new Error(result.error || "Failed to fetch experiences");
39
+ }
40
+ return {
41
+ attractions: (_b = (_a = result.data) == null ? void 0 : _a.attractions) != null ? _b : [],
42
+ restaurants: (_d = (_c = result.data) == null ? void 0 : _c.restaurants) != null ? _d : [],
43
+ transport: (_f = (_e = result.data) == null ? void 0 : _e.transport) != null ? _f : []
44
+ };
45
+ }
46
+ function str(value) {
47
+ return typeof value === "string" ? value.trim() : "";
48
+ }
49
+ async function listTravelTemplatesViaConnector() {
50
+ var _a;
51
+ const result = await invokeResortifiConnector({}, RESORTIFI_ACTIONS.LIST_TEMPLATES);
52
+ if (!result.success) {
53
+ throw new Error(result.error || "Failed to list travel templates");
54
+ }
55
+ const list = Array.isArray((_a = result.data) == null ? void 0 : _a.templates) ? result.data.templates : Array.isArray(result.data) ? result.data : [];
56
+ return list.map((t) => ({
57
+ id: str(t.id) || str(t.templateId),
58
+ title: str(t.title) || str(t.name) || str(t.id) || "Template",
59
+ description: str(t.description) || void 0,
60
+ prompt: str(t.prompt) || str(t.chatPrompt) || void 0
61
+ })).filter((t) => Boolean(t.id));
62
+ }
63
+ async function discoverSocialViaConnector(params) {
64
+ var _a, _b, _c;
65
+ const result = await invokeResortifiConnector({
66
+ location: params.location,
67
+ platforms: (_a = params.platforms) != null ? _a : ["instagram", "tiktok"],
68
+ includeHashtags: false
69
+ }, RESORTIFI_ACTIONS.DISCOVER_SOCIAL);
70
+ if (!result.success) {
71
+ throw new Error(result.error || "Failed to fetch social posts");
72
+ }
73
+ return {
74
+ posts: (_c = (_b = result.data) == null ? void 0 : _b.posts) != null ? _c : []
75
+ };
76
+ }export{RESORTIFI_ACTIONS,RESORTIFI_CONNECTOR_ID,discoverExperiencesViaConnector,discoverSocialViaConnector,invokeResortifiConnector,listTravelTemplatesViaConnector};//# sourceMappingURL=resortifiConnectorClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resortifiConnectorClient.js","sources":["../../../../src/features/travel/services/resortifiConnectorClient.ts"],"sourcesContent":["import { getTravelRuntime } from '../travelRuntime';\n\nexport const RESORTIFI_CONNECTOR_ID = 'yantra-resortifi';\n\nexport const RESORTIFI_ACTIONS = {\n SEARCH: 'YANTRA_RESORTIFI_SEARCH',\n SEARCH_CARS: 'YANTRA_RESORTIFI_SEARCH_CARS',\n SEARCH_CARS_BROWSER: 'YANTRA_RESORTIFI_SEARCH_CARS_BROWSER',\n SEARCH_HOTELS_BROWSER: 'YANTRA_RESORTIFI_SEARCH_HOTELS_BROWSER',\n SEARCH_CARS_TURO: 'YANTRA_RESORTIFI_SEARCH_CARS_TURO',\n DISCOVER_EXPERIENCES: 'YANTRA_RESORTIFI_DISCOVER_EXPERIENCES',\n DISCOVER_SOCIAL: 'YANTRA_RESORTIFI_DISCOVER_SOCIAL',\n LIST_TEMPLATES: 'YANTRA_RESORTIFI_LIST_TEMPLATES',\n} as const;\n\nexport type ResortifiConnectorAction = (typeof RESORTIFI_ACTIONS)[keyof typeof RESORTIFI_ACTIONS];\n\nexport interface ResortifiProperty {\n id?: string;\n title?: string;\n name?: string;\n description?: string;\n imageUrl?: string;\n image?: string;\n thumbnail?: string;\n price?: number;\n priceLabel?: string;\n priceText?: string;\n priceUnit?: 'night' | 'day' | 'trip';\n rating?: number;\n reviewCount?: number;\n city?: string;\n latitude?: number;\n longitude?: number;\n url?: string;\n link?: string;\n source?: string;\n}\n\nexport interface ResortifiSearchResult {\n properties?: ResortifiProperty[];\n cars?: ResortifiProperty[];\n offers?: ResortifiProperty[];\n sources?: { source?: string; count?: number; error?: string }[];\n totalCount?: number;\n data?: ResortifiSearchResult;\n successful?: boolean;\n success?: boolean;\n}\n\nexport async function invokeResortifiConnector<T = ResortifiSearchResult>(\n params: Record<string, unknown>,\n action: ResortifiConnectorAction = RESORTIFI_ACTIONS.SEARCH,\n): Promise<{ success: boolean; data?: T; error?: string }> {\n const execParams = { stream: false, ...params };\n return getTravelRuntime().exec<T>(RESORTIFI_CONNECTOR_ID, action, execParams);\n}\n\nexport interface ResortifiDiscoverExperience {\n id: string;\n name: string;\n description?: string;\n image?: string;\n category: string;\n rating?: number | string;\n address?: string;\n price?: string;\n url?: string;\n}\n\nexport async function discoverExperiencesViaConnector(params: {\n location?: string;\n categories?: Array<'attractions' | 'restaurants' | 'transport'>;\n limit?: number;\n}): Promise<{\n attractions: ResortifiDiscoverExperience[];\n restaurants: ResortifiDiscoverExperience[];\n transport: ResortifiDiscoverExperience[];\n}> {\n const result = await invokeResortifiConnector<{\n attractions?: ResortifiDiscoverExperience[];\n restaurants?: ResortifiDiscoverExperience[];\n transport?: ResortifiDiscoverExperience[];\n }>(params, RESORTIFI_ACTIONS.DISCOVER_EXPERIENCES);\n if (!result.success) {\n throw new Error(result.error || 'Failed to fetch experiences');\n }\n return {\n attractions: result.data?.attractions ?? [],\n restaurants: result.data?.restaurants ?? [],\n transport: result.data?.transport ?? [],\n };\n}\n\nexport interface ResortifiMarketplaceTemplate {\n id: string;\n title: string;\n description?: string;\n prompt?: string;\n}\n\nfunction str(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nexport async function listTravelTemplatesViaConnector(): Promise<ResortifiMarketplaceTemplate[]> {\n const result = await invokeResortifiConnector<{ templates?: unknown }>({}, RESORTIFI_ACTIONS.LIST_TEMPLATES);\n if (!result.success) {\n throw new Error(result.error || 'Failed to list travel templates');\n }\n const list = Array.isArray(result.data?.templates)\n ? result.data.templates\n : Array.isArray(result.data)\n ? result.data\n : [];\n return (list as Array<Record<string, unknown>>)\n .map((t) => ({\n id: str(t.id) || str(t.templateId),\n title: str(t.title) || str(t.name) || str(t.id) || 'Template',\n description: str(t.description) || undefined,\n prompt: str(t.prompt) || str(t.chatPrompt) || undefined,\n }))\n .filter((t) => Boolean(t.id));\n}\n\nexport interface ResortifiDiscoverSocialPost {\n id: string;\n platform: 'instagram' | 'tiktok' | 'google';\n type?: string;\n content: {\n imageUrl?: string;\n caption?: string;\n username: string;\n likes?: number;\n };\n url: string;\n}\n\nexport async function discoverSocialViaConnector(params: {\n location: string;\n platforms?: Array<'instagram' | 'tiktok'>;\n}): Promise<{ posts: ResortifiDiscoverSocialPost[] }> {\n const result = await invokeResortifiConnector<{ posts?: ResortifiDiscoverSocialPost[] }>(\n { location: params.location, platforms: params.platforms ?? ['instagram', 'tiktok'], includeHashtags: false },\n RESORTIFI_ACTIONS.DISCOVER_SOCIAL,\n );\n if (!result.success) {\n throw new Error(result.error || 'Failed to fetch social posts');\n }\n return { posts: result.data?.posts ?? [] };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ import {AIRPORT_CODES,formatLocalDate,canonicalizePlace}from'../parseTravelIntent.js';import {invokeFlightSearchConnector}from'./flightSearchConnectorClient.js';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const PROVIDER_LABELS = {
18
+ duffel: "Yantra",
19
+ "google-flights": "Google Flights",
20
+ parallel: "Web",
21
+ "flight-goat": "Flight Goat",
22
+ soar: "Soar"
23
+ };
24
+ const FLIGHT_FAST_PROVIDERS = ["duffel", "flight-goat", "soar"];
25
+ const FLIGHT_META_PROVIDERS = ["google-flights", "parallel"];
26
+ function foldAscii(text) {
27
+ return text.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
28
+ }
29
+ function wordsOf(text) {
30
+ var _a;
31
+ return (_a = foldAscii(text).toLowerCase().match(/[a-z]+/g)) != null ? _a : [];
32
+ }
33
+ function labelCityWords(label) {
34
+ var _a, _b;
35
+ return wordsOf((_b = (_a = label.split(",")[0]) == null ? void 0 : _a.trim()) != null ? _b : "");
36
+ }
37
+ const AIRPORT_CATALOG_ORDER = new Map(Object.keys(AIRPORT_CODES).map((code, index) => [code, index]));
38
+ function catalogOrder(code) {
39
+ var _a;
40
+ return (_a = AIRPORT_CATALOG_ORDER.get(code)) != null ? _a : Number.MAX_SAFE_INTEGER;
41
+ }
42
+ function pickPreferredAirport(codes, queryKey) {
43
+ if (codes.length === 1) return codes[0];
44
+ const ordered = [...codes].sort((a, b) => catalogOrder(a) - catalogOrder(b));
45
+ if (queryKey) {
46
+ const exact = ordered.filter((code) => {
47
+ var _a;
48
+ return labelCityWords((_a = AIRPORT_CODES[code]) != null ? _a : "").join(" ") === queryKey;
49
+ });
50
+ if (exact.length) return exact[0];
51
+ }
52
+ return ordered[0];
53
+ }
54
+ const CITY_TO_AIRPORTS = (() => {
55
+ const map = /* @__PURE__ */ new Map();
56
+ const push = (key, code) => {
57
+ if (!key) return;
58
+ const list = map.get(key);
59
+ if (list) {
60
+ if (!list.includes(code)) list.push(code);
61
+ } else {
62
+ map.set(key, [code]);
63
+ }
64
+ };
65
+ const entries = Object.entries(AIRPORT_CODES).map(([code, label]) => ({
66
+ code,
67
+ words: labelCityWords(label)
68
+ }));
69
+ for (const {
70
+ code,
71
+ words
72
+ } of entries) {
73
+ if (words.length) push(words.join(" "), code);
74
+ }
75
+ return map;
76
+ })();
77
+ function resolveAirportCode(raw) {
78
+ const trimmed = canonicalizePlace(raw).trim() || raw.trim();
79
+ if (!trimmed) return "";
80
+ const paren = trimmed.match(/\(([A-Za-z]{3})\)/);
81
+ if (paren) return paren[1].toUpperCase();
82
+ if (/^[A-Za-z]{3}$/.test(trimmed)) {
83
+ const code = trimmed.toUpperCase();
84
+ if (AIRPORT_CODES[code]) return code;
85
+ if (/^[A-Z]{3}$/.test(trimmed)) return code;
86
+ }
87
+ const upper = trimmed.toUpperCase();
88
+ if (AIRPORT_CODES[upper]) return upper;
89
+ const inputWords = wordsOf(trimmed);
90
+ const cityKey = inputWords.join(" ");
91
+ let best = "";
92
+ let bestLen = 0;
93
+ for (const [code, label] of Object.entries(AIRPORT_CODES)) {
94
+ const words = labelCityWords(label);
95
+ if (!words.length) continue;
96
+ if (words.every((w) => inputWords.includes(w)) && words.join(" ").length >= bestLen) {
97
+ best = code;
98
+ bestLen = words.join(" ").length;
99
+ }
100
+ }
101
+ if (best) return best;
102
+ const cityHit = CITY_TO_AIRPORTS.get(cityKey);
103
+ if (cityHit == null ? void 0 : cityHit.length) return pickPreferredAirport(cityHit, cityKey);
104
+ for (const [key, codes] of CITY_TO_AIRPORTS) {
105
+ if (cityKey.includes(key) || key.includes(cityKey)) return pickPreferredAirport(codes, cityKey);
106
+ }
107
+ return "";
108
+ }
109
+ function parseDurationMinutes(text) {
110
+ if (!text) return void 0;
111
+ const hours = text.match(/(\d+)\s*h/i);
112
+ const mins = text.match(/(\d+)\s*m/i);
113
+ const h = hours ? Number(hours[1]) : 0;
114
+ const m = mins ? Number(mins[1]) : 0;
115
+ const total = h * 60 + m;
116
+ return total > 0 ? total : void 0;
117
+ }
118
+ function parsePrice(value) {
119
+ if (typeof value === "number" && Number.isFinite(value)) return value;
120
+ if (typeof value === "string") {
121
+ const match = value.replace(/,/g, "").match(/(\d+(?:\.\d+)?)/);
122
+ if (match) return Number.parseFloat(match[1]);
123
+ }
124
+ return void 0;
125
+ }
126
+ function stopsLabel(stops) {
127
+ if (typeof stops !== "number") return void 0;
128
+ if (stops <= 0) return "Nonstop";
129
+ return stops === 1 ? "1 stop" : `${stops} stops`;
130
+ }
131
+ function parseLocalTimestamp(raw) {
132
+ if (!raw) return void 0;
133
+ const match = raw.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
134
+ if (!match) return void 0;
135
+ const hour24 = Number(match[4]);
136
+ const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;
137
+ return {
138
+ time: `${hour12}:${match[5]} ${hour24 < 12 ? "AM" : "PM"}`
139
+ };
140
+ }
141
+ function toTravelSlice(leg) {
142
+ var _a, _b, _c, _d, _e;
143
+ const depart = parseLocalTimestamp(leg.departureAt);
144
+ const arrive = parseLocalTimestamp(leg.arrivalAt);
145
+ const stopovers = ((_a = leg.connections) != null ? _a : []).map((connection) => {
146
+ var _a2, _b2;
147
+ return {
148
+ code: ((_a2 = connection.airport) != null ? _a2 : "").trim().toUpperCase(),
149
+ layoverLabel: ((_b2 = connection.layoverDuration) == null ? void 0 : _b2.trim()) || void 0
150
+ };
151
+ }).filter((stopover) => /^[A-Z]{3}$/.test(stopover.code));
152
+ return {
153
+ origin: ((_b = leg.origin) == null ? void 0 : _b.trim()) || void 0,
154
+ destination: ((_c = leg.destination) == null ? void 0 : _c.trim()) || void 0,
155
+ departTime: depart == null ? void 0 : depart.time,
156
+ arriveTime: arrive == null ? void 0 : arrive.time,
157
+ durationMinutes: (_d = leg.durationMinutes) != null ? _d : parseDurationMinutes(leg.duration),
158
+ flightNumbers: ((_e = leg.flightNumbers) == null ? void 0 : _e.length) ? leg.flightNumbers : void 0,
159
+ stops: typeof leg.stops === "number" && leg.stops >= 0 ? leg.stops : void 0,
160
+ stopovers: stopovers.length ? stopovers : void 0
161
+ };
162
+ }
163
+ function readStopovers(offer) {
164
+ var _a, _b, _c, _d;
165
+ const connections = ((_a = offer.connections) == null ? void 0 : _a.length) ? offer.connections : (_d = (_c = (_b = offer.legs) == null ? void 0 : _b[0]) == null ? void 0 : _c.connections) != null ? _d : [];
166
+ const stopovers = connections.map((connection) => {
167
+ var _a2, _b2;
168
+ return {
169
+ code: ((_a2 = connection.airport) != null ? _a2 : "").trim().toUpperCase(),
170
+ layoverLabel: ((_b2 = connection.layoverDuration) == null ? void 0 : _b2.trim()) || void 0
171
+ };
172
+ }).filter((stopover) => /^[A-Z]{3}$/.test(stopover.code));
173
+ return stopovers.length ? stopovers : void 0;
174
+ }
175
+ function formatFlightOffer(offer, search, routeLabel, index) {
176
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
177
+ const id = ((_a = offer.offerId) == null ? void 0 : _a.toString()) || ((_b = offer.id) == null ? void 0 : _b.toString()) || `${(_d = (_c = search.route) == null ? void 0 : _c.origin) != null ? _d : "r"}-${index}`;
178
+ const origin = ((_e = offer.origin) == null ? void 0 : _e.trim()) || ((_g = (_f = search.route) == null ? void 0 : _f.origin) == null ? void 0 : _g.trim());
179
+ const destination = ((_h = offer.destination) == null ? void 0 : _h.trim()) || ((_j = (_i = search.route) == null ? void 0 : _i.destination) == null ? void 0 : _j.trim());
180
+ const airline = (_k = offer.airline) == null ? void 0 : _k.trim();
181
+ if (!airline && !origin && !destination && !offer.priceText && offer.totalPrice == null) return null;
182
+ const routeText = origin && destination ? `${origin} \u2192 ${destination}` : routeLabel;
183
+ const title = airline ? `${airline} \xB7 ${routeText}` : routeText;
184
+ const duration = (_l = offer.totalDuration) == null ? void 0 : _l.trim();
185
+ const provider = offer.provider || search.provider;
186
+ const cabin = ((_m = offer.cabinClass) == null ? void 0 : _m.trim().replace(/_/g, " ")) || void 0;
187
+ const slices = ((_n = offer.legs) != null ? _n : []).map(toTravelSlice);
188
+ const outbound = slices[0];
189
+ const price = parsePrice(offer.totalPrice);
190
+ if (price != null && price > 0 && price < 25) return null;
191
+ const offerId = (_o = offer.offerId) == null ? void 0 : _o.toString();
192
+ const bookable = offer.bookable === true || provider === "duffel" || !!(offerId == null ? void 0 : offerId.startsWith("off_"));
193
+ return {
194
+ id: `flight-${id}`,
195
+ title,
196
+ description: [duration, stopsLabel(offer.stops), cabin].filter(Boolean).join(" \xB7 ") || void 0,
197
+ category: bookable ? "Yantra" : provider ? (_p = PROVIDER_LABELS[provider]) != null ? _p : provider : void 0,
198
+ route: routeLabel,
199
+ price,
200
+ priceLabel: ((_q = offer.priceText) == null ? void 0 : _q.trim()) || (price != null ? `$${Math.round(price)}` : void 0),
201
+ priceUnit: "trip",
202
+ url: bookable ? void 0 : offer.sourceUrl || ((_s = (_r = search.bookingLinks) == null ? void 0 : _r.find((l) => l.url)) == null ? void 0 : _s.url),
203
+ kind: "flight",
204
+ durationMinutes: parseDurationMinutes(duration),
205
+ stops: typeof offer.stops === "number" && offer.stops >= 0 ? offer.stops : void 0,
206
+ stopovers: readStopovers(offer),
207
+ departTime: (_u = outbound == null ? void 0 : outbound.departTime) != null ? _u : (_t = parseLocalTimestamp(offer.departureAt)) == null ? void 0 : _t.time,
208
+ arriveTime: (_w = outbound == null ? void 0 : outbound.arriveTime) != null ? _w : (_v = parseLocalTimestamp(offer.arrivalAt)) == null ? void 0 : _v.time,
209
+ flightNumbers: ((_x = offer.flightNumbers) == null ? void 0 : _x.length) ? offer.flightNumbers : void 0,
210
+ slices: slices.length ? slices : void 0,
211
+ cabinClass: cabin,
212
+ bookable,
213
+ source: "flight-search"
214
+ };
215
+ }
216
+ function collectOffers(search) {
217
+ var _a, _b, _c, _d;
218
+ if (!search) return [];
219
+ const rows = [...(_a = search.offers) != null ? _a : [], ...search.cheapest ? [search.cheapest] : [], ...(_b = search.recommendations) != null ? _b : []];
220
+ const seen = /* @__PURE__ */ new Set();
221
+ const out = [];
222
+ for (const offer of rows) {
223
+ const key = ((_c = offer.offerId) == null ? void 0 : _c.toString()) || ((_d = offer.id) == null ? void 0 : _d.toString());
224
+ if (key && seen.has(key)) continue;
225
+ if (key) seen.add(key);
226
+ out.push(offer);
227
+ }
228
+ return out;
229
+ }
230
+ function buildFlightRoute(snapshot) {
231
+ const origin = resolveAirportCode(snapshot.pickupLocation);
232
+ const destination = resolveAirportCode(snapshot.dropoffLocation);
233
+ const adults = Math.max(1, snapshot.guests);
234
+ const departureDate = snapshot.dates[0] ? formatLocalDate(snapshot.dates[0]) : formatLocalDate(/* @__PURE__ */ new Date());
235
+ const route = {
236
+ origin,
237
+ destination,
238
+ departureDate,
239
+ adults
240
+ };
241
+ if (snapshot.returnFlight && snapshot.dates[1]) {
242
+ route.returnDate = formatLocalDate(snapshot.dates[1]);
243
+ }
244
+ return route;
245
+ }
246
+ async function searchTravelFlightsWithMeta(snapshot, opts) {
247
+ var _a, _b;
248
+ const route = buildFlightRoute(snapshot);
249
+ if (!route.origin || !route.destination || !route.departureDate) {
250
+ throw new Error(`Could not resolve airports for \u201C${snapshot.pickupLocation || "origin"}\u201D \u2192 \u201C${snapshot.dropoffLocation || "destination"}\u201D. Try IATA codes (e.g. LHR, JFK).`);
251
+ }
252
+ const result = await invokeFlightSearchConnector(__spreadValues({
253
+ routes: [route],
254
+ maxResults: [300]
255
+ }, ((_a = opts == null ? void 0 : opts.providers) == null ? void 0 : _a.length) ? {
256
+ providers: opts.providers
257
+ } : {}));
258
+ if (!result.success) {
259
+ throw new Error(result.error || "Flight search failed");
260
+ }
261
+ const data = result.data;
262
+ if (!((_b = data == null ? void 0 : data.searches) == null ? void 0 : _b.length)) {
263
+ throw new Error(result.error || "Flight search returned no results");
264
+ }
265
+ const routeLabel = [snapshot.pickupLocation, snapshot.dropoffLocation].filter(Boolean).join(" \u2192 ");
266
+ const properties = [];
267
+ const seen = /* @__PURE__ */ new Set();
268
+ const seenItineraries = /* @__PURE__ */ new Set();
269
+ for (const search of data.searches) {
270
+ collectOffers(search).forEach((offer, index) => {
271
+ var _a2, _b2;
272
+ const mapped = formatFlightOffer(offer, search, routeLabel, index);
273
+ if (!mapped || seen.has(mapped.id)) return;
274
+ const itineraryKey = ((_a2 = mapped.flightNumbers) == null ? void 0 : _a2.length) ? `${mapped.flightNumbers.join("|")}::${(_b2 = mapped.cabinClass) != null ? _b2 : ""}::${mapped.bookable ? "yantra" : "ext"}` : void 0;
275
+ if (itineraryKey) {
276
+ if (seenItineraries.has(itineraryKey)) return;
277
+ seenItineraries.add(itineraryKey);
278
+ }
279
+ seen.add(mapped.id);
280
+ properties.push(mapped);
281
+ });
282
+ }
283
+ const sourceErrors = data.searches.filter((s) => s.error).map((s) => s.error);
284
+ return {
285
+ properties,
286
+ totalCount: properties.length,
287
+ sourceErrors
288
+ };
289
+ }export{FLIGHT_FAST_PROVIDERS,FLIGHT_META_PROVIDERS,resolveAirportCode,searchTravelFlightsWithMeta};//# sourceMappingURL=travelFlightSearch.js.map