@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,39 @@
1
+ import Logger from 'src/application/logging/logger';
2
+ import { Response, ResponseCategory } from '@spiffy-ai/commerce-api-client';
3
+ import { hasPropertyOfType } from 'src/application/models/guards/utils';
4
+
5
+ export const isApiResponse = (data: unknown): data is Response => {
6
+ if (data == null || typeof data !== 'object') {
7
+ Logger.logError('isApiResponse: data is null or not an object', undefined, { data });
8
+ return false;
9
+ }
10
+
11
+ if (!hasPropertyOfType(data, 'id', 'string')) {
12
+ Logger.logError('isApiResponse: id is not a string', undefined, { data });
13
+ return false;
14
+ }
15
+
16
+ if (
17
+ !hasPropertyOfType(data, 'category', 'string') ||
18
+ !Object.values(ResponseCategory).includes(data.category as ResponseCategory)
19
+ ) {
20
+ Logger.logError(
21
+ 'isApiResponse: category is not a string or not a valid response category',
22
+ undefined,
23
+ { data },
24
+ );
25
+ return false;
26
+ }
27
+
28
+ if (!hasPropertyOfType(data, 'created_at', 'string')) {
29
+ Logger.logError('isApiResponse: created_at is not a string', undefined, { data });
30
+ return false;
31
+ }
32
+
33
+ if (!hasPropertyOfType(data, 'attributes', 'object', true)) {
34
+ Logger.logError('isApiResponse: attributes is not an object', undefined, { data });
35
+ return false;
36
+ }
37
+
38
+ return true;
39
+ };
@@ -0,0 +1,30 @@
1
+ import { ApiReviewResponseAttributes } from 'src/application/models/api/responseGenerics';
2
+ import { isApiReviewRichInformation } from './isApiReviewRichInformation';
3
+
4
+ export const isApiReviewResponseAttributes = (obj: unknown): obj is ApiReviewResponseAttributes => {
5
+ if (obj == null || typeof obj !== 'object') {
6
+ return false;
7
+ }
8
+
9
+ if ('title' in obj && obj.title != null && typeof obj.title !== 'string') {
10
+ return false;
11
+ }
12
+
13
+ if ('review' in obj && typeof obj.review !== 'string') {
14
+ return false;
15
+ }
16
+
17
+ if ('reviewer' in obj && typeof obj.reviewer !== 'string') {
18
+ return false;
19
+ }
20
+
21
+ if ('stars' in obj && typeof obj.stars !== 'number') {
22
+ return false;
23
+ }
24
+
25
+ if ('rich_information' in obj && !isApiReviewRichInformation(obj.rich_information)) {
26
+ return false;
27
+ }
28
+
29
+ return true;
30
+ };
@@ -0,0 +1,37 @@
1
+ import { ApiReviewRichInformation } from 'src/application/models/api/responseGenerics';
2
+
3
+ export const isApiReviewRichInformation = (
4
+ richInfo: unknown,
5
+ ): richInfo is ApiReviewRichInformation => {
6
+ if (richInfo == null || typeof richInfo !== 'object') {
7
+ return false;
8
+ }
9
+
10
+ if (
11
+ 'cons' in richInfo &&
12
+ (!Array.isArray(richInfo.cons) || richInfo.cons.some((con) => typeof con !== 'string'))
13
+ ) {
14
+ return false;
15
+ }
16
+
17
+ if (
18
+ 'pros' in richInfo &&
19
+ (!Array.isArray(richInfo.pros) || richInfo.pros.some((pro) => typeof pro !== 'string'))
20
+ ) {
21
+ return false;
22
+ }
23
+
24
+ if ('review_date' in richInfo && typeof richInfo.review_date !== 'string') {
25
+ return false;
26
+ }
27
+
28
+ if ('reviewer_title' in richInfo && typeof richInfo.reviewer_title !== 'string') {
29
+ return false;
30
+ }
31
+
32
+ if ('product_familiarity' in richInfo && typeof richInfo.product_familiarity !== 'string') {
33
+ return false;
34
+ }
35
+
36
+ return true;
37
+ };
@@ -0,0 +1,28 @@
1
+ import { SearchAttributes } from '@spiffy-ai/commerce-api-client';
2
+
3
+ export const isApiSearchAttributes = (data: unknown): data is SearchAttributes => {
4
+ if (data == null || typeof data !== 'object') {
5
+ return false;
6
+ }
7
+
8
+ if (!('search_term' in data) || typeof data.search_term !== 'string') {
9
+ return false;
10
+ }
11
+ if ('selected_filters' in data && !Array.isArray(data.selected_filters)) {
12
+ return false;
13
+ }
14
+
15
+ if (!!data.search_term) {
16
+ return true;
17
+ }
18
+
19
+ if (
20
+ !('search_results' in data) ||
21
+ !Array.isArray(data.search_results) ||
22
+ !data.search_results.every((v) => typeof v === 'string')
23
+ ) {
24
+ return false;
25
+ }
26
+
27
+ return true;
28
+ };
@@ -0,0 +1,36 @@
1
+ import {
2
+ Suggestion as CommerceSuggestion,
3
+ SuggestionCategory,
4
+ } from '@spiffy-ai/commerce-api-client';
5
+
6
+ export const isSuggestion = (data: unknown): data is CommerceSuggestion => {
7
+ if (data == null || typeof data !== 'object') {
8
+ return false;
9
+ }
10
+
11
+ if (!('id' in data) || typeof data.id !== 'string') {
12
+ return false;
13
+ }
14
+
15
+ if (
16
+ !('category' in data) ||
17
+ typeof data.category !== 'string' ||
18
+ !Object.values(SuggestionCategory).includes(data.category as SuggestionCategory)
19
+ ) {
20
+ return false;
21
+ }
22
+
23
+ if (!('created_at' in data) || typeof data.created_at !== 'string') {
24
+ return false;
25
+ }
26
+
27
+ if (!('content' in data) || typeof data.content !== 'string') {
28
+ return false;
29
+ }
30
+
31
+ if ('is_answer' in data && data.is_answer != null && typeof data.is_answer !== 'boolean') {
32
+ return false;
33
+ }
34
+
35
+ return true;
36
+ };
@@ -0,0 +1,9 @@
1
+ import { SuggestionClickedAttributes } from '@spiffy-ai/commerce-api-client';
2
+
3
+ export const isApiSuggestionClickedAttributes = (
4
+ data: unknown,
5
+ ): data is SuggestionClickedAttributes =>
6
+ data != null &&
7
+ typeof data === 'object' &&
8
+ 'suggestion_id' in data &&
9
+ typeof data.suggestion_id === 'string';
@@ -0,0 +1,9 @@
1
+ import { ApiTextResponseAttributes } from 'src/application/models/api/responseGenerics';
2
+
3
+ export const isApiTextResponseAttributes = (
4
+ attributes: unknown,
5
+ ): attributes is ApiTextResponseAttributes =>
6
+ typeof attributes === 'object' &&
7
+ attributes != null &&
8
+ 'content' in attributes &&
9
+ typeof attributes.content === 'string';
@@ -0,0 +1,25 @@
1
+ import { UserEvent, UserEventCategory } from '@spiffy-ai/commerce-api-client';
2
+
3
+ export const isApiUserEvent = (data: unknown): data is UserEvent => {
4
+ if (data == null || typeof data !== 'object') {
5
+ return false;
6
+ }
7
+
8
+ if (!('event_id' in data) || typeof data.event_id !== 'string') {
9
+ return false;
10
+ }
11
+
12
+ if (!('created_at' in data) || typeof data.created_at !== 'string') {
13
+ return false;
14
+ }
15
+
16
+ if (
17
+ !('category' in data) ||
18
+ typeof data.category !== 'string' ||
19
+ !Object.values(UserEventCategory).includes(data.category as UserEventCategory)
20
+ ) {
21
+ return false;
22
+ }
23
+
24
+ return true;
25
+ };
@@ -0,0 +1,50 @@
1
+ import Logger from 'src/application/logging/logger';
2
+ import { GetMerchantColorsQueryData } from 'src/application/models/graphql';
3
+
4
+ const REQUIRED_COLOR_FIELDS = [
5
+ 'accent_primary',
6
+ 'accent_secondary',
7
+ 'background_dark',
8
+ 'background_light',
9
+ 'background_primary',
10
+ 'background_saturated',
11
+ 'background_secondary',
12
+ 'background_secondary_dark',
13
+ 'background_tertiary',
14
+ 'border_dark',
15
+ 'border_light',
16
+ 'border_medium',
17
+ 'border_outline',
18
+ 'text_accent',
19
+ 'text_light',
20
+ 'text_link',
21
+ 'text_primary',
22
+ 'text_secondary',
23
+ ] as const;
24
+
25
+ export const isGraphQLColorsConfig = (data: unknown): data is GetMerchantColorsQueryData => {
26
+ if (typeof data !== 'object' || data === null) {
27
+ Logger.logError('Invalid graphql response for colors config', undefined, { data });
28
+ return false;
29
+ }
30
+
31
+ // Check each required field
32
+ const missingFields = REQUIRED_COLOR_FIELDS.filter(
33
+ (field) => !(field in data) || typeof (data as Record<string, unknown>)[field] !== 'string',
34
+ );
35
+
36
+ if (missingFields.length === REQUIRED_COLOR_FIELDS.length) {
37
+ Logger.logError('All color fields are missing or null', undefined);
38
+ return false;
39
+ }
40
+
41
+ if (missingFields.length > 0) {
42
+ Logger.logError('Missing or invalid color fields', undefined, {
43
+ data,
44
+ missingFields,
45
+ });
46
+ return false;
47
+ }
48
+
49
+ return true;
50
+ };
@@ -0,0 +1,17 @@
1
+ import type { BaseEcommerceEvent } from 'src/application/models';
2
+
3
+ /**
4
+ * Checks if an event is a base Google Analytics ecommerce event.
5
+ *
6
+ * @param data The event to check.
7
+ *
8
+ * @returns True if the event is a base ecommerce event, false otherwise.
9
+ */
10
+ export const isBaseEcommerceEvent = (data: unknown): data is BaseEcommerceEvent =>
11
+ data != null &&
12
+ typeof data === 'object' &&
13
+ 'ecommerce' in data &&
14
+ data.ecommerce != null &&
15
+ typeof data.ecommerce === 'object' &&
16
+ 'event' in data &&
17
+ typeof data.event === 'string';
@@ -0,0 +1,17 @@
1
+ import type { GA4EcommerceEvent } from 'src/application/models';
2
+
3
+ /**
4
+ * Checks if an event is a Google Analytics 4 ecommerce event.
5
+ *
6
+ * @param data The event to check.
7
+ *
8
+ * @returns True if the event is a GA4 ecommerce event, false otherwise.
9
+ */
10
+ export const isGA4EcommerceEvent = (data: unknown): data is GA4EcommerceEvent =>
11
+ typeof data === 'object' &&
12
+ data != null &&
13
+ 'ecommerce' in data &&
14
+ data.ecommerce != null &&
15
+ typeof data.ecommerce === 'object' &&
16
+ 'items' in data.ecommerce &&
17
+ Array.isArray(data.ecommerce.items);
@@ -0,0 +1,17 @@
1
+ import type { UAEcommerceEvent } from 'src/application/models';
2
+
3
+ /**
4
+ * Checks if an event is a legacy Universal Analytics ecommerce event.
5
+ *
6
+ * @param data The event to check.
7
+ *
8
+ * @returns True if the event is a legacy UA ecommerce event, false otherwise.
9
+ */
10
+ export const isLegacyUAEcommerceEvent = (data: unknown): data is UAEcommerceEvent =>
11
+ data != null &&
12
+ typeof data === 'object' &&
13
+ 'ecommerce' in data &&
14
+ data.ecommerce != null &&
15
+ typeof data.ecommerce === 'object' &&
16
+ 'add' in data.ecommerce &&
17
+ typeof data.ecommerce.add === 'object';
@@ -0,0 +1,11 @@
1
+ interface MobilePlpChatPlacementParameter {
2
+ row_index: number;
3
+ }
4
+
5
+ export const isMobilePLPChatPlacementParameter = (
6
+ value: unknown,
7
+ ): value is MobilePlpChatPlacementParameter =>
8
+ value != null &&
9
+ typeof value === 'object' &&
10
+ 'row_index' in value &&
11
+ typeof value.row_index === 'number';
@@ -0,0 +1,4 @@
1
+ import { SpanxTakeAQuizCtaParameter } from '../spanxTakeAQuizCtaParameter';
2
+
3
+ export const isSpanxTakeAQuizCtaParameter = (value: unknown): value is SpanxTakeAQuizCtaParameter =>
4
+ value != null && typeof value === 'object' && 'text' in value && typeof value.text === 'string';
@@ -0,0 +1,37 @@
1
+ import { PageVisitCategory } from '@spiffy-ai/commerce-api-client';
2
+ import { PDPVariantInfo, PLPVariantInfo, PageVisitVariantInfo, VariantInfo } from '../variantInfo';
3
+
4
+ const isPDPVariantInfo = (variantInfo: object): variantInfo is PDPVariantInfo =>
5
+ 'variant' in variantInfo &&
6
+ variantInfo.variant === 'pdp' &&
7
+ 'productId' in variantInfo &&
8
+ typeof variantInfo.productId === 'string';
9
+
10
+ const isPLPVariantInfo = (variantInfo: object): variantInfo is PLPVariantInfo =>
11
+ 'variant' in variantInfo &&
12
+ variantInfo.variant === 'plp' &&
13
+ 'plpId' in variantInfo &&
14
+ typeof variantInfo.plpId === 'string';
15
+
16
+ const isPageVisitVariantInfo = (variantInfo: object): variantInfo is PageVisitVariantInfo =>
17
+ 'variant' in variantInfo &&
18
+ variantInfo.variant === 'page_visit' &&
19
+ 'url' in variantInfo &&
20
+ typeof variantInfo.url === 'string' &&
21
+ 'pageVisitCategory' in variantInfo &&
22
+ Object.values(PageVisitCategory).includes(variantInfo.pageVisitCategory as PageVisitCategory);
23
+
24
+ /**
25
+ * Type guard to check if an object is a valid VariantInfo.
26
+ *
27
+ * @param variantInfo - The unknown object to check.
28
+ *
29
+ * @returns True if the data is a valid VariantInfo object, false otherwise.
30
+ */
31
+ export const isVariantInfo = (variantInfo: unknown): variantInfo is VariantInfo =>
32
+ variantInfo != null &&
33
+ typeof variantInfo === 'object' &&
34
+ 'variantId' in variantInfo &&
35
+ (isPDPVariantInfo(variantInfo) ||
36
+ isPLPVariantInfo(variantInfo) ||
37
+ isPageVisitVariantInfo(variantInfo));
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Checks if an object has a property of a specific type
3
+ *
4
+ * @param obj - The object to check
5
+ * @param prop - The property name to check
6
+ * @param type - The expected type of the property
7
+ * @param isOptional - Whether the property is optional (defaults to false)
8
+ *
9
+ * @returns boolean indicating if the object has the property of the specified type
10
+ */
11
+ export const hasPropertyOfType = <T extends object>(
12
+ obj: unknown,
13
+ prop: keyof T,
14
+ type: 'string' | 'number' | 'boolean' | 'object' | 'array',
15
+ isOptional: boolean = false,
16
+ ): obj is T => {
17
+ try {
18
+ if (obj == null || typeof obj !== 'object') {
19
+ return false;
20
+ }
21
+
22
+ // If property is not present, it's valid for an optional property
23
+ if (!(prop in obj)) {
24
+ return isOptional;
25
+ }
26
+
27
+ const value = (obj as T)[prop];
28
+
29
+ // For optional properties, null or undefined values are valid
30
+ if (isOptional && value == null) {
31
+ return true;
32
+ }
33
+
34
+ if (type === 'array') {
35
+ return Array.isArray(value);
36
+ }
37
+
38
+ return typeof value === type;
39
+ } catch (err) {
40
+ // swallow the error as it should be reported in more detail by the caller
41
+ return false;
42
+ }
43
+ };
@@ -0,0 +1,20 @@
1
+ // models
2
+ export * from './api/userEvent';
3
+ export * from './api/response';
4
+ export * from './api/nextMessageRequest';
5
+ export * from './api/context';
6
+ export * from './api/suggestion';
7
+ export * from './api/generationParams';
8
+ export * from './api/supportedEventRequest';
9
+ export * from './message';
10
+ export * from './supportedOrgs';
11
+ export * from './mobilePLPChatPlacementParameter';
12
+ export * from './spanxTakeAQuizCtaParameter';
13
+ export * from './variantInfo';
14
+ export * from './dataLayer';
15
+ export * from './featureGates';
16
+
17
+ // type guards
18
+ export * from './guards/isLegacyUAEcommerceEvent';
19
+ export * from './guards/isGA4EcommerceEvent';
20
+ export * from './guards/isBaseEcommerceEvent';
@@ -0,0 +1,4 @@
1
+ type LocalStorageEventListener = {
2
+ storageKey: string;
3
+ listener: (event: StorageEvent) => void;
4
+ }
@@ -0,0 +1,146 @@
1
+ import { CustServiceAttachment, FormType } from '@spiffy-ai/commerce-api-client';
2
+ import {
3
+ OrderResponseAttributes,
4
+ ProductResponseAttributes,
5
+ ReviewResponseAttributes,
6
+ PageResponseAttributes,
7
+ TextResponseAttributes,
8
+ SearchResponseAttributes,
9
+ SearchProductResponseAttributes,
10
+ AcceptableFormFieldType,
11
+ SearchProductFilterAttributes,
12
+ } from './api/response';
13
+
14
+ export enum MessageRole {
15
+ User = 'user',
16
+ Assistant = 'assistant',
17
+ }
18
+
19
+ export enum MessageType {
20
+ Text = 'text',
21
+ SuggestionClicked = 'suggestion_clicked',
22
+ Product = 'product',
23
+ ProductSearch = 'product_search',
24
+ Review = 'review',
25
+ QueryTyped = 'query_typed',
26
+ Separator = 'separator',
27
+ Page = 'page',
28
+ Search = 'search',
29
+ Attachment = 'attachment',
30
+ CXAgentResponse = 'cx_agent_response',
31
+ Form = 'form',
32
+ Order = 'order',
33
+ ProductSearchFilter = 'product_search_filter',
34
+ }
35
+
36
+ export type Message = {
37
+ id: string;
38
+ role: MessageRole;
39
+ createdAt: string;
40
+ } & (
41
+ | TextMessageMetadata
42
+ | QueryTypedMetadata
43
+ | SuggestionMessageMetadata
44
+ | ProductMessageMetadata
45
+ | ProductSearchMessageMetadata
46
+ | ReviewMessageMetadata
47
+ | SeparatorMessageMetadata
48
+ | PageMessageMetadata
49
+ | SearchMessageMetadata
50
+ | AttachmentMetadata
51
+ | CXAgentResponseMetadata
52
+ | FormMessageMetadata
53
+ | OrderMessageMetadata
54
+ | ProductSearchFilterMetadata
55
+ );
56
+
57
+ type AttachmentMetadata = {
58
+ type: MessageType.Attachment;
59
+ metadata: {
60
+ message?: string;
61
+ attachment: CustServiceAttachment[];
62
+ };
63
+ };
64
+
65
+ type CXAgentResponseMetadata = {
66
+ type: MessageType.CXAgentResponse;
67
+ metadata: {
68
+ message: string;
69
+ agentName: string;
70
+ };
71
+ };
72
+
73
+ type TextMessageMetadata = {
74
+ type: MessageType.Text;
75
+ metadata: TextResponseAttributes['attributes'];
76
+ };
77
+
78
+ type QueryTypedMetadata = {
79
+ type: MessageType.QueryTyped;
80
+ metadata: TextResponseAttributes['attributes'];
81
+ };
82
+
83
+ type SuggestionMessageMetadata = {
84
+ type: MessageType.SuggestionClicked;
85
+ metadata: {
86
+ suggestionId: string;
87
+ suggestionContent: string;
88
+ };
89
+ };
90
+
91
+ export type ProductMessageMetadata = {
92
+ type: MessageType.Product;
93
+ metadata: ProductResponseAttributes['attributes'];
94
+ };
95
+
96
+ export type ProductSearchMessageMetadata = {
97
+ type: MessageType.ProductSearch;
98
+ metadata: SearchProductResponseAttributes['attributes'];
99
+ };
100
+
101
+ type ReviewMessageMetadata = {
102
+ type: MessageType.Review;
103
+ metadata: ReviewResponseAttributes['attributes'];
104
+ };
105
+
106
+ type SeparatorMessageMetadata = {
107
+ type: MessageType.Separator;
108
+ };
109
+
110
+ type PageMessageMetadata = {
111
+ type: MessageType.Page;
112
+ metadata: PageResponseAttributes['attributes'];
113
+ };
114
+
115
+ type SearchMessageMetadata = {
116
+ type: MessageType.Search;
117
+ metadata: SearchResponseAttributes['attributes'];
118
+ };
119
+
120
+ type ProductSearchFilterMetadata = {
121
+ type: MessageType.ProductSearchFilter;
122
+ metadata: SearchProductFilterAttributes['attributes'];
123
+ };
124
+
125
+ export type FormField = {
126
+ key: string;
127
+ title: string;
128
+ type: AcceptableFormFieldType;
129
+ required: boolean;
130
+ // this is the only format we currently support
131
+ format?: 'email';
132
+ value?: string;
133
+ };
134
+
135
+ type FormMessageMetadata = {
136
+ type: MessageType.Form;
137
+ metadata: {
138
+ formType?: FormType;
139
+ fields: FormField[];
140
+ };
141
+ };
142
+
143
+ type OrderMessageMetadata = {
144
+ type: MessageType.Order;
145
+ metadata: OrderResponseAttributes['attributes'];
146
+ };
@@ -0,0 +1,3 @@
1
+ export interface MobilePLPChatPlacementParameter {
2
+ rowIndex: number;
3
+ }
@@ -0,0 +1,36 @@
1
+ export const OrgShortName = {
2
+ Coterie: 'coterie',
3
+ ForLoveAndLemons: 'for-love-and-lemons',
4
+ Greenpan: 'greenpan',
5
+ JordanCraig: 'jordan-craig',
6
+ LarryAndSerges: 'larry_and_serges',
7
+ LeapsAndRebounds: 'leaps-and-rebounds',
8
+ MantraBrand: 'mantra-brand',
9
+ Spanx: 'spanx',
10
+ SpanxStaging: 'staging-spanx',
11
+ Supergoop: 'supergoop',
12
+ UniqueVintage: 'unique-vintage',
13
+ JackArcher: 'jack-archer',
14
+ /* -- Below items are generated by plop -- */
15
+ SkinPerfection: 'skin-perfection',
16
+ LookOptic: 'look-optic',
17
+ FiveCbd: 'five-cbd',
18
+ SnapSupplements: 'snap-supplements',
19
+ Longevityrx: 'longevityrx',
20
+ VenaCbd: 'vena-cbd',
21
+ Medterra: 'medterra',
22
+ Modells: 'modells',
23
+ PressedFloral: 'pressed-floral',
24
+ KindredBravely: 'kindred-bravely',
25
+ WineEnthusiast: 'wine-enthusiast',
26
+ HomegrownCannabis: 'homegrown-cannabis',
27
+ DreamlandBaby: 'dreamland-baby',
28
+ Bandolier: 'bandolier',
29
+ WestonJonBoucher: 'weston-jon-boucher',
30
+ KutFromTheKloth: 'kut-from-the-kloth',
31
+ GrooveLife: 'groove-life',
32
+ Carpe: 'carpe',
33
+ WolfTactical: 'wolf-tactical',
34
+ WolfMattress: 'wolfmattress',
35
+ Default: 'default',
36
+ } as const;
@@ -0,0 +1,5 @@
1
+ export enum ProductExperiment {
2
+ // Default is only used to ensure that the enum is non-empty, otherwise
3
+ // callers that try to use this enum will generate a typescript error
4
+ Default = 'default',
5
+ }
@@ -0,0 +1,4 @@
1
+ export interface SpanxTakeAQuizCtaParameter {
2
+ text?: string;
3
+ value?: string;
4
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Enum of all widget names. These are widgets that are rendered and integrated into
3
+ * a merchant's website.
4
+ */
5
+ export enum SpiffyWidgets {
6
+ ImageBanner = 'image_banner',
7
+ ImagePromptCard = 'image_prompt_card',
8
+ SingleImagePrompt = 'single_image_prompt',
9
+ EmbeddedWidget = 'embedded_widget',
10
+ FloatingButton = 'floating_button',
11
+ SuggestionBar = 'suggestion_bar',
12
+ SearchPrompt = 'search_prompt',
13
+ GlobalSearch = 'global_search',
14
+ SearchResults = 'search_results',
15
+ GlobalSearchEntryPoint = 'global_search_entry_point',
16
+ }