cloudcommerce 2.8.8 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/.github/renovate.json +4 -0
  2. package/.github/workflows/test-apps.yml +2 -2
  3. package/CHANGELOG.md +38 -0
  4. package/README.md +2 -0
  5. package/action.yml +2 -2
  6. package/ecomplus-stores/barradoce/functions/many/package.json +3 -3
  7. package/ecomplus-stores/barradoce/functions/ssr/package.json +6 -6
  8. package/ecomplus-stores/barradoce/functions/ssr/src/components/CartSidebar.vue +0 -15
  9. package/ecomplus-stores/barradoce/functions/ssr/src/components/ShopHeaderMenu.vue +16 -33
  10. package/ecomplus-stores/barradoce/functions/ssr/src/components/ShopHeaderSubmenu.vue +1 -2
  11. package/ecomplus-stores/barradoce/functions/ssr/src/pages/app/index.astro +4 -0
  12. package/ecomplus-stores/barradoce/functions/with-apps/package.json +3 -3
  13. package/ecomplus-stores/barradoce/package.json +2 -2
  14. package/package.json +9 -9
  15. package/packages/__skeleton/package.json +6 -0
  16. package/packages/api/lib/api.d.ts +6 -6
  17. package/packages/api/lib/api.js.map +1 -1
  18. package/packages/api/package.json +7 -2
  19. package/packages/api/types.ts +7 -1
  20. package/packages/apps/affiliate-program/lib/events-to-affiliate-program.js.map +1 -1
  21. package/packages/apps/affiliate-program/package.json +8 -2
  22. package/packages/apps/correios/package.json +9 -3
  23. package/packages/apps/custom-payment/lib/custom-payment-create-transaction.js.map +1 -1
  24. package/packages/apps/custom-payment/lib/custom-payment-list-payments.js.map +1 -1
  25. package/packages/apps/custom-payment/package.json +7 -1
  26. package/packages/apps/custom-shipping/package.json +7 -1
  27. package/packages/apps/datafrete/lib/datafrete-webhook.js.map +1 -1
  28. package/packages/apps/datafrete/package.json +9 -3
  29. package/packages/apps/discounts/package.json +7 -1
  30. package/packages/apps/emails/lib/events-to-app-emails.js.map +1 -1
  31. package/packages/apps/emails/lib/functios-lib/abandoned-carts.js +3 -2
  32. package/packages/apps/emails/lib/functios-lib/abandoned-carts.js.map +1 -1
  33. package/packages/apps/emails/lib/functios-lib/get-mail-render.js +10 -0
  34. package/packages/apps/emails/lib/functios-lib/get-mail-render.js.map +1 -0
  35. package/packages/apps/emails/lib/functios-lib/handle-orders.js +7 -4
  36. package/packages/apps/emails/lib/functios-lib/handle-orders.js.map +1 -1
  37. package/packages/apps/emails/package.json +9 -3
  38. package/packages/apps/emails/src/functios-lib/abandoned-carts.ts +3 -2
  39. package/packages/apps/emails/src/functios-lib/get-mail-render.ts +9 -0
  40. package/packages/apps/emails/src/functios-lib/handle-orders.ts +7 -6
  41. package/packages/apps/fb-conversions/lib/fb-conversions-events.js.map +1 -1
  42. package/packages/apps/fb-conversions/lib/functions-lib/create-fb-objects.js.map +1 -1
  43. package/packages/apps/fb-conversions/package.json +9 -3
  44. package/packages/apps/flash-courier/package.json +9 -3
  45. package/packages/apps/frenet/lib/functions-lib/database.js.map +1 -1
  46. package/packages/apps/frenet/lib/functions-lib/events-to-frenet.js.map +1 -1
  47. package/packages/apps/frenet/lib/functions-lib/remove-delivered.js.map +1 -1
  48. package/packages/apps/frenet/lib/functions-lib/tracking-codes.js.map +1 -1
  49. package/packages/apps/frenet/lib/functions-lib/update-fulfillments.js.map +1 -1
  50. package/packages/apps/frenet/package.json +9 -3
  51. package/packages/apps/galaxpay/lib/functions-lib/all-parses.js.map +1 -1
  52. package/packages/apps/galaxpay/lib/functions-lib/ecom/events-to-galaxpay.js.map +1 -1
  53. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/auth/create-access.js.map +1 -1
  54. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/auth/create-axios.js.map +1 -1
  55. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/auth/gerate-token.js.map +1 -1
  56. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/handle-plans.js.map +1 -1
  57. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/update-subscription.js.map +1 -1
  58. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/webhook.d.ts +1 -0
  59. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/webhook.js.map +1 -1
  60. package/packages/apps/galaxpay/lib/galaxpay-create-transaction.js +2 -2
  61. package/packages/apps/galaxpay/lib/galaxpay-create-transaction.js.map +1 -1
  62. package/packages/apps/galaxpay/lib/galaxpay-events.js.map +1 -1
  63. package/packages/apps/galaxpay/lib/galaxpay-list-payments.js +1 -1
  64. package/packages/apps/galaxpay/lib/galaxpay-list-payments.js.map +1 -1
  65. package/packages/apps/galaxpay/package.json +9 -3
  66. package/packages/apps/google-analytics/lib/google-analytics-events.js.map +1 -1
  67. package/packages/apps/google-analytics/package.json +9 -3
  68. package/packages/apps/jadlog/package.json +8 -2
  69. package/packages/apps/loyalty-points/lib/functions-lib/cron-add-points.js.map +1 -1
  70. package/packages/apps/loyalty-points/lib/functions-lib/get-program-id.js.map +1 -1
  71. package/packages/apps/loyalty-points/lib/functions-lib/handle-loyalty-points-event.js.map +1 -1
  72. package/packages/apps/loyalty-points/lib/loyalty-create-transaction.js.map +1 -1
  73. package/packages/apps/loyalty-points/lib/loyalty-list-payments.js.map +1 -1
  74. package/packages/apps/loyalty-points/lib/loyalty-points-events.js.map +1 -1
  75. package/packages/apps/loyalty-points/package.json +7 -1
  76. package/packages/apps/mandae/package.json +9 -3
  77. package/packages/apps/melhor-envio/lib/functions-lib/database.js.map +1 -1
  78. package/packages/apps/melhor-envio/lib/functions-lib/events-to-melhor-envio.js.map +1 -1
  79. package/packages/apps/melhor-envio/lib/functions-lib/new-label.js.map +1 -1
  80. package/packages/apps/melhor-envio/lib/functions-lib/order-is-valid.js.map +1 -1
  81. package/packages/apps/melhor-envio/lib/functions-lib/tracking-codes.js.map +1 -1
  82. package/packages/apps/melhor-envio/package.json +9 -3
  83. package/packages/apps/mercadopago/lib/mp-create-transaction.js.map +1 -1
  84. package/packages/apps/mercadopago/lib/mp-list-payments.js.map +1 -1
  85. package/packages/apps/mercadopago/lib/mp-webhook.js.map +1 -1
  86. package/packages/apps/mercadopago/package.json +9 -3
  87. package/packages/apps/pagarme/lib/functions-lib/add-installments.js.map +1 -1
  88. package/packages/apps/pagarme/lib/functions-lib/parse-status-to-ecom.js.map +1 -1
  89. package/packages/apps/pagarme/lib/pagarme-create-transaction.js.map +1 -1
  90. package/packages/apps/pagarme/lib/pagarme-list-payments.js.map +1 -1
  91. package/packages/apps/pagarme/lib/pagarme-webhook.js.map +1 -1
  92. package/packages/apps/pagarme/package.json +9 -3
  93. package/packages/apps/pagarme-v5/lib/pagarme-v5-events.js.map +1 -1
  94. package/packages/apps/pagarme-v5/package.json +9 -3
  95. package/packages/apps/paghiper/lib/functions-lib/handle-webhook.d.ts +1 -0
  96. package/packages/apps/paghiper/lib/functions-lib/handle-webhook.js.map +1 -1
  97. package/packages/apps/paghiper/lib/paghiper-create-transaction.js.map +1 -1
  98. package/packages/apps/paghiper/lib/paghiper-list-payments.js.map +1 -1
  99. package/packages/apps/paghiper/lib/paghiper-webhook.js.map +1 -1
  100. package/packages/apps/paghiper/package.json +9 -3
  101. package/packages/apps/pix/lib/functions-lib/get-certificate.js.map +1 -1
  102. package/packages/apps/pix/lib/functions-lib/pix-auth/construtor.js.map +1 -1
  103. package/packages/apps/pix/lib/functions-lib/pix-auth/create-axios.js.map +1 -1
  104. package/packages/apps/pix/lib/functions-lib/pix-auth/oauth.js.map +1 -1
  105. package/packages/apps/pix/lib/pix-create-transaction.js.map +1 -1
  106. package/packages/apps/pix/lib/pix-list-payments.js.map +1 -1
  107. package/packages/apps/pix/lib/pix-webhook.js.map +1 -1
  108. package/packages/apps/pix/package.json +9 -3
  109. package/packages/apps/tiny-erp/lib/event-to-tiny.js.map +1 -1
  110. package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js.map +1 -1
  111. package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js.map +1 -1
  112. package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js.map +1 -1
  113. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js.map +1 -1
  114. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js.map +1 -1
  115. package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js.map +1 -1
  116. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js.map +1 -1
  117. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js.map +1 -1
  118. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js.map +1 -1
  119. package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js.map +1 -1
  120. package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js.map +1 -1
  121. package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js.map +1 -1
  122. package/packages/apps/tiny-erp/lib/tiny-webhook.js.map +1 -1
  123. package/packages/apps/tiny-erp/package.json +9 -3
  124. package/packages/apps/webhooks/lib/events-to-webhooks-app.js.map +1 -1
  125. package/packages/apps/webhooks/package.json +9 -3
  126. package/packages/cli/package.json +9 -2
  127. package/packages/config/lib/config.js.map +1 -1
  128. package/packages/config/lib/env.js.map +1 -1
  129. package/packages/config/package.json +6 -1
  130. package/packages/emails/lib/index.js.map +1 -1
  131. package/packages/emails/lib/parse-template-to-html.js.map +1 -1
  132. package/packages/emails/lib/providers/sendgrid/index.js.map +1 -1
  133. package/packages/emails/lib/providers/sendgrid/parse-to-data.js.map +1 -1
  134. package/packages/emails/lib/providers/smtp/index.js.map +1 -1
  135. package/packages/emails/package.json +8 -3
  136. package/packages/eslint/package.json +8 -5
  137. package/packages/events/package.json +7 -2
  138. package/packages/feeds/lib/firebase/serve-feeds.js.map +1 -1
  139. package/packages/feeds/package.json +6 -1
  140. package/packages/firebase/lib/config.js.map +1 -1
  141. package/packages/firebase/lib/handlers/check-store-events.js.map +1 -1
  142. package/packages/firebase/lib/helpers/firestore.js.map +1 -1
  143. package/packages/firebase/lib/helpers/pubsub.js.map +1 -1
  144. package/packages/firebase/lib/helpers/update-app-data.js.map +1 -1
  145. package/packages/firebase/package.json +7 -2
  146. package/packages/i18n/package.json +6 -1
  147. package/packages/modules/lib/firebase/call-app-module.js.map +1 -1
  148. package/packages/modules/lib/firebase/checkout.js +127 -112
  149. package/packages/modules/lib/firebase/checkout.js.map +1 -1
  150. package/packages/modules/lib/firebase/functions-checkout/fix-items.js.map +1 -1
  151. package/packages/modules/lib/firebase/functions-checkout/handle-order-transaction.js.map +1 -1
  152. package/packages/modules/lib/firebase/functions-checkout/new-order.js.map +1 -1
  153. package/packages/modules/lib/firebase/functions-checkout/read-or-save-customer.js +35 -0
  154. package/packages/modules/lib/firebase/functions-checkout/read-or-save-customer.js.map +1 -0
  155. package/packages/modules/lib/firebase/functions-checkout/request-to-module.js.map +1 -1
  156. package/packages/modules/lib/firebase/functions-checkout/utils.js.map +1 -1
  157. package/packages/modules/lib/firebase/handle-module.js +6 -1
  158. package/packages/modules/lib/firebase/handle-module.js.map +1 -1
  159. package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -1
  160. package/packages/modules/lib/firebase.js.map +1 -1
  161. package/packages/modules/package.json +9 -3
  162. package/packages/modules/schemas/list_payments.cjs +1 -6
  163. package/packages/modules/src/firebase/checkout.ts +153 -143
  164. package/packages/modules/src/firebase/functions-checkout/read-or-save-customer.ts +36 -0
  165. package/packages/modules/src/firebase/handle-module.ts +19 -1
  166. package/packages/modules/src/types/index.d.ts +2 -2
  167. package/packages/passport/lib/firebase/authenticate-customer.js +26 -15
  168. package/packages/passport/lib/firebase/authenticate-customer.js.map +1 -1
  169. package/packages/passport/lib/firebase/serve-passport-api.js +89 -2
  170. package/packages/passport/lib/firebase/serve-passport-api.js.map +1 -1
  171. package/packages/passport/lib/firebase.js.map +1 -1
  172. package/packages/passport/package.json +7 -2
  173. package/packages/passport/src/firebase/authenticate-customer.ts +32 -18
  174. package/packages/passport/src/firebase/serve-passport-api.ts +94 -3
  175. package/packages/ssr/lib/lib/analytics/send-to-ga4.js.map +1 -1
  176. package/packages/ssr/lib/lib/analytics/send-to-meta.js.map +1 -1
  177. package/packages/ssr/lib/lib/analytics/send-to-tiktok.js.map +1 -1
  178. package/packages/ssr/lib/lib/analytics-events.js.map +1 -1
  179. package/packages/ssr/lib/lib/cron-ssr-save-views.js +11 -5
  180. package/packages/ssr/lib/lib/cron-ssr-save-views.js.map +1 -1
  181. package/packages/ssr/lib/lib/serve-storefront.js +1 -1
  182. package/packages/ssr/lib/lib/serve-storefront.js.map +1 -1
  183. package/packages/ssr/package.json +12 -7
  184. package/packages/ssr/src/cloudflare/package.json +14 -0
  185. package/packages/ssr/src/lib/cron-ssr-save-views.ts +11 -5
  186. package/packages/ssr/src/lib/serve-storefront.ts +1 -1
  187. package/packages/storefront/astro.config.mjs +6 -9
  188. package/packages/storefront/client.d.ts +2 -1
  189. package/packages/storefront/config/astro/client-sf-directive.mjs +2 -0
  190. package/packages/storefront/config/astro/node-middleware.mjs +8 -0
  191. package/packages/storefront/package.json +18 -11
  192. package/packages/storefront/src/lib/components/globals/ALink.vue +36 -11
  193. package/packages/storefront/src/lib/scripts/vbeta-app.ts +15 -12
  194. package/packages/storefront/src/lib/ssr-context.ts +7 -4
  195. package/packages/test-base/lib/endpoints.js.map +1 -1
  196. package/packages/test-base/package.json +7 -1
  197. package/packages/types/modules/list_payments:params.d.ts +0 -4
  198. package/packages/types/package.json +6 -1
  199. package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js +0 -39
  200. package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js.map +0 -1
  201. package/packages/modules/src/firebase/functions-checkout/get-custumerId.ts +0 -39
  202. package/packages/storefront/config/astro/vue-server.mjs +0 -64
