@shopify/hydrogen-react 2024.1.1 → 2024.4.1

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 (216) hide show
  1. package/customer-account.schema.json +1 -1
  2. package/dist/browser-dev/CartLineProvider.mjs.map +1 -1
  3. package/dist/browser-dev/CartProvider.mjs +4 -0
  4. package/dist/browser-dev/CartProvider.mjs.map +1 -1
  5. package/dist/browser-dev/ExternalVideo.mjs.map +1 -1
  6. package/dist/browser-dev/Image.mjs.map +1 -1
  7. package/dist/browser-dev/ModelViewer.mjs +15 -15
  8. package/dist/browser-dev/ModelViewer.mjs.map +1 -1
  9. package/dist/browser-dev/Money.mjs.map +1 -1
  10. package/dist/browser-dev/Video.mjs.map +1 -1
  11. package/dist/browser-dev/analytics-constants.mjs +5 -1
  12. package/dist/browser-dev/analytics-constants.mjs.map +1 -1
  13. package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs +84 -6
  14. package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  15. package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs +1 -1
  16. package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  17. package/dist/browser-dev/analytics.mjs +13 -2
  18. package/dist/browser-dev/analytics.mjs.map +1 -1
  19. package/dist/browser-dev/cart-queries.mjs +1 -1
  20. package/dist/browser-dev/cart-queries.mjs.map +1 -1
  21. package/dist/browser-dev/codegen.helpers.mjs.map +1 -1
  22. package/dist/browser-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  23. package/dist/browser-dev/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
  24. package/dist/browser-dev/node_modules/use-sync-external-store/shim/with-selector.mjs +1 -1
  25. package/dist/browser-dev/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
  26. package/dist/browser-dev/storefront-api-constants.mjs +1 -1
  27. package/dist/browser-dev/storefront-api-constants.mjs.map +1 -1
  28. package/dist/browser-dev/storefront-client.mjs +18 -16
  29. package/dist/browser-dev/storefront-client.mjs.map +1 -1
  30. package/dist/browser-dev/useCartAPIStateMachine.mjs.map +1 -1
  31. package/dist/browser-dev/useCartActions.mjs.map +1 -1
  32. package/dist/browser-dev/useShopifyCookies.mjs +1 -1
  33. package/dist/browser-dev/useShopifyCookies.mjs.map +1 -1
  34. package/dist/browser-prod/CartLineProvider.mjs.map +1 -1
  35. package/dist/browser-prod/CartProvider.mjs +4 -0
  36. package/dist/browser-prod/CartProvider.mjs.map +1 -1
  37. package/dist/browser-prod/ExternalVideo.mjs.map +1 -1
  38. package/dist/browser-prod/Image.mjs.map +1 -1
  39. package/dist/browser-prod/ModelViewer.mjs +15 -15
  40. package/dist/browser-prod/ModelViewer.mjs.map +1 -1
  41. package/dist/browser-prod/Money.mjs.map +1 -1
  42. package/dist/browser-prod/Video.mjs.map +1 -1
  43. package/dist/browser-prod/analytics-constants.mjs +5 -1
  44. package/dist/browser-prod/analytics-constants.mjs.map +1 -1
  45. package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs +84 -6
  46. package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  47. package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs +1 -1
  48. package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  49. package/dist/browser-prod/analytics.mjs +13 -2
  50. package/dist/browser-prod/analytics.mjs.map +1 -1
  51. package/dist/browser-prod/cart-queries.mjs +1 -1
  52. package/dist/browser-prod/cart-queries.mjs.map +1 -1
  53. package/dist/browser-prod/codegen.helpers.mjs.map +1 -1
  54. package/dist/browser-prod/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  55. package/dist/browser-prod/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
  56. package/dist/browser-prod/node_modules/use-sync-external-store/shim/with-selector.mjs +1 -1
  57. package/dist/browser-prod/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
  58. package/dist/browser-prod/storefront-api-constants.mjs +1 -1
  59. package/dist/browser-prod/storefront-api-constants.mjs.map +1 -1
  60. package/dist/browser-prod/storefront-client.mjs +16 -16
  61. package/dist/browser-prod/storefront-client.mjs.map +1 -1
  62. package/dist/browser-prod/useCartAPIStateMachine.mjs.map +1 -1
  63. package/dist/browser-prod/useCartActions.mjs.map +1 -1
  64. package/dist/browser-prod/useShopifyCookies.mjs +1 -1
  65. package/dist/browser-prod/useShopifyCookies.mjs.map +1 -1
  66. package/dist/node-dev/CartLineProvider.js.map +1 -1
  67. package/dist/node-dev/CartLineProvider.mjs.map +1 -1
  68. package/dist/node-dev/CartProvider.js +4 -0
  69. package/dist/node-dev/CartProvider.js.map +1 -1
  70. package/dist/node-dev/CartProvider.mjs +4 -0
  71. package/dist/node-dev/CartProvider.mjs.map +1 -1
  72. package/dist/node-dev/ExternalVideo.js.map +1 -1
  73. package/dist/node-dev/ExternalVideo.mjs.map +1 -1
  74. package/dist/node-dev/Image.js.map +1 -1
  75. package/dist/node-dev/Image.mjs.map +1 -1
  76. package/dist/node-dev/ModelViewer.js +15 -15
  77. package/dist/node-dev/ModelViewer.js.map +1 -1
  78. package/dist/node-dev/ModelViewer.mjs +15 -15
  79. package/dist/node-dev/ModelViewer.mjs.map +1 -1
  80. package/dist/node-dev/Money.js.map +1 -1
  81. package/dist/node-dev/Money.mjs.map +1 -1
  82. package/dist/node-dev/Video.js.map +1 -1
  83. package/dist/node-dev/Video.mjs.map +1 -1
  84. package/dist/node-dev/analytics-constants.js +5 -1
  85. package/dist/node-dev/analytics-constants.js.map +1 -1
  86. package/dist/node-dev/analytics-constants.mjs +5 -1
  87. package/dist/node-dev/analytics-constants.mjs.map +1 -1
  88. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js +83 -5
  89. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js.map +1 -1
  90. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs +84 -6
  91. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  92. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js +1 -1
  93. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js.map +1 -1
  94. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs +1 -1
  95. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  96. package/dist/node-dev/analytics.js +12 -1
  97. package/dist/node-dev/analytics.js.map +1 -1
  98. package/dist/node-dev/analytics.mjs +13 -2
  99. package/dist/node-dev/analytics.mjs.map +1 -1
  100. package/dist/node-dev/cart-queries.js +1 -1
  101. package/dist/node-dev/cart-queries.js.map +1 -1
  102. package/dist/node-dev/cart-queries.mjs +1 -1
  103. package/dist/node-dev/cart-queries.mjs.map +1 -1
  104. package/dist/node-dev/codegen.helpers.js.map +1 -1
  105. package/dist/node-dev/codegen.helpers.mjs.map +1 -1
  106. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.js +1 -1
  107. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.js.map +1 -1
  108. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  109. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
  110. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.js +1 -1
  111. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
  112. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.mjs +1 -1
  113. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
  114. package/dist/node-dev/storefront-api-constants.js +1 -1
  115. package/dist/node-dev/storefront-api-constants.js.map +1 -1
  116. package/dist/node-dev/storefront-api-constants.mjs +1 -1
  117. package/dist/node-dev/storefront-api-constants.mjs.map +1 -1
  118. package/dist/node-dev/storefront-client.js +18 -16
  119. package/dist/node-dev/storefront-client.js.map +1 -1
  120. package/dist/node-dev/storefront-client.mjs +18 -16
  121. package/dist/node-dev/storefront-client.mjs.map +1 -1
  122. package/dist/node-dev/useCartAPIStateMachine.js.map +1 -1
  123. package/dist/node-dev/useCartAPIStateMachine.mjs.map +1 -1
  124. package/dist/node-dev/useCartActions.js.map +1 -1
  125. package/dist/node-dev/useCartActions.mjs.map +1 -1
  126. package/dist/node-dev/useShopifyCookies.js +1 -1
  127. package/dist/node-dev/useShopifyCookies.js.map +1 -1
  128. package/dist/node-dev/useShopifyCookies.mjs +1 -1
  129. package/dist/node-dev/useShopifyCookies.mjs.map +1 -1
  130. package/dist/node-prod/CartLineProvider.js.map +1 -1
  131. package/dist/node-prod/CartLineProvider.mjs.map +1 -1
  132. package/dist/node-prod/CartProvider.js +4 -0
  133. package/dist/node-prod/CartProvider.js.map +1 -1
  134. package/dist/node-prod/CartProvider.mjs +4 -0
  135. package/dist/node-prod/CartProvider.mjs.map +1 -1
  136. package/dist/node-prod/ExternalVideo.js.map +1 -1
  137. package/dist/node-prod/ExternalVideo.mjs.map +1 -1
  138. package/dist/node-prod/Image.js.map +1 -1
  139. package/dist/node-prod/Image.mjs.map +1 -1
  140. package/dist/node-prod/ModelViewer.js +15 -15
  141. package/dist/node-prod/ModelViewer.js.map +1 -1
  142. package/dist/node-prod/ModelViewer.mjs +15 -15
  143. package/dist/node-prod/ModelViewer.mjs.map +1 -1
  144. package/dist/node-prod/Money.js.map +1 -1
  145. package/dist/node-prod/Money.mjs.map +1 -1
  146. package/dist/node-prod/Video.js.map +1 -1
  147. package/dist/node-prod/Video.mjs.map +1 -1
  148. package/dist/node-prod/analytics-constants.js +5 -1
  149. package/dist/node-prod/analytics-constants.js.map +1 -1
  150. package/dist/node-prod/analytics-constants.mjs +5 -1
  151. package/dist/node-prod/analytics-constants.mjs.map +1 -1
  152. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js +83 -5
  153. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js.map +1 -1
  154. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs +84 -6
  155. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  156. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js +1 -1
  157. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js.map +1 -1
  158. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs +1 -1
  159. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  160. package/dist/node-prod/analytics.js +12 -1
  161. package/dist/node-prod/analytics.js.map +1 -1
  162. package/dist/node-prod/analytics.mjs +13 -2
  163. package/dist/node-prod/analytics.mjs.map +1 -1
  164. package/dist/node-prod/cart-queries.js +1 -1
  165. package/dist/node-prod/cart-queries.js.map +1 -1
  166. package/dist/node-prod/cart-queries.mjs +1 -1
  167. package/dist/node-prod/cart-queries.mjs.map +1 -1
  168. package/dist/node-prod/codegen.helpers.js.map +1 -1
  169. package/dist/node-prod/codegen.helpers.mjs.map +1 -1
  170. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.js +1 -1
  171. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.js.map +1 -1
  172. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  173. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
  174. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.js +1 -1
  175. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
  176. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.mjs +1 -1
  177. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
  178. package/dist/node-prod/storefront-api-constants.js +1 -1
  179. package/dist/node-prod/storefront-api-constants.js.map +1 -1
  180. package/dist/node-prod/storefront-api-constants.mjs +1 -1
  181. package/dist/node-prod/storefront-api-constants.mjs.map +1 -1
  182. package/dist/node-prod/storefront-client.js +16 -16
  183. package/dist/node-prod/storefront-client.js.map +1 -1
  184. package/dist/node-prod/storefront-client.mjs +16 -16
  185. package/dist/node-prod/storefront-client.mjs.map +1 -1
  186. package/dist/node-prod/useCartAPIStateMachine.js.map +1 -1
  187. package/dist/node-prod/useCartAPIStateMachine.mjs.map +1 -1
  188. package/dist/node-prod/useCartActions.js.map +1 -1
  189. package/dist/node-prod/useCartActions.mjs.map +1 -1
  190. package/dist/node-prod/useShopifyCookies.js +1 -1
  191. package/dist/node-prod/useShopifyCookies.js.map +1 -1
  192. package/dist/node-prod/useShopifyCookies.mjs +1 -1
  193. package/dist/node-prod/useShopifyCookies.mjs.map +1 -1
  194. package/dist/types/CartLineProvider.d.ts +1 -1
  195. package/dist/types/CartProvider.d.ts +2 -2
  196. package/dist/types/ExternalVideo.d.ts +1 -1
  197. package/dist/types/Image.d.ts +1 -1
  198. package/dist/types/ModelViewer.d.ts +1 -1
  199. package/dist/types/Money.d.ts +1 -1
  200. package/dist/types/Video.d.ts +1 -1
  201. package/dist/types/analytics-constants.d.ts +11 -5
  202. package/dist/types/analytics-schema-custom-storefront-customer-tracking.d.ts +4 -0
  203. package/dist/types/analytics-types.d.ts +4 -0
  204. package/dist/types/cart-types.d.ts +2 -0
  205. package/dist/types/codegen.helpers.d.ts +2 -2
  206. package/dist/types/storefront-api-constants.d.ts +1 -1
  207. package/dist/types/storefront-api-types.d.ts +395 -25
  208. package/dist/types/storefront-client.d.ts +2 -2
  209. package/dist/types/useCartAPIStateMachine.d.ts +2 -2
  210. package/dist/types/useCartActions.d.ts +2 -2
  211. package/dist/umd/hydrogen-react.dev.js +137 -42
  212. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  213. package/dist/umd/hydrogen-react.prod.js +18 -19
  214. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  215. package/package.json +3 -3
  216. package/storefront.schema.json +1 -1
