@envive-ai/react-hooks 0.1.0

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 (385) hide show
  1. package/LICENSE +2 -0
  2. package/README.md +2 -0
  3. package/dist/GridInsertionService-CEYo9pGj.js +22 -0
  4. package/dist/GridInsertionService-CS_bnPh0.cjs +28 -0
  5. package/dist/bandolier-Ble8jEa8.js +1221 -0
  6. package/dist/bandolier-Bm2xAt_j.cjs +1221 -0
  7. package/dist/carpe-Da7b-LCW.cjs +599 -0
  8. package/dist/carpe-W13mhRRP.js +597 -0
  9. package/dist/cdnService-CZ-aXcY6.cjs +23 -0
  10. package/dist/cdnService-zQfKk3Eb.js +18 -0
  11. package/dist/chatElementDisplayLocation-CX8fuNao.d.cts +239 -0
  12. package/dist/chatElementDisplayLocation-CwptS9tx.d.ts +239 -0
  13. package/dist/chunk-CUT6urMc.cjs +30 -0
  14. package/dist/contexts/index.cjs +13 -0
  15. package/dist/contexts/index.d.cts +65 -0
  16. package/dist/contexts/index.d.ts +66 -0
  17. package/dist/contexts/index.js +7 -0
  18. package/dist/contexts-BRjfVq_k.js +5064 -0
  19. package/dist/contexts-BYArqZtK.cjs +5164 -0
  20. package/dist/coterie-3y0D9ko4.cjs +229 -0
  21. package/dist/coterie-DOWcJAYv.js +229 -0
  22. package/dist/custservice-types-CFIFwZ-r.js +10 -0
  23. package/dist/custservice-types-CkfxZiHY.cjs +16 -0
  24. package/dist/default-C2fEZKXk.js +175 -0
  25. package/dist/default-CBUq6Q6G.cjs +4 -0
  26. package/dist/default-CGIFZK6m.js +4 -0
  27. package/dist/default-D_KPZdPJ.cjs +198 -0
  28. package/dist/divIds-Bss-btao.js +49 -0
  29. package/dist/divIds-DnZNd7rA.cjs +223 -0
  30. package/dist/dreamlandBaby-DCIsuU9R.cjs +338 -0
  31. package/dist/dreamlandBaby-DvSaZGrz.js +338 -0
  32. package/dist/entrypoints-D_JUvkgy.cjs +18 -0
  33. package/dist/entrypoints-YLQsbBRD.js +6 -0
  34. package/dist/enviveConfigContext-CUGLpPGU.js +34 -0
  35. package/dist/enviveConfigContext-Dfr2VH6u.cjs +48 -0
  36. package/dist/fiveCbd-B1SESMCO.js +605 -0
  37. package/dist/fiveCbd-CkOlVby_.cjs +605 -0
  38. package/dist/forLoveAndLemons-CfYPMnKS.cjs +660 -0
  39. package/dist/forLoveAndLemons-DmwYZIk0.js +658 -0
  40. package/dist/greenpan-Bsl3ir59.cjs +389 -0
  41. package/dist/greenpan-BtOi45lf.js +389 -0
  42. package/dist/grooveLife-6_dtYsRk.js +334 -0
  43. package/dist/grooveLife-Cmm1PSCL.cjs +334 -0
  44. package/dist/homegrownCannabis-C-kw-74X.js +400 -0
  45. package/dist/homegrownCannabis-CO0uY_mp.cjs +400 -0
  46. package/dist/hooks/index.cjs +16 -0
  47. package/dist/hooks/index.d.cts +357 -0
  48. package/dist/hooks/index.d.ts +357 -0
  49. package/dist/hooks/index.js +7 -0
  50. package/dist/jackArcher-CLVmwwpI.js +719 -0
  51. package/dist/jackArcher-DdYTIzAV.cjs +719 -0
  52. package/dist/jordanCraig-Am-Oor-O.js +1778 -0
  53. package/dist/jordanCraig-_u3-w4Hp.cjs +1778 -0
  54. package/dist/kindredBravely-CWovIDSc.cjs +482 -0
  55. package/dist/kindredBravely-eWp-ud_E.js +482 -0
  56. package/dist/kutFromTheKloth-BMV4BuGQ.js +361 -0
  57. package/dist/kutFromTheKloth-Q589bAOC.cjs +361 -0
  58. package/dist/larryAndSerges-BMUlTgI-.js +252 -0
  59. package/dist/larryAndSerges-CEau764j.cjs +252 -0
  60. package/dist/leapsAndRebounds-DGMzPO7T.js +352 -0
  61. package/dist/leapsAndRebounds-DHAtRTJD.cjs +352 -0
  62. package/dist/logger-Dln20ans.cjs +25 -0
  63. package/dist/logger-pdEEY8T2.js +19 -0
  64. package/dist/longevityrx-CZW8Hxzi.cjs +312 -0
  65. package/dist/longevityrx-jH2JLhNH.js +312 -0
  66. package/dist/lookOptic-BGXP5P_V.js +274 -0
  67. package/dist/lookOptic-CA6RwLbG.cjs +274 -0
  68. package/dist/mantraBrand-Cm9_PBCT.js +742 -0
  69. package/dist/mantraBrand-DByNqpnL.cjs +742 -0
  70. package/dist/medterra-B0wxj_PV.js +575 -0
  71. package/dist/medterra-DnPN2ksU.cjs +575 -0
  72. package/dist/modells-Bmz8Ag5M.js +476 -0
  73. package/dist/modells-CoYgkLSp.cjs +476 -0
  74. package/dist/models-DHdb7QWn.js +51 -0
  75. package/dist/models-ixxUsGL_.cjs +69 -0
  76. package/dist/pressedFloral-DSKs_oVG.js +653 -0
  77. package/dist/pressedFloral-DjBiSoUl.cjs +653 -0
  78. package/dist/skinPerfection-B_3xzVNS.cjs +326 -0
  79. package/dist/skinPerfection-IDrBuAPt.js +326 -0
  80. package/dist/snapSupplements-BJk5T5ba.js +277 -0
  81. package/dist/snapSupplements-BStTsdOZ.cjs +277 -0
  82. package/dist/socialProofClasses-Bhv2Vulz.js +9 -0
  83. package/dist/socialProofClasses-CrQBWdSA.cjs +39 -0
  84. package/dist/spanx-BYg0LE7R.js +653 -0
  85. package/dist/spanx-LwU1zSzq.cjs +655 -0
  86. package/dist/spanxStaging-CfSmuKYB.js +837 -0
  87. package/dist/spanxStaging-OZLV9qix.cjs +840 -0
  88. package/dist/suggestionBarV2-types-BllzwsBD.js +34 -0
  89. package/dist/suggestionBarV2-types-CaovchMP.cjs +46 -0
  90. package/dist/supergoop-BqPXDnKk.cjs +327 -0
  91. package/dist/supergoop-CIlrHND_.js +325 -0
  92. package/dist/types-C4T5UOIW.cjs +230 -0
  93. package/dist/types-CYNvLeSA.js +176 -0
  94. package/dist/uniqueVintage-B30mOqbH.cjs +1205 -0
  95. package/dist/uniqueVintage-CFueJOhO.js +1203 -0
  96. package/dist/venaCbd-DHGZy49P.cjs +357 -0
  97. package/dist/venaCbd-T0CqVD4k.js +357 -0
  98. package/dist/westonJonBoucher-BdMzs_Yg.cjs +414 -0
  99. package/dist/westonJonBoucher-b4TCQ4ev.js +414 -0
  100. package/dist/wineEnthusiast-BLGlOjgr.cjs +932 -0
  101. package/dist/wineEnthusiast-BqR0i_54.js +932 -0
  102. package/dist/wolfMattress-CyyO-LoC.js +362 -0
  103. package/dist/wolfMattress-DNGZOivg.cjs +362 -0
  104. package/dist/wolfTactical-3Mm2fvVF.js +341 -0
  105. package/dist/wolfTactical-BmXYlFjr.cjs +341 -0
  106. package/package.json +66 -0
  107. package/src/adapters/amplitude/amplitudeAdapter.ts +454 -0
  108. package/src/adapters/amplitude/index.ts +2 -0
  109. package/src/adapters/amplitude/stubAmplitudeAdapter.ts +34 -0
  110. package/src/adapters/spiffy/commerce/api.ts +596 -0
  111. package/src/adapters/spiffy/commerce/exceptions/sessionExceptions.ts +6 -0
  112. package/src/adapters/spiffy/commerce/exceptions/unsupportedProductExceptions.ts +6 -0
  113. package/src/adapters/spiffy/commerce/graphql.ts +184 -0
  114. package/src/application/config/generalStaticConfig.ts +37 -0
  115. package/src/application/logging/logger.ts +29 -0
  116. package/src/application/models/api/context.ts +4 -0
  117. package/src/application/models/api/generationParams.ts +4 -0
  118. package/src/application/models/api/nextMessageRequest.ts +11 -0
  119. package/src/application/models/api/orgAnalyticsConfig.ts +19 -0
  120. package/src/application/models/api/orgConfigResults.ts +40 -0
  121. package/src/application/models/api/organizationConfig.ts +12 -0
  122. package/src/application/models/api/response.ts +132 -0
  123. package/src/application/models/api/responseGenerics.ts +67 -0
  124. package/src/application/models/api/search.ts +26 -0
  125. package/src/application/models/api/suggestion.ts +4 -0
  126. package/src/application/models/api/supportedEventRequest.ts +8 -0
  127. package/src/application/models/api/userEvent.ts +101 -0
  128. package/src/application/models/cachedValue.ts +8 -0
  129. package/src/application/models/chatElementDisplayLocation.ts +22 -0
  130. package/src/application/models/clientDetails.ts +18 -0
  131. package/src/application/models/colorsConfig.ts +28 -0
  132. package/src/application/models/conversationalSearchIds.ts +5 -0
  133. package/src/application/models/dataLayer.ts +45 -0
  134. package/src/application/models/domMutationContinuation.ts +7 -0
  135. package/src/application/models/domObservationStrategy.ts +9 -0
  136. package/src/application/models/events.ts +5 -0
  137. package/src/application/models/featureGates.ts +23 -0
  138. package/src/application/models/frontendConfig.ts +14 -0
  139. package/src/application/models/googleAnalyticsEvents.ts +8 -0
  140. package/src/application/models/graphql/index.ts +2 -0
  141. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +37 -0
  142. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +103 -0
  143. package/src/application/models/graphql/queries/getMerchantOrgIdQuery.ts +11 -0
  144. package/src/application/models/guards/api/index.ts +12 -0
  145. package/src/application/models/guards/api/isApiFormResponse.ts +90 -0
  146. package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +37 -0
  147. package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +155 -0
  148. package/src/application/models/guards/api/isApiOrgConfigResults.ts +277 -0
  149. package/src/application/models/guards/api/isApiOrganizationConfig.ts +207 -0
  150. package/src/application/models/guards/api/isApiPDPEventAttributes.ts +21 -0
  151. package/src/application/models/guards/api/isApiPLPEventAttributes.ts +41 -0
  152. package/src/application/models/guards/api/isApiPageResponseAttributes.ts +21 -0
  153. package/src/application/models/guards/api/isApiProductResponseAttributes.ts +85 -0
  154. package/src/application/models/guards/api/isApiProductSearchAttributes.ts +23 -0
  155. package/src/application/models/guards/api/isApiProductSearchFilterAttributes.ts +15 -0
  156. package/src/application/models/guards/api/isApiQueryTypedEventAttributes.ts +4 -0
  157. package/src/application/models/guards/api/isApiResponse.ts +39 -0
  158. package/src/application/models/guards/api/isApiReviewResponseAttributes.ts +30 -0
  159. package/src/application/models/guards/api/isApiReviewRichInformation.ts +37 -0
  160. package/src/application/models/guards/api/isApiSearchEventAttributes.ts +28 -0
  161. package/src/application/models/guards/api/isApiSuggestion.ts +36 -0
  162. package/src/application/models/guards/api/isApiSuggestionClickedEventAttributes.ts +9 -0
  163. package/src/application/models/guards/api/isApiTextResponseAttributes.ts +9 -0
  164. package/src/application/models/guards/api/isApiUserEvent.ts +25 -0
  165. package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +50 -0
  166. package/src/application/models/guards/isBaseEcommerceEvent.ts +17 -0
  167. package/src/application/models/guards/isGA4EcommerceEvent.ts +17 -0
  168. package/src/application/models/guards/isLegacyUAEcommerceEvent.ts +17 -0
  169. package/src/application/models/guards/isMobilePLPChatPlacementParameter.ts +11 -0
  170. package/src/application/models/guards/isSpanxTakeAQuizCtaParameter.ts +4 -0
  171. package/src/application/models/guards/isVariantInfo.ts +37 -0
  172. package/src/application/models/guards/utils.ts +43 -0
  173. package/src/application/models/index.ts +20 -0
  174. package/src/application/models/localStorageEventListener.ts +4 -0
  175. package/src/application/models/message.ts +146 -0
  176. package/src/application/models/mobilePLPChatPlacementParameter.ts +3 -0
  177. package/src/application/models/orgsEnum.ts +36 -0
  178. package/src/application/models/productExperiment.ts +5 -0
  179. package/src/application/models/spanxTakeAQuizCtaParameter.ts +4 -0
  180. package/src/application/models/spiffyWidgets.ts +16 -0
  181. package/src/application/models/supportedOrgs.ts +137 -0
  182. package/src/application/models/utilityTypes/camelCase.ts +87 -0
  183. package/src/application/models/utilityTypes/camelCasedPropertiesDeep.ts +80 -0
  184. package/src/application/models/utilityTypes/delimiterCase.ts +121 -0
  185. package/src/application/models/utilityTypes/delimiterCasedPropertiesDeep.ts +98 -0
  186. package/src/application/models/utilityTypes/index.ts +1 -0
  187. package/src/application/models/utilityTypes/internal.ts +93 -0
  188. package/src/application/models/utilityTypes/primitive.ts +8 -0
  189. package/src/application/models/utilityTypes/snakeCasedPropertiesDeep.ts +49 -0
  190. package/src/application/models/utilityTypes/splitWords.ts +76 -0
  191. package/src/application/models/utilityTypes/trim.ts +28 -0
  192. package/src/application/models/utilityTypes/unknownArray.ts +25 -0
  193. package/src/application/models/utils/snakeToCamelTransformer.ts +90 -0
  194. package/src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.ts +68 -0
  195. package/src/application/models/validators/validateGraphQLColorsConfig.ts +29 -0
  196. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +594 -0
  197. package/src/application/models/validators/validateGraphQLOrgId.ts +7 -0
  198. package/src/application/models/validators/validateMobilePLPChatPlacementParameter.ts +14 -0
  199. package/src/application/models/validators/validateOrgConfigResults.ts +47 -0
  200. package/src/application/models/validators/validateOrganizationConfig.ts +37 -0
  201. package/src/application/models/validators/validateResponse.ts +187 -0
  202. package/src/application/models/validators/validateSuggestion.ts +16 -0
  203. package/src/application/models/validators/validateUserEvent.ts +110 -0
  204. package/src/application/models/variantInfo/index.ts +1 -0
  205. package/src/application/models/variantInfo/pageVisitInfo.ts +6 -0
  206. package/src/application/models/variantInfo/plpInfo.ts +3 -0
  207. package/src/application/models/variantInfo/productInfo.ts +5 -0
  208. package/src/application/models/variantInfo/variantInfo.ts +23 -0
  209. package/src/application/service/cachingService.ts +84 -0
  210. package/src/application/service/cdnService.ts +18 -0
  211. package/src/application/service/customerService/index.ts +8 -0
  212. package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +15 -0
  213. package/src/application/service/customerService/types.ts +31 -0
  214. package/src/application/service/domMutationObserver.ts +320 -0
  215. package/src/application/service/domMutations/GridInsertionService.ts +123 -0
  216. package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +99 -0
  217. package/src/application/service/domMutations/domInsertionService.ts +90 -0
  218. package/src/application/service/domMutations/domMutationListener.ts +15 -0
  219. package/src/application/service/domMutations/domMutationListenerState.ts +52 -0
  220. package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +41 -0
  221. package/src/application/service/domMutations/gladly/gladlyListener.ts +61 -0
  222. package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +41 -0
  223. package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +119 -0
  224. package/src/application/service/environmentService.ts +51 -0
  225. package/src/application/service/featureFlagService.ts +130 -0
  226. package/src/application/service/kustomerIntegrationService.ts +111 -0
  227. package/src/application/service/localStorageService.ts +77 -0
  228. package/src/application/service/pageVariantService.ts +779 -0
  229. package/src/application/service/searchService.ts +140 -0
  230. package/src/application/service/sessionStorageService.ts +27 -0
  231. package/src/application/service/shopifyUrlService.ts +63 -0
  232. package/src/application/service/userIdentityService.ts +114 -0
  233. package/src/application/service/windowChatToggleService.ts +71 -0
  234. package/src/application/service/windowDataLayerService.ts +181 -0
  235. package/src/application/service/windowFrontendConfigService.ts +104 -0
  236. package/src/application/utils/__tests__/divideArrays.test.ts +14 -0
  237. package/src/application/utils/analyticsUtils.ts +110 -0
  238. package/src/application/utils/coreContextToApiContext.ts +11 -0
  239. package/src/application/utils/coreUserEventToApiUserEvent.ts +106 -0
  240. package/src/application/utils/divideArray.ts +7 -0
  241. package/src/application/utils/domObserver.ts +96 -0
  242. package/src/application/utils/elementObserver.ts +246 -0
  243. package/src/application/utils/imageFilter.ts +12 -0
  244. package/src/application/utils/index.ts +3 -0
  245. package/src/application/utils/merchantUtils.ts +16 -0
  246. package/src/application/utils/messageFromFormSubmittedEvent.ts +31 -0
  247. package/src/application/utils/messageFromQueryEvent.ts +38 -0
  248. package/src/application/utils/messageFromResponse.ts +133 -0
  249. package/src/application/utils/messageFromSuggestionEvent.ts +32 -0
  250. package/src/application/utils/mouseEventTypes.ts +1 -0
  251. package/src/application/utils/mutationHelper.ts +51 -0
  252. package/src/application/utils/nextMessageRequestToApiRequest.ts +31 -0
  253. package/src/application/utils/nodeSelector.ts +133 -0
  254. package/src/application/utils/overrides.ts +196 -0
  255. package/src/application/utils/stringUtils.ts +55 -0
  256. package/src/application/utils/supportedEventRequestToApiRequest.ts +12 -0
  257. package/src/application/utils/urlsParser.ts +53 -0
  258. package/src/application/utils/validation.ts +5 -0
  259. package/src/atoms/app/index.ts +57 -0
  260. package/src/atoms/app/variant.ts +261 -0
  261. package/src/atoms/atomStore.ts +34 -0
  262. package/src/atoms/chat/chatState.ts +44 -0
  263. package/src/atoms/chat/form.ts +19 -0
  264. package/src/atoms/chat/index.ts +38 -0
  265. package/src/atoms/chat/lastMessage.ts +11 -0
  266. package/src/atoms/chat/messageQueue.ts +65 -0
  267. package/src/atoms/chat/performanceMetrics.ts +84 -0
  268. package/src/atoms/chat/renderedWidgetRefs.ts +28 -0
  269. package/src/atoms/chat/replies.ts +51 -0
  270. package/src/atoms/chat/suggestions.ts +36 -0
  271. package/src/atoms/globalSearch.ts +12 -0
  272. package/src/atoms/index.ts +5 -0
  273. package/src/atoms/org/customerService.ts +13 -0
  274. package/src/atoms/org/graphqlConfig.ts +27 -0
  275. package/src/atoms/org/index.ts +7 -0
  276. package/src/atoms/org/merchantCss.ts +44 -0
  277. package/src/atoms/org/org.ts +256 -0
  278. package/src/atoms/org/orgAnalyticsConfig.ts +28 -0
  279. package/src/atoms/org/orgPageConfig.ts +38 -0
  280. package/src/atoms/org/orgUIConfig.ts +122 -0
  281. package/src/atoms/search/chatSearch.ts +293 -0
  282. package/src/atoms/search/index.ts +2 -0
  283. package/src/atoms/search/productFilters.ts +207 -0
  284. package/src/atoms/search/productSorter.ts +23 -0
  285. package/src/atoms/search/searchAPI.ts +194 -0
  286. package/src/atoms/search/types.ts +55 -0
  287. package/src/atoms/search/utils.ts +18 -0
  288. package/src/config/divIds.ts +27 -0
  289. package/src/config/locators/components/chat/entrypoints.ts +13 -0
  290. package/src/config/locators/components/chat/index.ts +23 -0
  291. package/src/config/locators/components/chat/preview.ts +13 -0
  292. package/src/config/locators/components/chat/variants/index.ts +16 -0
  293. package/src/config/locators/components/common/buttons.ts +6 -0
  294. package/src/config/locators/components/common/cards.ts +18 -0
  295. package/src/config/locators/components/common/links.ts +1 -0
  296. package/src/config/locators/components/common/tables.ts +2 -0
  297. package/src/config/locators/components/floating-button.ts +2 -0
  298. package/src/config/locators/components/index.ts +3 -0
  299. package/src/config/locators/components/report-issue.ts +21 -0
  300. package/src/config/locators/components/search/index.ts +5 -0
  301. package/src/config/locators/components/shadow-dom.ts +1 -0
  302. package/src/config/locators/embedded.ts +21 -0
  303. package/src/config/locators/index.ts +3 -0
  304. package/src/config/socialProofClasses.ts +17 -0
  305. package/src/contexts/chatContext.tsx +451 -0
  306. package/src/contexts/enviveConfigContext.tsx +70 -0
  307. package/src/contexts/index.ts +4 -0
  308. package/src/contexts/systemSettingsContext.tsx +61 -0
  309. package/src/contexts/types.ts +1059 -0
  310. package/src/enabled-features.ts +83 -0
  311. package/src/events/event-types.ts +11 -0
  312. package/src/events/index.ts +52 -0
  313. package/src/events/registerAnalyticsListeners.ts +49 -0
  314. package/src/extension.ts +63 -0
  315. package/src/hooks/index.ts +22 -0
  316. package/src/hooks/useBlockBackButton.ts +29 -0
  317. package/src/hooks/useChatToggle.ts +66 -0
  318. package/src/hooks/useCustomerSupportHandoff.ts +39 -0
  319. package/src/hooks/useDebounce.ts +17 -0
  320. package/src/hooks/useDynamicVariants.ts +210 -0
  321. package/src/hooks/useElementObserver.ts +245 -0
  322. package/src/hooks/useFileUpload.ts +61 -0
  323. package/src/hooks/useGrabAndScroll.ts +133 -0
  324. package/src/hooks/useHideElements.ts +82 -0
  325. package/src/hooks/useHorizontalScrollAnimation.ts +115 -0
  326. package/src/hooks/useImageResolver.ts +51 -0
  327. package/src/hooks/useIntersection.ts +28 -0
  328. package/src/hooks/useIsSmallScreen.ts +23 -0
  329. package/src/hooks/useMessageFilter.ts +49 -0
  330. package/src/hooks/useMessageScrollObserver.ts +47 -0
  331. package/src/hooks/useReducedMotionWithOverride.ts +15 -0
  332. package/src/hooks/useSearch.tsx +433 -0
  333. package/src/hooks/useSnapCalculator.ts +38 -0
  334. package/src/hooks/useSnapControl.ts +155 -0
  335. package/src/hooks/useSystemSettingsContext.ts +12 -0
  336. package/src/hooks/useTrackComponentVisibleEvent.ts +52 -0
  337. package/src/hooks/useUpdateAnalyticsProps.ts +56 -0
  338. package/src/hooks/utils.ts +153 -0
  339. package/src/index.ts +31 -0
  340. package/src/initialize.ts +163 -0
  341. package/src/interceptors/types.ts +6 -0
  342. package/src/interceptors/useFormEscalation.ts +40 -0
  343. package/src/interceptors/useMessageInterceptor.ts +32 -0
  344. package/src/main.ts +85 -0
  345. package/src/main.tsx +123 -0
  346. package/src/merchants/bandolier/bandolier.ts +1389 -0
  347. package/src/merchants/carpe/carpe.ts +656 -0
  348. package/src/merchants/coterie/coterie.ts +280 -0
  349. package/src/merchants/default.ts +193 -0
  350. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +375 -0
  351. package/src/merchants/fiveCbd/fiveCbd.ts +697 -0
  352. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +721 -0
  353. package/src/merchants/greenpan/greenpan.ts +440 -0
  354. package/src/merchants/grooveLife/grooveLife.ts +386 -0
  355. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +468 -0
  356. package/src/merchants/init-merchant.sh +53 -0
  357. package/src/merchants/jackArcher/jackArcher.ts +974 -0
  358. package/src/merchants/jordanCraig/jordanCraig.ts +1927 -0
  359. package/src/merchants/kindredBravely/kindredBravely.ts +529 -0
  360. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +418 -0
  361. package/src/merchants/larryAndSerges/larryAndSerges.ts +314 -0
  362. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +424 -0
  363. package/src/merchants/longevityrx/longevityrx.ts +368 -0
  364. package/src/merchants/lookOptic/lookOptic.ts +323 -0
  365. package/src/merchants/mantraBrand/mantraBrand.ts +838 -0
  366. package/src/merchants/medterra/medterra.ts +670 -0
  367. package/src/merchants/modells/modells.ts +546 -0
  368. package/src/merchants/pressedFloral/pressedFloral.ts +734 -0
  369. package/src/merchants/skinPerfection/skinPerfection.ts +379 -0
  370. package/src/merchants/snapSupplements/snapSupplements.ts +325 -0
  371. package/src/merchants/spanx/spanx.ts +810 -0
  372. package/src/merchants/spanx/spanxStaging.ts +942 -0
  373. package/src/merchants/supergoop/supergoop.ts +376 -0
  374. package/src/merchants/uniqueVintage/uniqueVintage.ts +1314 -0
  375. package/src/merchants/uniqueVintage/views/useUniqueVintageChatSearch.ts +147 -0
  376. package/src/merchants/venaCbd/venaCbd.ts +410 -0
  377. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +473 -0
  378. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +990 -0
  379. package/src/merchants/wolfMattress/wolfMattress.ts +411 -0
  380. package/src/merchants/wolfTactical/wolfTactical.ts +389 -0
  381. package/src/types/custservice-types.ts +28 -0
  382. package/src/types/search-filter-types.ts +111 -0
  383. package/src/types/suggestionBarV2-types.ts +4 -0
  384. package/src/types/test-types.ts +3 -0
  385. package/src/types.ts +66 -0
