{"version":3,"file":"adapters-HLCtB4aL.cjs","sources":["../../lib/vowel/platforms/shopify/adapters.ts"],"sourcesContent":["/**\n * @fileoverview Shopify Dual Adapters - Navigation and Automation\n * \n * This file provides Shopify-specific implementations of the dual adapter pattern:\n * - ShopifyNavigationAdapter: Handles WHERE to go (routing)\n * - ShopifyAutomationAdapter: Handles WHAT to do (DOM interaction)\n * \n * These adapters extend the generic controlled adapters with Shopify-specific\n * features and work together to provide complete voice-controlled commerce.\n * \n * @module @vowel.to/client/platforms/shopify\n * @author vowel.to\n * @license Proprietary\n */\n\nimport { ControlledNavigationAdapter } from '../../adapters/navigation/controlled-navigation-adapter';\nimport { ControlledAutomationAdapter } from '../../adapters/automation/controlled-automation-adapter';\nimport type { NavigationAdapter, AutomationAdapter } from '../../types';\n\n/**\n * Shopify Navigation Adapter\n * \n * Handles cross-tab navigation for Shopify stores.\n * Extends the generic ControlledNavigationAdapter with Shopify-specific configuration.\n * \n * @example\n * ```ts\n * const navigationAdapter = new ShopifyNavigationAdapter({\n *   storeUrl: 'https://mystore.com'\n * });\n * \n * // Navigate to collections page\n * await navigationAdapter.navigate('/collections/all');\n * ```\n */\nexport class ShopifyNavigationAdapter extends ControlledNavigationAdapter {\n  constructor(options: {\n    storeUrl?: string;\n    channelName?: string;\n  } = {}) {\n    super({\n      channelName: options.channelName || 'vowel-navigation'  // Use default channel\n    });\n    \n    console.log('🛍️ [ShopifyNavigationAdapter] Initialized', {\n      storeUrl: options.storeUrl,\n      channelName: options.channelName || 'vowel-navigation'\n    });\n  }\n}\n\n/**\n * Shopify Automation Adapter\n * \n * Handles cross-tab DOM automation for Shopify stores.\n * Extends the generic ControlledAutomationAdapter with Shopify-specific configuration.\n * \n * @example\n * ```ts\n * const automationAdapter = new ShopifyAutomationAdapter();\n * \n * // Search for add to cart button\n * const results = await automationAdapter.searchElements('add to cart button');\n * \n * // Click the button\n * await automationAdapter.clickElement(results.elements[0].id);\n * ```\n */\nexport class ShopifyAutomationAdapter extends ControlledAutomationAdapter {\n  constructor(options: {\n    channelName?: string;\n  } = {}) {\n    super(options.channelName || 'vowel-automation');  // Use default channel\n    \n    console.log('🛍️ [ShopifyAutomationAdapter] Initialized', {\n      channelName: options.channelName || 'vowel-automation'\n    });\n  }\n}\n\n/**\n * Initialize Shopify dual adapters\n * \n * Creates and configures both navigation and automation adapters for Shopify.\n * This is the recommended way to set up Shopify integration with the dual adapter pattern.\n * \n * @param config - Configuration options\n * @returns Initialized navigation and automation adapters\n * \n * @example\n * ```ts\n * import { initializeShopifyAdapters } from '@vowel.to/client/platforms/shopify';\n * import { Vowel } from '@vowel.to/client';\n * \n * const { navigationAdapter, automationAdapter } = initializeShopifyAdapters({\n *   storeUrl: 'https://mystore.com'\n * });\n * \n * const vowel = new Vowel({\n *   appId: 'your-app-id',\n *   navigationAdapter,\n *   automationAdapter\n * });\n * ```\n */\nexport function initializeShopifyAdapters(config: {\n  storeUrl?: string;\n  navigationChannelName?: string;\n  automationChannelName?: string;\n} = {}): {\n  navigationAdapter: NavigationAdapter;\n  automationAdapter: AutomationAdapter;\n} {\n  console.log('🛍️ [Shopify] Initializing dual adapters...');\n  \n  const navigationAdapter = new ShopifyNavigationAdapter({\n    storeUrl: config.storeUrl,\n    channelName: config.navigationChannelName\n  });\n  \n  const automationAdapter = new ShopifyAutomationAdapter({\n    channelName: config.automationChannelName\n  });\n  \n  console.log('✅ [Shopify] Dual adapters initialized');\n  \n  return {\n    navigationAdapter,\n    automationAdapter\n  };\n}\n\n"],"names":["ControlledNavigationAdapter","ControlledAutomationAdapter"],"mappings":";;;;;;;AAmCO,MAAM,iCAAiCA,uDAAA,CAA4B;AAAA,EACxE,WAAA,CAAY,OAAA,GAGR,EAAC,EAAG;AACN,IAAA,KAAA,CAAM;AAAA,MACJ,WAAA,EAAa,QAAQ,WAAA,IAAe;AAAA;AAAA,KACrC,CAAA;AAED,IAAA,OAAA,CAAQ,IAAI,4CAAA,EAA8C;AAAA,MACxD,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,WAAA,EAAa,QAAQ,WAAA,IAAe;AAAA,KACrC,CAAA;AAAA,EACH;AACF;AAmBO,MAAM,iCAAiCC,uDAAA,CAA4B;AAAA,EACxE,WAAA,CAAY,OAAA,GAER,EAAC,EAAG;AACN,IAAA,KAAA,CAAM,OAAA,CAAQ,eAAe,kBAAkB,CAAA;AAE/C,IAAA,OAAA,CAAQ,IAAI,4CAAA,EAA8C;AAAA,MACxD,WAAA,EAAa,QAAQ,WAAA,IAAe;AAAA,KACrC,CAAA;AAAA,EACH;AACF;AA2BO,SAAS,yBAAA,CAA0B,MAAA,GAItC,EAAC,EAGH;AACA,EAAA,OAAA,CAAQ,IAAI,6CAA6C,CAAA;AAEzD,EAAA,MAAM,iBAAA,GAAoB,IAAI,wBAAA,CAAyB;AAAA,IACrD,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,aAAa,MAAA,CAAO;AAAA,GACrB,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoB,IAAI,wBAAA,CAAyB;AAAA,IACrD,aAAa,MAAA,CAAO;AAAA,GACrB,CAAA;AAED,EAAA,OAAA,CAAQ,IAAI,uCAAuC,CAAA;AAEnD,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;;;"}