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.
- package/.github/renovate.json +4 -0
- package/.github/workflows/test-apps.yml +2 -2
- package/CHANGELOG.md +38 -0
- package/README.md +2 -0
- package/action.yml +2 -2
- package/ecomplus-stores/barradoce/functions/many/package.json +3 -3
- package/ecomplus-stores/barradoce/functions/ssr/package.json +6 -6
- package/ecomplus-stores/barradoce/functions/ssr/src/components/CartSidebar.vue +0 -15
- package/ecomplus-stores/barradoce/functions/ssr/src/components/ShopHeaderMenu.vue +16 -33
- package/ecomplus-stores/barradoce/functions/ssr/src/components/ShopHeaderSubmenu.vue +1 -2
- package/ecomplus-stores/barradoce/functions/ssr/src/pages/app/index.astro +4 -0
- package/ecomplus-stores/barradoce/functions/with-apps/package.json +3 -3
- package/ecomplus-stores/barradoce/package.json +2 -2
- package/package.json +9 -9
- package/packages/__skeleton/package.json +6 -0
- package/packages/api/lib/api.d.ts +6 -6
- package/packages/api/lib/api.js.map +1 -1
- package/packages/api/package.json +7 -2
- package/packages/api/types.ts +7 -1
- package/packages/apps/affiliate-program/lib/events-to-affiliate-program.js.map +1 -1
- package/packages/apps/affiliate-program/package.json +8 -2
- package/packages/apps/correios/package.json +9 -3
- package/packages/apps/custom-payment/lib/custom-payment-create-transaction.js.map +1 -1
- package/packages/apps/custom-payment/lib/custom-payment-list-payments.js.map +1 -1
- package/packages/apps/custom-payment/package.json +7 -1
- package/packages/apps/custom-shipping/package.json +7 -1
- package/packages/apps/datafrete/lib/datafrete-webhook.js.map +1 -1
- package/packages/apps/datafrete/package.json +9 -3
- package/packages/apps/discounts/package.json +7 -1
- package/packages/apps/emails/lib/events-to-app-emails.js.map +1 -1
- package/packages/apps/emails/lib/functios-lib/abandoned-carts.js +3 -2
- package/packages/apps/emails/lib/functios-lib/abandoned-carts.js.map +1 -1
- package/packages/apps/emails/lib/functios-lib/get-mail-render.js +10 -0
- package/packages/apps/emails/lib/functios-lib/get-mail-render.js.map +1 -0
- package/packages/apps/emails/lib/functios-lib/handle-orders.js +7 -4
- package/packages/apps/emails/lib/functios-lib/handle-orders.js.map +1 -1
- package/packages/apps/emails/package.json +9 -3
- package/packages/apps/emails/src/functios-lib/abandoned-carts.ts +3 -2
- package/packages/apps/emails/src/functios-lib/get-mail-render.ts +9 -0
- package/packages/apps/emails/src/functios-lib/handle-orders.ts +7 -6
- package/packages/apps/fb-conversions/lib/fb-conversions-events.js.map +1 -1
- package/packages/apps/fb-conversions/lib/functions-lib/create-fb-objects.js.map +1 -1
- package/packages/apps/fb-conversions/package.json +9 -3
- package/packages/apps/flash-courier/package.json +9 -3
- package/packages/apps/frenet/lib/functions-lib/database.js.map +1 -1
- package/packages/apps/frenet/lib/functions-lib/events-to-frenet.js.map +1 -1
- package/packages/apps/frenet/lib/functions-lib/remove-delivered.js.map +1 -1
- package/packages/apps/frenet/lib/functions-lib/tracking-codes.js.map +1 -1
- package/packages/apps/frenet/lib/functions-lib/update-fulfillments.js.map +1 -1
- package/packages/apps/frenet/package.json +9 -3
- package/packages/apps/galaxpay/lib/functions-lib/all-parses.js.map +1 -1
- package/packages/apps/galaxpay/lib/functions-lib/ecom/events-to-galaxpay.js.map +1 -1
- package/packages/apps/galaxpay/lib/functions-lib/galaxpay/auth/create-access.js.map +1 -1
- package/packages/apps/galaxpay/lib/functions-lib/galaxpay/auth/create-axios.js.map +1 -1
- package/packages/apps/galaxpay/lib/functions-lib/galaxpay/auth/gerate-token.js.map +1 -1
- package/packages/apps/galaxpay/lib/functions-lib/galaxpay/handle-plans.js.map +1 -1
- package/packages/apps/galaxpay/lib/functions-lib/galaxpay/update-subscription.js.map +1 -1
- package/packages/apps/galaxpay/lib/functions-lib/galaxpay/webhook.d.ts +1 -0
- package/packages/apps/galaxpay/lib/functions-lib/galaxpay/webhook.js.map +1 -1
- package/packages/apps/galaxpay/lib/galaxpay-create-transaction.js +2 -2
- package/packages/apps/galaxpay/lib/galaxpay-create-transaction.js.map +1 -1
- package/packages/apps/galaxpay/lib/galaxpay-events.js.map +1 -1
- package/packages/apps/galaxpay/lib/galaxpay-list-payments.js +1 -1
- package/packages/apps/galaxpay/lib/galaxpay-list-payments.js.map +1 -1
- package/packages/apps/galaxpay/package.json +9 -3
- package/packages/apps/google-analytics/lib/google-analytics-events.js.map +1 -1
- package/packages/apps/google-analytics/package.json +9 -3
- package/packages/apps/jadlog/package.json +8 -2
- package/packages/apps/loyalty-points/lib/functions-lib/cron-add-points.js.map +1 -1
- package/packages/apps/loyalty-points/lib/functions-lib/get-program-id.js.map +1 -1
- package/packages/apps/loyalty-points/lib/functions-lib/handle-loyalty-points-event.js.map +1 -1
- package/packages/apps/loyalty-points/lib/loyalty-create-transaction.js.map +1 -1
- package/packages/apps/loyalty-points/lib/loyalty-list-payments.js.map +1 -1
- package/packages/apps/loyalty-points/lib/loyalty-points-events.js.map +1 -1
- package/packages/apps/loyalty-points/package.json +7 -1
- package/packages/apps/mandae/package.json +9 -3
- package/packages/apps/melhor-envio/lib/functions-lib/database.js.map +1 -1
- package/packages/apps/melhor-envio/lib/functions-lib/events-to-melhor-envio.js.map +1 -1
- package/packages/apps/melhor-envio/lib/functions-lib/new-label.js.map +1 -1
- package/packages/apps/melhor-envio/lib/functions-lib/order-is-valid.js.map +1 -1
- package/packages/apps/melhor-envio/lib/functions-lib/tracking-codes.js.map +1 -1
- package/packages/apps/melhor-envio/package.json +9 -3
- package/packages/apps/mercadopago/lib/mp-create-transaction.js.map +1 -1
- package/packages/apps/mercadopago/lib/mp-list-payments.js.map +1 -1
- package/packages/apps/mercadopago/lib/mp-webhook.js.map +1 -1
- package/packages/apps/mercadopago/package.json +9 -3
- package/packages/apps/pagarme/lib/functions-lib/add-installments.js.map +1 -1
- package/packages/apps/pagarme/lib/functions-lib/parse-status-to-ecom.js.map +1 -1
- package/packages/apps/pagarme/lib/pagarme-create-transaction.js.map +1 -1
- package/packages/apps/pagarme/lib/pagarme-list-payments.js.map +1 -1
- package/packages/apps/pagarme/lib/pagarme-webhook.js.map +1 -1
- package/packages/apps/pagarme/package.json +9 -3
- package/packages/apps/pagarme-v5/lib/pagarme-v5-events.js.map +1 -1
- package/packages/apps/pagarme-v5/package.json +9 -3
- package/packages/apps/paghiper/lib/functions-lib/handle-webhook.d.ts +1 -0
- package/packages/apps/paghiper/lib/functions-lib/handle-webhook.js.map +1 -1
- package/packages/apps/paghiper/lib/paghiper-create-transaction.js.map +1 -1
- package/packages/apps/paghiper/lib/paghiper-list-payments.js.map +1 -1
- package/packages/apps/paghiper/lib/paghiper-webhook.js.map +1 -1
- package/packages/apps/paghiper/package.json +9 -3
- package/packages/apps/pix/lib/functions-lib/get-certificate.js.map +1 -1
- package/packages/apps/pix/lib/functions-lib/pix-auth/construtor.js.map +1 -1
- package/packages/apps/pix/lib/functions-lib/pix-auth/create-axios.js.map +1 -1
- package/packages/apps/pix/lib/functions-lib/pix-auth/oauth.js.map +1 -1
- package/packages/apps/pix/lib/pix-create-transaction.js.map +1 -1
- package/packages/apps/pix/lib/pix-list-payments.js.map +1 -1
- package/packages/apps/pix/lib/pix-webhook.js.map +1 -1
- package/packages/apps/pix/package.json +9 -3
- package/packages/apps/tiny-erp/lib/event-to-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js.map +1 -1
- package/packages/apps/tiny-erp/lib/tiny-webhook.js.map +1 -1
- package/packages/apps/tiny-erp/package.json +9 -3
- package/packages/apps/webhooks/lib/events-to-webhooks-app.js.map +1 -1
- package/packages/apps/webhooks/package.json +9 -3
- package/packages/cli/package.json +9 -2
- package/packages/config/lib/config.js.map +1 -1
- package/packages/config/lib/env.js.map +1 -1
- package/packages/config/package.json +6 -1
- package/packages/emails/lib/index.js.map +1 -1
- package/packages/emails/lib/parse-template-to-html.js.map +1 -1
- package/packages/emails/lib/providers/sendgrid/index.js.map +1 -1
- package/packages/emails/lib/providers/sendgrid/parse-to-data.js.map +1 -1
- package/packages/emails/lib/providers/smtp/index.js.map +1 -1
- package/packages/emails/package.json +8 -3
- package/packages/eslint/package.json +8 -5
- package/packages/events/package.json +7 -2
- package/packages/feeds/lib/firebase/serve-feeds.js.map +1 -1
- package/packages/feeds/package.json +6 -1
- package/packages/firebase/lib/config.js.map +1 -1
- package/packages/firebase/lib/handlers/check-store-events.js.map +1 -1
- package/packages/firebase/lib/helpers/firestore.js.map +1 -1
- package/packages/firebase/lib/helpers/pubsub.js.map +1 -1
- package/packages/firebase/lib/helpers/update-app-data.js.map +1 -1
- package/packages/firebase/package.json +7 -2
- package/packages/i18n/package.json +6 -1
- package/packages/modules/lib/firebase/call-app-module.js.map +1 -1
- package/packages/modules/lib/firebase/checkout.js +127 -112
- package/packages/modules/lib/firebase/checkout.js.map +1 -1
- package/packages/modules/lib/firebase/functions-checkout/fix-items.js.map +1 -1
- package/packages/modules/lib/firebase/functions-checkout/handle-order-transaction.js.map +1 -1
- package/packages/modules/lib/firebase/functions-checkout/new-order.js.map +1 -1
- package/packages/modules/lib/firebase/functions-checkout/read-or-save-customer.js +35 -0
- package/packages/modules/lib/firebase/functions-checkout/read-or-save-customer.js.map +1 -0
- package/packages/modules/lib/firebase/functions-checkout/request-to-module.js.map +1 -1
- package/packages/modules/lib/firebase/functions-checkout/utils.js.map +1 -1
- package/packages/modules/lib/firebase/handle-module.js +6 -1
- package/packages/modules/lib/firebase/handle-module.js.map +1 -1
- package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -1
- package/packages/modules/lib/firebase.js.map +1 -1
- package/packages/modules/package.json +9 -3
- package/packages/modules/schemas/list_payments.cjs +1 -6
- package/packages/modules/src/firebase/checkout.ts +153 -143
- package/packages/modules/src/firebase/functions-checkout/read-or-save-customer.ts +36 -0
- package/packages/modules/src/firebase/handle-module.ts +19 -1
- package/packages/modules/src/types/index.d.ts +2 -2
- package/packages/passport/lib/firebase/authenticate-customer.js +26 -15
- package/packages/passport/lib/firebase/authenticate-customer.js.map +1 -1
- package/packages/passport/lib/firebase/serve-passport-api.js +89 -2
- package/packages/passport/lib/firebase/serve-passport-api.js.map +1 -1
- package/packages/passport/lib/firebase.js.map +1 -1
- package/packages/passport/package.json +7 -2
- package/packages/passport/src/firebase/authenticate-customer.ts +32 -18
- package/packages/passport/src/firebase/serve-passport-api.ts +94 -3
- package/packages/ssr/lib/lib/analytics/send-to-ga4.js.map +1 -1
- package/packages/ssr/lib/lib/analytics/send-to-meta.js.map +1 -1
- package/packages/ssr/lib/lib/analytics/send-to-tiktok.js.map +1 -1
- package/packages/ssr/lib/lib/analytics-events.js.map +1 -1
- package/packages/ssr/lib/lib/cron-ssr-save-views.js +11 -5
- package/packages/ssr/lib/lib/cron-ssr-save-views.js.map +1 -1
- package/packages/ssr/lib/lib/serve-storefront.js +1 -1
- package/packages/ssr/lib/lib/serve-storefront.js.map +1 -1
- package/packages/ssr/package.json +12 -7
- package/packages/ssr/src/cloudflare/package.json +14 -0
- package/packages/ssr/src/lib/cron-ssr-save-views.ts +11 -5
- package/packages/ssr/src/lib/serve-storefront.ts +1 -1
- package/packages/storefront/astro.config.mjs +6 -9
- package/packages/storefront/client.d.ts +2 -1
- package/packages/storefront/config/astro/client-sf-directive.mjs +2 -0
- package/packages/storefront/config/astro/node-middleware.mjs +8 -0
- package/packages/storefront/package.json +18 -11
- package/packages/storefront/src/lib/components/globals/ALink.vue +36 -11
- package/packages/storefront/src/lib/scripts/vbeta-app.ts +15 -12
- package/packages/storefront/src/lib/ssr-context.ts +7 -4
- package/packages/test-base/lib/endpoints.js.map +1 -1
- package/packages/test-base/package.json +7 -1
- package/packages/types/modules/list_payments:params.d.ts +0 -4
- package/packages/types/package.json +6 -1
- package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js +0 -39
- package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js.map +0 -1
- package/packages/modules/src/firebase/functions-checkout/get-custumerId.ts +0 -39
- 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.
|
|
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.
|
|
34
|
-
"@astrojs/vue": "4.0.
|
|
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.
|
|
52
|
+
"@vite-pwa/astro": "^0.3.1",
|
|
45
53
|
"@vueuse/core": "10.9.0",
|
|
46
|
-
"
|
|
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.
|
|
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.
|
|
65
|
+
"unocss": "^0.58.6",
|
|
59
66
|
"unplugin-auto-import": "^0.17.5",
|
|
60
|
-
"vite": "^5.
|
|
61
|
-
"vite-plugin-pwa": "^0.19.
|
|
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.
|
|
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
|
|
22
|
-
if (
|
|
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
|
|
27
|
-
return
|
|
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
|
-
|
|
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="
|
|
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 =
|
|
186
|
-
if (!querystring &&
|
|
187
|
-
querystring = '?' +
|
|
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
|
|
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).
|
|
207
|
-
(window as any).
|
|
208
|
-
|
|
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.
|
|
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
|
|
58
|
-
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 =
|
|
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;
|
|
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.
|
|
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",
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/types",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.
|
|
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
|
-
};
|