@@ -0,0 +1,184 @@
1
+ import Logger from 'src/application/logging/logger';
2
+ import { ColorMapping } from 'src/application/models/colorsConfig';
3
+ import { FrontendConfig } from 'src/application/models/frontendConfig';
4
+ import {
5
+ getMerchantColorsQuery,
6
+ GetMerchantColorsQueryData,
7
+ getMerchantFrontendConfigQuery,
8
+ GetMerchantFrontendConfigQueryData,
9
+ } from 'src/application/models/graphql';
10
+ import { getMerchantOrgIdQuery } from 'src/application/models/graphql/queries/getMerchantOrgIdQuery';
11
+ import { isGraphQLColorsConfig } from 'src/application/models/guards/graphQL/isGraphQLColorsConfig';
12
+ import { validateGraphQLColorsConfig } from 'src/application/models/validators/validateGraphQLColorsConfig';
13
+ import { validateGraphQLFrontendConfig } from 'src/application/models/validators/validateGraphQLFrontendConfig';
14
+ import { validateGraphQLOrgId } from 'src/application/models/validators/validateGraphQLOrgId';
15
+ import { EnvironmentService } from 'src/application/service/environmentService';
16
+ import { getQueryParam } from 'src/application/utils/urlsParser';
17
+ import { getAtomStore } from 'src/atoms/atomStore';
18
+ import { apiKeyAtom } from 'src/atoms/org/org';
19
+
20
+ export const configVersion = () =>
21
+ getQueryParam('spiffy_config_version') || getQueryParam('envive_config_version') || 'deployed';
22
+
23
+ const colorsAndFrontendConfigQuery = () => `
24
+ query ($version: String = "${configVersion()}") {
25
+ me {
26
+ getProductsConfigByVersion(version: $version) {
27
+ frontend { values }
28
+ colors { values }
29
+ }
30
+ }
31
+ }
32
+ `;
33
+ interface BaseMeConfigQueryResponse {
34
+ me: {
35
+ org?: {
36
+ id: string;
37
+ };
38
+ getProductsConfigByVersion?: {
39
+ frontend?: { values: GetMerchantFrontendConfigQueryData };
40
+ colors?: { values: GetMerchantColorsQueryData };
41
+ };
42
+ };
43
+ }
44
+
45
+ class GraphQLClient {
46
+ private static instance: GraphQLClient | undefined;
47
+
48
+ private readonly apiKey: string;
49
+
50
+ private readonly basePath: string;
51
+
52
+ static readonly setInstance = (apiKey: string, basePath: string) => {
53
+ GraphQLClient.instance = new GraphQLClient(apiKey, basePath);
54
+ };
55
+
56
+ private static readonly getInstance = (): GraphQLClient => {
57
+ if (!GraphQLClient.instance) {
58
+ const atomStore = getAtomStore();
59
+ const apiKey = atomStore.get(apiKeyAtom);
60
+ GraphQLClient.instance = new GraphQLClient(apiKey, EnvironmentService.getApiEndpoint());
61
+ }
62
+
63
+ return GraphQLClient.instance;
64
+ };
65
+
66
+ private constructor(apiKey: string, basePath: string) {
67
+ this.apiKey = apiKey;
68
+ this.basePath = basePath;
69
+ }
70
+
71
+ private async executeQuery<T>(query: string, variables?: Record<string, unknown>): Promise<T> {
72
+ const response = await fetch(`${this.basePath}/v1/graphql`, {
73
+ method: 'POST',
74
+ headers: {
75
+ 'Content-Type': 'application/json',
76
+ Authorization: `Bearer ${this.apiKey}`,
77
+ },
78
+ body: JSON.stringify({
79
+ query,
80
+ variables,
81
+ }),
82
+ });
83
+
84
+ if (!response.ok) {
85
+ throw new Error(`GraphQL request failed: ${response.statusText}`);
86
+ }
87
+
88
+ const result = await response.json();
89
+
90
+ if (result.errors) {
91
+ throw new Error(`GraphQL errors: ${JSON.stringify(result.errors)}`);
92
+ }
93
+
94
+ return result.data;
95
+ }
96
+
97
+ static readonly getOrgId = async (): Promise<string | undefined> => {
98
+ const query = getMerchantOrgIdQuery;
99
+ if (!query) {
100
+ throw new Error('Org id query is not defined');
101
+ }
102
+
103
+ const response =
104
+ await GraphQLClient.getInstance().executeQuery<BaseMeConfigQueryResponse>(query);
105
+
106
+ return validateGraphQLOrgId(response.me.org?.id);
107
+ };
108
+
109
+ static readonly getColorsAndFrontendConfig = async (): Promise<{
110
+ colorsConfig?: ColorMapping;
111
+ frontendConfig?: FrontendConfig;
112
+ }> => {
113
+ try {
114
+ const query = colorsAndFrontendConfigQuery();
115
+ if (!query) {
116
+ throw new Error('Colors and frontend config query is not defined');
117
+ }
118
+
119
+ const response =
120
+ await GraphQLClient.getInstance().executeQuery<BaseMeConfigQueryResponse>(query);
121
+
122
+ return {
123
+ colorsConfig: validateGraphQLColorsConfig(
124
+ response.me.getProductsConfigByVersion?.colors?.values,
125
+ ),
126
+ frontendConfig: validateGraphQLFrontendConfig(
127
+ response.me.getProductsConfigByVersion?.frontend?.values,
128
+ ),
129
+ };
130
+ } catch (err) {
131
+ Logger.logError('Error fetching graphql colors and frontend config', err);
132
+ return {
133
+ colorsConfig: undefined,
134
+ frontendConfig: undefined,
135
+ };
136
+ }
137
+ };
138
+
139
+ static readonly getFrontendConfig = async (): Promise<FrontendConfig | undefined> => {
140
+ try {
141
+ const query = getMerchantFrontendConfigQuery();
142
+ if (!query) {
143
+ throw new Error('Frontend config query is not defined');
144
+ }
145
+
146
+ const response =
147
+ await GraphQLClient.getInstance().executeQuery<BaseMeConfigQueryResponse>(query);
148
+
149
+ if (!response.me.getProductsConfigByVersion?.frontend) {
150
+ throw new Error('No frontend config found');
151
+ }
152
+
153
+ return validateGraphQLFrontendConfig(response.me.getProductsConfigByVersion.frontend.values);
154
+ } catch (err) {
155
+ Logger.logError('Error fetching graphql frontend config', err);
156
+ return undefined;
157
+ }
158
+ };
159
+
160
+ static readonly getColors = async (): Promise<GetMerchantColorsQueryData | undefined> => {
161
+ try {
162
+ const query = getMerchantColorsQuery();
163
+ if (!query) {
164
+ throw new Error('Colors query is not defined');
165
+ }
166
+
167
+ const response =
168
+ await GraphQLClient.getInstance().executeQuery<BaseMeConfigQueryResponse>(query);
169
+
170
+ if (!response.me.getProductsConfigByVersion?.colors) {
171
+ throw new Error('No colors config found');
172
+ }
173
+
174
+ return isGraphQLColorsConfig(response.me.getProductsConfigByVersion.colors.values)
175
+ ? response.me.getProductsConfigByVersion.colors.values
176
+ : undefined;
177
+ } catch (err) {
178
+ Logger.logError('Error fetching graphql colors config', err);
179
+ return undefined;
180
+ }
181
+ };
182
+ }
183
+
184
+ export { GraphQLClient };
@@ -0,0 +1,37 @@
1
+ import { ContextSourceEnum } from "@spiffy-ai/commerce-api-client";
2
+ import {
3
+ BOTTOM_REVIEWS_BAR_ID,
4
+ CHAT_PREVIEW_CONTAINER_ID,
5
+ CONTAINER_ID,
6
+ FLOATING_BUTTON_ID,
7
+ TOP_SUGGESTION_BAR_PDP_ID,
8
+ } from "src/config/divIds";
9
+ import { useEnviveConfig } from "src/contexts/enviveConfigContext";
10
+
11
+ class GeneralStaticConfig {
12
+ static readonly REVIEW_SUMMARY_ID: string = BOTTOM_REVIEWS_BAR_ID;
13
+
14
+ static readonly PDP_REVIEW_SUMMARY_ID: string = TOP_SUGGESTION_BAR_PDP_ID;
15
+
16
+ static readonly CHAT_PREVIEW_CONTAINER_ID = CHAT_PREVIEW_CONTAINER_ID;
17
+
18
+ static readonly FLOATING_BUTTON_ID = FLOATING_BUTTON_ID;
19
+
20
+ static readonly CONTAINER_ID = CONTAINER_ID;
21
+
22
+ static showDebugBar(appSource: ContextSourceEnum): boolean {
23
+ const { env } = useEnviveConfig();
24
+ const isProd = env === "prod";
25
+ return (
26
+ !isProd ||
27
+ appSource === ContextSourceEnum.Playground ||
28
+ appSource === ContextSourceEnum.Test
29
+ );
30
+ }
31
+
32
+ static getFloatingChatButtonId(): string | undefined {
33
+ return "spiffy-floating-button";
34
+ }
35
+ }
36
+
37
+ export { GeneralStaticConfig };
@@ -0,0 +1,29 @@
1
+ /* eslint-disable no-console */
2
+
3
+ class Logger {
4
+ static logInfo(message: string, ...args: unknown[]): void {
5
+ console.info(`INFO: ${message}`, ...args);
6
+ }
7
+
8
+ static logDebug(message: string, ...args: unknown[]): void {
9
+ console.debug(`DEBUG: ${message}`, ...args);
10
+ }
11
+
12
+ static logError(
13
+ message: string,
14
+ error: unknown | undefined,
15
+ ...args: unknown[]
16
+ ): void {
17
+ console.error(`ERROR: ${message} error=${error}`, args);
18
+ }
19
+
20
+ static logWarn(
21
+ message: string,
22
+ error: unknown | undefined,
23
+ ...args: unknown[]
24
+ ): void {
25
+ console.warn(`WARN: ${message} error=${error}`, args);
26
+ }
27
+ }
28
+
29
+ export default Logger;
@@ -0,0 +1,4 @@
1
+ import { Context as ApiContext } from '@spiffy-ai/commerce-api-client';
2
+ import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
3
+
4
+ export interface Context extends CamelCasedPropertiesDeep<ApiContext> {}
@@ -0,0 +1,4 @@
1
+ import { GenerationParams as ApiGenerationParams } from '@spiffy-ai/commerce-api-client';
2
+ import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
3
+
4
+ export interface GenerationParams extends CamelCasedPropertiesDeep<ApiGenerationParams> {}
@@ -0,0 +1,11 @@
1
+ import { Context } from './context';
2
+ import { UserEvent } from './userEvent';
3
+ import { GenerationParams } from './generationParams';
4
+
5
+ export interface NextMessageRequest {
6
+ id: string;
7
+ context: Context;
8
+ userEvents?: UserEvent[];
9
+ featureFlags?: Record<string, boolean>;
10
+ generationParams?: GenerationParams;
11
+ }
@@ -0,0 +1,19 @@
1
+ export interface OrgAnalyticsConfig {
2
+ amplitude?: OrgAnalyticsAmplitudeConfig;
3
+ customerService?: OrgAnalyticsCustomerServiceConfig;
4
+ googleAnalytics?: OrgAnalyticsGoogleAnalyticsConfig;
5
+ }
6
+
7
+ export interface OrgAnalyticsAmplitudeConfig {
8
+ sessionReplayEnabled: boolean;
9
+ sessionReplaySampleRate: number;
10
+ trackingEnabled: boolean;
11
+ }
12
+
13
+ export interface OrgAnalyticsCustomerServiceConfig {
14
+ provider: string;
15
+ }
16
+
17
+ export interface OrgAnalyticsGoogleAnalyticsConfig {
18
+ measurementId?: string;
19
+ }
@@ -0,0 +1,40 @@
1
+ import { OrganizationStatusEnum } from '@spiffy-ai/commerce-api-client';
2
+ import { OrganizationConfig } from 'src/application/models/api/organizationConfig';
3
+
4
+ export interface OrgConfigExperiment {
5
+ group?: string;
6
+ groupName?: string;
7
+ name?: string;
8
+ ruleId?: string;
9
+ value?: Record<string, unknown>;
10
+ }
11
+
12
+ export interface OrgConfigFeatureGate {
13
+ groupName?: string;
14
+ name?: string;
15
+ ruleId?: string;
16
+ value?: boolean;
17
+ }
18
+
19
+ export interface Organization {
20
+ id: string;
21
+ displayName: string;
22
+ domain: string;
23
+ shortName: string;
24
+ status: OrganizationStatusEnum;
25
+ createdAt?: string;
26
+ updatedAt?: string;
27
+ }
28
+
29
+ export interface OrganizationSettings {
30
+ org: Organization;
31
+ // this is currently not configured by the backend
32
+ settings: Record<string, unknown>;
33
+ }
34
+
35
+ export interface OrgConfig {
36
+ configs: OrganizationConfig[];
37
+ experiments: OrgConfigExperiment[];
38
+ gates: OrgConfigFeatureGate[];
39
+ org: OrganizationSettings;
40
+ }
@@ -0,0 +1,12 @@
1
+ import { OrgAnalyticsConfig } from './orgAnalyticsConfig';
2
+
3
+ export interface OrganizationConfig {
4
+ createdAt: string;
5
+ namespace: string;
6
+ isLatest: boolean;
7
+ version: string;
8
+ updatedAt: string;
9
+ config: OrgAnalyticsConfig;
10
+ organizationId?: string;
11
+ id?: string;
12
+ }
@@ -0,0 +1,132 @@
1
+ import { ResponseCategory } from '@spiffy-ai/commerce-api-client';
2
+ import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
3
+
4
+ import type {
5
+ ProductSearchResponseAttributes as ApiProductSearchResponseAttributes,
6
+ ResponseProductAttributes as ApiProductResponseAttributes,
7
+ SearchResponseProduct as ApiSearchResponseProduct,
8
+ FormType,
9
+ FulfillmentDisplayStatus,
10
+ } from '@spiffy-ai/commerce-api-client';
11
+ import {
12
+ ApiReviewResponseAttributes,
13
+ ApiReviewRichInformation,
14
+ ApiPageResponseAttributes,
15
+ ApiTextResponseAttributes,
16
+ ApiSearchResponseAttributes,
17
+ ApiProductSearchFilterResponseAttributes,
18
+ } from 'src/application/models/api/responseGenerics';
19
+
20
+ // Internal types
21
+ export interface ReviewRichInformation extends CamelCasedPropertiesDeep<ApiReviewRichInformation> {}
22
+
23
+ export type AcceptableFormFieldType = 'string' | 'number' | 'boolean' | 'object' | 'array';
24
+
25
+ export interface OrderItemInfo {
26
+ itemTitle: string;
27
+ itemPrice: number;
28
+ itemQuantity: number;
29
+ orderItemId: string;
30
+ image?: string;
31
+ inTransitAt?: string;
32
+ deliveredAt?: string;
33
+ estimatedDeliveryAt?: string;
34
+ fulfillmentDisplayStatus?: FulfillmentDisplayStatus;
35
+ trackingUrl?: string;
36
+ }
37
+
38
+ export interface OrderResponseAttributes {
39
+ category: ResponseCategory.Order;
40
+ attributes: {
41
+ orderId: string;
42
+ orderNumber: string;
43
+ createdAt: string;
44
+ latestEventDate: string;
45
+ lineItems: OrderItemInfo[];
46
+ };
47
+ }
48
+
49
+ export interface TextResponseAttributes {
50
+ category: ResponseCategory.Text;
51
+ attributes: CamelCasedPropertiesDeep<ApiTextResponseAttributes>;
52
+ }
53
+
54
+ export interface ProductResponseAttributes {
55
+ category: ResponseCategory.Product;
56
+ attributes: CamelCasedPropertiesDeep<
57
+ ApiProductResponseAttributes & {
58
+ filters?: {
59
+ [key: string]: string[];
60
+ };
61
+ }
62
+ >;
63
+ }
64
+
65
+ export interface SearchResponseProductAttributes {
66
+ category: ResponseCategory.Product;
67
+ attributes: CamelCasedPropertiesDeep<ApiSearchResponseProduct>;
68
+ }
69
+
70
+ export interface SearchResponseAttributes {
71
+ category: ResponseCategory.Text;
72
+ attributes: CamelCasedPropertiesDeep<ApiSearchResponseAttributes>;
73
+ }
74
+
75
+ export interface SearchProductResponseAttributes {
76
+ category: ResponseCategory.ProductSearch;
77
+ attributes: CamelCasedPropertiesDeep<ApiProductSearchResponseAttributes>;
78
+ }
79
+
80
+ export interface SearchProductFilterAttributes {
81
+ category: ResponseCategory.ProductSearchFilter;
82
+ attributes: CamelCasedPropertiesDeep<ApiProductSearchFilterResponseAttributes>;
83
+ }
84
+
85
+ export interface ReviewResponseAttributes {
86
+ category: ResponseCategory.Review;
87
+ attributes: CamelCasedPropertiesDeep<ApiReviewResponseAttributes>;
88
+ }
89
+
90
+ export interface SeparatorResponseAttributes {
91
+ category: ResponseCategory.Separator;
92
+ }
93
+
94
+ export interface PageResponseAttributes {
95
+ category: ResponseCategory.Page;
96
+ attributes: CamelCasedPropertiesDeep<ApiPageResponseAttributes>;
97
+ }
98
+
99
+ export interface FormResponseAttributes {
100
+ category: ResponseCategory.Form;
101
+ attributes: {
102
+ formCategory?: {
103
+ formType: FormType;
104
+ };
105
+ schema: {
106
+ properties: {
107
+ [key: string]: {
108
+ type: AcceptableFormFieldType;
109
+ title: string;
110
+ format?: 'email';
111
+ };
112
+ };
113
+ required: string[];
114
+ };
115
+ };
116
+ }
117
+
118
+ export type Response = {
119
+ id: string;
120
+ createdAt: string;
121
+ category: ResponseCategory;
122
+ } & (
123
+ | TextResponseAttributes
124
+ | ProductResponseAttributes
125
+ | ReviewResponseAttributes
126
+ | SeparatorResponseAttributes
127
+ | PageResponseAttributes
128
+ | SearchProductResponseAttributes
129
+ | SearchProductFilterAttributes
130
+ | FormResponseAttributes
131
+ | OrderResponseAttributes
132
+ );
@@ -0,0 +1,67 @@
1
+ import { FormResponseAttributesFormCategory } from '@spiffy-ai/commerce-api-client';
2
+ import { AcceptableFormFieldType } from './response';
3
+
4
+ // Boundary types, these are generic objects not defined in the SDK but can be returned by the API
5
+ // as properties of the response attributes
6
+ export interface ApiReviewRichInformation {
7
+ cons?: string[];
8
+ pros?: string[];
9
+ review_date?: string;
10
+ reviewer_title?: string;
11
+ product_familiarity?: 'IVE_TESTED_IT' | 'I_OWN_IT';
12
+ }
13
+
14
+ export interface ApiTextResponseAttributes {
15
+ content: string;
16
+ }
17
+
18
+ export interface ApiSearchResponseAttributes {
19
+ search_term: string;
20
+ selected_filters?: string[];
21
+ filters?: {
22
+ [key: string]: string[];
23
+ };
24
+ }
25
+
26
+ export interface ApiSearchResponseProductAttributes {
27
+ response_id?: string;
28
+ }
29
+
30
+ export interface ApiProductSearchFilterResponseAttributes {
31
+ filter_name: string;
32
+ }
33
+
34
+ export interface ApiReviewResponseAttributes {
35
+ id?: string;
36
+ product_id?: string;
37
+ title?: string;
38
+ reviewer?: string;
39
+ review?: string;
40
+ stars?: number;
41
+ rich_information?: ApiReviewRichInformation;
42
+
43
+ onClick?: () => void;
44
+ }
45
+
46
+ export interface ApiPageResponseAttributes {
47
+ id?: string;
48
+ title?: string;
49
+ description?: string;
50
+ url?: string;
51
+ }
52
+
53
+ export interface ApiFormResponseSchemaAttributes {
54
+ properties: {
55
+ [key: string]: {
56
+ format?: 'email';
57
+ type: AcceptableFormFieldType;
58
+ title: string;
59
+ };
60
+ };
61
+ required: Array<keyof ApiFormResponseSchemaAttributes['properties']>;
62
+ }
63
+
64
+ export interface ApiFormResponseAttributes {
65
+ form_category?: FormResponseAttributesFormCategory;
66
+ schema: ApiFormResponseSchemaAttributes;
67
+ }
@@ -0,0 +1,26 @@
1
+ import {
2
+ ProductSearchResponse as ApiProductSearchResponse,
3
+ ProductSearchResponseAttributes as ApiProductSearchResponseAttributes,
4
+ SearchResponseProduct,
5
+ } from '@spiffy-ai/commerce-api-client';
6
+ import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
7
+
8
+ // Transform API types using CamelCasedPropertiesDeep
9
+ export interface ProductSearchResponse extends CamelCasedPropertiesDeep<ApiProductSearchResponse> {}
10
+ export interface ProductSearchResponseAttributes
11
+ extends CamelCasedPropertiesDeep<ApiProductSearchResponseAttributes> {}
12
+
13
+ // Custom search result interface (flattened structure)
14
+ export interface SearchResult {
15
+ products: SearchResponseProduct[]; // Flattened from all responses
16
+ filters: string[]; // Combined from all responses
17
+ generatedQuery?: string;
18
+ totalProductCount: number;
19
+ searchResponseId: string;
20
+ }
21
+
22
+ // Search parameters interface
23
+ export interface SearchParams {
24
+ query: string;
25
+ limit?: number;
26
+ }
@@ -0,0 +1,4 @@
1
+ import { Suggestion as ApiSuggestion } from '@spiffy-ai/commerce-api-client';
2
+ import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
3
+
4
+ export interface Suggestion extends CamelCasedPropertiesDeep<ApiSuggestion> {}
@@ -0,0 +1,8 @@
1
+ import { UserEvent } from './userEvent';
2
+ import { Context } from './context';
3
+
4
+ export interface SupportedEventRequest {
5
+ id: string;
6
+ context: Context;
7
+ userEvent: UserEvent;
8
+ }
@@ -0,0 +1,101 @@
1
+ import {
2
+ PDPAttributes as ApiPDPAttributes,
3
+ PLPAttributes as ApiPLPAttributes,
4
+ QueryTypedAttributes as ApiQueryTypedAttributes,
5
+ SearchAttributes as ApiSearchAttributes,
6
+ SuggestionClickedAttributes as ApiSuggestionClickedAttributes,
7
+ UserEvent as ApiUserEvent,
8
+ FormType,
9
+ PageVisitCategory,
10
+ UserEventCategory,
11
+ } from '@spiffy-ai/commerce-api-client';
12
+ import { CamelCasedPropertiesDeep } from 'src/application/models/utilityTypes';
13
+
14
+ // TODO flatten these out or explore new typescript openapi generator fork
15
+ export interface PDPAttributes extends CamelCasedPropertiesDeep<ApiPDPAttributes> {}
16
+
17
+ export interface PLPAttributes extends CamelCasedPropertiesDeep<ApiPLPAttributes> {}
18
+
19
+ export interface SearchAttributes extends CamelCasedPropertiesDeep<ApiSearchAttributes> {}
20
+
21
+ export interface QueryTypedAttributes extends CamelCasedPropertiesDeep<ApiQueryTypedAttributes> {}
22
+
23
+ export interface FormSubmittedAttributes {
24
+ filledSchema: Record<string, unknown>;
25
+ formResponseId: string;
26
+ formType: FormType;
27
+ }
28
+
29
+ export interface PageVisitAttributes {
30
+ url: string;
31
+ pageVisitCategory: PageVisitCategory;
32
+ }
33
+
34
+ export interface SuggestionClickedAttributes
35
+ extends CamelCasedPropertiesDeep<ApiSuggestionClickedAttributes> {}
36
+
37
+ export type UserEventAttributes =
38
+ | PDPAttributes
39
+ | PLPAttributes
40
+ | QueryTypedAttributes
41
+ | SearchAttributes
42
+ | SuggestionClickedAttributes
43
+ | PageVisitAttributes;
44
+
45
+ export interface PDPUserEvent {
46
+ category: UserEventCategory.PdpVisit | UserEventCategory.AddToCart;
47
+ attributes: PDPAttributes;
48
+ }
49
+
50
+ export interface PLPUserEvent {
51
+ category: UserEventCategory.PlpVisit;
52
+ attributes: PLPAttributes;
53
+ }
54
+
55
+ export interface QueryTypedUserEvent {
56
+ category: UserEventCategory.QueryTyped;
57
+ attributes: QueryTypedAttributes;
58
+ }
59
+
60
+ export interface SearchUserEvent {
61
+ category: UserEventCategory.Search;
62
+ attributes: SearchAttributes;
63
+ }
64
+
65
+ export interface SuggestionsClickedUserEvent {
66
+ category: UserEventCategory.SuggestionClicked;
67
+ attributes: SuggestionClickedAttributes;
68
+ }
69
+
70
+ export interface AppLoadedUserEvent {
71
+ category: UserEventCategory.AppLoaded;
72
+ }
73
+
74
+ export interface AppUnloadedEvent {
75
+ category: UserEventCategory.AppUnloaded;
76
+ }
77
+
78
+ export interface PageVisitEvent {
79
+ category: UserEventCategory.PageVisit;
80
+ attributes: PageVisitAttributes;
81
+ }
82
+
83
+ export interface FormSubmitted {
84
+ category: UserEventCategory.FormSubmitted;
85
+ attributes: FormSubmittedAttributes;
86
+ }
87
+
88
+ export type UserEvent = CamelCasedPropertiesDeep<
89
+ Pick<ApiUserEvent, 'event_id' | 'category' | 'created_at'>
90
+ > &
91
+ (
92
+ | SuggestionsClickedUserEvent
93
+ | AppLoadedUserEvent
94
+ | PDPUserEvent
95
+ | QueryTypedUserEvent
96
+ | SearchUserEvent
97
+ | AppUnloadedEvent
98
+ | PLPUserEvent
99
+ | PageVisitEvent
100
+ | FormSubmitted
101
+ );