@@ -1,12 +1,20 @@
1
1
  {
2
2
  "name": "@cloudcommerce/storefront",
3
3
  "type": "module",
4
- "version": "2.8.8",
4
+ "version": "2.10.0",
5
5
  "description": "E-Com Plus Cloud Commerce storefront with Astro",
6
6
  "bin": {
7
7
  "storefront": "./scripts/build-prod.sh"
8
8
  },
9
9
  "main": "src/index.js",
10
+ "files": [
11
+ "/lib",
12
+ "/types",
13
+ "/*.{js,mjs,ts}",
14
+ "/config/**/*.{json,js,mjs,cjs,ts}",
15
+ "/scripts/**/*.{sh,mjs}",
16
+ "/src"
17
+ ],
10
18
  "repository": {
11
19
  "type": "git",
12
20
  "url": "git+https://github.com/ecomplus/cloud-commerce.git",
@@ -30,8 +38,8 @@
30
38
  "lint:fix": "eslint -c ../eslint/storefront.staged.eslintrc.cjs src/lib/**/*.{ts,vue,astro} --fix"
31
39
  },
32
40
  "dependencies": {
33
- "@astrojs/node": "8.2.3",
34
- "@astrojs/vue": "4.0.8",
41
+ "@astrojs/node": "8.2.5",
42
+ "@astrojs/vue": "4.0.9",
35
43
  "@cloudcommerce/api": "workspace:*",
36
44
  "@cloudcommerce/config": "workspace:*",
37
45
  "@cloudcommerce/i18n": "workspace:*",
@@ -41,24 +49,23 @@
41
49
  "@iconify-json/heroicons": "^1.1.20",
42
50
  "@iconify-json/logos": "^1.1.42",
43
51
  "@types/gtag.js": "^0.0.19",
44
- "@vite-pwa/astro": "^0.3.0",
52
+ "@vite-pwa/astro": "^0.3.1",
45
53
  "@vueuse/core": "10.9.0",
46
- "@webcontainer/api": "^1.1.9",
47
- "astro": "4.5.0",
54
+ "astro": "4.5.12",
48
55
  "astro-capo": "^0.0.1",
49
56
  "chroma-js": "^2.4.2",
50
57
  "dotenv": "^16.4.5",
51
- "firebase": "^10.8.1",
58
+ "firebase": "^10.9.0",
52
59
  "image-size": "^1.1.1",
53
60
  "mime": "^3.0.0",
54
61
  "mitt": "^3.0.1",
55
62
  "semver": "^7.6.0",
56
63
  "sharp": "^0.32.6",
57
64
  "tailwindcss": "^3.4.1",
58
- "unocss": "^0.58.5",
65
+ "unocss": "^0.58.6",
59
66
  "unplugin-auto-import": "^0.17.5",
60
- "vite": "^5.1.5",
61
- "vite-plugin-pwa": "^0.19.2",
67
+ "vite": "^5.2.6",
68
+ "vite-plugin-pwa": "^0.19.7",
62
69
  "vue": "^3.4.21",
63
70
  "wade": "0.3.3",
64
71
  "yaml": "^2.4.1"
@@ -66,6 +73,6 @@
66
73
  "devDependencies": {
67
74
  "@cloudcommerce/eslint": "workspace:*",
68
75
  "@cloudcommerce/types": "workspace:*",
69
- "@types/react": "^18.2.64"
76
+ "@types/react": "^18.2.70"
70
77
  }
71
78
  }
@@ -18,14 +18,29 @@ const props = withDefaults(defineProps<Props>(), {
18
18
  prefetch: 'hover',
19
19
  });
20
20
  const link = ref<HTMLElement | null>(null);
21
- const linkTarget = computed(() => {
22
- if (!props.href) return undefined;
23
- if (props.target) return props.target;
24
- if (props.href.startsWith('http')) {
21
+ const isExternalLink = computed(() => {
22
+ if (props.href?.startsWith('https:')) {
25
23
  const domain = globalThis.$storefront.settings.domain || window.location.host;
26
- if (props.href.startsWith(`https://${domain}`)) return undefined;
27
- return '_blank';
24
+ if (props.href.startsWith(`https://${domain}`)) return false;
25
+ return true;
26
+ }
27
+ return false;
28
+ });
29
+ const trackedHref = computed(() => {
30
+ const { domain } = globalThis.$storefront.settings;
31
+ if (!isExternalLink.value || !domain || !props.href) {
32
+ return props.href;
33
+ }
34
+ let arg = '?';
35
+ if (props.href.includes('?')) {
36
+ if (/[?&]ref=/.test(props.href)) return props.href;
37
+ arg = '&';
28
38
  }
39
+ return `${props.href}${arg}ref=${domain}`;
40
+ });
41
+ const linkTarget = computed(() => {
42
+ if (props.target) return props.target;
43
+ if (isExternalLink.value) return '_blank';
29
44
  return undefined;
30
45
  });
31
46
  const prefetchHref = computed(() => {
@@ -37,6 +52,19 @@ const prefetchHref = computed(() => {
37
52
  return pathname;
38
53
  });
39
54
  if (prefetchHref.value) {
55
+ const prefetchOnNext = () => {
56
+ requestIdleCallback(() => {
57
+ const next = () => {
58
+ if (!prefetchHref.value) return;
59
+ window.$prefetch!(prefetchHref.value);
60
+ };
61
+ if (!window.$firstInteraction) {
62
+ window.addEventListener('firstInteraction', next, { once: true });
63
+ } else {
64
+ window.$firstInteraction.then(next);
65
+ }
66
+ });
67
+ };
40
68
  onMounted(() => {
41
69
  const { prefetch } = props;
42
70
  const isOnHover = prefetch === 'hover';
@@ -52,10 +80,7 @@ if (prefetchHref.value) {
52
80
  unwatch();
53
81
  setTimeout(() => {
54
82
  if (isOnVisible && !isActive.value) return;
55
- requestIdleCallback(() => {
56
- if (!prefetchHref.value) return;
57
- window.$prefetch!(prefetchHref.value);
58
- });
83
+ prefetchOnNext();
59
84
  }, isOnVisible ? 100 : 1);
60
85
  }, {
61
86
  immediate: true,
@@ -68,7 +93,7 @@ if (prefetchHref.value) {
68
93
  <component
69
94
  ref="link"
70
95
  :is="href ? 'a' : 'span'"
71
- :href="href"
96
+ :href="trackedHref"
72
97
  :target="linkTarget"
73
98
  :rel="linkTarget === '_blank' ? 'noopener' : undefined"
74
99
  ><slot /></component>
@@ -179,12 +179,13 @@ const watchAppRoutes = () => {
179
179
 
180
180
  // https://github.com/ecomplus/storefront/tree/master/%40ecomplus/storefront-app compat
181
181
  if (!import.meta.env.SSR) {
182
+ const { location, ECOM_STORE_ID } = window;
182
183
  if (Object.keys(utm).length) {
183
184
  sessionStorage.setItem('ecomUtm', JSON.stringify(utm));
184
185
  }
185
- let querystring = window.location.search;
186
- if (!querystring && window.location.hash) {
187
- querystring = '?' + window.location.hash.split('?')[1];
186
+ let querystring = location.search;
187
+ if (!querystring && location.hash) {
188
+ querystring = '?' + location.hash.split('?')[1];
188
189
  }
189
190
  const searchParams = new URLSearchParams(querystring);
190
191
  if (searchParams.get('product_id') && searchParams.get('quantity') === '1') {
@@ -197,16 +198,18 @@ if (!import.meta.env.SSR) {
197
198
  }));
198
199
  (window as any).ECOM_CART_STORAGE_KEY = 'ecomShoppingCart__tmp';
199
200
  }
200
- const { hostname } = window.location;
201
201
  const { domain } = globalThis.$storefront.settings;
202
- const apiBaseUri = `https://ecomplus.io/v2/:${window.ECOM_STORE_ID}/`;
202
+ const isLocalhost = ['localhost', '127.0.0.1'].includes(location.hostname);
203
+ const hostApiBaseUri = isLocalhost
204
+ && Number(location.port) !== 5000 // Hosting on Firebase Emulators
205
+ ? `https://${domain}/_api/` : '/_api/';
206
+ const apiBaseUri = 'https://ecomplus.io/v2/';
203
207
  (window as any).ECOMCLIENT_API_STORE = apiBaseUri;
204
- (window as any).ECOMCLIENT_API_STORE_CACHE = apiBaseUri;
205
- (window as any).ECOMCLIENT_API_PASSPORT = apiBaseUri;
206
- (window as any).ECOMCLIENT_API_SEARCH = `${apiBaseUri}/search/_els/`;
207
- (window as any).ECOMCLIENT_API_MODULES = ['localhost', '127.0.0.1'].includes(hostname)
208
- ? `https://${domain}/_api/modules/`
209
- : '/_api/modules/';
208
+ (window as any).ECOMCLIENT_API_STORE_CACHE = `${apiBaseUri}:${ECOM_STORE_ID}/`;
209
+ (window as any).ECOMCLIENT_API_PASSPORT = `${apiBaseUri}:`;
210
+ (window as any).ECOMCLIENT_API_PASSPORT_IDENTITY = `${hostApiBaseUri}passport/`;
211
+ (window as any).ECOMCLIENT_API_SEARCH = `${apiBaseUri}search/_els/`;
212
+ (window as any).ECOMCLIENT_API_MODULES = `${hostApiBaseUri}modules/`;
210
213
 
211
214
  const onLoad = () => {
212
215
  const { ecomPassport } = window as Record<string, any>;
@@ -237,7 +240,7 @@ if (!import.meta.env.SSR) {
237
240
  };
238
241
 
239
242
  const appScript = document.createElement('script');
240
- appScript.src = 'https://cdn.jsdelivr.net/npm/@ecomplus/storefront-app@2.0.0-beta.190/dist/lib/js/app.js';
243
+ appScript.src = 'https://cdn.jsdelivr.net/npm/@ecomplus/storefront-app@2.0.0-beta.197/dist/lib/js/app.js';
241
244
  appScript.onload = onLoad;
242
245
  document.body.appendChild(appScript);
243
246
  }
@@ -1,3 +1,4 @@
1
+ import type { AsyncLocalStorage } from 'node:async_hooks';
1
2
  import type { AstroGlobal } from 'astro';
2
3
  import type { BaseConfig } from '@cloudcommerce/config';
3
4
  import type { ApiError, ApiEndpoint } from '@cloudcommerce/api';
@@ -5,8 +6,8 @@ import type { ResourceId, CategoriesList, BrandsList } from '@cloudcommerce/api/
5
6
  import type { ContentGetter, SettingsContent, PageContent } from '@@sf/content';
6
7
  import type { StorefrontApiContext } from '@@sf/$storefront';
7
8
  import { EventEmitter } from 'node:events';
8
- import { inject, getCurrentInstance } from 'vue';
9
9
  import api from '@cloudcommerce/api';
10
+ import { asyncLocalStorage as _als } from '../../config/astro/node-middleware.mjs';
10
11
  import _getConfig from '../../config/storefront.config.mjs';
11
12
  import { termify } from '../helpers/sf-utils';
12
13
 
@@ -23,6 +24,8 @@ export type StorefrontConfig = {
23
24
  getContent: ContentGetter,
24
25
  };
25
26
 
27
+ export const asyncLocalStorage = _als as AsyncLocalStorage<{ sid: string }>;
28
+
26
29
  const emitter = new EventEmitter();
27
30
  const getConfig: () => StorefrontConfig = _getConfig;
28
31
 
@@ -54,8 +57,8 @@ if (!globalThis.$storefront) {
54
57
  // @ts-expect-error: URL is retrived from `target.getSession().url`
55
58
  url: undefined,
56
59
  getSession(sid?: string) {
57
- if (!sid && !!getCurrentInstance()) {
58
- sid = inject('sid');
60
+ if (!sid) {
61
+ sid = asyncLocalStorage.getStore()?.sid;
59
62
  }
60
63
  const {
61
64
  url,
@@ -112,7 +115,7 @@ const loadRouteContext = async (
112
115
  apiPrefetchEndpoints?: ApiPrefetchEndpoints;
113
116
  } = {},
114
117
  ) => {
115
- const sid = `${Date.now() + Math.random()}`;
118
+ const sid = asyncLocalStorage.getStore()?.sid || `${Date.now()}`;
116
119
  sessions[sid] = { url: Astro.url };
117
120
  global.__sfSession = sessions[sid];
118
121
  const startedAt = Date.now();
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,EACJ,aAAa,EACb,mBAAmB,GACpB,GAAG,OAAO,CAAC,GAAG,CAAC;AAEhB,MAAM,MAAM,GAAG,aAAa,IAAI,UAAU,CAAC;AAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAExD,IAAI,SAAS,GAAG,mBAAmB,CAAC;AACpC,IAAI,CAAC,SAAS,EAAE;IACd,IAAI;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC3B,EAAE,CAAC,YAAY,CACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAClC,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CACF,CAAC;QACF,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;KACzC;IAAC,OAAO,CAAC,EAAE;QACV,SAAS,GAAG,YAAY,CAAC;KAC1B;CACF;AAED,MAAM,OAAO,GAAG,yBAAyB,SAAS,IAAI,MAAM,EAAE,CAAC;AAC/D,MAAM,UAAU,GAAG,GAAG,OAAO,UAAU,CAAC;AACxC,MAAM,WAAW,GAAG,GAAG,OAAO,WAAW,CAAC;AAE1C,OAAO,EACL,OAAO,EACP,UAAU,EACV,WAAW,GACZ,CAAC"}
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,EACJ,aAAa,EACb,mBAAmB,GACpB,GAAG,OAAO,CAAC,GAAG,CAAC;AAEhB,MAAM,MAAM,GAAG,aAAa,IAAI,UAAU,CAAC;AAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAExD,IAAI,SAAS,GAAG,mBAAmB,CAAC;AACpC,IAAI,CAAC,SAAS,EAAE,CAAC;IACf,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC3B,EAAE,CAAC,YAAY,CACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAClC,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CACF,CAAC;QACF,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,GAAG,YAAY,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,yBAAyB,SAAS,IAAI,MAAM,EAAE,CAAC;AAC/D,MAAM,UAAU,GAAG,GAAG,OAAO,UAAU,CAAC;AACxC,MAAM,WAAW,GAAG,GAAG,OAAO,WAAW,CAAC;AAE1C,OAAO,EACL,OAAO,EACP,UAAU,EACV,WAAW,GACZ,CAAC"}
@@ -2,9 +2,15 @@
2
2
  "name": "@cloudcommerce/test-base",
3
3
  "private": true,
4
4
  "type": "module",
5
- "version": "2.8.8",
5
+ "version": "2.10.0",
6
6
  "description": "E-Com Plus Cloud Commerce basic setup for testing",
7
7
  "main": "lib/index.js",
8
+ "files": [
9
+ "/lib",
10
+ "/types",
11
+ "/*.{js,mjs,ts}",
12
+ "/payloads/**/*.{json,js,mjs}"
13
+ ],
8
14
  "repository": {
9
15
  "type": "git",
10
16
  "url": "git+https://github.com/ecomplus/cloud-commerce.git",
@@ -212,10 +212,6 @@ export interface ListPaymentsParams {
212
212
  * @maxItems 40
213
213
  */
214
214
  addresses?: {
215
- /**
216
- * Unique ID (ObjectID)
217
- */
218
- _id: string;
219
215
  /**
220
216
  * ZIP (CEP, postal...) code
221
217
  */
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "name": "@cloudcommerce/types",
3
3
  "type": "module",
4
- "version": "2.8.8",
4
+ "version": "2.10.0",
5
5
  "description": "E-Com Plus Cloud Commerce reusable type definitions",
6
6
  "main": "index.ts",
7
+ "files": [
8
+ "/lib",
9
+ "/*.{js,mjs,ts}",
10
+ "/**/*.ts"
11
+ ],
7
12
  "repository": {
8
13
  "type": "git",
9
14
  "url": "git+https://github.com/ecomplus/cloud-commerce.git",
@@ -1,39 +0,0 @@
1
- import ecomUtils from '@ecomplus/utils';
2
- import api from '@cloudcommerce/api';
3
- import logger from 'firebase-functions/logger';
4
-
5
- const findCustomerByEmail = async (email) => {
6
- try {
7
- const { data } = await api.get(`customers?main_email=${email}&fields=_id`);
8
- if (data.result.length) {
9
- return data.result[0]._id;
10
- }
11
- return null;
12
- } catch (err) {
13
- logger.error(err);
14
- return null;
15
- }
16
- };
17
-
18
- export default async (customer) => {
19
- if (customer._id && customer._id.length === 24) {
20
- return customer._id;
21
- }
22
- if (customer.main_email) {
23
- const customerId = await findCustomerByEmail(customer.main_email);
24
- if (customerId) {
25
- return customerId;
26
- }
27
- }
28
- try {
29
- const { data: { _id: newCustomerId } } = await api.post('customers', {
30
- display_name: customer.name.given_name || 'visitor',
31
- ...customer,
32
- });
33
- return newCustomerId;
34
- } catch (err) {
35
- logger.error(err);
36
- return ecomUtils.randomObjectId();
37
- }
38
- };
39
- // # sourceMappingURL=get-custumerId.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-custumerId.js","sourceRoot":"","sources":["../../../src/firebase/functions-checkout/get-custumerId.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAE/C,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;IAClD,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,wBAAwB,KAAK,aAAa,CAAC,CAAC;QAC3E,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SAC3B;QACD,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;KACb;AACH,CAAC,CAAC;AAEF,eAAe,KAAK,EAAE,QAA0B,EAAE,EAAE;IAClD,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE;QAC9C,OAAO,QAAQ,CAAC,GAA+B,CAAC;KACjD;IACD,IAAI,QAAQ,CAAC,UAAU,EAAE;QACvB,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,UAAU,EAAE;YACd,OAAO,UAAU,CAAC;SACnB;KACF;IACD,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;YACnE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS;YACnD,GAAG,QAAQ;SACZ,CAAC,CAAC;QACH,OAAO,aAAa,CAAC;KACtB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,SAAS,CAAC,cAAc,EAA8B,CAAC;KAC/D;AACH,CAAC,CAAC"}
@@ -1,39 +0,0 @@
1
- import type { CustomerCheckout } from '../../types/index';
2
- import ecomUtils from '@ecomplus/utils';
3
- import api from '@cloudcommerce/api';
4
- import logger from 'firebase-functions/logger';
5
-
6
- const findCustomerByEmail = async (email: string) => {
7
- try {
8
- const { data } = await api.get(`customers?main_email=${email}&fields=_id`);
9
- if (data.result.length) {
10
- return data.result[0]._id;
11
- }
12
- return null;
13
- } catch (err) {
14
- logger.error(err);
15
- return null;
16
- }
17
- };
18
-
19
- export default async (customer: CustomerCheckout) => {
20
- if (customer._id && customer._id.length === 24) {
21
- return customer._id as string & { length: 24; };
22
- }
23
- if (customer.main_email) {
24
- const customerId = await findCustomerByEmail(customer.main_email);
25
- if (customerId) {
26
- return customerId;
27
- }
28
- }
29
- try {
30
- const { data: { _id: newCustomerId } } = await api.post('customers', {
31
- display_name: customer.name.given_name || 'visitor',
32
- ...customer,
33
- });
34
- return newCustomerId;
35
- } catch (err) {
36
- logger.error(err);
37
- return ecomUtils.randomObjectId() as string & { length: 24; };
38
- }
39
- };
@@ -1,64 +0,0 @@
1
- /* eslint-disable no-restricted-syntax */
2
- import { h, createSSRApp, defineComponent } from 'vue';
3
- import { renderToString } from 'vue/server-renderer';
4
- import { setup } from 'virtual:@astrojs/vue/app';
5
-
6
- /**
7
- * Astro passes `children` as a string of HTML, so we need
8
- * a wrapper `div` to render that content as VNodes.
9
- *
10
- * This is the Vue + JSX equivalent of using `<div v-html="value" />`
11
- */
12
- const StaticHtml = defineComponent({
13
- props: {
14
- value: String,
15
- name: String,
16
- hydrate: {
17
- type: Boolean,
18
- default: true,
19
- },
20
- },
21
- setup({ name, value, hydrate }) {
22
- if (!value) return () => null;
23
- const tagName = hydrate ? 'astro-slot' : 'astro-static-slot';
24
- return () => h(tagName, { name, innerHTML: value });
25
- },
26
- });
27
-
28
- /**
29
- * Other frameworks have `shouldComponentUpdate` in order to signal
30
- * that this subtree is entirely static and will not be updated
31
- *
32
- * Fortunately, Vue is smart enough to figure that out without any
33
- * help from us, so this just works out of the box!
34
- */
35
-
36
- function check(Component) {
37
- return !!Component.ssrRender || !!Component.__ssrInlineRender;
38
- }
39
-
40
- async function renderToStaticMarkup(Component, inputProps, slotted, metadata) {
41
- const slots = {};
42
- const props = { ...inputProps };
43
- delete props.slot;
44
- const sid = this.result?.cookies?.get('sid')?.value;
45
- for (const [key, value] of Object.entries(slotted)) {
46
- slots[key] = () => h(StaticHtml, {
47
- value,
48
- name: key === 'default' ? undefined : key,
49
- // Adjust how this is hydrated only when the version of Astro supports `astroStaticSlot`
50
- hydrate: metadata.astroStaticSlot ? !!metadata.hydrate : true,
51
- });
52
- }
53
- const app = createSSRApp({ render: () => h(Component, props, slots) });
54
- app.provide('sid', sid);
55
- await setup(app);
56
- const html = await renderToString(app);
57
- return { html };
58
- }
59
-
60
- export default {
61
- check,
62
- renderToStaticMarkup,
63
- supportsAstroStaticSlot: true,
64
- };