@adminide-stack/yantra-mobile 12.0.69-alpha.9 → 12.0.69

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 (522) 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/config/env-config.js +4 -0
  8. package/lib/config/env-config.js.map +1 -1
  9. package/lib/contexts/ChatLiveStreamContext.js +4 -1
  10. package/lib/contexts/ChatLiveStreamContext.js.map +1 -1
  11. package/lib/features/agent-chat/NativeAgentChat.js +2 -0
  12. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  13. package/lib/features/apps/AppsCatalog.js +2 -2
  14. package/lib/features/apps/AppsCatalog.js.map +1 -1
  15. package/lib/features/audio-input/MicErrorBoundary.js +2 -2
  16. package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
  17. package/lib/features/canvas/AudioEditorExperience.js +308 -0
  18. package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
  19. package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
  20. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
  21. package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
  22. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
  23. package/lib/features/canvas/CanvasChatResultCard.js +113 -0
  24. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
  25. package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
  26. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
  27. package/lib/features/canvas/CanvasExperience.js +859 -0
  28. package/lib/features/canvas/CanvasExperience.js.map +1 -0
  29. package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
  30. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
  31. package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
  32. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
  33. package/lib/features/canvas/CanvasLooksPanel.js +184 -0
  34. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
  35. package/lib/features/canvas/CanvasTasksPanel.js +138 -0
  36. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
  37. package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
  38. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
  39. package/lib/features/canvas/CanvasToolDock.js +423 -0
  40. package/lib/features/canvas/CanvasToolDock.js.map +1 -0
  41. package/lib/features/canvas/FrameExtractorExperience.js +242 -0
  42. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
  43. package/lib/features/canvas/ImageEditorExperience.js +491 -0
  44. package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
  45. package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
  46. package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
  47. package/lib/features/canvas/MoodboardExperience.js +205 -0
  48. package/lib/features/canvas/MoodboardExperience.js.map +1 -0
  49. package/lib/features/canvas/NativeCanvasViewer.js +929 -0
  50. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
  51. package/lib/features/canvas/PromoContextFields.js +150 -0
  52. package/lib/features/canvas/PromoContextFields.js.map +1 -0
  53. package/lib/features/canvas/SetStudioExperience.js +323 -0
  54. package/lib/features/canvas/SetStudioExperience.js.map +1 -0
  55. package/lib/features/canvas/VideoClipsExperience.js +175 -0
  56. package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
  57. package/lib/features/canvas/VideoEditExperience.js +824 -0
  58. package/lib/features/canvas/VideoEditExperience.js.map +1 -0
  59. package/lib/features/canvas/VideoEditorExperience.js +3050 -0
  60. package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
  61. package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
  62. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
  63. package/lib/features/canvas/aiEdit.js +53 -0
  64. package/lib/features/canvas/aiEdit.js.map +1 -0
  65. package/lib/features/canvas/canvasAgentChat.js +76 -0
  66. package/lib/features/canvas/canvasAgentChat.js.map +1 -0
  67. package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
  68. package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
  69. package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
  70. package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
  71. package/lib/features/canvas/canvasChatDisplay.js +38 -0
  72. package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
  73. package/lib/features/canvas/canvasChatTemplates.js +219 -0
  74. package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
  75. package/lib/features/canvas/canvasCore.js +138 -1
  76. package/lib/features/canvas/canvasCore.js.map +1 -1
  77. package/lib/features/canvas/canvasEditOps.js +224 -0
  78. package/lib/features/canvas/canvasEditOps.js.map +1 -0
  79. package/lib/features/canvas/canvasTasks.js +187 -0
  80. package/lib/features/canvas/canvasTasks.js.map +1 -0
  81. package/lib/features/canvas/designPromptTemplates.js +3084 -0
  82. package/lib/features/canvas/designPromptTemplates.js.map +1 -0
  83. package/lib/features/canvas/editTools.js +54 -0
  84. package/lib/features/canvas/editTools.js.map +1 -0
  85. package/lib/features/canvas/extendVideo.js +5 -0
  86. package/lib/features/canvas/extendVideo.js.map +1 -0
  87. package/lib/features/canvas/frameExtract.js +33 -0
  88. package/lib/features/canvas/frameExtract.js.map +1 -0
  89. package/lib/features/canvas/generationModels.js +201 -0
  90. package/lib/features/canvas/generationModels.js.map +1 -0
  91. package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
  92. package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
  93. package/lib/features/canvas/influencer/productReel.js +72 -0
  94. package/lib/features/canvas/influencer/productReel.js.map +1 -0
  95. package/lib/features/canvas/influencer/reelPlan.js +159 -0
  96. package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
  97. package/lib/features/canvas/moodboardCore.js +13 -0
  98. package/lib/features/canvas/moodboardCore.js.map +1 -0
  99. package/lib/features/canvas/promoProjectImport.js +99 -0
  100. package/lib/features/canvas/promoProjectImport.js.map +1 -0
  101. package/lib/features/canvas/promoVideo.js +312 -0
  102. package/lib/features/canvas/promoVideo.js.map +1 -0
  103. package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
  104. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
  105. package/lib/features/canvas/sessionIdentity.js +28 -1
  106. package/lib/features/canvas/sessionIdentity.js.map +1 -1
  107. package/lib/features/canvas/set/SetViewportWebView.js +133 -0
  108. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
  109. package/lib/features/canvas/set/cameraPath.js +194 -0
  110. package/lib/features/canvas/set/cameraPath.js.map +1 -0
  111. package/lib/features/canvas/set/setProject.js +24 -0
  112. package/lib/features/canvas/set/setProject.js.map +1 -0
  113. package/lib/features/canvas/storageLibrary.js +184 -0
  114. package/lib/features/canvas/storageLibrary.js.map +1 -0
  115. package/lib/features/canvas/studioCatalog.js +129 -0
  116. package/lib/features/canvas/studioCatalog.js.map +1 -0
  117. package/lib/features/canvas/studioLooks.js +189 -0
  118. package/lib/features/canvas/studioLooks.js.map +1 -0
  119. package/lib/features/canvas/surfaceIndex.js +63 -1
  120. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  121. package/lib/features/canvas/templateImport/invideoNative.js +221 -0
  122. package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
  123. package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
  124. package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
  125. package/lib/features/canvas/templateImport/renderConfig.js +93 -0
  126. package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
  127. package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
  128. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
  129. package/lib/features/canvas/video3d.js +109 -0
  130. package/lib/features/canvas/video3d.js.map +1 -0
  131. package/lib/features/canvas/videoClips.js +42 -0
  132. package/lib/features/canvas/videoClips.js.map +1 -0
  133. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
  134. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
  135. package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
  136. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
  137. package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
  138. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
  139. package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
  140. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
  141. package/lib/features/canvas/videoEditor/editorModel.js +346 -0
  142. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
  143. package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
  144. package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
  145. package/lib/features/canvas/videoEditor/filters.js +41 -0
  146. package/lib/features/canvas/videoEditor/filters.js.map +1 -0
  147. package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
  148. package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
  150. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
  151. package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
  152. package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
  153. package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
  154. package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
  155. package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
  156. package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
  157. package/lib/features/canvas/videoRenderer.js +8 -0
  158. package/lib/features/canvas/videoRenderer.js.map +1 -0
  159. package/lib/features/canvas/withRemoteSafeArea.js +2 -2
  160. package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
  161. package/lib/features/characters/characterStudioProps.js +14 -0
  162. package/lib/features/characters/characterStudioProps.js.map +1 -0
  163. package/lib/features/chat/ChatCodeBlock.js +7 -3
  164. package/lib/features/chat/ChatCodeBlock.js.map +1 -1
  165. package/lib/features/chat/ChatTranscript.js +7 -3
  166. package/lib/features/chat/ChatTranscript.js.map +1 -1
  167. package/lib/features/chat/ChatWidgetCard.js +13 -0
  168. package/lib/features/chat/ChatWidgetCard.js.map +1 -0
  169. package/lib/features/chat/ConnectorConnectCard.js +164 -0
  170. package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
  171. package/lib/features/chat/ConnectorConnectPrompt.js +254 -0
  172. package/lib/features/chat/ConnectorConnectPrompt.js.map +1 -0
  173. package/lib/features/chat/MessageActionBar.js.map +1 -1
  174. package/lib/features/chat/QueuedFollowUps.js +71 -0
  175. package/lib/features/chat/QueuedFollowUps.js.map +1 -0
  176. package/lib/features/chat/chatWidgets.js +37 -0
  177. package/lib/features/chat/chatWidgets.js.map +1 -0
  178. package/lib/features/chat/connectorConnect.js +179 -0
  179. package/lib/features/chat/connectorConnect.js.map +1 -0
  180. package/lib/features/chat/connectorConnectHandbacks.js +55 -0
  181. package/lib/features/chat/connectorConnectHandbacks.js.map +1 -0
  182. package/lib/features/design/DesignEditorExperience.js +643 -0
  183. package/lib/features/design/DesignEditorExperience.js.map +1 -0
  184. package/lib/features/design/DesignExperience.js +444 -0
  185. package/lib/features/design/DesignExperience.js.map +1 -0
  186. package/lib/features/design/designCore.js +298 -0
  187. package/lib/features/design/designCore.js.map +1 -0
  188. package/lib/features/design/designIndex.js +150 -0
  189. package/lib/features/design/designIndex.js.map +1 -0
  190. package/lib/features/design/exportDesign.js +133 -0
  191. package/lib/features/design/exportDesign.js.map +1 -0
  192. package/lib/features/job-search/ApplicationsPanel.js +907 -0
  193. package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
  194. package/lib/features/job-search/ContactsPanel.js +627 -0
  195. package/lib/features/job-search/ContactsPanel.js.map +1 -0
  196. package/lib/features/job-search/InsightsPanel.js +299 -0
  197. package/lib/features/job-search/InsightsPanel.js.map +1 -0
  198. package/lib/features/job-search/InterviewPanel.js +637 -0
  199. package/lib/features/job-search/InterviewPanel.js.map +1 -0
  200. package/lib/features/job-search/JdPastePrompt.js +130 -0
  201. package/lib/features/job-search/JdPastePrompt.js.map +1 -0
  202. package/lib/features/job-search/JobCard.js +199 -0
  203. package/lib/features/job-search/JobCard.js.map +1 -0
  204. package/lib/features/job-search/JobDetailSheet.js +255 -0
  205. package/lib/features/job-search/JobDetailSheet.js.map +1 -0
  206. package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
  207. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
  208. package/lib/features/job-search/JobSearchExperience.js +1324 -0
  209. package/lib/features/job-search/JobSearchExperience.js.map +1 -0
  210. package/lib/features/job-search/JobSearchLocationField.js +231 -0
  211. package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
  212. package/lib/features/job-search/ProfilePanel.js +679 -0
  213. package/lib/features/job-search/ProfilePanel.js.map +1 -0
  214. package/lib/features/job-search/RepliesPanel.js +344 -0
  215. package/lib/features/job-search/RepliesPanel.js.map +1 -0
  216. package/lib/features/job-search/SavedPanel.js +297 -0
  217. package/lib/features/job-search/SavedPanel.js.map +1 -0
  218. package/lib/features/job-search/chat/widgetContent.js +29 -0
  219. package/lib/features/job-search/chat/widgetContent.js.map +1 -0
  220. package/lib/features/job-search/cvText.js +91 -0
  221. package/lib/features/job-search/cvText.js.map +1 -0
  222. package/lib/features/job-search/jobAgentSwipe.js +7 -0
  223. package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
  224. package/lib/features/job-search/jobSearchClient.js +184 -0
  225. package/lib/features/job-search/jobSearchClient.js.map +1 -0
  226. package/lib/features/job-search/jobSearchExec.js +14 -0
  227. package/lib/features/job-search/jobSearchExec.js.map +1 -0
  228. package/lib/features/job-search/jobSearchRuntime.js +50 -0
  229. package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
  230. package/lib/features/job-search/jobSearchTheme.js +44 -0
  231. package/lib/features/job-search/jobSearchTheme.js.map +1 -0
  232. package/lib/features/job-search/savedJobs.js +85 -0
  233. package/lib/features/job-search/savedJobs.js.map +1 -0
  234. package/lib/features/job-search/searchHistory.js +117 -0
  235. package/lib/features/job-search/searchHistory.js.map +1 -0
  236. package/lib/features/job-search/types.js +36 -0
  237. package/lib/features/job-search/types.js.map +1 -0
  238. package/lib/features/job-search/useJobSearchSession.js +558 -0
  239. package/lib/features/job-search/useJobSearchSession.js.map +1 -0
  240. package/lib/features/messaging/ChatComponents.js +529 -0
  241. package/lib/features/messaging/ChatComponents.js.map +1 -0
  242. package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
  243. package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
  244. package/lib/features/messaging/ContactsScreen.js +288 -0
  245. package/lib/features/messaging/ContactsScreen.js.map +1 -0
  246. package/lib/features/messaging/ConversationListScreen.js +147 -0
  247. package/lib/features/messaging/ConversationListScreen.js.map +1 -0
  248. package/lib/features/messaging/MessageActions.js +290 -0
  249. package/lib/features/messaging/MessageActions.js.map +1 -0
  250. package/lib/features/messaging/NativeChatExperience.js +189 -0
  251. package/lib/features/messaging/NativeChatExperience.js.map +1 -0
  252. package/lib/features/messaging/RegistrationScreen.js +11 -14
  253. package/lib/features/messaging/RegistrationScreen.js.map +1 -1
  254. package/lib/features/messaging/ThreadScreen.js +215 -0
  255. package/lib/features/messaging/ThreadScreen.js.map +1 -0
  256. package/lib/features/messaging/chatInviteLink.js +52 -0
  257. package/lib/features/messaging/chatInviteLink.js.map +1 -0
  258. package/lib/features/messaging/chatModel.js +278 -0
  259. package/lib/features/messaging/chatModel.js.map +1 -0
  260. package/lib/features/messaging/chatOperations.js +106 -1
  261. package/lib/features/messaging/chatOperations.js.map +1 -1
  262. package/lib/features/messaging/emojiCatalog.js +60 -0
  263. package/lib/features/messaging/emojiCatalog.js.map +1 -0
  264. package/lib/features/messaging/emojiKeywords.js +1592 -0
  265. package/lib/features/messaging/emojiKeywords.js.map +1 -0
  266. package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
  267. package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
  268. package/lib/features/messaging/phoneNumbers.js +52 -1
  269. package/lib/features/messaging/phoneNumbers.js.map +1 -1
  270. package/lib/features/messaging/sha256.js +68 -0
  271. package/lib/features/messaging/sha256.js.map +1 -0
  272. package/lib/features/messaging/useChatData.js +421 -0
  273. package/lib/features/messaging/useChatData.js.map +1 -0
  274. package/lib/features/messaging/useContactMatches.js +191 -0
  275. package/lib/features/messaging/useContactMatches.js.map +1 -0
  276. package/lib/features/messaging/usePhoneVerification.js +12 -12
  277. package/lib/features/messaging/usePhoneVerification.js.map +1 -1
  278. package/lib/features/messaging/yantraChatOrg.js +8 -3
  279. package/lib/features/messaging/yantraChatOrg.js.map +1 -1
  280. package/lib/features/resume/AnnotateModal.js +100 -0
  281. package/lib/features/resume/AnnotateModal.js.map +1 -0
  282. package/lib/features/resume/AnnotationBar.js +69 -0
  283. package/lib/features/resume/AnnotationBar.js.map +1 -0
  284. package/lib/features/resume/ExportSheet.js +105 -0
  285. package/lib/features/resume/ExportSheet.js.map +1 -0
  286. package/lib/features/resume/ResumeAgentChatPane.js +95 -0
  287. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
  288. package/lib/features/resume/ResumeEditor.js +676 -0
  289. package/lib/features/resume/ResumeEditor.js.map +1 -0
  290. package/lib/features/resume/ResumeExperience.js +235 -0
  291. package/lib/features/resume/ResumeExperience.js.map +1 -0
  292. package/lib/features/resume/ResumeListPanel.js +262 -0
  293. package/lib/features/resume/ResumeListPanel.js.map +1 -0
  294. package/lib/features/resume/ResumeToolbar.js +236 -0
  295. package/lib/features/resume/ResumeToolbar.js.map +1 -0
  296. package/lib/features/resume/annotations.js +17 -0
  297. package/lib/features/resume/annotations.js.map +1 -0
  298. package/lib/features/resume/documentCss.js +52 -0
  299. package/lib/features/resume/documentCss.js.map +1 -0
  300. package/lib/features/resume/draft.js +89 -0
  301. package/lib/features/resume/draft.js.map +1 -0
  302. package/lib/features/resume/exportResume.js +43 -0
  303. package/lib/features/resume/exportResume.js.map +1 -0
  304. package/lib/features/resume/pickResumePhoto.js +22 -0
  305. package/lib/features/resume/pickResumePhoto.js.map +1 -0
  306. package/lib/features/resume/renderResume.js +121 -0
  307. package/lib/features/resume/renderResume.js.map +1 -0
  308. package/lib/features/resume/resumeClient.js +69 -0
  309. package/lib/features/resume/resumeClient.js.map +1 -0
  310. package/lib/features/resume/resumeExec.js +14 -0
  311. package/lib/features/resume/resumeExec.js.map +1 -0
  312. package/lib/features/resume/resumeIndex.js +244 -0
  313. package/lib/features/resume/resumeIndex.js.map +1 -0
  314. package/lib/features/resume/resumeRuntime.js +50 -0
  315. package/lib/features/resume/resumeRuntime.js.map +1 -0
  316. package/lib/features/resume/resumeTheme.js +34 -0
  317. package/lib/features/resume/resumeTheme.js.map +1 -0
  318. package/lib/features/resume/resumeToolbox.js +49 -0
  319. package/lib/features/resume/resumeToolbox.js.map +1 -0
  320. package/lib/features/resume/templates.js +90 -0
  321. package/lib/features/resume/templates.js.map +1 -0
  322. package/lib/features/resume/types.js +10 -0
  323. package/lib/features/resume/types.js.map +1 -0
  324. package/lib/features/resume/useResumeSession.js +183 -0
  325. package/lib/features/resume/useResumeSession.js.map +1 -0
  326. package/lib/features/shopping/DealsPanel.js +254 -0
  327. package/lib/features/shopping/DealsPanel.js.map +1 -0
  328. package/lib/features/shopping/HistoryPanel.js +147 -0
  329. package/lib/features/shopping/HistoryPanel.js.map +1 -0
  330. package/lib/features/shopping/OrdersPanel.js +157 -0
  331. package/lib/features/shopping/OrdersPanel.js.map +1 -0
  332. package/lib/features/shopping/ProductCard.js +326 -0
  333. package/lib/features/shopping/ProductCard.js.map +1 -0
  334. package/lib/features/shopping/ProductDetailSheet.js +313 -0
  335. package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
  336. package/lib/features/shopping/ProductFilterBar.js +153 -0
  337. package/lib/features/shopping/ProductFilterBar.js.map +1 -0
  338. package/lib/features/shopping/ProductPhoto.js +27 -0
  339. package/lib/features/shopping/ProductPhoto.js.map +1 -0
  340. package/lib/features/shopping/SavedPanel.js +139 -0
  341. package/lib/features/shopping/SavedPanel.js.map +1 -0
  342. package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
  343. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
  344. package/lib/features/shopping/ShoppingExperience.js +888 -0
  345. package/lib/features/shopping/ShoppingExperience.js.map +1 -0
  346. package/lib/features/shopping/TrendingSections.js +199 -0
  347. package/lib/features/shopping/TrendingSections.js.map +1 -0
  348. package/lib/features/shopping/WatchlistPanel.js +148 -0
  349. package/lib/features/shopping/WatchlistPanel.js.map +1 -0
  350. package/lib/features/shopping/catalog.js +238 -0
  351. package/lib/features/shopping/catalog.js.map +1 -0
  352. package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
  353. package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
  354. package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
  355. package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
  356. package/lib/features/shopping/chat/widgetContent.js +233 -0
  357. package/lib/features/shopping/chat/widgetContent.js.map +1 -0
  358. package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
  359. package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
  360. package/lib/features/shopping/productImage.js +42 -0
  361. package/lib/features/shopping/productImage.js.map +1 -0
  362. package/lib/features/shopping/savedProducts.js +84 -0
  363. package/lib/features/shopping/savedProducts.js.map +1 -0
  364. package/lib/features/shopping/services/catalogActions.js +166 -0
  365. package/lib/features/shopping/services/catalogActions.js.map +1 -0
  366. package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
  367. package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
  368. package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
  369. package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
  370. package/lib/features/shopping/services/productAvailability.js +25 -0
  371. package/lib/features/shopping/services/productAvailability.js.map +1 -0
  372. package/lib/features/shopping/services/productFilters.js +72 -0
  373. package/lib/features/shopping/services/productFilters.js.map +1 -0
  374. package/lib/features/shopping/services/retailerUrl.js +75 -0
  375. package/lib/features/shopping/services/retailerUrl.js.map +1 -0
  376. package/lib/features/shopping/services/shoppingChatReply.js +46 -0
  377. package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
  378. package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
  379. package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
  380. package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
  381. package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
  382. package/lib/features/shopping/shopAgentSwipe.js +7 -0
  383. package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
  384. package/lib/features/shopping/shoppingCart.js +116 -0
  385. package/lib/features/shopping/shoppingCart.js.map +1 -0
  386. package/lib/features/shopping/shoppingExec.js +14 -0
  387. package/lib/features/shopping/shoppingExec.js.map +1 -0
  388. package/lib/features/shopping/shoppingHistoryStore.js +176 -0
  389. package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
  390. package/lib/features/shopping/shoppingRuntime.js +63 -0
  391. package/lib/features/shopping/shoppingRuntime.js.map +1 -0
  392. package/lib/features/shopping/timeAgo.js +14 -0
  393. package/lib/features/shopping/timeAgo.js.map +1 -0
  394. package/lib/features/shopping/useShoppingSearch.js +262 -0
  395. package/lib/features/shopping/useShoppingSearch.js.map +1 -0
  396. package/lib/features/travel/BookHeaderGlow.js +48 -0
  397. package/lib/features/travel/BookHeaderGlow.js.map +1 -0
  398. package/lib/features/travel/BookingsPanel.js +29 -0
  399. package/lib/features/travel/BookingsPanel.js.map +1 -0
  400. package/lib/features/travel/DiscoverPanel.js +155 -0
  401. package/lib/features/travel/DiscoverPanel.js.map +1 -0
  402. package/lib/features/travel/FlightCompareBar.js +86 -0
  403. package/lib/features/travel/FlightCompareBar.js.map +1 -0
  404. package/lib/features/travel/FlightDealsBoard.js +100 -0
  405. package/lib/features/travel/FlightDealsBoard.js.map +1 -0
  406. package/lib/features/travel/HistoryPanel.js +82 -0
  407. package/lib/features/travel/HistoryPanel.js.map +1 -0
  408. package/lib/features/travel/PopularDestinations.js +144 -0
  409. package/lib/features/travel/PopularDestinations.js.map +1 -0
  410. package/lib/features/travel/SavedPanel.js +27 -0
  411. package/lib/features/travel/SavedPanel.js.map +1 -0
  412. package/lib/features/travel/TravelAgentChatPane.js +303 -0
  413. package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
  414. package/lib/features/travel/TravelBookHero.js +425 -0
  415. package/lib/features/travel/TravelBookHero.js.map +1 -0
  416. package/lib/features/travel/TravelDatesField.js +234 -0
  417. package/lib/features/travel/TravelDatesField.js.map +1 -0
  418. package/lib/features/travel/TravelDetailSheet.js +106 -0
  419. package/lib/features/travel/TravelDetailSheet.js.map +1 -0
  420. package/lib/features/travel/TravelExperience.js +624 -0
  421. package/lib/features/travel/TravelExperience.js.map +1 -0
  422. package/lib/features/travel/TravelGuestsField.js +85 -0
  423. package/lib/features/travel/TravelGuestsField.js.map +1 -0
  424. package/lib/features/travel/TravelLanding.js +318 -0
  425. package/lib/features/travel/TravelLanding.js.map +1 -0
  426. package/lib/features/travel/TravelLocationField.js +179 -0
  427. package/lib/features/travel/TravelLocationField.js.map +1 -0
  428. package/lib/features/travel/TravelPropertyCard.js +266 -0
  429. package/lib/features/travel/TravelPropertyCard.js.map +1 -0
  430. package/lib/features/travel/TravelPropertyPhoto.js +22 -0
  431. package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
  432. package/lib/features/travel/TravelRailFlyout.js +79 -0
  433. package/lib/features/travel/TravelRailFlyout.js.map +1 -0
  434. package/lib/features/travel/TravelResultsMap.js +126 -0
  435. package/lib/features/travel/TravelResultsMap.js.map +1 -0
  436. package/lib/features/travel/WorkspacePanel.js +148 -0
  437. package/lib/features/travel/WorkspacePanel.js.map +1 -0
  438. package/lib/features/travel/appNav.js +244 -0
  439. package/lib/features/travel/appNav.js.map +1 -0
  440. package/lib/features/travel/calendarDays.js +50 -0
  441. package/lib/features/travel/calendarDays.js.map +1 -0
  442. package/lib/features/travel/catalog.js +72 -0
  443. package/lib/features/travel/catalog.js.map +1 -0
  444. package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
  445. package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
  446. package/lib/features/travel/chat/widgetContent.js +107 -0
  447. package/lib/features/travel/chat/widgetContent.js.map +1 -0
  448. package/lib/features/travel/flightDeals.js +65 -0
  449. package/lib/features/travel/flightDeals.js.map +1 -0
  450. package/lib/features/travel/mapCoordinates.js +36 -0
  451. package/lib/features/travel/mapCoordinates.js.map +1 -0
  452. package/lib/features/travel/parseTravelIntent.js +303 -0
  453. package/lib/features/travel/parseTravelIntent.js.map +1 -0
  454. package/lib/features/travel/savedStays.js +66 -0
  455. package/lib/features/travel/savedStays.js.map +1 -0
  456. package/lib/features/travel/services/flightDealsBoard.js +111 -0
  457. package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
  458. package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
  459. package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
  460. package/lib/features/travel/services/geocodeLocation.js +79 -0
  461. package/lib/features/travel/services/geocodeLocation.js.map +1 -0
  462. package/lib/features/travel/services/placePredictions.js +113 -0
  463. package/lib/features/travel/services/placePredictions.js.map +1 -0
  464. package/lib/features/travel/services/resolveOriginCity.js +27 -0
  465. package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
  466. package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
  467. package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
  468. package/lib/features/travel/services/travelFlightSearch.js +289 -0
  469. package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
  470. package/lib/features/travel/services/travelPropertySearch.js +377 -0
  471. package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
  472. package/lib/features/travel/travelAgentSwipe.js +7 -0
  473. package/lib/features/travel/travelAgentSwipe.js.map +1 -0
  474. package/lib/features/travel/travelExec.js +14 -0
  475. package/lib/features/travel/travelExec.js.map +1 -0
  476. package/lib/features/travel/travelHistoryStore.js +108 -0
  477. package/lib/features/travel/travelHistoryStore.js.map +1 -0
  478. package/lib/features/travel/travelRuntime.js +62 -0
  479. package/lib/features/travel/travelRuntime.js.map +1 -0
  480. package/lib/features/travel/types.js +9 -0
  481. package/lib/features/travel/types.js.map +1 -0
  482. package/lib/features/travel/useTravelSearch.js +330 -0
  483. package/lib/features/travel/useTravelSearch.js.map +1 -0
  484. package/lib/features/travel/workspaceContent.js +548 -0
  485. package/lib/features/travel/workspaceContent.js.map +1 -0
  486. package/lib/hooks/useCdecliChannel.js +128 -6
  487. package/lib/hooks/useCdecliChannel.js.map +1 -1
  488. package/lib/hooks/useChatApi.js +4 -2
  489. package/lib/hooks/useChatApi.js.map +1 -1
  490. package/lib/hooks/useChatStream.js +77 -63
  491. package/lib/hooks/useChatStream.js.map +1 -1
  492. package/lib/hooks/useHostConnectorCard.js +24 -0
  493. package/lib/hooks/useHostConnectorCard.js.map +1 -0
  494. package/lib/hooks/useObtainSystemToken.js +23 -5
  495. package/lib/hooks/useObtainSystemToken.js.map +1 -1
  496. package/lib/hooks/webViewRetentionPolicy.js +1 -0
  497. package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
  498. package/lib/index.js +1 -1
  499. package/lib/index.js.map +1 -1
  500. package/lib/screens/Chat/index.js +51 -22
  501. package/lib/screens/Chat/index.js.map +1 -1
  502. package/lib/screens/ChatNative/index.js +13 -2
  503. package/lib/screens/ChatNative/index.js.map +1 -1
  504. package/lib/screens/Home/HomeScreen.js +3 -3
  505. package/lib/screens/Home/HomeScreen.js.map +1 -1
  506. package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
  507. package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
  508. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +12 -6
  509. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  510. package/lib/screens/ResumeNative/useResumeHostChat.js +12 -6
  511. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  512. package/lib/screens/ShoppingNative/useShoppingHostChat.js +12 -6
  513. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  514. package/lib/screens/TravelNative/useTravelHostChat.js +12 -6
  515. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  516. package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
  517. package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
  518. package/lib/services/brainQuickReply.js +38 -1
  519. package/lib/services/brainQuickReply.js.map +1 -1
  520. package/lib/state/chatThreadMerge.js +6 -1
  521. package/lib/state/chatThreadMerge.js.map +1 -1
  522. package/package.json +6 -4
