@adminide-stack/yantra-mobile 12.0.69-alpha.8 → 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.
- package/lib/components/GatewayConnector/GatewayConnector.js +2 -2
- package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -1
- package/lib/components/KeyboardComposerDock.js +8 -1
- package/lib/components/KeyboardComposerDock.js.map +1 -1
- package/lib/components/NavigationHeader/NavigationHeader.js +2 -2
- package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
- package/lib/config/env-config.js +4 -0
- package/lib/config/env-config.js.map +1 -1
- package/lib/contexts/ChatLiveStreamContext.js +4 -1
- package/lib/contexts/ChatLiveStreamContext.js.map +1 -1
- package/lib/features/agent-chat/NativeAgentChat.js +2 -0
- package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +2 -2
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/features/audio-input/MicErrorBoundary.js +2 -2
- package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
- package/lib/features/canvas/AudioEditorExperience.js +308 -0
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
- package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
- package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
- package/lib/features/canvas/CanvasChatResultCard.js +113 -0
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
- package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
- package/lib/features/canvas/CanvasExperience.js +859 -0
- package/lib/features/canvas/CanvasExperience.js.map +1 -0
- package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
- package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
- package/lib/features/canvas/CanvasLooksPanel.js +184 -0
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
- package/lib/features/canvas/CanvasTasksPanel.js +138 -0
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
- package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
- package/lib/features/canvas/CanvasToolDock.js +423 -0
- package/lib/features/canvas/CanvasToolDock.js.map +1 -0
- package/lib/features/canvas/FrameExtractorExperience.js +242 -0
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
- package/lib/features/canvas/ImageEditorExperience.js +491 -0
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
- package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
- package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
- package/lib/features/canvas/MoodboardExperience.js +205 -0
- package/lib/features/canvas/MoodboardExperience.js.map +1 -0
- package/lib/features/canvas/NativeCanvasViewer.js +929 -0
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
- package/lib/features/canvas/PromoContextFields.js +150 -0
- package/lib/features/canvas/PromoContextFields.js.map +1 -0
- package/lib/features/canvas/SetStudioExperience.js +323 -0
- package/lib/features/canvas/SetStudioExperience.js.map +1 -0
- package/lib/features/canvas/VideoClipsExperience.js +175 -0
- package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
- package/lib/features/canvas/VideoEditExperience.js +824 -0
- package/lib/features/canvas/VideoEditExperience.js.map +1 -0
- package/lib/features/canvas/VideoEditorExperience.js +3050 -0
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
- package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
- package/lib/features/canvas/aiEdit.js +53 -0
- package/lib/features/canvas/aiEdit.js.map +1 -0
- package/lib/features/canvas/canvasAgentChat.js +76 -0
- package/lib/features/canvas/canvasAgentChat.js.map +1 -0
- package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
- package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
- package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
- package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
- package/lib/features/canvas/canvasChatDisplay.js +38 -0
- package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
- package/lib/features/canvas/canvasChatTemplates.js +219 -0
- package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
- package/lib/features/canvas/canvasCore.js +138 -1
- package/lib/features/canvas/canvasCore.js.map +1 -1
- package/lib/features/canvas/canvasEditOps.js +224 -0
- package/lib/features/canvas/canvasEditOps.js.map +1 -0
- package/lib/features/canvas/canvasTasks.js +187 -0
- package/lib/features/canvas/canvasTasks.js.map +1 -0
- package/lib/features/canvas/designPromptTemplates.js +3084 -0
- package/lib/features/canvas/designPromptTemplates.js.map +1 -0
- package/lib/features/canvas/editTools.js +54 -0
- package/lib/features/canvas/editTools.js.map +1 -0
- package/lib/features/canvas/extendVideo.js +5 -0
- package/lib/features/canvas/extendVideo.js.map +1 -0
- package/lib/features/canvas/frameExtract.js +33 -0
- package/lib/features/canvas/frameExtract.js.map +1 -0
- package/lib/features/canvas/generationModels.js +201 -0
- package/lib/features/canvas/generationModels.js.map +1 -0
- package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
- package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
- package/lib/features/canvas/influencer/productReel.js +72 -0
- package/lib/features/canvas/influencer/productReel.js.map +1 -0
- package/lib/features/canvas/influencer/reelPlan.js +159 -0
- package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
- package/lib/features/canvas/moodboardCore.js +13 -0
- package/lib/features/canvas/moodboardCore.js.map +1 -0
- package/lib/features/canvas/promoProjectImport.js +99 -0
- package/lib/features/canvas/promoProjectImport.js.map +1 -0
- package/lib/features/canvas/promoVideo.js +312 -0
- package/lib/features/canvas/promoVideo.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
- package/lib/features/canvas/sessionIdentity.js +28 -1
- package/lib/features/canvas/sessionIdentity.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +133 -0
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
- package/lib/features/canvas/set/cameraPath.js +194 -0
- package/lib/features/canvas/set/cameraPath.js.map +1 -0
- package/lib/features/canvas/set/setProject.js +24 -0
- package/lib/features/canvas/set/setProject.js.map +1 -0
- package/lib/features/canvas/storageLibrary.js +184 -0
- package/lib/features/canvas/storageLibrary.js.map +1 -0
- package/lib/features/canvas/studioCatalog.js +129 -0
- package/lib/features/canvas/studioCatalog.js.map +1 -0
- package/lib/features/canvas/studioLooks.js +189 -0
- package/lib/features/canvas/studioLooks.js.map +1 -0
- package/lib/features/canvas/surfaceIndex.js +63 -1
- package/lib/features/canvas/surfaceIndex.js.map +1 -1
- package/lib/features/canvas/templateImport/invideoNative.js +221 -0
- package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
- package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
- package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
- package/lib/features/canvas/templateImport/renderConfig.js +93 -0
- package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
- package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
- package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
- package/lib/features/canvas/video3d.js +109 -0
- package/lib/features/canvas/video3d.js.map +1 -0
- package/lib/features/canvas/videoClips.js +42 -0
- package/lib/features/canvas/videoClips.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
- package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
- package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
- package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
- package/lib/features/canvas/videoEditor/editorModel.js +346 -0
- package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
- package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
- package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
- package/lib/features/canvas/videoEditor/filters.js +41 -0
- package/lib/features/canvas/videoEditor/filters.js.map +1 -0
- package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
- package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
- package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
- package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
- package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
- package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
- package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
- package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
- package/lib/features/canvas/videoRenderer.js +8 -0
- package/lib/features/canvas/videoRenderer.js.map +1 -0
- package/lib/features/canvas/withRemoteSafeArea.js +2 -2
- package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
- package/lib/features/characters/characterStudioProps.js +14 -0
- package/lib/features/characters/characterStudioProps.js.map +1 -0
- package/lib/features/chat/ChatCodeBlock.js +7 -3
- package/lib/features/chat/ChatCodeBlock.js.map +1 -1
- package/lib/features/chat/ChatTranscript.js +7 -3
- package/lib/features/chat/ChatTranscript.js.map +1 -1
- package/lib/features/chat/ChatWidgetCard.js +13 -0
- package/lib/features/chat/ChatWidgetCard.js.map +1 -0
- package/lib/features/chat/ConnectorConnectCard.js +164 -0
- package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
- package/lib/features/chat/ConnectorConnectPrompt.js +254 -0
- package/lib/features/chat/ConnectorConnectPrompt.js.map +1 -0
- package/lib/features/chat/MessageActionBar.js.map +1 -1
- package/lib/features/chat/QueuedFollowUps.js +71 -0
- package/lib/features/chat/QueuedFollowUps.js.map +1 -0
- package/lib/features/chat/chatWidgets.js +37 -0
- package/lib/features/chat/chatWidgets.js.map +1 -0
- package/lib/features/chat/connectorConnect.js +179 -0
- package/lib/features/chat/connectorConnect.js.map +1 -0
- package/lib/features/chat/connectorConnectHandbacks.js +55 -0
- package/lib/features/chat/connectorConnectHandbacks.js.map +1 -0
- package/lib/features/design/DesignEditorExperience.js +643 -0
- package/lib/features/design/DesignEditorExperience.js.map +1 -0
- package/lib/features/design/DesignExperience.js +444 -0
- package/lib/features/design/DesignExperience.js.map +1 -0
- package/lib/features/design/designCore.js +298 -0
- package/lib/features/design/designCore.js.map +1 -0
- package/lib/features/design/designIndex.js +150 -0
- package/lib/features/design/designIndex.js.map +1 -0
- package/lib/features/design/exportDesign.js +133 -0
- package/lib/features/design/exportDesign.js.map +1 -0
- package/lib/features/job-search/ApplicationsPanel.js +907 -0
- package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
- package/lib/features/job-search/ContactsPanel.js +627 -0
- package/lib/features/job-search/ContactsPanel.js.map +1 -0
- package/lib/features/job-search/InsightsPanel.js +299 -0
- package/lib/features/job-search/InsightsPanel.js.map +1 -0
- package/lib/features/job-search/InterviewPanel.js +637 -0
- package/lib/features/job-search/InterviewPanel.js.map +1 -0
- package/lib/features/job-search/JdPastePrompt.js +130 -0
- package/lib/features/job-search/JdPastePrompt.js.map +1 -0
- package/lib/features/job-search/JobCard.js +199 -0
- package/lib/features/job-search/JobCard.js.map +1 -0
- package/lib/features/job-search/JobDetailSheet.js +255 -0
- package/lib/features/job-search/JobDetailSheet.js.map +1 -0
- package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
- package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
- package/lib/features/job-search/JobSearchExperience.js +1324 -0
- package/lib/features/job-search/JobSearchExperience.js.map +1 -0
- package/lib/features/job-search/JobSearchLocationField.js +231 -0
- package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
- package/lib/features/job-search/ProfilePanel.js +679 -0
- package/lib/features/job-search/ProfilePanel.js.map +1 -0
- package/lib/features/job-search/RepliesPanel.js +344 -0
- package/lib/features/job-search/RepliesPanel.js.map +1 -0
- package/lib/features/job-search/SavedPanel.js +297 -0
- package/lib/features/job-search/SavedPanel.js.map +1 -0
- package/lib/features/job-search/chat/widgetContent.js +29 -0
- package/lib/features/job-search/chat/widgetContent.js.map +1 -0
- package/lib/features/job-search/cvText.js +91 -0
- package/lib/features/job-search/cvText.js.map +1 -0
- package/lib/features/job-search/jobAgentSwipe.js +7 -0
- package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
- package/lib/features/job-search/jobSearchClient.js +184 -0
- package/lib/features/job-search/jobSearchClient.js.map +1 -0
- package/lib/features/job-search/jobSearchExec.js +14 -0
- package/lib/features/job-search/jobSearchExec.js.map +1 -0
- package/lib/features/job-search/jobSearchRuntime.js +50 -0
- package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
- package/lib/features/job-search/jobSearchTheme.js +44 -0
- package/lib/features/job-search/jobSearchTheme.js.map +1 -0
- package/lib/features/job-search/savedJobs.js +85 -0
- package/lib/features/job-search/savedJobs.js.map +1 -0
- package/lib/features/job-search/searchHistory.js +117 -0
- package/lib/features/job-search/searchHistory.js.map +1 -0
- package/lib/features/job-search/types.js +36 -0
- package/lib/features/job-search/types.js.map +1 -0
- package/lib/features/job-search/useJobSearchSession.js +558 -0
- package/lib/features/job-search/useJobSearchSession.js.map +1 -0
- package/lib/features/messaging/ChatComponents.js +529 -0
- package/lib/features/messaging/ChatComponents.js.map +1 -0
- package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
- package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
- package/lib/features/messaging/ContactsScreen.js +288 -0
- package/lib/features/messaging/ContactsScreen.js.map +1 -0
- package/lib/features/messaging/ConversationListScreen.js +147 -0
- package/lib/features/messaging/ConversationListScreen.js.map +1 -0
- package/lib/features/messaging/MessageActions.js +290 -0
- package/lib/features/messaging/MessageActions.js.map +1 -0
- package/lib/features/messaging/NativeChatExperience.js +189 -0
- package/lib/features/messaging/NativeChatExperience.js.map +1 -0
- package/lib/features/messaging/RegistrationScreen.js +11 -14
- package/lib/features/messaging/RegistrationScreen.js.map +1 -1
- package/lib/features/messaging/ThreadScreen.js +215 -0
- package/lib/features/messaging/ThreadScreen.js.map +1 -0
- package/lib/features/messaging/chatInviteLink.js +52 -0
- package/lib/features/messaging/chatInviteLink.js.map +1 -0
- package/lib/features/messaging/chatModel.js +278 -0
- package/lib/features/messaging/chatModel.js.map +1 -0
- package/lib/features/messaging/chatOperations.js +106 -1
- package/lib/features/messaging/chatOperations.js.map +1 -1
- package/lib/features/messaging/emojiCatalog.js +60 -0
- package/lib/features/messaging/emojiCatalog.js.map +1 -0
- package/lib/features/messaging/emojiKeywords.js +1592 -0
- package/lib/features/messaging/emojiKeywords.js.map +1 -0
- package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
- package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
- package/lib/features/messaging/phoneNumbers.js +52 -1
- package/lib/features/messaging/phoneNumbers.js.map +1 -1
- package/lib/features/messaging/sha256.js +68 -0
- package/lib/features/messaging/sha256.js.map +1 -0
- package/lib/features/messaging/useChatData.js +421 -0
- package/lib/features/messaging/useChatData.js.map +1 -0
- package/lib/features/messaging/useContactMatches.js +191 -0
- package/lib/features/messaging/useContactMatches.js.map +1 -0
- package/lib/features/messaging/usePhoneVerification.js +12 -12
- package/lib/features/messaging/usePhoneVerification.js.map +1 -1
- package/lib/features/messaging/yantraChatOrg.js +8 -3
- package/lib/features/messaging/yantraChatOrg.js.map +1 -1
- package/lib/features/resume/AnnotateModal.js +100 -0
- package/lib/features/resume/AnnotateModal.js.map +1 -0
- package/lib/features/resume/AnnotationBar.js +69 -0
- package/lib/features/resume/AnnotationBar.js.map +1 -0
- package/lib/features/resume/ExportSheet.js +105 -0
- package/lib/features/resume/ExportSheet.js.map +1 -0
- package/lib/features/resume/ResumeAgentChatPane.js +95 -0
- package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
- package/lib/features/resume/ResumeEditor.js +676 -0
- package/lib/features/resume/ResumeEditor.js.map +1 -0
- package/lib/features/resume/ResumeExperience.js +235 -0
- package/lib/features/resume/ResumeExperience.js.map +1 -0
- package/lib/features/resume/ResumeListPanel.js +262 -0
- package/lib/features/resume/ResumeListPanel.js.map +1 -0
- package/lib/features/resume/ResumeToolbar.js +236 -0
- package/lib/features/resume/ResumeToolbar.js.map +1 -0
- package/lib/features/resume/annotations.js +17 -0
- package/lib/features/resume/annotations.js.map +1 -0
- package/lib/features/resume/documentCss.js +52 -0
- package/lib/features/resume/documentCss.js.map +1 -0
- package/lib/features/resume/draft.js +89 -0
- package/lib/features/resume/draft.js.map +1 -0
- package/lib/features/resume/exportResume.js +43 -0
- package/lib/features/resume/exportResume.js.map +1 -0
- package/lib/features/resume/pickResumePhoto.js +22 -0
- package/lib/features/resume/pickResumePhoto.js.map +1 -0
- package/lib/features/resume/renderResume.js +121 -0
- package/lib/features/resume/renderResume.js.map +1 -0
- package/lib/features/resume/resumeClient.js +69 -0
- package/lib/features/resume/resumeClient.js.map +1 -0
- package/lib/features/resume/resumeExec.js +14 -0
- package/lib/features/resume/resumeExec.js.map +1 -0
- package/lib/features/resume/resumeIndex.js +244 -0
- package/lib/features/resume/resumeIndex.js.map +1 -0
- package/lib/features/resume/resumeRuntime.js +50 -0
- package/lib/features/resume/resumeRuntime.js.map +1 -0
- package/lib/features/resume/resumeTheme.js +34 -0
- package/lib/features/resume/resumeTheme.js.map +1 -0
- package/lib/features/resume/resumeToolbox.js +49 -0
- package/lib/features/resume/resumeToolbox.js.map +1 -0
- package/lib/features/resume/templates.js +90 -0
- package/lib/features/resume/templates.js.map +1 -0
- package/lib/features/resume/types.js +10 -0
- package/lib/features/resume/types.js.map +1 -0
- package/lib/features/resume/useResumeSession.js +183 -0
- package/lib/features/resume/useResumeSession.js.map +1 -0
- package/lib/features/shopping/DealsPanel.js +254 -0
- package/lib/features/shopping/DealsPanel.js.map +1 -0
- package/lib/features/shopping/HistoryPanel.js +147 -0
- package/lib/features/shopping/HistoryPanel.js.map +1 -0
- package/lib/features/shopping/OrdersPanel.js +157 -0
- package/lib/features/shopping/OrdersPanel.js.map +1 -0
- package/lib/features/shopping/ProductCard.js +326 -0
- package/lib/features/shopping/ProductCard.js.map +1 -0
- package/lib/features/shopping/ProductDetailSheet.js +313 -0
- package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
- package/lib/features/shopping/ProductFilterBar.js +153 -0
- package/lib/features/shopping/ProductFilterBar.js.map +1 -0
- package/lib/features/shopping/ProductPhoto.js +27 -0
- package/lib/features/shopping/ProductPhoto.js.map +1 -0
- package/lib/features/shopping/SavedPanel.js +139 -0
- package/lib/features/shopping/SavedPanel.js.map +1 -0
- package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
- package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
- package/lib/features/shopping/ShoppingExperience.js +888 -0
- package/lib/features/shopping/ShoppingExperience.js.map +1 -0
- package/lib/features/shopping/TrendingSections.js +199 -0
- package/lib/features/shopping/TrendingSections.js.map +1 -0
- package/lib/features/shopping/WatchlistPanel.js +148 -0
- package/lib/features/shopping/WatchlistPanel.js.map +1 -0
- package/lib/features/shopping/catalog.js +238 -0
- package/lib/features/shopping/catalog.js.map +1 -0
- package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
- package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
- package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
- package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
- package/lib/features/shopping/chat/widgetContent.js +233 -0
- package/lib/features/shopping/chat/widgetContent.js.map +1 -0
- package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
- package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
- package/lib/features/shopping/productImage.js +42 -0
- package/lib/features/shopping/productImage.js.map +1 -0
- package/lib/features/shopping/savedProducts.js +84 -0
- package/lib/features/shopping/savedProducts.js.map +1 -0
- package/lib/features/shopping/services/catalogActions.js +166 -0
- package/lib/features/shopping/services/catalogActions.js.map +1 -0
- package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
- package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
- package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
- package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
- package/lib/features/shopping/services/productAvailability.js +25 -0
- package/lib/features/shopping/services/productAvailability.js.map +1 -0
- package/lib/features/shopping/services/productFilters.js +72 -0
- package/lib/features/shopping/services/productFilters.js.map +1 -0
- package/lib/features/shopping/services/retailerUrl.js +75 -0
- package/lib/features/shopping/services/retailerUrl.js.map +1 -0
- package/lib/features/shopping/services/shoppingChatReply.js +46 -0
- package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
- package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
- package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
- package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
- package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
- package/lib/features/shopping/shopAgentSwipe.js +7 -0
- package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
- package/lib/features/shopping/shoppingCart.js +116 -0
- package/lib/features/shopping/shoppingCart.js.map +1 -0
- package/lib/features/shopping/shoppingExec.js +14 -0
- package/lib/features/shopping/shoppingExec.js.map +1 -0
- package/lib/features/shopping/shoppingHistoryStore.js +176 -0
- package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
- package/lib/features/shopping/shoppingRuntime.js +63 -0
- package/lib/features/shopping/shoppingRuntime.js.map +1 -0
- package/lib/features/shopping/timeAgo.js +14 -0
- package/lib/features/shopping/timeAgo.js.map +1 -0
- package/lib/features/shopping/useShoppingSearch.js +262 -0
- package/lib/features/shopping/useShoppingSearch.js.map +1 -0
- package/lib/features/travel/BookHeaderGlow.js +48 -0
- package/lib/features/travel/BookHeaderGlow.js.map +1 -0
- package/lib/features/travel/BookingsPanel.js +29 -0
- package/lib/features/travel/BookingsPanel.js.map +1 -0
- package/lib/features/travel/DiscoverPanel.js +155 -0
- package/lib/features/travel/DiscoverPanel.js.map +1 -0
- package/lib/features/travel/FlightCompareBar.js +86 -0
- package/lib/features/travel/FlightCompareBar.js.map +1 -0
- package/lib/features/travel/FlightDealsBoard.js +100 -0
- package/lib/features/travel/FlightDealsBoard.js.map +1 -0
- package/lib/features/travel/HistoryPanel.js +82 -0
- package/lib/features/travel/HistoryPanel.js.map +1 -0
- package/lib/features/travel/PopularDestinations.js +144 -0
- package/lib/features/travel/PopularDestinations.js.map +1 -0
- package/lib/features/travel/SavedPanel.js +27 -0
- package/lib/features/travel/SavedPanel.js.map +1 -0
- package/lib/features/travel/TravelAgentChatPane.js +303 -0
- package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
- package/lib/features/travel/TravelBookHero.js +425 -0
- package/lib/features/travel/TravelBookHero.js.map +1 -0
- package/lib/features/travel/TravelDatesField.js +234 -0
- package/lib/features/travel/TravelDatesField.js.map +1 -0
- package/lib/features/travel/TravelDetailSheet.js +106 -0
- package/lib/features/travel/TravelDetailSheet.js.map +1 -0
- package/lib/features/travel/TravelExperience.js +624 -0
- package/lib/features/travel/TravelExperience.js.map +1 -0
- package/lib/features/travel/TravelGuestsField.js +85 -0
- package/lib/features/travel/TravelGuestsField.js.map +1 -0
- package/lib/features/travel/TravelLanding.js +318 -0
- package/lib/features/travel/TravelLanding.js.map +1 -0
- package/lib/features/travel/TravelLocationField.js +179 -0
- package/lib/features/travel/TravelLocationField.js.map +1 -0
- package/lib/features/travel/TravelPropertyCard.js +266 -0
- package/lib/features/travel/TravelPropertyCard.js.map +1 -0
- package/lib/features/travel/TravelPropertyPhoto.js +22 -0
- package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
- package/lib/features/travel/TravelRailFlyout.js +79 -0
- package/lib/features/travel/TravelRailFlyout.js.map +1 -0
- package/lib/features/travel/TravelResultsMap.js +126 -0
- package/lib/features/travel/TravelResultsMap.js.map +1 -0
- package/lib/features/travel/WorkspacePanel.js +148 -0
- package/lib/features/travel/WorkspacePanel.js.map +1 -0
- package/lib/features/travel/appNav.js +244 -0
- package/lib/features/travel/appNav.js.map +1 -0
- package/lib/features/travel/calendarDays.js +50 -0
- package/lib/features/travel/calendarDays.js.map +1 -0
- package/lib/features/travel/catalog.js +72 -0
- package/lib/features/travel/catalog.js.map +1 -0
- package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
- package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
- package/lib/features/travel/chat/widgetContent.js +107 -0
- package/lib/features/travel/chat/widgetContent.js.map +1 -0
- package/lib/features/travel/flightDeals.js +65 -0
- package/lib/features/travel/flightDeals.js.map +1 -0
- package/lib/features/travel/mapCoordinates.js +36 -0
- package/lib/features/travel/mapCoordinates.js.map +1 -0
- package/lib/features/travel/parseTravelIntent.js +303 -0
- package/lib/features/travel/parseTravelIntent.js.map +1 -0
- package/lib/features/travel/savedStays.js +66 -0
- package/lib/features/travel/savedStays.js.map +1 -0
- package/lib/features/travel/services/flightDealsBoard.js +111 -0
- package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
- package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
- package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
- package/lib/features/travel/services/geocodeLocation.js +79 -0
- package/lib/features/travel/services/geocodeLocation.js.map +1 -0
- package/lib/features/travel/services/placePredictions.js +113 -0
- package/lib/features/travel/services/placePredictions.js.map +1 -0
- package/lib/features/travel/services/resolveOriginCity.js +27 -0
- package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
- package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
- package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
- package/lib/features/travel/services/travelFlightSearch.js +289 -0
- package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
- package/lib/features/travel/services/travelPropertySearch.js +377 -0
- package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
- package/lib/features/travel/travelAgentSwipe.js +7 -0
- package/lib/features/travel/travelAgentSwipe.js.map +1 -0
- package/lib/features/travel/travelExec.js +14 -0
- package/lib/features/travel/travelExec.js.map +1 -0
- package/lib/features/travel/travelHistoryStore.js +108 -0
- package/lib/features/travel/travelHistoryStore.js.map +1 -0
- package/lib/features/travel/travelRuntime.js +62 -0
- package/lib/features/travel/travelRuntime.js.map +1 -0
- package/lib/features/travel/types.js +9 -0
- package/lib/features/travel/types.js.map +1 -0
- package/lib/features/travel/useTravelSearch.js +330 -0
- package/lib/features/travel/useTravelSearch.js.map +1 -0
- package/lib/features/travel/workspaceContent.js +548 -0
- package/lib/features/travel/workspaceContent.js.map +1 -0
- package/lib/hooks/useCdecliChannel.js +128 -6
- package/lib/hooks/useCdecliChannel.js.map +1 -1
- package/lib/hooks/useChatApi.js +4 -2
- package/lib/hooks/useChatApi.js.map +1 -1
- package/lib/hooks/useChatStream.js +77 -63
- package/lib/hooks/useChatStream.js.map +1 -1
- package/lib/hooks/useHostConnectorCard.js +24 -0
- package/lib/hooks/useHostConnectorCard.js.map +1 -0
- package/lib/hooks/useObtainSystemToken.js +23 -5
- package/lib/hooks/useObtainSystemToken.js.map +1 -1
- package/lib/hooks/webViewRetentionPolicy.js +1 -0
- package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/screens/Chat/index.js +51 -22
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/ChatNative/index.js +13 -2
- package/lib/screens/ChatNative/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +3 -3
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
- package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js +12 -6
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
- package/lib/screens/ResumeNative/useResumeHostChat.js +12 -6
- package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
- package/lib/screens/ShoppingNative/useShoppingHostChat.js +12 -6
- package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
- package/lib/screens/TravelNative/useTravelHostChat.js +12 -6
- package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
- package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
- package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
- package/lib/services/brainQuickReply.js +38 -1
- package/lib/services/brainQuickReply.js.map +1 -1
- package/lib/state/chatThreadMerge.js +6 -1
- package/lib/state/chatThreadMerge.js.map +1 -1
- 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":"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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":";;;;;;;;;;;;;;;;AACO,MAAM,sBAAyB,GAAA;AAC/B,MAAM,iBAAoB,GAAA;AAAA,EAC/B,MAAQ,EAAA,yBAAA;AAAA,EACR,WAAa,EAAA,8BAAA;AAAA,EACb,mBAAqB,EAAA,sCAAA;AAAA,EACrB,qBAAuB,EAAA,wCAAA;AAAA,EACvB,gBAAkB,EAAA,mCAAA;AAAA,EAClB,oBAAsB,EAAA,uCAAA;AAAA,EACtB,eAAiB,EAAA,kCAAA;AAAA,EACjB,cAAgB,EAAA;AAClB;AAqCA,eAAsB,wBAAoD,CAAA,MAAA,EAAiC,MAAmC,GAAA,iBAAA,CAAkB,MAI7J,EAAA;AACD,EAAA,MAAM,UAAa,GAAA,cAAA,CAAA;AAAA,IACjB,MAAQ,EAAA;AAAA,GACL,EAAA,MAAA,CAAA;AAEL,EAAA,OAAO,gBAAiB,EAAA,CAAE,IAAQ,CAAA,sBAAA,EAAwB,QAAQ,UAAU,CAAA;AAC9E;AAYA,eAAsB,gCAAgC,MAQnD,EAAA;AA9EH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA+EE,EAAA,MAAM,MAAS,GAAA,MAAM,wBAIlB,CAAA,MAAA,EAAQ,kBAAkB,oBAAoB,CAAA;AACjD,EAAI,IAAA,CAAC,OAAO,OAAS,EAAA;AACnB,IAAA,MAAM,IAAI,KAAA,CAAM,MAAO,CAAA,KAAA,IAAS,6BAA6B,CAAA;AAAA;AAE/D,EAAO,OAAA;AAAA,IACL,cAAa,EAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,IAAA,KAAP,IAAa,GAAA,MAAA,GAAA,EAAA,CAAA,WAAA,KAAb,YAA4B,EAAC;AAAA,IAC1C,cAAa,EAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,IAAA,KAAP,IAAa,GAAA,MAAA,GAAA,EAAA,CAAA,WAAA,KAAb,YAA4B,EAAC;AAAA,IAC1C,YAAW,EAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,IAAA,KAAP,IAAa,GAAA,MAAA,GAAA,EAAA,CAAA,SAAA,KAAb,YAA0B;AAAC,GACxC;AACF;AAOA,SAAS,IAAI,KAAwB,EAAA;AACnC,EAAA,OAAO,OAAO,KAAA,KAAU,QAAW,GAAA,KAAA,CAAM,MAAS,GAAA,EAAA;AACpD;AACA,eAAsB,+BAA2E,GAAA;AAtGjG,EAAA,IAAA,EAAA;AAuGE,EAAA,MAAM,SAAS,MAAM,wBAAA,CAElB,EAAC,EAAG,kBAAkB,cAAc,CAAA;AACvC,EAAI,IAAA,CAAC,OAAO,OAAS,EAAA;AACnB,IAAA,MAAM,IAAI,KAAA,CAAM,MAAO,CAAA,KAAA,IAAS,iCAAiC,CAAA;AAAA;AAEnE,EAAA,MAAM,OAAO,KAAM,CAAA,OAAA,CAAA,CAAQ,YAAO,IAAP,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,SAAS,CAAI,GAAA,MAAA,CAAO,IAAK,CAAA,SAAA,GAAY,MAAM,OAAQ,CAAA,MAAA,CAAO,IAAI,CAAI,GAAA,MAAA,CAAO,OAAO,EAAC;AACzH,EAAQ,OAAA,IAAA,CAAwC,IAAI,CAAM,CAAA,MAAA;AAAA,IACxD,IAAI,GAAI,CAAA,CAAA,CAAE,EAAE,CAAK,IAAA,GAAA,CAAI,EAAE,UAAU,CAAA;AAAA,IACjC,KAAO,EAAA,GAAA,CAAI,CAAE,CAAA,KAAK,CAAK,IAAA,GAAA,CAAI,CAAE,CAAA,IAAI,CAAK,IAAA,GAAA,CAAI,CAAE,CAAA,EAAE,CAAK,IAAA,UAAA;AAAA,IACnD,WAAa,EAAA,GAAA,CAAI,CAAE,CAAA,WAAW,CAAK,IAAA,MAAA;AAAA,IACnC,MAAA,EAAQ,IAAI,CAAE,CAAA,MAAM,KAAK,GAAI,CAAA,CAAA,CAAE,UAAU,CAAK,IAAA;AAAA,IAC9C,CAAE,CAAA,MAAA,CAAO,OAAK,OAAQ,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA;AAC/B;AAaA,eAAsB,2BAA2B,MAK9C,EAAA;AAtIH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuIE,EAAM,MAAA,MAAA,GAAS,MAAM,wBAElB,CAAA;AAAA,IACD,UAAU,MAAO,CAAA,QAAA;AAAA,IACjB,YAAW,EAAO,GAAA,MAAA,CAAA,SAAA,KAAP,IAAoB,GAAA,EAAA,GAAA,CAAC,aAAa,QAAQ,CAAA;AAAA,IACrD,eAAiB,EAAA;AAAA,GACnB,EAAG,kBAAkB,eAAe,CAAA;AACpC,EAAI,IAAA,CAAC,OAAO,OAAS,EAAA;AACnB,IAAA,MAAM,IAAI,KAAA,CAAM,MAAO,CAAA,KAAA,IAAS,8BAA8B,CAAA;AAAA;AAEhE,EAAO,OAAA;AAAA,IACL,QAAO,EAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,IAAA,KAAP,IAAa,GAAA,MAAA,GAAA,EAAA,CAAA,KAAA,KAAb,YAAsB;AAAC,GAChC;AACF"}
|
|
@@ -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
|