@@ -2,7 +2,11 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const AnalyticsEventName = {
4
4
  PAGE_VIEW: "PAGE_VIEW",
5
- ADD_TO_CART: "ADD_TO_CART"
5
+ ADD_TO_CART: "ADD_TO_CART",
6
+ PAGE_VIEW_2: "PAGE_VIEW_2",
7
+ COLLECTION_VIEW: "COLLECTION_VIEW",
8
+ PRODUCT_VIEW: "PRODUCT_VIEW",
9
+ SEARCH_VIEW: "SEARCH_VIEW"
6
10
  };
7
11
  const AnalyticsPageType = {
8
12
  article: "article",
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-constants.js","sources":["../../src/analytics-constants.ts"],"sourcesContent":["export const AnalyticsEventName: AnalyticsEventName = {\n PAGE_VIEW: 'PAGE_VIEW',\n ADD_TO_CART: 'ADD_TO_CART',\n} as const;\n\nexport const AnalyticsPageType: AnalyticsPageType = {\n article: 'article',\n blog: 'blog',\n captcha: 'captcha',\n cart: 'cart',\n collection: 'collection',\n customersAccount: 'customers/account',\n customersActivateAccount: 'customers/activate_account',\n customersAddresses: 'customers/addresses',\n customersLogin: 'customers/login',\n customersOrder: 'customers/order',\n customersRegister: 'customers/register',\n customersResetPassword: 'customers/reset_password',\n giftCard: 'gift_card',\n home: 'index',\n listCollections: 'list-collections',\n forbidden: '403',\n notFound: '404',\n page: 'page',\n password: 'password',\n product: 'product',\n policy: 'policy',\n search: 'search',\n} as const;\n\nexport const ShopifySalesChannel: ShopifySalesChannel = {\n hydrogen: 'hydrogen',\n headless: 'headless',\n} as const;\n\nexport const ShopifyAppId = {\n hydrogen: '6167201',\n headless: '12875497473',\n} as const;\n\n/**\n * These duplicated interface declaration is so that we can generate proper documentation\n * for these public facing constants\n */\ninterface AnalyticsEventName {\n /** Page view */\n PAGE_VIEW: 'PAGE_VIEW';\n /** Add to cart */\n ADD_TO_CART: 'ADD_TO_CART';\n}\n\ninterface AnalyticsPageType {\n article: 'article';\n blog: 'blog';\n captcha: 'captcha';\n cart: 'cart';\n collection: 'collection';\n customersAccount: 'customers/account';\n customersActivateAccount: 'customers/activate_account';\n customersAddresses: 'customers/addresses';\n customersLogin: 'customers/login';\n customersOrder: 'customers/order';\n customersRegister: 'customers/register';\n customersResetPassword: 'customers/reset_password';\n giftCard: 'gift_card';\n home: 'index';\n listCollections: 'list-collections';\n forbidden: '403';\n notFound: '404';\n page: 'page';\n password: 'password';\n product: 'product';\n policy: 'policy';\n search: 'search';\n}\n\ninterface ShopifySalesChannel {\n /** Shopify Hydrogen sales channel */\n hydrogen: 'hydrogen';\n /** Shopify Headless sales channel */\n headless: 'headless';\n}\n"],"names":[],"mappings":";;AAAO,MAAM,qBAAyC;AAAA,EACpD,WAAW;AAAA,EACX,aAAa;AACf;AAEO,MAAM,oBAAuC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,MAAM,sBAA2C;AAAA,EACtD,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;;;;;"}
1
+ {"version":3,"file":"analytics-constants.js","sources":["../../src/analytics-constants.ts"],"sourcesContent":["export const AnalyticsEventName = {\n PAGE_VIEW: 'PAGE_VIEW',\n ADD_TO_CART: 'ADD_TO_CART',\n PAGE_VIEW_2: 'PAGE_VIEW_2',\n COLLECTION_VIEW: 'COLLECTION_VIEW',\n PRODUCT_VIEW: 'PRODUCT_VIEW',\n SEARCH_VIEW: 'SEARCH_VIEW',\n} as const;\n\nexport const AnalyticsPageType: AnalyticsPageType = {\n article: 'article',\n blog: 'blog',\n captcha: 'captcha',\n cart: 'cart',\n collection: 'collection',\n customersAccount: 'customers/account',\n customersActivateAccount: 'customers/activate_account',\n customersAddresses: 'customers/addresses',\n customersLogin: 'customers/login',\n customersOrder: 'customers/order',\n customersRegister: 'customers/register',\n customersResetPassword: 'customers/reset_password',\n giftCard: 'gift_card',\n home: 'index',\n listCollections: 'list-collections',\n forbidden: '403',\n notFound: '404',\n page: 'page',\n password: 'password',\n product: 'product',\n policy: 'policy',\n search: 'search',\n} as const;\n\nexport const ShopifySalesChannel: ShopifySalesChannel = {\n hydrogen: 'hydrogen',\n headless: 'headless',\n} as const;\n\nexport const ShopifyAppId = {\n hydrogen: '6167201',\n headless: '12875497473',\n} as const;\n\n/**\n * These duplicated interface declaration is so that we can generate proper documentation\n * for these public facing constants\n */\nexport interface AnalyticsEventName {\n /** Page view */\n PAGE_VIEW: 'PAGE_VIEW';\n /** Add to cart */\n ADD_TO_CART: 'ADD_TO_CART';\n}\n\nexport interface AnalyticsPageType {\n article: 'article';\n blog: 'blog';\n captcha: 'captcha';\n cart: 'cart';\n collection: 'collection';\n customersAccount: 'customers/account';\n customersActivateAccount: 'customers/activate_account';\n customersAddresses: 'customers/addresses';\n customersLogin: 'customers/login';\n customersOrder: 'customers/order';\n customersRegister: 'customers/register';\n customersResetPassword: 'customers/reset_password';\n giftCard: 'gift_card';\n home: 'index';\n listCollections: 'list-collections';\n forbidden: '403';\n notFound: '404';\n page: 'page';\n password: 'password';\n product: 'product';\n policy: 'policy';\n search: 'search';\n}\n\nexport interface ShopifySalesChannel {\n /** Shopify Hydrogen sales channel */\n hydrogen: 'hydrogen';\n /** Shopify Headless sales channel */\n headless: 'headless';\n}\n"],"names":[],"mappings":";;AAAO,MAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AACf;AAEO,MAAM,oBAAuC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,MAAM,sBAA2C;AAAA,EACtD,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;;;;;"}
@@ -1,6 +1,10 @@
1
1
  const AnalyticsEventName = {
2
2
  PAGE_VIEW: "PAGE_VIEW",
3
- ADD_TO_CART: "ADD_TO_CART"
3
+ ADD_TO_CART: "ADD_TO_CART",
4
+ PAGE_VIEW_2: "PAGE_VIEW_2",
5
+ COLLECTION_VIEW: "COLLECTION_VIEW",
6
+ PRODUCT_VIEW: "PRODUCT_VIEW",
7
+ SEARCH_VIEW: "SEARCH_VIEW"
4
8
  };
5
9
  const AnalyticsPageType = {
6
10
  article: "article",
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-constants.mjs","sources":["../../src/analytics-constants.ts"],"sourcesContent":["export const AnalyticsEventName: AnalyticsEventName = {\n PAGE_VIEW: 'PAGE_VIEW',\n ADD_TO_CART: 'ADD_TO_CART',\n} as const;\n\nexport const AnalyticsPageType: AnalyticsPageType = {\n article: 'article',\n blog: 'blog',\n captcha: 'captcha',\n cart: 'cart',\n collection: 'collection',\n customersAccount: 'customers/account',\n customersActivateAccount: 'customers/activate_account',\n customersAddresses: 'customers/addresses',\n customersLogin: 'customers/login',\n customersOrder: 'customers/order',\n customersRegister: 'customers/register',\n customersResetPassword: 'customers/reset_password',\n giftCard: 'gift_card',\n home: 'index',\n listCollections: 'list-collections',\n forbidden: '403',\n notFound: '404',\n page: 'page',\n password: 'password',\n product: 'product',\n policy: 'policy',\n search: 'search',\n} as const;\n\nexport const ShopifySalesChannel: ShopifySalesChannel = {\n hydrogen: 'hydrogen',\n headless: 'headless',\n} as const;\n\nexport const ShopifyAppId = {\n hydrogen: '6167201',\n headless: '12875497473',\n} as const;\n\n/**\n * These duplicated interface declaration is so that we can generate proper documentation\n * for these public facing constants\n */\ninterface AnalyticsEventName {\n /** Page view */\n PAGE_VIEW: 'PAGE_VIEW';\n /** Add to cart */\n ADD_TO_CART: 'ADD_TO_CART';\n}\n\ninterface AnalyticsPageType {\n article: 'article';\n blog: 'blog';\n captcha: 'captcha';\n cart: 'cart';\n collection: 'collection';\n customersAccount: 'customers/account';\n customersActivateAccount: 'customers/activate_account';\n customersAddresses: 'customers/addresses';\n customersLogin: 'customers/login';\n customersOrder: 'customers/order';\n customersRegister: 'customers/register';\n customersResetPassword: 'customers/reset_password';\n giftCard: 'gift_card';\n home: 'index';\n listCollections: 'list-collections';\n forbidden: '403';\n notFound: '404';\n page: 'page';\n password: 'password';\n product: 'product';\n policy: 'policy';\n search: 'search';\n}\n\ninterface ShopifySalesChannel {\n /** Shopify Hydrogen sales channel */\n hydrogen: 'hydrogen';\n /** Shopify Headless sales channel */\n headless: 'headless';\n}\n"],"names":[],"mappings":"AAAO,MAAM,qBAAyC;AAAA,EACpD,WAAW;AAAA,EACX,aAAa;AACf;AAEO,MAAM,oBAAuC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,MAAM,sBAA2C;AAAA,EACtD,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;"}
1
+ {"version":3,"file":"analytics-constants.mjs","sources":["../../src/analytics-constants.ts"],"sourcesContent":["export const AnalyticsEventName = {\n PAGE_VIEW: 'PAGE_VIEW',\n ADD_TO_CART: 'ADD_TO_CART',\n PAGE_VIEW_2: 'PAGE_VIEW_2',\n COLLECTION_VIEW: 'COLLECTION_VIEW',\n PRODUCT_VIEW: 'PRODUCT_VIEW',\n SEARCH_VIEW: 'SEARCH_VIEW',\n} as const;\n\nexport const AnalyticsPageType: AnalyticsPageType = {\n article: 'article',\n blog: 'blog',\n captcha: 'captcha',\n cart: 'cart',\n collection: 'collection',\n customersAccount: 'customers/account',\n customersActivateAccount: 'customers/activate_account',\n customersAddresses: 'customers/addresses',\n customersLogin: 'customers/login',\n customersOrder: 'customers/order',\n customersRegister: 'customers/register',\n customersResetPassword: 'customers/reset_password',\n giftCard: 'gift_card',\n home: 'index',\n listCollections: 'list-collections',\n forbidden: '403',\n notFound: '404',\n page: 'page',\n password: 'password',\n product: 'product',\n policy: 'policy',\n search: 'search',\n} as const;\n\nexport const ShopifySalesChannel: ShopifySalesChannel = {\n hydrogen: 'hydrogen',\n headless: 'headless',\n} as const;\n\nexport const ShopifyAppId = {\n hydrogen: '6167201',\n headless: '12875497473',\n} as const;\n\n/**\n * These duplicated interface declaration is so that we can generate proper documentation\n * for these public facing constants\n */\nexport interface AnalyticsEventName {\n /** Page view */\n PAGE_VIEW: 'PAGE_VIEW';\n /** Add to cart */\n ADD_TO_CART: 'ADD_TO_CART';\n}\n\nexport interface AnalyticsPageType {\n article: 'article';\n blog: 'blog';\n captcha: 'captcha';\n cart: 'cart';\n collection: 'collection';\n customersAccount: 'customers/account';\n customersActivateAccount: 'customers/activate_account';\n customersAddresses: 'customers/addresses';\n customersLogin: 'customers/login';\n customersOrder: 'customers/order';\n customersRegister: 'customers/register';\n customersResetPassword: 'customers/reset_password';\n giftCard: 'gift_card';\n home: 'index';\n listCollections: 'list-collections';\n forbidden: '403';\n notFound: '404';\n page: 'page';\n password: 'password';\n product: 'product';\n policy: 'policy';\n search: 'search';\n}\n\nexport interface ShopifySalesChannel {\n /** Shopify Hydrogen sales channel */\n hydrogen: 'hydrogen';\n /** Shopify Headless sales channel */\n headless: 'headless';\n}\n"],"names":[],"mappings":"AAAO,MAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AACf;AAEO,MAAM,oBAAuC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,MAAM,sBAA2C;AAAA,EACtD,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;"}
@@ -9,12 +9,15 @@ const COLLECTION_PAGE_RENDERED_EVENT_NAME = "collection_page_rendered";
9
9
  const PRODUCT_PAGE_RENDERED_EVENT_NAME = "product_page_rendered";
10
10
  const PRODUCT_ADDED_TO_CART_EVENT_NAME = "product_added_to_cart";
11
11
  const SEARCH_SUBMITTED_EVENT_NAME = "search_submitted";
12
+ function prepareAdditionalPayload(payload) {
13
+ return {
14
+ canonical_url: payload.canonicalUrl || payload.url,
15
+ customer_id: parseInt(analyticsUtils.parseGid(payload.customerId).id || "0")
16
+ };
17
+ }
12
18
  function pageView(payload) {
13
19
  const pageViewPayload = payload;
14
- const additionalPayload = {
15
- canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,
16
- customer_id: pageViewPayload.customerId
17
- };
20
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
18
21
  const pageType = pageViewPayload.pageType;
19
22
  const pageViewEvents = [];
20
23
  pageViewEvents.push(
@@ -79,6 +82,74 @@ function pageView(payload) {
79
82
  }
80
83
  return pageViewEvents;
81
84
  }
85
+ function pageView2(payload) {
86
+ const pageViewPayload = payload;
87
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
88
+ return [
89
+ analyticsUtils.schemaWrapper(
90
+ SCHEMA_ID,
91
+ analyticsUtils.addDataIf(
92
+ {
93
+ event_name: PAGE_RENDERED_EVENT_NAME,
94
+ ...additionalPayload
95
+ },
96
+ formatPayload(pageViewPayload)
97
+ )
98
+ )
99
+ ];
100
+ }
101
+ function collectionView(payload) {
102
+ const pageViewPayload = payload;
103
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
104
+ return [
105
+ analyticsUtils.schemaWrapper(
106
+ SCHEMA_ID,
107
+ analyticsUtils.addDataIf(
108
+ {
109
+ event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,
110
+ ...additionalPayload,
111
+ collection_name: pageViewPayload.collectionHandle
112
+ },
113
+ formatPayload(pageViewPayload)
114
+ )
115
+ )
116
+ ];
117
+ }
118
+ function productView(payload) {
119
+ const pageViewPayload = payload;
120
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
121
+ return [
122
+ analyticsUtils.schemaWrapper(
123
+ SCHEMA_ID,
124
+ analyticsUtils.addDataIf(
125
+ {
126
+ event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,
127
+ ...additionalPayload,
128
+ products: formatProductPayload(pageViewPayload.products),
129
+ total_value: pageViewPayload.totalValue
130
+ },
131
+ formatPayload(pageViewPayload)
132
+ )
133
+ )
134
+ ];
135
+ }
136
+ function searchView(payload) {
137
+ const pageViewPayload = payload;
138
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
139
+ return [
140
+ analyticsUtils.schemaWrapper(
141
+ SCHEMA_ID,
142
+ analyticsUtils.addDataIf(
143
+ {
144
+ event_name: SEARCH_SUBMITTED_EVENT_NAME,
145
+ ...additionalPayload,
146
+ search_string: pageViewPayload.searchString
147
+ },
148
+ formatPayload(pageViewPayload)
149
+ )
150
+ )
151
+ ];
152
+ }
82
153
  function addToCart(payload) {
83
154
  const addToCartPayload = payload;
84
155
  const cartToken = analyticsUtils.parseGid(addToCartPayload.cartId);
@@ -92,7 +163,10 @@ function addToCart(payload) {
92
163
  customerId: addToCartPayload.customerId,
93
164
  cart_token,
94
165
  total_value: addToCartPayload.totalValue,
95
- products: formatProductPayload(addToCartPayload.products)
166
+ products: formatProductPayload(addToCartPayload.products),
167
+ customer_id: parseInt(
168
+ analyticsUtils.parseGid(addToCartPayload.customerId).id || "0"
169
+ )
96
170
  },
97
171
  formatPayload(addToCartPayload)
98
172
  )
@@ -141,5 +215,9 @@ function formatProductPayload(products) {
141
215
  }) : [];
142
216
  }
143
217
  exports.addToCart = addToCart;
218
+ exports.collectionView = collectionView;
144
219
  exports.pageView = pageView;
220
+ exports.pageView2 = pageView2;
221
+ exports.productView = productView;
222
+ exports.searchView = searchView;
145
223
  //# sourceMappingURL=analytics-schema-custom-storefront-customer-tracking.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-schema-custom-storefront-customer-tracking.js","sources":["../../src/analytics-schema-custom-storefront-customer-tracking.ts"],"sourcesContent":["import {\n ShopifyAnalyticsPayload,\n ShopifyPageViewPayload,\n ShopifyAddToCartPayload,\n ShopifyMonorailPayload,\n ShopifyAnalyticsProduct,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsPageType, ShopifySalesChannel} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'custom_storefront_customer_tracking/1.0';\nconst PAGE_RENDERED_EVENT_NAME = 'page_rendered';\nconst COLLECTION_PAGE_RENDERED_EVENT_NAME = 'collection_page_rendered';\nconst PRODUCT_PAGE_RENDERED_EVENT_NAME = 'product_page_rendered';\nconst PRODUCT_ADDED_TO_CART_EVENT_NAME = 'product_added_to_cart';\nconst SEARCH_SUBMITTED_EVENT_NAME = 'search_submitted';\n\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = {\n canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,\n customer_id: pageViewPayload.customerId,\n };\n const pageType = pageViewPayload.pageType;\n const pageViewEvents = [];\n\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n\n switch (pageType) {\n case AnalyticsPageType.collection:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n collection_name: pageViewPayload.collectionHandle,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n case AnalyticsPageType.product:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n products: formatProductPayload(pageViewPayload.products),\n total_value: pageViewPayload.totalValue,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n case AnalyticsPageType.search:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: SEARCH_SUBMITTED_EVENT_NAME,\n ...additionalPayload,\n search_string: pageViewPayload.searchString,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n }\n\n return pageViewEvents;\n}\n\nexport function addToCart(\n payload: ShopifyAddToCartPayload,\n): ShopifyMonorailEvent[] {\n const addToCartPayload = payload;\n const cartToken = parseGid(addToCartPayload.cartId);\n const cart_token = cartToken?.id ? `${cartToken.id}` : null;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,\n customerId: addToCartPayload.customerId,\n cart_token,\n total_value: addToCartPayload.totalValue,\n products: formatProductPayload(addToCartPayload.products),\n },\n formatPayload(addToCartPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyAnalyticsPayload,\n): ShopifyMonorailPayload {\n return {\n source: payload.shopifySalesChannel || ShopifySalesChannel.headless,\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n is_persistent_cookie: payload.hasUserConsent,\n ccpa_enforced: false,\n gdpr_enforced: false,\n unique_token: payload.uniqueToken,\n event_time: Date.now(),\n event_id: buildUUID(),\n\n event_source_url: payload.url,\n referrer: payload.referrer,\n user_agent: payload.userAgent,\n navigation_type: payload.navigationType,\n navigation_api: payload.navigationApi,\n\n shop_id: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n };\n}\n\nfunction formatProductPayload(products?: ShopifyAnalyticsProduct[]): string[] {\n return products\n ? products.map((p: ShopifyAnalyticsProduct) => {\n const product = addDataIf(\n {\n variant_gid: p.variantGid,\n category: p.category,\n sku: p.sku,\n product_id: parseInt(parseGid(p.productGid).id),\n variant_id: parseInt(parseGid(p.variantGid).id),\n },\n {\n product_gid: p.productGid,\n name: p.name,\n variant: p.variantName || '',\n brand: p.brand,\n price: parseFloat(p.price),\n quantity: Number(p.quantity || 0),\n },\n );\n return JSON.stringify(product);\n })\n : [];\n}\n"],"names":["schemaWrapper","addDataIf","AnalyticsPageType","parseGid","ShopifySalesChannel","buildUUID"],"mappings":"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"}
1
+ {"version":3,"file":"analytics-schema-custom-storefront-customer-tracking.js","sources":["../../src/analytics-schema-custom-storefront-customer-tracking.ts"],"sourcesContent":["import {\n ShopifyAnalyticsPayload,\n ShopifyPageViewPayload,\n ShopifyAddToCartPayload,\n ShopifyMonorailPayload,\n ShopifyAnalyticsProduct,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsPageType, ShopifySalesChannel} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'custom_storefront_customer_tracking/1.0';\nconst PAGE_RENDERED_EVENT_NAME = 'page_rendered';\nconst COLLECTION_PAGE_RENDERED_EVENT_NAME = 'collection_page_rendered';\nconst PRODUCT_PAGE_RENDERED_EVENT_NAME = 'product_page_rendered';\nconst PRODUCT_ADDED_TO_CART_EVENT_NAME = 'product_added_to_cart';\nconst SEARCH_SUBMITTED_EVENT_NAME = 'search_submitted';\n\nfunction prepareAdditionalPayload(\n payload: ShopifyPageViewPayload,\n): Pick<ShopifyMonorailPayload, 'canonical_url' | 'customer_id'> {\n return {\n canonical_url: payload.canonicalUrl || payload.url,\n customer_id: parseInt(parseGid(payload.customerId).id || '0'),\n };\n}\n\n// Send the page view event to the Monorail server.\n// It also sends additional page view events based on the page type.\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n const pageType = pageViewPayload.pageType;\n const pageViewEvents = [];\n\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n\n switch (pageType) {\n case AnalyticsPageType.collection:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n collection_name: pageViewPayload.collectionHandle,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n case AnalyticsPageType.product:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n products: formatProductPayload(pageViewPayload.products),\n total_value: pageViewPayload.totalValue,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n case AnalyticsPageType.search:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: SEARCH_SUBMITTED_EVENT_NAME,\n ...additionalPayload,\n search_string: pageViewPayload.searchString,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n }\n\n return pageViewEvents;\n}\n\n// Sends page view event to the Monorail server.\nexport function pageView2(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\n// Sends collection view event to the Monorail server.\nexport function collectionView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n collection_name: pageViewPayload.collectionHandle,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\n// Sends product view event to the Monorail server.\nexport function productView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n products: formatProductPayload(pageViewPayload.products),\n total_value: pageViewPayload.totalValue,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\n// Sends search view event to the Monorail server.\nexport function searchView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: SEARCH_SUBMITTED_EVENT_NAME,\n ...additionalPayload,\n search_string: pageViewPayload.searchString,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\nexport function addToCart(\n payload: ShopifyAddToCartPayload,\n): ShopifyMonorailEvent[] {\n const addToCartPayload = payload;\n const cartToken = parseGid(addToCartPayload.cartId);\n const cart_token = cartToken?.id ? `${cartToken.id}` : null;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,\n customerId: addToCartPayload.customerId,\n cart_token,\n total_value: addToCartPayload.totalValue,\n products: formatProductPayload(addToCartPayload.products),\n customer_id: parseInt(\n parseGid(addToCartPayload.customerId).id || '0',\n ),\n },\n formatPayload(addToCartPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyAnalyticsPayload,\n): ShopifyMonorailPayload {\n return {\n source: payload.shopifySalesChannel || ShopifySalesChannel.headless,\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n is_persistent_cookie: payload.hasUserConsent,\n ccpa_enforced: false,\n gdpr_enforced: false,\n unique_token: payload.uniqueToken,\n event_time: Date.now(),\n event_id: buildUUID(),\n\n event_source_url: payload.url,\n referrer: payload.referrer,\n user_agent: payload.userAgent,\n navigation_type: payload.navigationType,\n navigation_api: payload.navigationApi,\n\n shop_id: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n };\n}\n\nfunction formatProductPayload(products?: ShopifyAnalyticsProduct[]): string[] {\n return products\n ? products.map((p: ShopifyAnalyticsProduct) => {\n const product = addDataIf(\n {\n variant_gid: p.variantGid,\n category: p.category,\n sku: p.sku,\n product_id: parseInt(parseGid(p.productGid).id),\n variant_id: parseInt(parseGid(p.variantGid).id),\n },\n {\n product_gid: p.productGid,\n name: p.name,\n variant: p.variantName || '',\n brand: p.brand,\n price: parseFloat(p.price),\n quantity: Number(p.quantity || 0),\n },\n );\n return JSON.stringify(product);\n })\n : [];\n}\n"],"names":["parseGid","schemaWrapper","addDataIf","AnalyticsPageType","ShopifySalesChannel","buildUUID"],"mappings":"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"}
@@ -7,12 +7,15 @@ const COLLECTION_PAGE_RENDERED_EVENT_NAME = "collection_page_rendered";
7
7
  const PRODUCT_PAGE_RENDERED_EVENT_NAME = "product_page_rendered";
8
8
  const PRODUCT_ADDED_TO_CART_EVENT_NAME = "product_added_to_cart";
9
9
  const SEARCH_SUBMITTED_EVENT_NAME = "search_submitted";
10
+ function prepareAdditionalPayload(payload) {
11
+ return {
12
+ canonical_url: payload.canonicalUrl || payload.url,
13
+ customer_id: parseInt(parseGid(payload.customerId).id || "0")
14
+ };
15
+ }
10
16
  function pageView(payload) {
11
17
  const pageViewPayload = payload;
12
- const additionalPayload = {
13
- canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,
14
- customer_id: pageViewPayload.customerId
15
- };
18
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
16
19
  const pageType = pageViewPayload.pageType;
17
20
  const pageViewEvents = [];
18
21
  pageViewEvents.push(
@@ -77,6 +80,74 @@ function pageView(payload) {
77
80
  }
78
81
  return pageViewEvents;
79
82
  }
83
+ function pageView2(payload) {
84
+ const pageViewPayload = payload;
85
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
86
+ return [
87
+ schemaWrapper(
88
+ SCHEMA_ID,
89
+ addDataIf(
90
+ {
91
+ event_name: PAGE_RENDERED_EVENT_NAME,
92
+ ...additionalPayload
93
+ },
94
+ formatPayload(pageViewPayload)
95
+ )
96
+ )
97
+ ];
98
+ }
99
+ function collectionView(payload) {
100
+ const pageViewPayload = payload;
101
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
102
+ return [
103
+ schemaWrapper(
104
+ SCHEMA_ID,
105
+ addDataIf(
106
+ {
107
+ event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,
108
+ ...additionalPayload,
109
+ collection_name: pageViewPayload.collectionHandle
110
+ },
111
+ formatPayload(pageViewPayload)
112
+ )
113
+ )
114
+ ];
115
+ }
116
+ function productView(payload) {
117
+ const pageViewPayload = payload;
118
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
119
+ return [
120
+ schemaWrapper(
121
+ SCHEMA_ID,
122
+ addDataIf(
123
+ {
124
+ event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,
125
+ ...additionalPayload,
126
+ products: formatProductPayload(pageViewPayload.products),
127
+ total_value: pageViewPayload.totalValue
128
+ },
129
+ formatPayload(pageViewPayload)
130
+ )
131
+ )
132
+ ];
133
+ }
134
+ function searchView(payload) {
135
+ const pageViewPayload = payload;
136
+ const additionalPayload = prepareAdditionalPayload(pageViewPayload);
137
+ return [
138
+ schemaWrapper(
139
+ SCHEMA_ID,
140
+ addDataIf(
141
+ {
142
+ event_name: SEARCH_SUBMITTED_EVENT_NAME,
143
+ ...additionalPayload,
144
+ search_string: pageViewPayload.searchString
145
+ },
146
+ formatPayload(pageViewPayload)
147
+ )
148
+ )
149
+ ];
150
+ }
80
151
  function addToCart(payload) {
81
152
  const addToCartPayload = payload;
82
153
  const cartToken = parseGid(addToCartPayload.cartId);
@@ -90,7 +161,10 @@ function addToCart(payload) {
90
161
  customerId: addToCartPayload.customerId,
91
162
  cart_token,
92
163
  total_value: addToCartPayload.totalValue,
93
- products: formatProductPayload(addToCartPayload.products)
164
+ products: formatProductPayload(addToCartPayload.products),
165
+ customer_id: parseInt(
166
+ parseGid(addToCartPayload.customerId).id || "0"
167
+ )
94
168
  },
95
169
  formatPayload(addToCartPayload)
96
170
  )
@@ -140,6 +214,10 @@ function formatProductPayload(products) {
140
214
  }
141
215
  export {
142
216
  addToCart,
143
- pageView
217
+ collectionView,
218
+ pageView,
219
+ pageView2,
220
+ productView,
221
+ searchView
144
222
  };
145
223
  //# sourceMappingURL=analytics-schema-custom-storefront-customer-tracking.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-schema-custom-storefront-customer-tracking.mjs","sources":["../../src/analytics-schema-custom-storefront-customer-tracking.ts"],"sourcesContent":["import {\n ShopifyAnalyticsPayload,\n ShopifyPageViewPayload,\n ShopifyAddToCartPayload,\n ShopifyMonorailPayload,\n ShopifyAnalyticsProduct,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsPageType, ShopifySalesChannel} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'custom_storefront_customer_tracking/1.0';\nconst PAGE_RENDERED_EVENT_NAME = 'page_rendered';\nconst COLLECTION_PAGE_RENDERED_EVENT_NAME = 'collection_page_rendered';\nconst PRODUCT_PAGE_RENDERED_EVENT_NAME = 'product_page_rendered';\nconst PRODUCT_ADDED_TO_CART_EVENT_NAME = 'product_added_to_cart';\nconst SEARCH_SUBMITTED_EVENT_NAME = 'search_submitted';\n\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = {\n canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,\n customer_id: pageViewPayload.customerId,\n };\n const pageType = pageViewPayload.pageType;\n const pageViewEvents = [];\n\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n\n switch (pageType) {\n case AnalyticsPageType.collection:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n collection_name: pageViewPayload.collectionHandle,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n case AnalyticsPageType.product:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n products: formatProductPayload(pageViewPayload.products),\n total_value: pageViewPayload.totalValue,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n case AnalyticsPageType.search:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: SEARCH_SUBMITTED_EVENT_NAME,\n ...additionalPayload,\n search_string: pageViewPayload.searchString,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n }\n\n return pageViewEvents;\n}\n\nexport function addToCart(\n payload: ShopifyAddToCartPayload,\n): ShopifyMonorailEvent[] {\n const addToCartPayload = payload;\n const cartToken = parseGid(addToCartPayload.cartId);\n const cart_token = cartToken?.id ? `${cartToken.id}` : null;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,\n customerId: addToCartPayload.customerId,\n cart_token,\n total_value: addToCartPayload.totalValue,\n products: formatProductPayload(addToCartPayload.products),\n },\n formatPayload(addToCartPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyAnalyticsPayload,\n): ShopifyMonorailPayload {\n return {\n source: payload.shopifySalesChannel || ShopifySalesChannel.headless,\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n is_persistent_cookie: payload.hasUserConsent,\n ccpa_enforced: false,\n gdpr_enforced: false,\n unique_token: payload.uniqueToken,\n event_time: Date.now(),\n event_id: buildUUID(),\n\n event_source_url: payload.url,\n referrer: payload.referrer,\n user_agent: payload.userAgent,\n navigation_type: payload.navigationType,\n navigation_api: payload.navigationApi,\n\n shop_id: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n };\n}\n\nfunction formatProductPayload(products?: ShopifyAnalyticsProduct[]): string[] {\n return products\n ? products.map((p: ShopifyAnalyticsProduct) => {\n const product = addDataIf(\n {\n variant_gid: p.variantGid,\n category: p.category,\n sku: p.sku,\n product_id: parseInt(parseGid(p.productGid).id),\n variant_id: parseInt(parseGid(p.variantGid).id),\n },\n {\n product_gid: p.productGid,\n name: p.name,\n variant: p.variantName || '',\n brand: p.brand,\n price: parseFloat(p.price),\n quantity: Number(p.quantity || 0),\n },\n );\n return JSON.stringify(product);\n })\n : [];\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analytics-schema-custom-storefront-customer-tracking.mjs","sources":["../../src/analytics-schema-custom-storefront-customer-tracking.ts"],"sourcesContent":["import {\n ShopifyAnalyticsPayload,\n ShopifyPageViewPayload,\n ShopifyAddToCartPayload,\n ShopifyMonorailPayload,\n ShopifyAnalyticsProduct,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsPageType, ShopifySalesChannel} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'custom_storefront_customer_tracking/1.0';\nconst PAGE_RENDERED_EVENT_NAME = 'page_rendered';\nconst COLLECTION_PAGE_RENDERED_EVENT_NAME = 'collection_page_rendered';\nconst PRODUCT_PAGE_RENDERED_EVENT_NAME = 'product_page_rendered';\nconst PRODUCT_ADDED_TO_CART_EVENT_NAME = 'product_added_to_cart';\nconst SEARCH_SUBMITTED_EVENT_NAME = 'search_submitted';\n\nfunction prepareAdditionalPayload(\n payload: ShopifyPageViewPayload,\n): Pick<ShopifyMonorailPayload, 'canonical_url' | 'customer_id'> {\n return {\n canonical_url: payload.canonicalUrl || payload.url,\n customer_id: parseInt(parseGid(payload.customerId).id || '0'),\n };\n}\n\n// Send the page view event to the Monorail server.\n// It also sends additional page view events based on the page type.\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n const pageType = pageViewPayload.pageType;\n const pageViewEvents = [];\n\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n\n switch (pageType) {\n case AnalyticsPageType.collection:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n collection_name: pageViewPayload.collectionHandle,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n case AnalyticsPageType.product:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n products: formatProductPayload(pageViewPayload.products),\n total_value: pageViewPayload.totalValue,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n case AnalyticsPageType.search:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: SEARCH_SUBMITTED_EVENT_NAME,\n ...additionalPayload,\n search_string: pageViewPayload.searchString,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n );\n break;\n }\n\n return pageViewEvents;\n}\n\n// Sends page view event to the Monorail server.\nexport function pageView2(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\n// Sends collection view event to the Monorail server.\nexport function collectionView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n collection_name: pageViewPayload.collectionHandle,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\n// Sends product view event to the Monorail server.\nexport function productView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n products: formatProductPayload(pageViewPayload.products),\n total_value: pageViewPayload.totalValue,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\n// Sends search view event to the Monorail server.\nexport function searchView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = prepareAdditionalPayload(pageViewPayload);\n\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: SEARCH_SUBMITTED_EVENT_NAME,\n ...additionalPayload,\n search_string: pageViewPayload.searchString,\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\nexport function addToCart(\n payload: ShopifyAddToCartPayload,\n): ShopifyMonorailEvent[] {\n const addToCartPayload = payload;\n const cartToken = parseGid(addToCartPayload.cartId);\n const cart_token = cartToken?.id ? `${cartToken.id}` : null;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,\n customerId: addToCartPayload.customerId,\n cart_token,\n total_value: addToCartPayload.totalValue,\n products: formatProductPayload(addToCartPayload.products),\n customer_id: parseInt(\n parseGid(addToCartPayload.customerId).id || '0',\n ),\n },\n formatPayload(addToCartPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyAnalyticsPayload,\n): ShopifyMonorailPayload {\n return {\n source: payload.shopifySalesChannel || ShopifySalesChannel.headless,\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n is_persistent_cookie: payload.hasUserConsent,\n ccpa_enforced: false,\n gdpr_enforced: false,\n unique_token: payload.uniqueToken,\n event_time: Date.now(),\n event_id: buildUUID(),\n\n event_source_url: payload.url,\n referrer: payload.referrer,\n user_agent: payload.userAgent,\n navigation_type: payload.navigationType,\n navigation_api: payload.navigationApi,\n\n shop_id: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n };\n}\n\nfunction formatProductPayload(products?: ShopifyAnalyticsProduct[]): string[] {\n return products\n ? products.map((p: ShopifyAnalyticsProduct) => {\n const product = addDataIf(\n {\n variant_gid: p.variantGid,\n category: p.category,\n sku: p.sku,\n product_id: parseInt(parseGid(p.productGid).id),\n variant_id: parseInt(parseGid(p.variantGid).id),\n },\n {\n product_gid: p.productGid,\n name: p.name,\n variant: p.variantName || '',\n brand: p.brand,\n price: parseFloat(p.price),\n quantity: Number(p.quantity || 0),\n },\n );\n return JSON.stringify(product);\n })\n : [];\n}\n"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ function pageView(payload) {
15
15
  analyticsUtils.addDataIf(
16
16
  {
17
17
  pageType: pageViewPayload.pageType,
18
- customerId: pageViewPayload.customerId,
18
+ customerId: parseInt(analyticsUtils.parseGid(pageViewPayload.customerId).id || "0"),
19
19
  resourceType,
20
20
  resourceId: parseInt(id)
21
21
  },
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-schema-trekkie-storefront-page-view.js","sources":["../../src/analytics-schema-trekkie-storefront-page-view.ts"],"sourcesContent":["import {\n ShopifyPageViewPayload,\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {ShopifyAppId} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'trekkie_storefront_page_view/1.4';\nconst OXYGEN_DOMAIN = 'myshopify.dev';\n\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const {id, resource} = parseGid(pageViewPayload.resourceId);\n const resourceType = resource ? resource.toLowerCase() : undefined;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n pageType: pageViewPayload.pageType,\n customerId: pageViewPayload.customerId,\n resourceType,\n resourceId: parseInt(id),\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailPayload {\n return {\n appClientId: payload.shopifySalesChannel\n ? ShopifyAppId[payload.shopifySalesChannel]\n : ShopifyAppId.headless,\n isMerchantRequest: isMerchantRequest(payload.url),\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n isPersistentCookie: payload.hasUserConsent,\n uniqToken: payload.uniqueToken,\n visitToken: payload.visitToken,\n microSessionId: buildUUID(),\n microSessionCount: 1,\n\n url: payload.url,\n path: payload.path,\n search: payload.search,\n referrer: payload.referrer,\n title: payload.title,\n\n shopId: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n contentLanguage: payload.acceptedLanguage || 'en',\n };\n}\n\nfunction isMerchantRequest(url: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n const hostname = new URL(url).hostname;\n if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === 'localhost') {\n return true;\n }\n return false;\n}\n"],"names":["parseGid","schemaWrapper","addDataIf","ShopifyAppId","buildUUID"],"mappings":";;;;;AASA,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEf,SAAS,SACd,SACwB;AACxB,QAAM,kBAAkB;AACxB,QAAM,EAAC,IAAI,SAAA,IAAYA,eAAAA,SAAS,gBAAgB,UAAU;AAC1D,QAAM,eAAe,WAAW,SAAS,YAAgB,IAAA;AAClD,SAAA;AAAA,IACLC,eAAA;AAAA,MACE;AAAA,MACAC,eAAA;AAAA,QACE;AAAA,UACE,UAAU,gBAAgB;AAAA,UAC1B,YAAY,gBAAgB;AAAA,UAC5B;AAAA,UACA,YAAY,SAAS,EAAE;AAAA,QACzB;AAAA,QACA,cAAc,eAAe;AAAA,MAC/B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,SACwB;AACjB,SAAA;AAAA,IACL,aAAa,QAAQ,sBACjBC,mBAAAA,aAAa,QAAQ,mBAAmB,IACxCA,mBAAAA,aAAa;AAAA,IACjB,mBAAmB,kBAAkB,QAAQ,GAAG;AAAA,IAChD,sBAAsB,QAAQ,gBAAgB;AAAA,IAE9C,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,IACpB,gBAAgBC,aAAAA,UAAU;AAAA,IAC1B,mBAAmB;AAAA,IAEnB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IAEf,QAAQ,SAASJ,eAAA,SAAS,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC5C,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,oBAAoB;AAAA,EAAA;AAEjD;AAEA,SAAS,kBAAkB,KAAsB;AAC3C,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AACA,QAAM,WAAW,IAAI,IAAI,GAAG,EAAE;AAC9B,MAAI,SAAS,QAAQ,aAAa,MAAM,MAAM,aAAa,aAAa;AAC/D,WAAA;AAAA,EACT;AACO,SAAA;AACT;;"}
1
+ {"version":3,"file":"analytics-schema-trekkie-storefront-page-view.js","sources":["../../src/analytics-schema-trekkie-storefront-page-view.ts"],"sourcesContent":["import {\n ShopifyPageViewPayload,\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {ShopifyAppId} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'trekkie_storefront_page_view/1.4';\nconst OXYGEN_DOMAIN = 'myshopify.dev';\n\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const {id, resource} = parseGid(pageViewPayload.resourceId);\n const resourceType = resource ? resource.toLowerCase() : undefined;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n pageType: pageViewPayload.pageType,\n customerId: parseInt(parseGid(pageViewPayload.customerId).id || '0'),\n resourceType,\n resourceId: parseInt(id),\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailPayload {\n return {\n appClientId: payload.shopifySalesChannel\n ? ShopifyAppId[payload.shopifySalesChannel]\n : ShopifyAppId.headless,\n isMerchantRequest: isMerchantRequest(payload.url),\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n isPersistentCookie: payload.hasUserConsent,\n uniqToken: payload.uniqueToken,\n visitToken: payload.visitToken,\n microSessionId: buildUUID(),\n microSessionCount: 1,\n\n url: payload.url,\n path: payload.path,\n search: payload.search,\n referrer: payload.referrer,\n title: payload.title,\n\n shopId: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n contentLanguage: payload.acceptedLanguage || 'en',\n };\n}\n\nfunction isMerchantRequest(url: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n const hostname = new URL(url).hostname;\n if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === 'localhost') {\n return true;\n }\n return false;\n}\n"],"names":["parseGid","schemaWrapper","addDataIf","ShopifyAppId","buildUUID"],"mappings":";;;;;AASA,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEf,SAAS,SACd,SACwB;AACxB,QAAM,kBAAkB;AACxB,QAAM,EAAC,IAAI,SAAA,IAAYA,eAAAA,SAAS,gBAAgB,UAAU;AAC1D,QAAM,eAAe,WAAW,SAAS,YAAgB,IAAA;AAClD,SAAA;AAAA,IACLC,eAAA;AAAA,MACE;AAAA,MACAC,eAAA;AAAA,QACE;AAAA,UACE,UAAU,gBAAgB;AAAA,UAC1B,YAAY,SAASF,wBAAS,gBAAgB,UAAU,EAAE,MAAM,GAAG;AAAA,UACnE;AAAA,UACA,YAAY,SAAS,EAAE;AAAA,QACzB;AAAA,QACA,cAAc,eAAe;AAAA,MAC/B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,SACwB;AACjB,SAAA;AAAA,IACL,aAAa,QAAQ,sBACjBG,mBAAAA,aAAa,QAAQ,mBAAmB,IACxCA,mBAAAA,aAAa;AAAA,IACjB,mBAAmB,kBAAkB,QAAQ,GAAG;AAAA,IAChD,sBAAsB,QAAQ,gBAAgB;AAAA,IAE9C,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,IACpB,gBAAgBC,aAAAA,UAAU;AAAA,IAC1B,mBAAmB;AAAA,IAEnB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IAEf,QAAQ,SAASJ,eAAA,SAAS,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC5C,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,oBAAoB;AAAA,EAAA;AAEjD;AAEA,SAAS,kBAAkB,KAAsB;AAC3C,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AACA,QAAM,WAAW,IAAI,IAAI,GAAG,EAAE;AAC9B,MAAI,SAAS,QAAQ,aAAa,MAAM,MAAM,aAAa,aAAa;AAC/D,WAAA;AAAA,EACT;AACO,SAAA;AACT;;"}
@@ -13,7 +13,7 @@ function pageView(payload) {
13
13
  addDataIf(
14
14
  {
15
15
  pageType: pageViewPayload.pageType,
16
- customerId: pageViewPayload.customerId,
16
+ customerId: parseInt(parseGid(pageViewPayload.customerId).id || "0"),
17
17
  resourceType,
18
18
  resourceId: parseInt(id)
19
19
  },
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-schema-trekkie-storefront-page-view.mjs","sources":["../../src/analytics-schema-trekkie-storefront-page-view.ts"],"sourcesContent":["import {\n ShopifyPageViewPayload,\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {ShopifyAppId} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'trekkie_storefront_page_view/1.4';\nconst OXYGEN_DOMAIN = 'myshopify.dev';\n\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const {id, resource} = parseGid(pageViewPayload.resourceId);\n const resourceType = resource ? resource.toLowerCase() : undefined;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n pageType: pageViewPayload.pageType,\n customerId: pageViewPayload.customerId,\n resourceType,\n resourceId: parseInt(id),\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailPayload {\n return {\n appClientId: payload.shopifySalesChannel\n ? ShopifyAppId[payload.shopifySalesChannel]\n : ShopifyAppId.headless,\n isMerchantRequest: isMerchantRequest(payload.url),\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n isPersistentCookie: payload.hasUserConsent,\n uniqToken: payload.uniqueToken,\n visitToken: payload.visitToken,\n microSessionId: buildUUID(),\n microSessionCount: 1,\n\n url: payload.url,\n path: payload.path,\n search: payload.search,\n referrer: payload.referrer,\n title: payload.title,\n\n shopId: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n contentLanguage: payload.acceptedLanguage || 'en',\n };\n}\n\nfunction isMerchantRequest(url: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n const hostname = new URL(url).hostname;\n if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === 'localhost') {\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":";;;AASA,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEf,SAAS,SACd,SACwB;AACxB,QAAM,kBAAkB;AACxB,QAAM,EAAC,IAAI,SAAA,IAAY,SAAS,gBAAgB,UAAU;AAC1D,QAAM,eAAe,WAAW,SAAS,YAAgB,IAAA;AAClD,SAAA;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,UACE,UAAU,gBAAgB;AAAA,UAC1B,YAAY,gBAAgB;AAAA,UAC5B;AAAA,UACA,YAAY,SAAS,EAAE;AAAA,QACzB;AAAA,QACA,cAAc,eAAe;AAAA,MAC/B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,SACwB;AACjB,SAAA;AAAA,IACL,aAAa,QAAQ,sBACjB,aAAa,QAAQ,mBAAmB,IACxC,aAAa;AAAA,IACjB,mBAAmB,kBAAkB,QAAQ,GAAG;AAAA,IAChD,sBAAsB,QAAQ,gBAAgB;AAAA,IAE9C,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,UAAU;AAAA,IAC1B,mBAAmB;AAAA,IAEnB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IAEf,QAAQ,SAAS,SAAS,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC5C,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,oBAAoB;AAAA,EAAA;AAEjD;AAEA,SAAS,kBAAkB,KAAsB;AAC3C,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AACA,QAAM,WAAW,IAAI,IAAI,GAAG,EAAE;AAC9B,MAAI,SAAS,QAAQ,aAAa,MAAM,MAAM,aAAa,aAAa;AAC/D,WAAA;AAAA,EACT;AACO,SAAA;AACT;"}
1
+ {"version":3,"file":"analytics-schema-trekkie-storefront-page-view.mjs","sources":["../../src/analytics-schema-trekkie-storefront-page-view.ts"],"sourcesContent":["import {\n ShopifyPageViewPayload,\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {ShopifyAppId} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'trekkie_storefront_page_view/1.4';\nconst OXYGEN_DOMAIN = 'myshopify.dev';\n\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const {id, resource} = parseGid(pageViewPayload.resourceId);\n const resourceType = resource ? resource.toLowerCase() : undefined;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n pageType: pageViewPayload.pageType,\n customerId: parseInt(parseGid(pageViewPayload.customerId).id || '0'),\n resourceType,\n resourceId: parseInt(id),\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailPayload {\n return {\n appClientId: payload.shopifySalesChannel\n ? ShopifyAppId[payload.shopifySalesChannel]\n : ShopifyAppId.headless,\n isMerchantRequest: isMerchantRequest(payload.url),\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n isPersistentCookie: payload.hasUserConsent,\n uniqToken: payload.uniqueToken,\n visitToken: payload.visitToken,\n microSessionId: buildUUID(),\n microSessionCount: 1,\n\n url: payload.url,\n path: payload.path,\n search: payload.search,\n referrer: payload.referrer,\n title: payload.title,\n\n shopId: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n contentLanguage: payload.acceptedLanguage || 'en',\n };\n}\n\nfunction isMerchantRequest(url: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n const hostname = new URL(url).hostname;\n if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === 'localhost') {\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":";;;AASA,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEf,SAAS,SACd,SACwB;AACxB,QAAM,kBAAkB;AACxB,QAAM,EAAC,IAAI,SAAA,IAAY,SAAS,gBAAgB,UAAU;AAC1D,QAAM,eAAe,WAAW,SAAS,YAAgB,IAAA;AAClD,SAAA;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,UACE,UAAU,gBAAgB;AAAA,UAC1B,YAAY,SAAS,SAAS,gBAAgB,UAAU,EAAE,MAAM,GAAG;AAAA,UACnE;AAAA,UACA,YAAY,SAAS,EAAE;AAAA,QACzB;AAAA,QACA,cAAc,eAAe;AAAA,MAC/B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,SACwB;AACjB,SAAA;AAAA,IACL,aAAa,QAAQ,sBACjB,aAAa,QAAQ,mBAAmB,IACxC,aAAa;AAAA,IACjB,mBAAmB,kBAAkB,QAAQ,GAAG;AAAA,IAChD,sBAAsB,QAAQ,gBAAgB;AAAA,IAE9C,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,UAAU;AAAA,IAC1B,mBAAmB;AAAA,IAEnB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IAEf,QAAQ,SAAS,SAAS,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC5C,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,oBAAoB;AAAA,EAAA;AAEjD;AAEA,SAAS,kBAAkB,KAAsB;AAC3C,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AACA,QAAM,WAAW,IAAI,IAAI,GAAG,EAAE;AAC9B,MAAI,SAAS,QAAQ,aAAa,MAAM,MAAM,aAAa,aAAa;AAC/D,WAAA;AAAA,EACT;AACO,SAAA;AACT;"}
@@ -11,8 +11,8 @@ function sendShopifyAnalytics(event, shopDomain) {
11
11
  if (!payload.hasUserConsent)
12
12
  return Promise.resolve();
13
13
  let events = [];
14
+ const pageViewPayload = payload;
14
15
  if (eventName === analyticsConstants.AnalyticsEventName.PAGE_VIEW) {
15
- const pageViewPayload = payload;
16
16
  events = events.concat(
17
17
  analyticsSchemaTrekkieStorefrontPageView.pageView(pageViewPayload),
18
18
  analyticsSchemaCustomStorefrontCustomerTracking.pageView(pageViewPayload)
@@ -21,6 +21,17 @@ function sendShopifyAnalytics(event, shopDomain) {
21
21
  events = events.concat(
22
22
  analyticsSchemaCustomStorefrontCustomerTracking.addToCart(payload)
23
23
  );
24
+ } else if (eventName === analyticsConstants.AnalyticsEventName.PAGE_VIEW_2) {
25
+ events = events.concat(
26
+ analyticsSchemaTrekkieStorefrontPageView.pageView(pageViewPayload),
27
+ analyticsSchemaCustomStorefrontCustomerTracking.pageView2(pageViewPayload)
28
+ );
29
+ } else if (eventName === analyticsConstants.AnalyticsEventName.COLLECTION_VIEW) {
30
+ events = events.concat(analyticsSchemaCustomStorefrontCustomerTracking.collectionView(pageViewPayload));
31
+ } else if (eventName === analyticsConstants.AnalyticsEventName.PRODUCT_VIEW) {
32
+ events = events.concat(analyticsSchemaCustomStorefrontCustomerTracking.productView(pageViewPayload));
33
+ } else if (eventName === analyticsConstants.AnalyticsEventName.SEARCH_VIEW) {
34
+ events = events.concat(analyticsSchemaCustomStorefrontCustomerTracking.searchView(pageViewPayload));
24
35
  }
25
36
  if (events.length) {
26
37
  return sendToShopify(events, shopDomain);
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","sources":["../../src/analytics.ts"],"sourcesContent":["import {SHOPIFY_S, SHOPIFY_Y} from './cart-constants.js';\nimport type {\n ClientBrowserParameters,\n ShopifyAddToCartPayload,\n ShopifyAnalytics,\n ShopifyPageViewPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsEventName} from './analytics-constants.js';\nimport {errorIfServer} from './analytics-utils.js';\nimport {getShopifyCookies} from './cookies-utils.js';\n\nimport {pageView as trekkiePageView} from './analytics-schema-trekkie-storefront-page-view.js';\nimport {\n pageView as customerPageView,\n addToCart as customerAddToCart,\n} from './analytics-schema-custom-storefront-customer-tracking.js';\n\n/**\n * Set user and session cookies and refresh the expiry time\n * @param event - The analytics event.\n * @param shopDomain - The Online Store domain to sent Shopify analytics under the same\n * top level domain.\n */\nexport function sendShopifyAnalytics(\n event: ShopifyAnalytics,\n shopDomain?: string,\n): Promise<void> {\n const {eventName, payload} = event;\n if (!payload.hasUserConsent) return Promise.resolve();\n\n let events: ShopifyMonorailEvent[] = [];\n\n if (eventName === AnalyticsEventName.PAGE_VIEW) {\n const pageViewPayload = payload as ShopifyPageViewPayload;\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.ADD_TO_CART) {\n events = events.concat(\n customerAddToCart(payload as ShopifyAddToCartPayload),\n );\n }\n\n if (events.length) {\n return sendToShopify(events, shopDomain);\n } else {\n return Promise.resolve();\n }\n}\n\ntype MonorailResponse = {\n status: number;\n message: string;\n};\n\nconst ERROR_MESSAGE = 'sendShopifyAnalytics request is unsuccessful';\n\nfunction sendToShopify(\n events: ShopifyMonorailEvent[],\n shopDomain?: string,\n): Promise<void> {\n const eventsToBeSent = {\n events,\n metadata: {\n event_sent_at_ms: Date.now(),\n },\n };\n\n try {\n return fetch(\n shopDomain\n ? `https://${shopDomain}/.well-known/shopify/monorail/unstable/produce_batch`\n : 'https://monorail-edge.shopifysvc.com/unstable/produce_batch',\n {\n method: 'post',\n headers: {\n 'content-type': 'text/plain',\n },\n body: JSON.stringify(eventsToBeSent),\n },\n )\n .then((response) => {\n if (!response.ok) {\n throw new Error('Response failed');\n }\n return response.text();\n })\n .then((data) => {\n if (data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const jsonResponse = JSON.parse(data);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n jsonResponse.result.forEach((eventResponse: MonorailResponse) => {\n if (eventResponse.status !== 200) {\n console.error(ERROR_MESSAGE, '\\n\\n', eventResponse.message);\n }\n });\n }\n })\n .catch((err) => {\n console.error(ERROR_MESSAGE, err);\n if (__HYDROGEN_DEV__) {\n throw new Error(ERROR_MESSAGE);\n }\n });\n } catch (error) {\n // Do nothing\n return Promise.resolve();\n }\n}\n\nexport function getClientBrowserParameters(): ClientBrowserParameters {\n if (errorIfServer('getClientBrowserParameters')) {\n return {\n uniqueToken: '',\n visitToken: '',\n url: '',\n path: '',\n search: '',\n referrer: '',\n title: '',\n userAgent: '',\n navigationType: '',\n navigationApi: '',\n };\n }\n\n const [navigationType, navigationApi] = getNavigationType();\n const cookies = getShopifyCookies(document.cookie);\n\n return {\n uniqueToken: cookies[SHOPIFY_Y],\n visitToken: cookies[SHOPIFY_S],\n url: location.href,\n path: location.pathname,\n search: location.search,\n referrer: document.referrer,\n title: document.title,\n userAgent: navigator.userAgent,\n navigationType,\n navigationApi,\n };\n}\n\nfunction getNavigationTypeExperimental(): string | undefined {\n try {\n const navigationEntries =\n performance?.getEntriesByType &&\n performance?.getEntriesByType('navigation');\n\n if (navigationEntries && navigationEntries[0]) {\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming\n const rawType = (\n window.performance.getEntriesByType(\n 'navigation',\n )[0] as PerformanceNavigationTiming\n )['type'];\n const navType = rawType && rawType.toString();\n\n return navType;\n }\n } catch (err) {\n // Do nothing\n }\n return undefined;\n}\n\nfunction getNavigationTypeLegacy(): string | undefined {\n try {\n if (\n PerformanceNavigation &&\n performance?.navigation?.type !== null &&\n performance?.navigation?.type !== undefined\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Performance/navigation\n const rawType = performance.navigation.type;\n switch (rawType) {\n case PerformanceNavigation.TYPE_NAVIGATE:\n return 'navigate';\n break;\n case PerformanceNavigation.TYPE_RELOAD:\n return 'reload';\n break;\n case PerformanceNavigation.TYPE_BACK_FORWARD:\n return 'back_forward';\n break;\n default:\n return `unknown: ${rawType}`;\n }\n }\n } catch (err) {\n // do nothing\n }\n return undefined;\n}\n\nfunction getNavigationType(): [string, string] {\n try {\n let navApi = 'PerformanceNavigationTiming';\n let navType = getNavigationTypeExperimental();\n if (!navType) {\n navType = getNavigationTypeLegacy();\n navApi = 'performance.navigation';\n }\n if (navType) {\n return [navType, navApi];\n } else {\n return ['unknown', 'unknown'];\n }\n } catch (err) {\n // do nothing\n }\n return ['error', 'error'];\n}\n"],"names":["AnalyticsEventName","trekkiePageView","customerPageView","customerAddToCart","errorIfServer","getShopifyCookies","SHOPIFY_Y","SHOPIFY_S"],"mappings":"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"}
1
+ {"version":3,"file":"analytics.js","sources":["../../src/analytics.ts"],"sourcesContent":["import {SHOPIFY_S, SHOPIFY_Y} from './cart-constants.js';\nimport type {\n ClientBrowserParameters,\n ShopifyAddToCartPayload,\n ShopifyAnalytics,\n ShopifyPageViewPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsEventName} from './analytics-constants.js';\nimport {errorIfServer} from './analytics-utils.js';\nimport {getShopifyCookies} from './cookies-utils.js';\n\nimport {pageView as trekkiePageView} from './analytics-schema-trekkie-storefront-page-view.js';\nimport {\n pageView as customerPageView,\n pageView2 as customerPageView2,\n collectionView as customerCollectionView,\n productView as customerProductView,\n searchView as customerSearchView,\n addToCart as customerAddToCart,\n} from './analytics-schema-custom-storefront-customer-tracking.js';\n\n/**\n * Set user and session cookies and refresh the expiry time\n * @param event - The analytics event.\n * @param shopDomain - The Online Store domain to sent Shopify analytics under the same\n * top level domain.\n */\nexport function sendShopifyAnalytics(\n event: ShopifyAnalytics,\n shopDomain?: string,\n): Promise<void> {\n const {eventName, payload} = event;\n if (!payload.hasUserConsent) return Promise.resolve();\n\n let events: ShopifyMonorailEvent[] = [];\n const pageViewPayload = payload as ShopifyPageViewPayload;\n\n if (eventName === AnalyticsEventName.PAGE_VIEW) {\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.ADD_TO_CART) {\n events = events.concat(\n customerAddToCart(payload as ShopifyAddToCartPayload),\n );\n } else if (eventName === AnalyticsEventName.PAGE_VIEW_2) {\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView2(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.COLLECTION_VIEW) {\n events = events.concat(customerCollectionView(pageViewPayload));\n } else if (eventName === AnalyticsEventName.PRODUCT_VIEW) {\n events = events.concat(customerProductView(pageViewPayload));\n } else if (eventName === AnalyticsEventName.SEARCH_VIEW) {\n events = events.concat(customerSearchView(pageViewPayload));\n }\n\n if (events.length) {\n return sendToShopify(events, shopDomain);\n } else {\n return Promise.resolve();\n }\n}\n\ntype MonorailResponse = {\n status: number;\n message: string;\n};\n\nconst ERROR_MESSAGE = 'sendShopifyAnalytics request is unsuccessful';\n\nfunction sendToShopify(\n events: ShopifyMonorailEvent[],\n shopDomain?: string,\n): Promise<void> {\n const eventsToBeSent = {\n events,\n metadata: {\n event_sent_at_ms: Date.now(),\n },\n };\n\n try {\n return fetch(\n shopDomain\n ? `https://${shopDomain}/.well-known/shopify/monorail/unstable/produce_batch`\n : 'https://monorail-edge.shopifysvc.com/unstable/produce_batch',\n {\n method: 'post',\n headers: {\n 'content-type': 'text/plain',\n },\n body: JSON.stringify(eventsToBeSent),\n },\n )\n .then((response) => {\n if (!response.ok) {\n throw new Error('Response failed');\n }\n return response.text();\n })\n .then((data) => {\n if (data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const jsonResponse = JSON.parse(data);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n jsonResponse.result.forEach((eventResponse: MonorailResponse) => {\n if (eventResponse.status !== 200) {\n console.error(ERROR_MESSAGE, '\\n\\n', eventResponse.message);\n }\n });\n }\n })\n .catch((err) => {\n console.error(ERROR_MESSAGE, err);\n if (__HYDROGEN_DEV__) {\n throw new Error(ERROR_MESSAGE);\n }\n });\n } catch (error) {\n // Do nothing\n return Promise.resolve();\n }\n}\n\nexport function getClientBrowserParameters(): ClientBrowserParameters {\n if (errorIfServer('getClientBrowserParameters')) {\n return {\n uniqueToken: '',\n visitToken: '',\n url: '',\n path: '',\n search: '',\n referrer: '',\n title: '',\n userAgent: '',\n navigationType: '',\n navigationApi: '',\n };\n }\n\n const [navigationType, navigationApi] = getNavigationType();\n const cookies = getShopifyCookies(document.cookie);\n\n return {\n uniqueToken: cookies[SHOPIFY_Y],\n visitToken: cookies[SHOPIFY_S],\n url: location.href,\n path: location.pathname,\n search: location.search,\n referrer: document.referrer,\n title: document.title,\n userAgent: navigator.userAgent,\n navigationType,\n navigationApi,\n };\n}\n\nfunction getNavigationTypeExperimental(): string | undefined {\n try {\n const navigationEntries =\n performance?.getEntriesByType &&\n performance?.getEntriesByType('navigation');\n\n if (navigationEntries && navigationEntries[0]) {\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming\n const rawType = (\n window.performance.getEntriesByType(\n 'navigation',\n )[0] as PerformanceNavigationTiming\n )['type'];\n const navType = rawType && rawType.toString();\n\n return navType;\n }\n } catch (err) {\n // Do nothing\n }\n return undefined;\n}\n\nfunction getNavigationTypeLegacy(): string | undefined {\n try {\n if (\n PerformanceNavigation &&\n performance?.navigation?.type !== null &&\n performance?.navigation?.type !== undefined\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Performance/navigation\n const rawType = performance.navigation.type;\n switch (rawType) {\n case PerformanceNavigation.TYPE_NAVIGATE:\n return 'navigate';\n break;\n case PerformanceNavigation.TYPE_RELOAD:\n return 'reload';\n break;\n case PerformanceNavigation.TYPE_BACK_FORWARD:\n return 'back_forward';\n break;\n default:\n return `unknown: ${rawType}`;\n }\n }\n } catch (err) {\n // do nothing\n }\n return undefined;\n}\n\nfunction getNavigationType(): [string, string] {\n try {\n let navApi = 'PerformanceNavigationTiming';\n let navType = getNavigationTypeExperimental();\n if (!navType) {\n navType = getNavigationTypeLegacy();\n navApi = 'performance.navigation';\n }\n if (navType) {\n return [navType, navApi];\n } else {\n return ['unknown', 'unknown'];\n }\n } catch (err) {\n // do nothing\n }\n return ['error', 'error'];\n}\n"],"names":["AnalyticsEventName","trekkiePageView","customerPageView","customerAddToCart","customerPageView2","customerCollectionView","customerProductView","customerSearchView","errorIfServer","getShopifyCookies","SHOPIFY_Y","SHOPIFY_S"],"mappings":"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"}
@@ -3,14 +3,14 @@ import { AnalyticsEventName } from "./analytics-constants.mjs";
3
3
  import { errorIfServer } from "./analytics-utils.mjs";
4
4
  import { getShopifyCookies } from "./cookies-utils.mjs";
5
5
  import { pageView } from "./analytics-schema-trekkie-storefront-page-view.mjs";
6
- import { pageView as pageView$1, addToCart } from "./analytics-schema-custom-storefront-customer-tracking.mjs";
6
+ import { pageView as pageView$1, addToCart, pageView2, collectionView, productView, searchView } from "./analytics-schema-custom-storefront-customer-tracking.mjs";
7
7
  function sendShopifyAnalytics(event, shopDomain) {
8
8
  const { eventName, payload } = event;
9
9
  if (!payload.hasUserConsent)
10
10
  return Promise.resolve();
11
11
  let events = [];
12
+ const pageViewPayload = payload;
12
13
  if (eventName === AnalyticsEventName.PAGE_VIEW) {
13
- const pageViewPayload = payload;
14
14
  events = events.concat(
15
15
  pageView(pageViewPayload),
16
16
  pageView$1(pageViewPayload)
@@ -19,6 +19,17 @@ function sendShopifyAnalytics(event, shopDomain) {
19
19
  events = events.concat(
20
20
  addToCart(payload)
21
21
  );
22
+ } else if (eventName === AnalyticsEventName.PAGE_VIEW_2) {
23
+ events = events.concat(
24
+ pageView(pageViewPayload),
25
+ pageView2(pageViewPayload)
26
+ );
27
+ } else if (eventName === AnalyticsEventName.COLLECTION_VIEW) {
28
+ events = events.concat(collectionView(pageViewPayload));
29
+ } else if (eventName === AnalyticsEventName.PRODUCT_VIEW) {
30
+ events = events.concat(productView(pageViewPayload));
31
+ } else if (eventName === AnalyticsEventName.SEARCH_VIEW) {
32
+ events = events.concat(searchView(pageViewPayload));
22
33
  }
23
34
  if (events.length) {
24
35
  return sendToShopify(events, shopDomain);
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.mjs","sources":["../../src/analytics.ts"],"sourcesContent":["import {SHOPIFY_S, SHOPIFY_Y} from './cart-constants.js';\nimport type {\n ClientBrowserParameters,\n ShopifyAddToCartPayload,\n ShopifyAnalytics,\n ShopifyPageViewPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsEventName} from './analytics-constants.js';\nimport {errorIfServer} from './analytics-utils.js';\nimport {getShopifyCookies} from './cookies-utils.js';\n\nimport {pageView as trekkiePageView} from './analytics-schema-trekkie-storefront-page-view.js';\nimport {\n pageView as customerPageView,\n addToCart as customerAddToCart,\n} from './analytics-schema-custom-storefront-customer-tracking.js';\n\n/**\n * Set user and session cookies and refresh the expiry time\n * @param event - The analytics event.\n * @param shopDomain - The Online Store domain to sent Shopify analytics under the same\n * top level domain.\n */\nexport function sendShopifyAnalytics(\n event: ShopifyAnalytics,\n shopDomain?: string,\n): Promise<void> {\n const {eventName, payload} = event;\n if (!payload.hasUserConsent) return Promise.resolve();\n\n let events: ShopifyMonorailEvent[] = [];\n\n if (eventName === AnalyticsEventName.PAGE_VIEW) {\n const pageViewPayload = payload as ShopifyPageViewPayload;\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.ADD_TO_CART) {\n events = events.concat(\n customerAddToCart(payload as ShopifyAddToCartPayload),\n );\n }\n\n if (events.length) {\n return sendToShopify(events, shopDomain);\n } else {\n return Promise.resolve();\n }\n}\n\ntype MonorailResponse = {\n status: number;\n message: string;\n};\n\nconst ERROR_MESSAGE = 'sendShopifyAnalytics request is unsuccessful';\n\nfunction sendToShopify(\n events: ShopifyMonorailEvent[],\n shopDomain?: string,\n): Promise<void> {\n const eventsToBeSent = {\n events,\n metadata: {\n event_sent_at_ms: Date.now(),\n },\n };\n\n try {\n return fetch(\n shopDomain\n ? `https://${shopDomain}/.well-known/shopify/monorail/unstable/produce_batch`\n : 'https://monorail-edge.shopifysvc.com/unstable/produce_batch',\n {\n method: 'post',\n headers: {\n 'content-type': 'text/plain',\n },\n body: JSON.stringify(eventsToBeSent),\n },\n )\n .then((response) => {\n if (!response.ok) {\n throw new Error('Response failed');\n }\n return response.text();\n })\n .then((data) => {\n if (data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const jsonResponse = JSON.parse(data);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n jsonResponse.result.forEach((eventResponse: MonorailResponse) => {\n if (eventResponse.status !== 200) {\n console.error(ERROR_MESSAGE, '\\n\\n', eventResponse.message);\n }\n });\n }\n })\n .catch((err) => {\n console.error(ERROR_MESSAGE, err);\n if (__HYDROGEN_DEV__) {\n throw new Error(ERROR_MESSAGE);\n }\n });\n } catch (error) {\n // Do nothing\n return Promise.resolve();\n }\n}\n\nexport function getClientBrowserParameters(): ClientBrowserParameters {\n if (errorIfServer('getClientBrowserParameters')) {\n return {\n uniqueToken: '',\n visitToken: '',\n url: '',\n path: '',\n search: '',\n referrer: '',\n title: '',\n userAgent: '',\n navigationType: '',\n navigationApi: '',\n };\n }\n\n const [navigationType, navigationApi] = getNavigationType();\n const cookies = getShopifyCookies(document.cookie);\n\n return {\n uniqueToken: cookies[SHOPIFY_Y],\n visitToken: cookies[SHOPIFY_S],\n url: location.href,\n path: location.pathname,\n search: location.search,\n referrer: document.referrer,\n title: document.title,\n userAgent: navigator.userAgent,\n navigationType,\n navigationApi,\n };\n}\n\nfunction getNavigationTypeExperimental(): string | undefined {\n try {\n const navigationEntries =\n performance?.getEntriesByType &&\n performance?.getEntriesByType('navigation');\n\n if (navigationEntries && navigationEntries[0]) {\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming\n const rawType = (\n window.performance.getEntriesByType(\n 'navigation',\n )[0] as PerformanceNavigationTiming\n )['type'];\n const navType = rawType && rawType.toString();\n\n return navType;\n }\n } catch (err) {\n // Do nothing\n }\n return undefined;\n}\n\nfunction getNavigationTypeLegacy(): string | undefined {\n try {\n if (\n PerformanceNavigation &&\n performance?.navigation?.type !== null &&\n performance?.navigation?.type !== undefined\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Performance/navigation\n const rawType = performance.navigation.type;\n switch (rawType) {\n case PerformanceNavigation.TYPE_NAVIGATE:\n return 'navigate';\n break;\n case PerformanceNavigation.TYPE_RELOAD:\n return 'reload';\n break;\n case PerformanceNavigation.TYPE_BACK_FORWARD:\n return 'back_forward';\n break;\n default:\n return `unknown: ${rawType}`;\n }\n }\n } catch (err) {\n // do nothing\n }\n return undefined;\n}\n\nfunction getNavigationType(): [string, string] {\n try {\n let navApi = 'PerformanceNavigationTiming';\n let navType = getNavigationTypeExperimental();\n if (!navType) {\n navType = getNavigationTypeLegacy();\n navApi = 'performance.navigation';\n }\n if (navType) {\n return [navType, navApi];\n } else {\n return ['unknown', 'unknown'];\n }\n } catch (err) {\n // do nothing\n }\n return ['error', 'error'];\n}\n"],"names":["trekkiePageView","customerPageView","customerAddToCart"],"mappings":"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"}
1
+ {"version":3,"file":"analytics.mjs","sources":["../../src/analytics.ts"],"sourcesContent":["import {SHOPIFY_S, SHOPIFY_Y} from './cart-constants.js';\nimport type {\n ClientBrowserParameters,\n ShopifyAddToCartPayload,\n ShopifyAnalytics,\n ShopifyPageViewPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsEventName} from './analytics-constants.js';\nimport {errorIfServer} from './analytics-utils.js';\nimport {getShopifyCookies} from './cookies-utils.js';\n\nimport {pageView as trekkiePageView} from './analytics-schema-trekkie-storefront-page-view.js';\nimport {\n pageView as customerPageView,\n pageView2 as customerPageView2,\n collectionView as customerCollectionView,\n productView as customerProductView,\n searchView as customerSearchView,\n addToCart as customerAddToCart,\n} from './analytics-schema-custom-storefront-customer-tracking.js';\n\n/**\n * Set user and session cookies and refresh the expiry time\n * @param event - The analytics event.\n * @param shopDomain - The Online Store domain to sent Shopify analytics under the same\n * top level domain.\n */\nexport function sendShopifyAnalytics(\n event: ShopifyAnalytics,\n shopDomain?: string,\n): Promise<void> {\n const {eventName, payload} = event;\n if (!payload.hasUserConsent) return Promise.resolve();\n\n let events: ShopifyMonorailEvent[] = [];\n const pageViewPayload = payload as ShopifyPageViewPayload;\n\n if (eventName === AnalyticsEventName.PAGE_VIEW) {\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.ADD_TO_CART) {\n events = events.concat(\n customerAddToCart(payload as ShopifyAddToCartPayload),\n );\n } else if (eventName === AnalyticsEventName.PAGE_VIEW_2) {\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView2(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.COLLECTION_VIEW) {\n events = events.concat(customerCollectionView(pageViewPayload));\n } else if (eventName === AnalyticsEventName.PRODUCT_VIEW) {\n events = events.concat(customerProductView(pageViewPayload));\n } else if (eventName === AnalyticsEventName.SEARCH_VIEW) {\n events = events.concat(customerSearchView(pageViewPayload));\n }\n\n if (events.length) {\n return sendToShopify(events, shopDomain);\n } else {\n return Promise.resolve();\n }\n}\n\ntype MonorailResponse = {\n status: number;\n message: string;\n};\n\nconst ERROR_MESSAGE = 'sendShopifyAnalytics request is unsuccessful';\n\nfunction sendToShopify(\n events: ShopifyMonorailEvent[],\n shopDomain?: string,\n): Promise<void> {\n const eventsToBeSent = {\n events,\n metadata: {\n event_sent_at_ms: Date.now(),\n },\n };\n\n try {\n return fetch(\n shopDomain\n ? `https://${shopDomain}/.well-known/shopify/monorail/unstable/produce_batch`\n : 'https://monorail-edge.shopifysvc.com/unstable/produce_batch',\n {\n method: 'post',\n headers: {\n 'content-type': 'text/plain',\n },\n body: JSON.stringify(eventsToBeSent),\n },\n )\n .then((response) => {\n if (!response.ok) {\n throw new Error('Response failed');\n }\n return response.text();\n })\n .then((data) => {\n if (data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const jsonResponse = JSON.parse(data);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n jsonResponse.result.forEach((eventResponse: MonorailResponse) => {\n if (eventResponse.status !== 200) {\n console.error(ERROR_MESSAGE, '\\n\\n', eventResponse.message);\n }\n });\n }\n })\n .catch((err) => {\n console.error(ERROR_MESSAGE, err);\n if (__HYDROGEN_DEV__) {\n throw new Error(ERROR_MESSAGE);\n }\n });\n } catch (error) {\n // Do nothing\n return Promise.resolve();\n }\n}\n\nexport function getClientBrowserParameters(): ClientBrowserParameters {\n if (errorIfServer('getClientBrowserParameters')) {\n return {\n uniqueToken: '',\n visitToken: '',\n url: '',\n path: '',\n search: '',\n referrer: '',\n title: '',\n userAgent: '',\n navigationType: '',\n navigationApi: '',\n };\n }\n\n const [navigationType, navigationApi] = getNavigationType();\n const cookies = getShopifyCookies(document.cookie);\n\n return {\n uniqueToken: cookies[SHOPIFY_Y],\n visitToken: cookies[SHOPIFY_S],\n url: location.href,\n path: location.pathname,\n search: location.search,\n referrer: document.referrer,\n title: document.title,\n userAgent: navigator.userAgent,\n navigationType,\n navigationApi,\n };\n}\n\nfunction getNavigationTypeExperimental(): string | undefined {\n try {\n const navigationEntries =\n performance?.getEntriesByType &&\n performance?.getEntriesByType('navigation');\n\n if (navigationEntries && navigationEntries[0]) {\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming\n const rawType = (\n window.performance.getEntriesByType(\n 'navigation',\n )[0] as PerformanceNavigationTiming\n )['type'];\n const navType = rawType && rawType.toString();\n\n return navType;\n }\n } catch (err) {\n // Do nothing\n }\n return undefined;\n}\n\nfunction getNavigationTypeLegacy(): string | undefined {\n try {\n if (\n PerformanceNavigation &&\n performance?.navigation?.type !== null &&\n performance?.navigation?.type !== undefined\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Performance/navigation\n const rawType = performance.navigation.type;\n switch (rawType) {\n case PerformanceNavigation.TYPE_NAVIGATE:\n return 'navigate';\n break;\n case PerformanceNavigation.TYPE_RELOAD:\n return 'reload';\n break;\n case PerformanceNavigation.TYPE_BACK_FORWARD:\n return 'back_forward';\n break;\n default:\n return `unknown: ${rawType}`;\n }\n }\n } catch (err) {\n // do nothing\n }\n return undefined;\n}\n\nfunction getNavigationType(): [string, string] {\n try {\n let navApi = 'PerformanceNavigationTiming';\n let navType = getNavigationTypeExperimental();\n if (!navType) {\n navType = getNavigationTypeLegacy();\n navApi = 'performance.navigation';\n }\n if (navType) {\n return [navType, navApi];\n } else {\n return ['unknown', 'unknown'];\n }\n } catch (err) {\n // do nothing\n }\n return ['error', 'error'];\n}\n"],"names":["trekkiePageView","customerPageView","customerAddToCart","customerPageView2","customerCollectionView","customerProductView","customerSearchView"],"mappings":"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"}
@@ -84,7 +84,7 @@ const CartNoteUpdate = (cartFragment) => (
84
84
  `
85
85
  mutation CartNoteUpdate(
86
86
  $cartId: ID!
87
- $note: String
87
+ $note: String!
88
88
  $numCartLines: Int = 250
89
89
  $country: CountryCode = ZZ
90
90
  $language: LanguageCode