@@ -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":"sGAmBO,SAAS,2BAA2B,IAAyC,EAAA;AAClF,EAAO,OAAA,IAAA,CAAK,IAAI,CAAO,GAAA,KAAA;AApBzB,IAAA,IAAA,EAAA,EAAA,EAAA;AAqBI,IAAA,MAAM,eAAe,GAAI,CAAA,YAAA,IAAgB,GAAI,CAAA,IAAA,IAAQ,IAAI,IAAK,EAAA;AAC9D,IAAI,IAAA,CAAC,aAAoB,OAAA,IAAA;AACzB,IAAM,MAAA,IAAA,GAAA,CAAQ,GAAI,CAAA,IAAA,IAAQ,WAAY,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAC,CAAK,IAAA,WAAA,EAAa,IAAK,EAAA;AACzE,IAAA,MAAM,SAAY,GAAA,WAAA,CAAY,UAAW,CAAA,IAAI,CAAI,GAAA,WAAA,CAAY,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA,CAAE,OAAQ,CAAA,OAAA,EAAS,EAAE,CAAI,GAAA,WAAA;AACvG,IAAO,OAAA;AAAA,MACL,QAAA,EAAU,QAAO,EAAI,GAAA,CAAA,EAAA,GAAA,GAAA,CAAA,QAAA,KAAJ,YAAgB,GAAI,CAAA,MAAA,KAApB,YAA8B,WAAW,CAAA;AAAA,MAC1D,WAAA;AAAA,MACA,qBAAuB,EAAA;AAAA,QACrB,SAAW,EAAA,IAAA;AAAA,QACX,gBAAgB,SAAa,IAAA;AAAA;AAC/B,KACF;AAAA,GACD,CAAE,CAAA,MAAA,CAAO,CAAC,GAAgC,KAAA,OAAA,CAAQ,GAAG,CAAC,CAAA;AACzD;AACA,eAAe,kBAAA,CAAmB,KAAe,EAAA,MAAA,EAAgB,KAA2C,EAAA;AAnC5G,EAAA,IAAA,EAAA;AAoCE,EAAA,MAAM,GAAM,GAAA,CAAA,mEAAA,EAA2E,kBAAmB,CAAA,KAAK,CAAC,CAAA,OAAA,EAAU,kBAAmB,CAAA,KAAK,CAAC,CAAA,KAAA,EAAQ,kBAAmB,CAAA,MAAM,CAAC,CAAA,CAAA;AACrL,EAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,EAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAWlC,EAAA,IAAI,KAAK,MAAW,KAAA,IAAA,IAAQ,KAAK,MAAW,KAAA,cAAA,SAAuB,EAAC;AACpE,EAAA,OAAA,CAAA,CAAQ,EAAK,GAAA,IAAA,CAAA,WAAA,KAAL,IAAoB,GAAA,EAAA,GAAA,EAAI,EAAA,MAAA,CAAO,CAAO,GAAA,KAAA,GAAA,CAAI,QAAY,IAAA,GAAA,CAAI,WAAW,CAAA,CAAE,IAAI,CAAQ,GAAA,MAAA;AAAA,IACzF,UAAU,GAAI,CAAA,QAAA;AAAA,IACd,aAAa,GAAI,CAAA,WAAA;AAAA,IACjB,qBAAA,EAAuB,IAAI,qBAAwB,GAAA;AAAA,MACjD,SAAW,EAAA,GAAA,CAAI,qBAAsB,CAAA,SAAA,IAAa,GAAI,CAAA,WAAA;AAAA,MACtD,cAAA,EAAgB,IAAI,qBAAsB,CAAA;AAAA,KACxC,GAAA;AAAA,GACJ,CAAA,CAAA;AACJ;AACA,eAAe,sBAAsB,KAA2C,EAAA;AAC9E,EAAA,MAAM,GAAM,GAAA,CAAA,kFAAA,EAAqF,kBAAmB,CAAA,KAAK,CAAC,CAAA,CAAA;AAC1H,EAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAK,EAAA;AAAA,IAChC,OAAS,EAAA;AAAA,MACP,YAAc,EAAA;AAAA;AAChB,GACD,CAAA;AACD,EAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAClC,EAAA,OAAO,2BAA2B,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,IAAA,GAAO,EAAE,CAAA;AACnE;AAGsB,eAAA,qBAAA,CAAsB,KAAe,EAAA,KAAA,GAAQ,SAAuC,EAAA;AAvE1G,EAAA,IAAA,EAAA;AAwEE,EAAM,MAAA,OAAA,GAAU,MAAM,IAAK,EAAA;AAC3B,EAAA,IAAI,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA,OAAO,EAAC;AAChC,EAAI,IAAA;AACF,IAAA,MAAM,MAAS,GAAA,CAAA,EAAA,GAAA,gBAAA,EAAmB,CAAA,MAAA,CAAO,wBAA1B,IAA+C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,EAAA;AAC9D,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,MAAM,MAAS,GAAA,MAAM,kBAAmB,CAAA,OAAA,EAAS,QAAQ,KAAK,CAAA;AAC9D,MAAI,IAAA,MAAA,CAAO,QAAe,OAAA,MAAA;AAAA;AAE5B,IAAO,OAAA,MAAM,sBAAsB,OAAO,CAAA;AAAA,GACpC,CAAA,OAAA,CAAA,EAAA;AACN,IAAA,OAAO,EAAC;AAAA;AAEZ;AACA,eAAsB,kBAAkB,UAAsD,EAAA;AAC5F,EAAA,MAAM,GAAM,GAAA,MAAM,eAAgB,CAAA,UAAA,CAAW,WAAW,CAAA;AACxD,EAAA,IAAI,GAAK,EAAA,OAAO,gBAAiB,CAAA,GAAA,EAAK,WAAW,QAAQ,CAAA;AACzD,EAAO,OAAA;AAAA,IACL,UAAU,UAAW,CAAA,QAAA;AAAA,IACrB,kBAAkB,UAAW,CAAA;AAAA,GAC/B;AACF;AACA,eAAsB,qBAAwD,GAAA;AA7F9E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8FE,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,MAAW,MAAA,SAAA,EAAkB,OAAA,IAAA;AACvC,IAAM,MAAA,GAAA,GAAM,MAAM,QAAA,CAAS,uBAAwB,CAAA;AAAA,MACjD,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,KACrC,CAAA;AACD,IAAM,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,IAAM,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,IAAA,IAAI,OAAO,GAAQ,KAAA,QAAA,IAAY,OAAO,GAAA,KAAQ,UAAiB,OAAA,IAAA;AAC/D,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,mBAAoB,CAAA;AAAA,MAC9C,QAAU,EAAA,GAAA;AAAA,MACV,SAAW,EAAA;AAAA,KACZ,CAAA;AACD,IAAA,MAAM,QAAQ,IAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,CAAA,CAAA;AACrB,IAAA,MAAM,mBAAmB,CAAC,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAM,EAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,MAAM,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,MAAA,EAAQ,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,OAAO,EAAE,MAAO,CAAA,OAAO,CAAE,CAAA,IAAA,CAAK,IAAI,CAAK,IAAA,kBAAA;AACjH,IAAO,OAAA;AAAA,MACL,gBAAA;AAAA,MACA,WAAa,EAAA;AAAA,QACX,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,SAAW,EAAA;AAAA,UACT,KAAK,GAAM,GAAA,IAAA;AAAA,UACX,KAAK,GAAM,GAAA;AAAA,SACb;AAAA,QACA,SAAW,EAAA;AAAA,UACT,KAAK,GAAM,GAAA,IAAA;AAAA,UACX,KAAK,GAAM,GAAA;AAAA;AACb;AACF,KACF;AAAA,GACM,CAAA,OAAA,CAAA,EAAA;AACN,IAAO,OAAA,IAAA;AAAA;AAEX;AACA,SAAS,gBAAA,CAAiB,KAAuB,OAAkC,EAAA;AApInF,EAAA,IAAA,EAAA;AAqIE,EAAO,OAAA;AAAA,IACL,kBAAkB,GAAI,CAAA,gBAAA;AAAA,IACtB,QAAA,EAAA,CAAU,EAAI,GAAA,GAAA,CAAA,QAAA,KAAJ,IAAgB,GAAA,EAAA,GAAA,OAAA;AAAA,IAC1B,aAAa,GAAI,CAAA,WAAA;AAAA,IACjB,UAAU,GAAI,CAAA;AAAA,GAChB;AACF"}
@@ -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