cloudcommerce 0.0.126 → 0.0.128
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/.vscode/settings.json +3 -0
- package/CHANGELOG.md +50 -0
- package/action.yml +50 -10
- package/ecomplus-stores/monocard/README.md +0 -15
- package/ecomplus-stores/monocard/README.pt-BR.md +0 -15
- package/ecomplus-stores/monocard/functions/core/package.json +1 -1
- package/ecomplus-stores/monocard/functions/events/package.json +2 -2
- package/ecomplus-stores/monocard/functions/modules/package.json +2 -2
- package/ecomplus-stores/monocard/functions/passport/package.json +2 -2
- package/ecomplus-stores/monocard/functions/ssr/package.json +8 -8
- package/ecomplus-stores/monocard/functions/ssr/tailwind.config.cjs +1 -3
- package/ecomplus-stores/monocard/functions/ssr/{uno.config.ts → uno.config.cjs} +1 -1
- package/ecomplus-stores/monocard/package.json +1 -1
- package/ecomplus-stores/tia-sonia/README.md +0 -15
- package/ecomplus-stores/tia-sonia/README.pt-BR.md +0 -15
- package/ecomplus-stores/tia-sonia/functions/core/package.json +1 -1
- package/ecomplus-stores/tia-sonia/functions/events/package.json +2 -2
- package/ecomplus-stores/tia-sonia/functions/modules/package.json +2 -2
- package/ecomplus-stores/tia-sonia/functions/passport/package.json +2 -2
- package/ecomplus-stores/tia-sonia/functions/ssr/package.json +7 -7
- package/ecomplus-stores/tia-sonia/functions/ssr/tailwind.config.cjs +1 -3
- package/ecomplus-stores/tia-sonia/functions/ssr/{uno.config.ts → uno.config.cjs} +1 -1
- package/ecomplus-stores/tia-sonia/package.json +1 -1
- package/package.json +14 -14
- package/packages/api/lib/api.d.ts +4 -4
- package/packages/api/lib/types.d.ts +41 -41
- package/packages/api/package.json +1 -1
- package/packages/apps/correios/package.json +2 -2
- package/packages/apps/custom-shipping/package.json +1 -1
- package/packages/apps/discounts/lib-mjs/apply-discount.mjs +94 -20
- package/packages/apps/discounts/package.json +2 -2
- package/packages/apps/emails/CHANGELOG.md +1 -0
- package/packages/apps/emails/README.md +1 -0
- package/packages/apps/emails/lib/events-to-app-emails.js +19 -0
- package/packages/apps/emails/lib/events-to-app-emails.js.map +1 -0
- package/packages/apps/emails/lib/firebase.js +19 -0
- package/packages/apps/emails/lib/firebase.js.map +1 -0
- package/packages/apps/emails/lib/functios-lib/abandoned-carts.js +86 -0
- package/packages/apps/emails/lib/functios-lib/abandoned-carts.js.map +1 -0
- package/packages/apps/emails/lib/functios-lib/handle-orders.js +174 -0
- package/packages/apps/emails/lib/functios-lib/handle-orders.js.map +1 -0
- package/packages/apps/emails/lib/functios-lib/trigger-actions.js +178 -0
- package/packages/apps/emails/lib/functios-lib/trigger-actions.js.map +1 -0
- package/packages/apps/emails/lib/functios-lib/utils.js +33 -0
- package/packages/apps/emails/lib/functios-lib/utils.js.map +1 -0
- package/packages/apps/emails/lib/index.js +2 -0
- package/packages/apps/emails/lib/index.js.map +1 -0
- package/packages/apps/emails/package.json +33 -0
- package/packages/apps/emails/src/events-to-app-emails.ts +27 -0
- package/packages/apps/emails/src/firebase.ts +25 -0
- package/packages/apps/emails/src/functios-lib/abandoned-carts.ts +100 -0
- package/packages/apps/emails/src/functios-lib/handle-orders.ts +232 -0
- package/packages/apps/emails/src/functios-lib/trigger-actions.ts +177 -0
- package/packages/apps/emails/src/functios-lib/utils.ts +44 -0
- package/packages/apps/emails/src/index.ts +1 -0
- package/packages/apps/emails/tsconfig.json +3 -0
- package/packages/apps/frenet/package.json +2 -2
- package/packages/apps/infinitepay/CHANGELOG.md +1 -0
- package/packages/apps/infinitepay/README.md +1 -0
- package/packages/apps/infinitepay/assets/onload-expression.js +57 -0
- package/packages/apps/infinitepay/lib/functions-lib/add-installments.d.ts +55 -0
- package/packages/apps/infinitepay/lib/functions-lib/add-installments.js +63 -0
- package/packages/apps/infinitepay/lib/functions-lib/add-installments.js.map +1 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/create-access.d.ts +14 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/create-access.js +63 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/create-access.js.map +1 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/create-axios.d.ts +2 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/create-axios.js +19 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/create-axios.js.map +1 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/oauth.d.ts +2 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/oauth.js +25 -0
- package/packages/apps/infinitepay/lib/functions-lib/ip-auth/oauth.js.map +1 -0
- package/packages/apps/infinitepay/lib/functions-lib/utils.d.ts +8 -0
- package/packages/apps/infinitepay/lib/functions-lib/utils.js +17 -0
- package/packages/apps/infinitepay/lib/functions-lib/utils.js.map +1 -0
- package/packages/apps/infinitepay/lib/index.d.ts +1 -0
- package/packages/apps/infinitepay/lib/index.js +3 -0
- package/packages/apps/infinitepay/lib/index.js.map +1 -0
- package/packages/apps/infinitepay/lib/infinitepay.d.ts +76 -0
- package/packages/apps/infinitepay/lib/infinitepay.js +13 -0
- package/packages/apps/infinitepay/lib/infinitepay.js.map +1 -0
- package/packages/apps/infinitepay/lib/ip-create-transaction.d.ts +72 -0
- package/packages/apps/infinitepay/lib/ip-create-transaction.js +305 -0
- package/packages/apps/infinitepay/lib/ip-create-transaction.js.map +1 -0
- package/packages/apps/infinitepay/lib/ip-list-payments.d.ts +8 -0
- package/packages/apps/infinitepay/lib/ip-list-payments.js +130 -0
- package/packages/apps/infinitepay/lib/ip-list-payments.js.map +1 -0
- package/packages/apps/infinitepay/lib/ip-webhook.d.ts +5 -0
- package/packages/apps/infinitepay/lib/ip-webhook.js +152 -0
- package/packages/apps/infinitepay/lib/ip-webhook.js.map +1 -0
- package/packages/apps/infinitepay/package.json +38 -0
- package/packages/apps/infinitepay/scripts/build.sh +5 -0
- package/packages/apps/infinitepay/src/functions-lib/add-installments.ts +78 -0
- package/packages/apps/infinitepay/src/functions-lib/ip-auth/create-access.ts +85 -0
- package/packages/apps/infinitepay/src/functions-lib/ip-auth/create-axios.ts +20 -0
- package/packages/apps/infinitepay/src/functions-lib/ip-auth/oauth.ts +30 -0
- package/packages/apps/infinitepay/src/functions-lib/utils.ts +23 -0
- package/packages/apps/infinitepay/src/index.ts +2 -0
- package/packages/apps/infinitepay/src/infinitepay.ts +13 -0
- package/packages/apps/infinitepay/src/ip-create-transaction.ts +418 -0
- package/packages/apps/infinitepay/src/ip-list-payments.ts +158 -0
- package/packages/apps/infinitepay/src/ip-webhook.ts +184 -0
- package/packages/apps/infinitepay/tsconfig.json +6 -0
- package/packages/apps/infinitepay/webhook.js +1 -0
- package/packages/apps/mercadopago/lib/mp-create-transaction.js +1 -1
- package/packages/apps/mercadopago/lib/mp-create-transaction.js.map +1 -1
- package/packages/apps/mercadopago/lib/mp-webhook.js +1 -1
- package/packages/apps/mercadopago/lib/mp-webhook.js.map +1 -1
- package/packages/apps/mercadopago/package.json +4 -4
- package/packages/apps/mercadopago/src/mp-create-transaction.ts +1 -1
- package/packages/apps/mercadopago/src/mp-webhook.ts +1 -1
- package/packages/apps/pagarme/CHANGELOG.md +1 -0
- package/packages/apps/pagarme/README.md +1 -0
- package/packages/apps/pagarme/assets/onload-expression.js +18 -0
- package/packages/apps/pagarme/lib/functions-lib/add-installments.d.ts +55 -0
- package/packages/apps/pagarme/lib/functions-lib/add-installments.js +48 -0
- package/packages/apps/pagarme/lib/functions-lib/add-installments.js.map +1 -0
- package/packages/apps/pagarme/lib/functions-lib/parse-status-to-ecom.d.ts +2 -0
- package/packages/apps/pagarme/lib/functions-lib/parse-status-to-ecom.js +24 -0
- package/packages/apps/pagarme/lib/functions-lib/parse-status-to-ecom.js.map +1 -0
- package/packages/apps/pagarme/lib/index.d.ts +1 -0
- package/packages/apps/pagarme/lib/index.js +3 -0
- package/packages/apps/pagarme/lib/index.js.map +1 -0
- package/packages/apps/pagarme/lib/pagarme-create-transaction.d.ts +82 -0
- package/packages/apps/pagarme/lib/pagarme-create-transaction.js +275 -0
- package/packages/apps/pagarme/lib/pagarme-create-transaction.js.map +1 -0
- package/packages/apps/pagarme/lib/pagarme-list-payments.d.ts +7 -0
- package/packages/apps/pagarme/lib/pagarme-list-payments.js +139 -0
- package/packages/apps/pagarme/lib/pagarme-list-payments.js.map +1 -0
- package/packages/apps/pagarme/lib/pagarme-webhook.d.ts +4 -0
- package/packages/apps/pagarme/lib/pagarme-webhook.js +80 -0
- package/packages/apps/pagarme/lib/pagarme-webhook.js.map +1 -0
- package/packages/apps/pagarme/lib/pagarme.d.ts +86 -0
- package/packages/apps/pagarme/lib/pagarme.js +12 -0
- package/packages/apps/pagarme/lib/pagarme.js.map +1 -0
- package/packages/apps/pagarme/package.json +38 -0
- package/packages/apps/pagarme/scripts/build.sh +5 -0
- package/packages/apps/pagarme/src/functions-lib/add-installments.ts +59 -0
- package/packages/apps/pagarme/src/functions-lib/parse-status-to-ecom.ts +23 -0
- package/packages/apps/pagarme/src/index.ts +2 -0
- package/packages/apps/pagarme/src/pagarme-create-transaction.ts +307 -0
- package/packages/apps/pagarme/src/pagarme-list-payments.ts +158 -0
- package/packages/apps/pagarme/src/pagarme-webhook.ts +88 -0
- package/packages/apps/pagarme/src/pagarme.ts +12 -0
- package/packages/apps/pagarme/tsconfig.json +6 -0
- package/packages/apps/pagarme/webhook.js +1 -0
- package/packages/apps/pix/CHANGELOG.md +1 -0
- package/packages/apps/pix/README.md +1 -0
- package/packages/apps/pix/lib/functions-lib/get-certificate.d.ts +2 -0
- package/packages/apps/pix/lib/functions-lib/get-certificate.js +21 -0
- package/packages/apps/pix/lib/functions-lib/get-certificate.js.map +1 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/construtor.d.ts +15 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/construtor.js +65 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/construtor.js.map +1 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/create-axios.d.ts +6 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/create-axios.js +20 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/create-axios.js.map +1 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/oauth.d.ts +12 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/oauth.js +36 -0
- package/packages/apps/pix/lib/functions-lib/pix-auth/oauth.js.map +1 -0
- package/packages/apps/pix/lib/index.d.ts +1 -0
- package/packages/apps/pix/lib/index.js +3 -0
- package/packages/apps/pix/lib/index.js.map +1 -0
- package/packages/apps/pix/lib/pix-create-transaction.d.ts +73 -0
- package/packages/apps/pix/lib/pix-create-transaction.js +221 -0
- package/packages/apps/pix/lib/pix-create-transaction.js.map +1 -0
- package/packages/apps/pix/lib/pix-list-payments.d.ts +14 -0
- package/packages/apps/pix/lib/pix-list-payments.js +80 -0
- package/packages/apps/pix/lib/pix-list-payments.js.map +1 -0
- package/packages/apps/pix/lib/pix-webhook.d.ts +5 -0
- package/packages/apps/pix/lib/pix-webhook.js +146 -0
- package/packages/apps/pix/lib/pix-webhook.js.map +1 -0
- package/packages/apps/pix/lib/pix.d.ts +77 -0
- package/packages/apps/pix/lib/pix.js +13 -0
- package/packages/apps/pix/lib/pix.js.map +1 -0
- package/packages/apps/pix/package.json +36 -0
- package/packages/apps/pix/src/functions-lib/get-certificate.ts +24 -0
- package/packages/apps/pix/src/functions-lib/pix-auth/construtor.ts +87 -0
- package/packages/apps/pix/src/functions-lib/pix-auth/create-axios.ts +24 -0
- package/packages/apps/pix/src/functions-lib/pix-auth/oauth.ts +50 -0
- package/packages/apps/pix/src/index.ts +2 -0
- package/packages/apps/pix/src/pix-create-transaction.ts +261 -0
- package/packages/apps/pix/src/pix-list-payments.ts +93 -0
- package/packages/apps/pix/src/pix-webhook.ts +171 -0
- package/packages/apps/pix/src/pix.ts +13 -0
- package/packages/apps/pix/tsconfig.json +6 -0
- package/packages/apps/pix/webhook.js +1 -0
- package/packages/apps/tiny-erp/package.json +5 -5
- package/packages/cli/bin/run.mjs +1 -1
- package/packages/cli/lib/build.js +14 -7
- package/packages/cli/lib/{index.js → cli.js} +2 -2
- package/packages/cli/lib/setup-gcloud.js +1 -1
- package/packages/cli/package.json +3 -3
- package/packages/cli/src/build.ts +17 -10
- package/packages/cli/src/{index.ts → cli.ts} +2 -2
- package/packages/cli/src/setup-gcloud.ts +1 -1
- package/packages/config/lib/config.d.ts +4 -2
- package/packages/config/lib/config.js +11 -4
- package/packages/config/lib/config.js.map +1 -1
- package/packages/config/lib/env.d.ts +1 -1
- package/packages/config/package.json +2 -2
- package/packages/config/src/config.ts +14 -5
- package/packages/emails/CHANGELOG.md +1 -0
- package/packages/emails/README.md +1 -0
- package/packages/emails/lib/index.d.ts +56 -0
- package/packages/emails/lib/index.js +83 -0
- package/packages/emails/lib/index.js.map +1 -0
- package/packages/emails/lib/parse-template-to-html.d.ts +3 -0
- package/packages/emails/lib/parse-template-to-html.js +16 -0
- package/packages/emails/lib/parse-template-to-html.js.map +1 -0
- package/packages/emails/lib/providers/sendgrid/index.d.ts +8 -0
- package/packages/emails/lib/providers/sendgrid/index.js +54 -0
- package/packages/emails/lib/providers/sendgrid/index.js.map +1 -0
- package/packages/emails/lib/providers/sendgrid/parse-to-data.d.ts +5 -0
- package/packages/emails/lib/providers/sendgrid/parse-to-data.js +55 -0
- package/packages/emails/lib/providers/sendgrid/parse-to-data.js.map +1 -0
- package/packages/emails/lib/providers/smtp/index.d.ts +13 -0
- package/packages/emails/lib/providers/smtp/index.js +79 -0
- package/packages/emails/lib/providers/smtp/index.js.map +1 -0
- package/packages/emails/package.json +35 -0
- package/packages/emails/src/index.ts +144 -0
- package/packages/emails/src/parse-template-to-html.ts +19 -0
- package/packages/emails/src/providers/sendgrid/index.ts +78 -0
- package/packages/emails/src/providers/sendgrid/parse-to-data.ts +92 -0
- package/packages/emails/src/providers/smtp/index.ts +115 -0
- package/packages/emails/tests/assets/customer.json +68 -0
- package/packages/emails/tests/assets/order.json +190 -0
- package/packages/emails/tests/assets/store.json +25 -0
- package/packages/emails/tests/ex.config-sendgrid.json +19 -0
- package/packages/emails/tests/ex.config-smtp.json +21 -0
- package/packages/emails/tests/sendgrid.test.ts +156 -0
- package/packages/emails/tests/smtp.test.ts +147 -0
- package/packages/emails/tests/templates/new-order.ejs +37 -0
- package/packages/emails/tsconfig.json +6 -0
- package/packages/emails/types/index.d.ts +84 -0
- package/packages/emails/types/sendgrid.d.ts +28 -0
- package/packages/events/lib/firebase.js +8 -0
- package/packages/events/lib/firebase.js.map +1 -1
- package/packages/events/package.json +7 -3
- package/packages/events/src/firebase.ts +8 -0
- package/packages/firebase/lib/config.d.ts +15 -1
- package/packages/firebase/lib/config.js +28 -1
- package/packages/firebase/lib/config.js.map +1 -1
- package/packages/firebase/lib/helpers/pubsub.d.ts +2 -2
- package/packages/firebase/package.json +5 -5
- package/packages/firebase/src/config.ts +31 -1
- package/packages/i18n/package.json +1 -1
- package/packages/modules/lib/firebase/call-app-module.js +36 -0
- package/packages/modules/lib/firebase/call-app-module.js.map +1 -1
- package/packages/modules/package.json +9 -6
- package/packages/modules/schemas/apply_discount.cjs +47 -0
- package/packages/modules/src/firebase/call-app-module.ts +36 -0
- package/packages/passport/lib/firebase/authenticate-customer.js +1 -1
- package/packages/passport/lib/firebase/authenticate-customer.js.map +1 -1
- package/packages/passport/package.json +3 -3
- package/packages/passport/src/firebase/authenticate-customer.ts +2 -2
- package/packages/ssr/package.json +8 -8
- package/packages/storefront/.eslintrc.cjs +4 -0
- package/packages/storefront/astro.config.mjs +12 -6
- package/packages/storefront/dist/client/HeaderButtons.bc4a5c97.js +1 -0
- package/packages/storefront/dist/client/assets/_...slug_.acb18581.css +1 -0
- package/packages/storefront/dist/client/chunks/HeaderButtons.861af799.js +1 -0
- package/packages/storefront/dist/client/chunks/{LoginForm.0c5ba697.js → LoginForm.7e9c481c.js} +4 -4
- package/packages/storefront/dist/client/chunks/runtime-dom.esm-bundler.1b578f5a.js +1 -0
- package/packages/storefront/dist/client/{client.69fdbd1b.js → client.75c18572.js} +1 -1
- package/packages/storefront/dist/client/manifest.webmanifest +1 -1
- package/packages/storefront/dist/client/page.5a6f3db5.js +1 -0
- package/packages/storefront/dist/client/sw.js +1 -1
- package/packages/storefront/dist/server/{avif → chunks/avif}/avif_node_dec.wasm +0 -0
- package/packages/storefront/dist/server/{avif → chunks/avif}/avif_node_enc.wasm +0 -0
- package/packages/storefront/dist/server/chunks/image-pool.f66f99fb.mjs +10791 -0
- package/packages/storefront/dist/server/{mozjpeg → chunks/mozjpeg}/mozjpeg_node_dec.wasm +0 -0
- package/packages/storefront/dist/server/{mozjpeg → chunks/mozjpeg}/mozjpeg_node_enc.wasm +0 -0
- package/packages/storefront/dist/server/{png → chunks/png}/squoosh_oxipng_bg.wasm +0 -0
- package/packages/storefront/dist/server/{png → chunks/png}/squoosh_png_bg.wasm +0 -0
- package/packages/storefront/dist/server/{resize → chunks/resize}/squoosh_resize_bg.wasm +0 -0
- package/packages/storefront/dist/server/{rotate → chunks/rotate}/rotate.wasm +0 -0
- package/packages/storefront/dist/server/{webp → chunks/webp}/webp_node_dec.wasm +0 -0
- package/packages/storefront/dist/server/{webp → chunks/webp}/webp_node_enc.wasm +0 -0
- package/packages/storefront/dist/server/entry.mjs +10832 -13568
- package/packages/storefront/dist/server/manifest.webmanifest +1 -1
- package/packages/storefront/package.json +22 -18
- package/packages/storefront/src/lib/assets/base.css +110 -0
- package/packages/storefront/src/lib/assets/dark.css +92 -0
- package/packages/storefront/src/lib/assets/forms.css +0 -0
- package/packages/storefront/src/lib/assets/pico.css +29 -130
- package/packages/storefront/src/lib/assets/preflight.css +362 -0
- package/packages/storefront/src/lib/assets/typography.css +15 -0
- package/packages/storefront/src/lib/components/ADrawer.vue +11 -11
- package/packages/storefront/src/lib/components/LoginDrawer.vue +1 -1
- package/packages/storefront/src/lib/layouts/BaseBody.astro +2 -1
- package/packages/storefront/src/lib/layouts/BaseHead.astro +13 -3
- package/packages/storefront/src/lib/layouts/BaseStateJson.astro +3 -12
- package/packages/storefront/src/lib/ssr/image.ts +11 -5
- package/packages/storefront/src/lib/ssr-context.ts +3 -3
- package/packages/storefront/src/lib/state/shopping-cart/add-cart-item.ts +37 -57
- package/packages/storefront/src/lib/state/shopping-cart/parse-product.ts +36 -0
- package/packages/storefront/src/lib/state/shopping-cart.ts +32 -1
- package/packages/storefront/src/lib/types/cms-settings.d.ts +3 -1
- package/packages/storefront/storefront.cms.cjs +41 -0
- package/packages/storefront/storefront.cms.mjs +7 -2
- package/packages/storefront/storefront.config.mjs +1 -0
- package/packages/storefront/tailwind.config.cjs +142 -113
- package/packages/storefront/uno.config.cjs +126 -0
- package/packages/types/index.ts +21 -0
- package/packages/types/modules/apply_discount:response.d.ts +32 -0
- package/packages/types/package.json +1 -1
- package/packages/storefront/dist/client/HeaderButtons.b5b4a939.js +0 -1
- package/packages/storefront/dist/client/assets/_...slug_.8d138f36.css +0 -4
- package/packages/storefront/dist/client/chunks/HeaderButtons.308edb4d.js +0 -1
- package/packages/storefront/dist/client/chunks/runtime-dom.esm-bundler.f00ab3bd.js +0 -1
- package/packages/storefront/dist/client/page.33c44e88.js +0 -1
- package/packages/storefront/uno.config.ts +0 -167
|
@@ -9,16 +9,16 @@ import type { Customers } from './types/customers';
|
|
|
9
9
|
import type { Stores } from './types/stores';
|
|
10
10
|
import type { Applications } from './types/applications';
|
|
11
11
|
import type { Authentications } from './types/authentications';
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
type Resource = 'products' | 'categories' | 'brands' | 'collections' | 'grids' | 'carts' | 'orders' | 'customers' | 'stores' | 'applications' | 'authentications';
|
|
13
|
+
type ResourceId = string & {
|
|
14
14
|
length: 24;
|
|
15
15
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
type ResourceAndId = `${Resource}/${ResourceId}`;
|
|
17
|
+
type ResourceOpQuery = Resource | `${Resource}?${string}`;
|
|
18
|
+
type EventsEndpoint = `events/${Resource}` | `events/${ResourceAndId}` | 'events/me';
|
|
19
|
+
type Endpoint = ResourceOpQuery | ResourceAndId | `${ResourceAndId}/${string}` | `slugs/${string}` | 'search/v1' | EventsEndpoint | 'login' | 'authenticate' | 'ask-auth-callback' | 'check-username' | `$aggregate/${Exclude<Resource, 'stores' | 'applications' | 'authentications'>}` | `schemas/${Resource}`;
|
|
20
|
+
type Method = 'get' | 'post' | 'put' | 'patch' | 'delete';
|
|
21
|
+
type Config = {
|
|
22
22
|
baseUrl?: string;
|
|
23
23
|
storeId?: number;
|
|
24
24
|
accessToken?: string;
|
|
@@ -36,27 +36,27 @@ declare type Config = {
|
|
|
36
36
|
cacheMaxAge?: number;
|
|
37
37
|
fetch?: typeof fetch;
|
|
38
38
|
};
|
|
39
|
-
|
|
39
|
+
type BaseListResultMeta = {
|
|
40
40
|
offset: number;
|
|
41
41
|
limit: number;
|
|
42
42
|
fields: Array<string>;
|
|
43
43
|
};
|
|
44
|
-
|
|
44
|
+
type ListResultDocs<Document extends any> = Array<Partial<Document> & {
|
|
45
45
|
_id: ResourceId;
|
|
46
46
|
}>;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
type ProductsList = ListResultDocs<Products>;
|
|
48
|
+
type CategoriesList = ListResultDocs<Categories>;
|
|
49
|
+
type BrandsList = ListResultDocs<Brands>;
|
|
50
|
+
type CollectionsList = ListResultDocs<Collections>;
|
|
51
|
+
type GridsList = ListResultDocs<Grids>;
|
|
52
|
+
type CartsList = ListResultDocs<Carts>;
|
|
53
|
+
type OrdersList = ListResultDocs<Orders>;
|
|
54
|
+
type CustomersList = ListResultDocs<Customers>;
|
|
55
|
+
type StoresList = ListResultDocs<Stores>;
|
|
56
|
+
type ApplicationsList = ListResultDocs<Applications>;
|
|
57
|
+
type AuthenticationsList = ListResultDocs<Authentications>;
|
|
58
|
+
type ListEndpoint<TResource extends Resource> = TResource | `${TResource}?${string}`;
|
|
59
|
+
type ResourceListResult<TEndpoint extends ResourceOpQuery> = {
|
|
60
60
|
result: TEndpoint extends ListEndpoint<'products'> ? ProductsList : TEndpoint extends ListEndpoint<'categories'> ? CategoriesList : TEndpoint extends ListEndpoint<'brands'> ? BrandsList : TEndpoint extends ListEndpoint<'collections'> ? CollectionsList : TEndpoint extends ListEndpoint<'grids'> ? GridsList : TEndpoint extends ListEndpoint<'carts'> ? CartsList : TEndpoint extends ListEndpoint<'orders'> ? OrdersList : TEndpoint extends ListEndpoint<'customers'> ? CustomersList : TEndpoint extends ListEndpoint<'stores'> ? StoresList : TEndpoint extends ListEndpoint<'applications'> ? ApplicationsList : TEndpoint extends ListEndpoint<'authentications'> ? AuthenticationsList : never;
|
|
61
61
|
meta: BaseListResultMeta & {
|
|
62
62
|
count?: number;
|
|
@@ -69,7 +69,7 @@ declare type ResourceListResult<TEndpoint extends ResourceOpQuery> = {
|
|
|
69
69
|
};
|
|
70
70
|
};
|
|
71
71
|
};
|
|
72
|
-
|
|
72
|
+
type EventFieldsByEndpoint<TEndpoint extends EventsEndpoint> = TEndpoint extends `events/${Resource}` ? {
|
|
73
73
|
resource_id: ResourceId;
|
|
74
74
|
authentication_id: ResourceId | null;
|
|
75
75
|
} : TEndpoint extends `events/${ResourceAndId}` ? {
|
|
@@ -78,7 +78,7 @@ declare type EventFieldsByEndpoint<TEndpoint extends EventsEndpoint> = TEndpoint
|
|
|
78
78
|
resource: Resource;
|
|
79
79
|
resource_id: ResourceId;
|
|
80
80
|
} : never;
|
|
81
|
-
|
|
81
|
+
type EventsResult<TEndpoint extends EventsEndpoint> = {
|
|
82
82
|
result: Array<{
|
|
83
83
|
timestamp: string;
|
|
84
84
|
store_id?: number;
|
|
@@ -94,7 +94,7 @@ declare type EventsResult<TEndpoint extends EventsEndpoint> = {
|
|
|
94
94
|
} & EventFieldsByEndpoint<TEndpoint>>;
|
|
95
95
|
meta: BaseListResultMeta;
|
|
96
96
|
};
|
|
97
|
-
|
|
97
|
+
type ResponseBody<TConfig extends Config> = TConfig['method'] extends 'post' ? TConfig['endpoint'] extends 'login' ? {
|
|
98
98
|
_id: ResourceId;
|
|
99
99
|
store_ids: number[];
|
|
100
100
|
api_key: string;
|
|
@@ -105,21 +105,21 @@ declare type ResponseBody<TConfig extends Config> = TConfig['method'] extends 'p
|
|
|
105
105
|
} : {
|
|
106
106
|
_id: ResourceId;
|
|
107
107
|
} : TConfig['method'] extends 'put' | 'patch' | 'delete' ? null : TConfig['endpoint'] extends `${string}/${ResourceId}/${string}` ? any : TConfig['endpoint'] extends `products/${ResourceId}` ? Products : TConfig['endpoint'] extends `categories/${ResourceId}` ? Categories : TConfig['endpoint'] extends `brands/${ResourceId}` ? Brands : TConfig['endpoint'] extends `collections/${ResourceId}` ? Collections : TConfig['endpoint'] extends `grids/${ResourceId}` ? Grids : TConfig['endpoint'] extends `carts/${ResourceId}` ? Carts : TConfig['endpoint'] extends `orders/${ResourceId}` ? Orders : TConfig['endpoint'] extends `customers/${ResourceId}` ? Customers : TConfig['endpoint'] extends `stores/${ResourceId}` ? Stores : TConfig['endpoint'] extends `applications/${ResourceId}` ? Applications : TConfig['endpoint'] extends `authentications/${ResourceId}` ? Authentications : TConfig['endpoint'] extends ResourceOpQuery ? ResourceListResult<TConfig['endpoint']> : TConfig['endpoint'] extends EventsEndpoint ? EventsResult<TConfig['endpoint']> : any;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
108
|
+
type DocSchema<Document extends any> = Omit<Document, '_id' | 'store_id' | 'store_ids' | 'created_at' | 'updated_at'>;
|
|
109
|
+
type CustomerSet = DocSchema<Customers>;
|
|
110
|
+
type OrderSet = DocSchema<Orders>;
|
|
111
|
+
type CartSet = DocSchema<Carts>;
|
|
112
|
+
type ProductSet = DocSchema<Products>;
|
|
113
|
+
type CategorySet = DocSchema<Categories>;
|
|
114
|
+
type BrandSet = DocSchema<Brands>;
|
|
115
|
+
type CollectionSet = DocSchema<Collections>;
|
|
116
|
+
type GridSet = DocSchema<Grids>;
|
|
117
|
+
type StoreSet = DocSchema<Stores>;
|
|
118
|
+
type ApplicationSet = DocSchema<Applications>;
|
|
119
|
+
type AuthenticationSet = DocSchema<Authentications>;
|
|
120
|
+
type SetDocEndpoint<TResource extends Resource> = TResource | `${TResource}/${ResourceId}`;
|
|
121
|
+
type RequestBody<TConfig extends Config> = TConfig['method'] extends undefined | 'get' | 'delete' ? undefined : TConfig['method'] extends 'patch' ? any : TConfig['endpoint'] extends SetDocEndpoint<'products'> ? ProductSet : TConfig['endpoint'] extends SetDocEndpoint<'categories'> ? CategorySet : TConfig['endpoint'] extends SetDocEndpoint<'brands'> ? BrandSet : TConfig['endpoint'] extends SetDocEndpoint<'collections'> ? CollectionSet : TConfig['endpoint'] extends SetDocEndpoint<'grids'> ? GridSet : TConfig['endpoint'] extends SetDocEndpoint<'carts'> ? CartSet : TConfig['endpoint'] extends SetDocEndpoint<'orders'> ? OrderSet : TConfig['endpoint'] extends SetDocEndpoint<'customers'> ? CustomerSet : TConfig['endpoint'] extends SetDocEndpoint<'stores'> ? StoreSet : TConfig['endpoint'] extends SetDocEndpoint<'applications'> ? ApplicationSet : TConfig['endpoint'] extends SetDocEndpoint<'authentications'> ? AuthenticationSet : any;
|
|
122
|
+
type ErrorBody = {
|
|
123
123
|
status: number;
|
|
124
124
|
error_code: number;
|
|
125
125
|
message: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/app-correios",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.128",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce app for Correios shipping calculation",
|
|
6
6
|
"main": "lib/correios.js",
|
|
7
7
|
"repository": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@cloudcommerce/api": "workspace:*",
|
|
23
|
-
"axios": "^1.
|
|
23
|
+
"axios": "^1.2.0",
|
|
24
24
|
"xml2js": "^0.4.23"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
@@ -32,9 +32,11 @@ export default async ({ params, application }) => {
|
|
|
32
32
|
return response;
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
const addDiscount = (discount, flag, label) => {
|
|
35
|
+
const addDiscount = (discount, flag, label, maxDiscount) => {
|
|
36
36
|
let value;
|
|
37
|
-
|
|
37
|
+
if (typeof maxDiscount !== 'number') {
|
|
38
|
+
maxDiscount = params.amount[discount.apply_at || 'total'];
|
|
39
|
+
}
|
|
38
40
|
if (maxDiscount) {
|
|
39
41
|
// update amount discount and total
|
|
40
42
|
if (discount.type === 'percentage') {
|
|
@@ -82,6 +84,11 @@ export default async ({ params, application }) => {
|
|
|
82
84
|
}
|
|
83
85
|
const kitDiscounts = getValidDiscountRules(config.product_kit_discounts, params, params.items)
|
|
84
86
|
.sort((a, b) => {
|
|
87
|
+
if (!Array.isArray(a.product_ids) || !a.product_ids.length) {
|
|
88
|
+
if (Array.isArray(b.product_ids) && b.product_ids.length) {
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
85
92
|
if (a.min_quantity > b.min_quantity) {
|
|
86
93
|
return -1;
|
|
87
94
|
}
|
|
@@ -98,6 +105,8 @@ export default async ({ params, application }) => {
|
|
|
98
105
|
});
|
|
99
106
|
// prevent applying duplicated kit discount for same items
|
|
100
107
|
let discountedItemIds = [];
|
|
108
|
+
// check buy together recommendations
|
|
109
|
+
const buyTogether = [];
|
|
101
110
|
|
|
102
111
|
kitDiscounts.forEach((kitDiscount, index) => {
|
|
103
112
|
if (kitDiscount) {
|
|
@@ -106,39 +115,101 @@ export default async ({ params, application }) => {
|
|
|
106
115
|
: [];
|
|
107
116
|
let kitItems = productIds.length
|
|
108
117
|
? params.items.filter((item) => item.quantity && productIds.indexOf(item.product_id) > -1)
|
|
109
|
-
: params.items;
|
|
110
|
-
kitItems = kitItems.filter((item) => discountedItemIds.indexOf(item.
|
|
118
|
+
: params.items.filter((item) => item.quantity);
|
|
119
|
+
kitItems = kitItems.filter((item) => discountedItemIds.indexOf(item.product_id) === -1);
|
|
120
|
+
if (!kitItems.length) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const recommendBuyTogether = () => {
|
|
125
|
+
if (
|
|
126
|
+
params.items.length === 1
|
|
127
|
+
&& productIds.length <= 4
|
|
128
|
+
&& buyTogether.length < 300
|
|
129
|
+
) {
|
|
130
|
+
const baseProductId = params.items[0].product_id;
|
|
131
|
+
if (productIds.indexOf(baseProductId) === -1) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const baseItemQuantity = params.items[0].quantity || 1;
|
|
135
|
+
const perItemQuantity = kitDiscount.min_quantity > 2
|
|
136
|
+
? Math.max(kitDiscount.min_quantity / (productIds.length - 1) - baseItemQuantity, 1)
|
|
137
|
+
: 1;
|
|
138
|
+
const buyTogetherProducts = {};
|
|
139
|
+
productIds.forEach((productId) => {
|
|
140
|
+
if (productId !== baseProductId) {
|
|
141
|
+
buyTogetherProducts[productId] = perItemQuantity;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
if (Object.keys(buyTogetherProducts).length) {
|
|
145
|
+
buyTogether.push({
|
|
146
|
+
products: buyTogetherProducts,
|
|
147
|
+
discount: {
|
|
148
|
+
type: kitDiscount.discount.type,
|
|
149
|
+
value: kitDiscount.discount.value,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const discount = { ...kitDiscount.discount };
|
|
111
157
|
if (kitDiscount.min_quantity > 0) {
|
|
112
158
|
// check total items quantity
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
159
|
+
if (kitDiscount.same_product_quantity) {
|
|
160
|
+
kitItems = kitItems.filter((item) => item.quantity >= kitDiscount.min_quantity);
|
|
161
|
+
} else {
|
|
162
|
+
let totalQuantity = 0;
|
|
163
|
+
kitItems.forEach(({ quantity }) => {
|
|
164
|
+
totalQuantity += quantity;
|
|
165
|
+
});
|
|
166
|
+
if (totalQuantity < kitDiscount.min_quantity) {
|
|
167
|
+
if (productIds.length > 1 && kitDiscount.check_all_items !== false) {
|
|
168
|
+
recommendBuyTogether();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (discount.type === 'fixed' && kitDiscount.cumulative_discount !== false) {
|
|
174
|
+
discount.value *= Math.floor(totalQuantity / kitDiscount.min_quantity);
|
|
175
|
+
}
|
|
122
176
|
}
|
|
123
177
|
}
|
|
124
178
|
|
|
125
|
-
if (!params.amount || !(
|
|
179
|
+
if (!params.amount || !(discount.min_amount > params.amount.total)) {
|
|
126
180
|
if (kitDiscount.check_all_items !== false) {
|
|
127
181
|
for (let i = 0; i < productIds.length; i++) {
|
|
128
182
|
const productId = productIds[i];
|
|
129
|
-
if (
|
|
130
|
-
|
|
183
|
+
if (
|
|
184
|
+
productId
|
|
185
|
+
&& !kitItems.find((item) => item.quantity && item.product_id === productId)
|
|
186
|
+
) {
|
|
131
187
|
// product not on current cart
|
|
188
|
+
recommendBuyTogether();
|
|
132
189
|
return;
|
|
133
190
|
}
|
|
134
191
|
}
|
|
135
192
|
}
|
|
136
193
|
// apply cumulative discount \o/
|
|
137
|
-
|
|
194
|
+
if (kitDiscount.same_product_quantity) {
|
|
195
|
+
kitItems.forEach((item, i) => {
|
|
196
|
+
addDiscount(
|
|
197
|
+
discount,
|
|
198
|
+
`KIT-${(index + 1)}-${i}`,
|
|
199
|
+
kitDiscount.label,
|
|
200
|
+
ecomUtils.price(item) * (item.quantity || 1),
|
|
201
|
+
);
|
|
202
|
+
});
|
|
203
|
+
} else {
|
|
204
|
+
addDiscount(discount, `KIT-${(index + 1)}`, kitDiscount.label);
|
|
205
|
+
}
|
|
138
206
|
discountedItemIds = discountedItemIds.concat(kitItems.map((item) => item.product_id));
|
|
139
207
|
}
|
|
140
208
|
}
|
|
141
209
|
});
|
|
210
|
+
if (buyTogether.length) {
|
|
211
|
+
response.buy_together = buyTogether;
|
|
212
|
+
}
|
|
142
213
|
|
|
143
214
|
// gift products (freebies) campaings
|
|
144
215
|
if (Array.isArray(config.freebies_rules)) {
|
|
@@ -162,7 +233,7 @@ export default async ({ params, application }) => {
|
|
|
162
233
|
// start calculating discount
|
|
163
234
|
let value = 0;
|
|
164
235
|
rule.product_ids.forEach((productId) => {
|
|
165
|
-
const item = params.items.find((
|
|
236
|
+
const item = params.items.find((_item) => productId === _item.product_id);
|
|
166
237
|
if (item) {
|
|
167
238
|
value += ecomUtils.price(item);
|
|
168
239
|
}
|
|
@@ -302,8 +373,11 @@ export default async ({ params, application }) => {
|
|
|
302
373
|
// eslint-disable-next-line no-await-in-loop
|
|
303
374
|
const { data } = await api.get(`${endpoint}${query}`);
|
|
304
375
|
countOrders = data.result.length;
|
|
305
|
-
} catch (
|
|
306
|
-
|
|
376
|
+
} catch (err) {
|
|
377
|
+
return {
|
|
378
|
+
error: 'CANT_CHECK_USAGE_LIMITS',
|
|
379
|
+
message: err.message,
|
|
380
|
+
};
|
|
307
381
|
}
|
|
308
382
|
|
|
309
383
|
if (countOrders >= max) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/app-discounts",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.128",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce app for complex discount rules",
|
|
6
6
|
"main": "lib/discounts.js",
|
|
7
7
|
"repository": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@cloudcommerce/api": "workspace:*",
|
|
23
|
-
"@ecomplus/utils": "
|
|
23
|
+
"@ecomplus/utils": "1.5.0-rc.3"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@cloudcommerce/types": "workspace:*"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Please refer to GitHub [repository releases](https://github.com/ecomplus/cloud-commerce/releases) or monorepo unified [CHANGELOG.md](https://github.com/ecomplus/cloud-commerce/blob/main/CHANGELOG.md).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# `@cloudcommerce/app-emails`
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import logger from 'firebase-functions/logger';
|
|
2
|
+
import handleOrder from './functios-lib/handle-orders.js';
|
|
3
|
+
|
|
4
|
+
const handleApiEvent = async ({
|
|
5
|
+
evName, apiEvent, apiDoc, app,
|
|
6
|
+
}) => {
|
|
7
|
+
const appData = { ...app.data, ...app.hidden_data };
|
|
8
|
+
const resourceId = apiEvent.resource_id;
|
|
9
|
+
const key = `${evName}_${resourceId}`;
|
|
10
|
+
if (Array.isArray(appData.ignore_events)
|
|
11
|
+
&& appData.ignore_events.includes(evName)) {
|
|
12
|
+
logger.info('>> ', key, ' - Ignored event');
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return handleOrder(apiEvent, app, apiDoc);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default handleApiEvent;
|
|
19
|
+
// # sourceMappingURL=events-to-app-emails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-to-app-emails.js","sourceRoot":"","sources":["../src/events-to-app-emails.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,WAAW,MAAM,8BAA8B,CAAC;AAEvD,MAAM,cAAc,GAAoB,KAAK,EAAE,EAC7C,MAAM,EACN,QAAQ,EACR,MAAM,EACN,GAAG,GACJ,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;IACxC,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IAEtC,IACE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;WACjC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EACzC;QACA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,OAAO,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAgB,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* eslint-disable import/prefer-default-export */
|
|
2
|
+
import '@cloudcommerce/firebase/lib/init';
|
|
3
|
+
import config from '@cloudcommerce/firebase/lib/config';
|
|
4
|
+
import functions from 'firebase-functions';
|
|
5
|
+
import { createAppEventsFunction } from '@cloudcommerce/firebase/lib/helpers/pubsub';
|
|
6
|
+
import handleApiEvent from './events-to-app-emails.js';
|
|
7
|
+
import handleAbandonedCarts from './functios-lib/abandoned-carts.js';
|
|
8
|
+
|
|
9
|
+
const { httpsFunctionOptions: { region } } = config.get();
|
|
10
|
+
|
|
11
|
+
export const emails = {
|
|
12
|
+
onStoreEvent: createAppEventsFunction('emails', handleApiEvent),
|
|
13
|
+
cronAbandonedCarts: functions.region(region).pubsub
|
|
14
|
+
.schedule('25 */3 * * *')
|
|
15
|
+
.onRun(() => {
|
|
16
|
+
return handleAbandonedCarts();
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
// # sourceMappingURL=firebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,uBAAuB,GAExB,MAAM,4CAA4C,CAAC;AACpD,OAAO,cAAc,MAAM,wBAAwB,CAAC;AACpD,OAAO,oBAAoB,MAAM,gCAAgC,CAAC;AAElE,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,YAAY,EAAE,uBAAuB,CACnC,QAAQ,EACR,cAAiC,CAClC;IAED,kBAAkB,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM;SAChD,QAAQ,CAAC,cAAc,CAAC;SACxB,KAAK,CAAC,GAAG,EAAE;QACV,OAAO,oBAAoB,EAAE,CAAC;IAChC,CAAC,CAAC;CACL,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import logger from 'firebase-functions/lib/logger';
|
|
2
|
+
import api from '@cloudcommerce/api';
|
|
3
|
+
import transactionalMails from '@ecomplus/transactional-mails';
|
|
4
|
+
import { getFirestore } from 'firebase-admin/firestore';
|
|
5
|
+
import email from '@cloudcommerce/emails';
|
|
6
|
+
import triggerActions from './trigger-actions.js';
|
|
7
|
+
import { getStore } from './utils.js';
|
|
8
|
+
|
|
9
|
+
export default async () => {
|
|
10
|
+
try {
|
|
11
|
+
// logger.log('# Check abandoned carts');
|
|
12
|
+
const [application] = (await api.get('applications?app_id=1243&fields=hidden_data,data')).data.result;
|
|
13
|
+
const store = getStore();
|
|
14
|
+
const appData = {
|
|
15
|
+
...application.data,
|
|
16
|
+
...application.hidden_data,
|
|
17
|
+
};
|
|
18
|
+
const lang = (appData.lang && appData.lang === 'Inglês') ? 'en_us' : (store.lang || 'pt_br');
|
|
19
|
+
let filterCartsDate = '';
|
|
20
|
+
const limitDate = new Date();
|
|
21
|
+
/*
|
|
22
|
+
TODO:
|
|
23
|
+
SES app abandoned_cart_delay is set in days rather than hours as suggested here
|
|
24
|
+
*/
|
|
25
|
+
limitDate.setHours(limitDate.getHours() - (appData.abandoned_cart_delay || 3));
|
|
26
|
+
const lastNotificationSent = (await getFirestore().doc('emails/lastCartSent').get()).data();
|
|
27
|
+
if (lastNotificationSent && lastNotificationSent.time) {
|
|
28
|
+
const lastNotifiedCart = new Date(lastNotificationSent.time);
|
|
29
|
+
filterCartsDate += `&create_at>=${lastNotifiedCart.toISOString()}`;
|
|
30
|
+
} else {
|
|
31
|
+
const limitStartDate = new Date();
|
|
32
|
+
limitStartDate.setHours(limitDate.getHours() - (8 * (appData.abandoned_cart_delay || 3)));
|
|
33
|
+
filterCartsDate += `&create_at>=${limitStartDate.toISOString()}`;
|
|
34
|
+
}
|
|
35
|
+
filterCartsDate += `&created_at<=${limitDate.toISOString()}`;
|
|
36
|
+
const { data: { result: abandonedCarts } } = await api.get(`carts?completed=false&available=true${filterCartsDate}&limit=100&sort=created_at`);
|
|
37
|
+
if (abandonedCarts.length && store) {
|
|
38
|
+
for (let i = 0; i < abandonedCarts.length; i++) {
|
|
39
|
+
const cart = abandonedCarts[i];
|
|
40
|
+
const customerId = cart.customers ? cart.customers[0] : null;
|
|
41
|
+
// logger.log(`>> Preparing to send email to: ${customerId}, about cart:${cart._id} `);
|
|
42
|
+
if (customerId) {
|
|
43
|
+
// eslint-disable-next-line no-await-in-loop
|
|
44
|
+
const customer = (await api.get(`customers/${customerId}`)).data;
|
|
45
|
+
if (cart && customer) {
|
|
46
|
+
// eslint-disable-next-line no-await-in-loop
|
|
47
|
+
const html = await transactionalMails.abandonedCart(store, customer, cart, lang);
|
|
48
|
+
const subject = triggerActions.abandonedCart.subject[lang];
|
|
49
|
+
const to = [{
|
|
50
|
+
name: customer.display_name,
|
|
51
|
+
email: customer.main_email,
|
|
52
|
+
}];
|
|
53
|
+
const { templateId } = appData.abandoned_car;
|
|
54
|
+
// const template = transactionalMails.template(abandonedCart)
|
|
55
|
+
// TODO: Or another APP? (template MJML)
|
|
56
|
+
if (html && subject && to) {
|
|
57
|
+
// eslint-disable-next-line no-await-in-loop
|
|
58
|
+
await email.send({
|
|
59
|
+
to,
|
|
60
|
+
subject,
|
|
61
|
+
html,
|
|
62
|
+
templateId,
|
|
63
|
+
templateData: {
|
|
64
|
+
store,
|
|
65
|
+
customer,
|
|
66
|
+
cart,
|
|
67
|
+
lang,
|
|
68
|
+
},
|
|
69
|
+
// template
|
|
70
|
+
});
|
|
71
|
+
// save last cart
|
|
72
|
+
getFirestore()
|
|
73
|
+
.doc('emails/lastCartSent')
|
|
74
|
+
.set({
|
|
75
|
+
time: cart.created_at,
|
|
76
|
+
}).catch(logger.error);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
} catch (err) {
|
|
83
|
+
logger.error('(App Emails) Error => ', err);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
// # sourceMappingURL=abandoned-carts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abandoned-carts.js","sourceRoot":"","sources":["../../src/functios-lib/abandoned-carts.ts"],"names":[],"mappings":"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"}
|