cloudcommerce 0.1.7 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/action.yml +4 -0
  3. package/ecomplus-stores/monocard/functions/core/package.json +1 -1
  4. package/ecomplus-stores/monocard/functions/events/package.json +2 -2
  5. package/ecomplus-stores/monocard/functions/modules/package.json +2 -2
  6. package/ecomplus-stores/monocard/functions/passport/package.json +2 -2
  7. package/ecomplus-stores/monocard/functions/ssr/package.json +6 -6
  8. package/ecomplus-stores/monocard/package.json +1 -1
  9. package/ecomplus-stores/tia-sonia/functions/core/package.json +1 -1
  10. package/ecomplus-stores/tia-sonia/functions/events/package.json +2 -2
  11. package/ecomplus-stores/tia-sonia/functions/modules/package.json +2 -2
  12. package/ecomplus-stores/tia-sonia/functions/passport/package.json +2 -2
  13. package/ecomplus-stores/tia-sonia/functions/ssr/package.json +8 -7
  14. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-acucares.webp +0 -0
  15. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-barras.webp +0 -0
  16. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-bebidas-em-po.webp +0 -0
  17. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-cookies.webp +0 -0
  18. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-granola-tia-sonia.webp +0 -0
  19. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-integrais.webp +0 -0
  20. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-naturais.webp +0 -0
  21. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-pastas-tia-sonia.webp +0 -0
  22. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-snacks.webp +0 -0
  23. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/categoria-ultrabar.webp +0 -0
  24. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/daniel-cady.webp +0 -0
  25. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/granola-tradicional-lata-verso.webp +0 -0
  26. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/granola-tradicional-lata.webp +0 -0
  27. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/machu-picchu-1500.jpg +0 -0
  28. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/selo-ibd-120-80.webp +0 -0
  29. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/selo-organico-120-80.webp +0 -0
  30. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/selo-usda-120-80.webp +0 -0
  31. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/selo-vegano-120-80.webp +0 -0
  32. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/tia-sonia-real.png +0 -0
  33. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/trustvox.png +0 -0
  34. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/AboutUs.astro +77 -0
  35. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/BrandTestimonials.vue +134 -0
  36. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/CategoriesGrid.vue +32 -0
  37. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/CategoriesSlider.vue +105 -7
  38. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/HeroBanner.vue +2 -2
  39. package/ecomplus-stores/tia-sonia/functions/ssr/src/layouts/Base.astro +5 -1
  40. package/ecomplus-stores/tia-sonia/functions/ssr/src/layouts/Pages.astro +1 -1
  41. package/ecomplus-stores/tia-sonia/functions/ssr/src/main/Home.astro +116 -25
  42. package/ecomplus-stores/tia-sonia/package.json +1 -1
  43. package/package.json +12 -12
  44. package/packages/api/package.json +1 -1
  45. package/packages/apps/correios/package.json +1 -1
  46. package/packages/apps/custom-payment/package.json +1 -1
  47. package/packages/apps/custom-shipping/package.json +1 -1
  48. package/packages/apps/datafrete/CHANGELOG.md +1 -0
  49. package/packages/apps/datafrete/README.md +1 -0
  50. package/packages/apps/datafrete/lib/datafrete-webhook.d.ts +4 -0
  51. package/packages/apps/datafrete/lib/datafrete-webhook.js +108 -0
  52. package/packages/apps/datafrete/lib/datafrete-webhook.js.map +1 -0
  53. package/packages/apps/datafrete/lib/datafrete.d.ts +2 -0
  54. package/packages/apps/datafrete/lib/datafrete.js +6 -0
  55. package/packages/apps/datafrete/lib/datafrete.js.map +1 -0
  56. package/packages/apps/datafrete/lib/index.d.ts +1 -0
  57. package/packages/apps/datafrete/lib/index.js +2 -0
  58. package/packages/apps/datafrete/lib/index.js.map +1 -0
  59. package/packages/apps/datafrete/lib-mjs/calculate-datafrete.mjs +277 -0
  60. package/packages/apps/datafrete/package.json +37 -0
  61. package/packages/apps/datafrete/src/datafrete-webhook.ts +131 -0
  62. package/packages/apps/datafrete/src/datafrete.ts +7 -0
  63. package/packages/apps/datafrete/src/index.ts +1 -0
  64. package/packages/apps/datafrete/tsconfig.json +6 -0
  65. package/packages/apps/datafrete/webhook.js +1 -0
  66. package/packages/apps/discounts/package.json +1 -1
  67. package/packages/apps/emails/package.json +1 -1
  68. package/packages/apps/fb-conversions/package.json +2 -2
  69. package/packages/apps/frenet/package.json +1 -1
  70. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/webhook.js +3 -2
  71. package/packages/apps/galaxpay/lib/functions-lib/galaxpay/webhook.js.map +1 -1
  72. package/packages/apps/galaxpay/package.json +1 -1
  73. package/packages/apps/galaxpay/src/functions-lib/galaxpay/webhook.ts +3 -2
  74. package/packages/apps/google-analytics/CHANGELOG.md +1 -0
  75. package/packages/apps/google-analytics/README.md +1 -0
  76. package/packages/apps/google-analytics/lib/google-analytics-events.js +113 -0
  77. package/packages/apps/google-analytics/lib/google-analytics-events.js.map +1 -0
  78. package/packages/apps/google-analytics/lib/index.js +2 -0
  79. package/packages/apps/google-analytics/lib/index.js.map +1 -0
  80. package/packages/apps/google-analytics/package.json +32 -0
  81. package/packages/apps/google-analytics/src/google-analytics-events.ts +151 -0
  82. package/packages/apps/google-analytics/src/index.ts +1 -0
  83. package/packages/apps/google-analytics/tsconfig.json +3 -0
  84. package/packages/apps/google-analytics/types.d.ts +43 -0
  85. package/packages/apps/infinitepay/package.json +1 -1
  86. package/packages/apps/jadlog/package.json +1 -1
  87. package/packages/apps/loyalty-points/package.json +1 -1
  88. package/packages/apps/mercadopago/lib/mp-create-transaction.js +1 -1
  89. package/packages/apps/mercadopago/lib/mp-create-transaction.js.map +1 -1
  90. package/packages/apps/mercadopago/lib/mp-webhook.js +2 -7
  91. package/packages/apps/mercadopago/lib/mp-webhook.js.map +1 -1
  92. package/packages/apps/mercadopago/package.json +1 -1
  93. package/packages/apps/mercadopago/src/mp-create-transaction.ts +1 -1
  94. package/packages/apps/mercadopago/src/mp-webhook.ts +3 -8
  95. package/packages/apps/pagarme/lib/pagarme-webhook.js +1 -1
  96. package/packages/apps/pagarme/lib/pagarme-webhook.js.map +1 -1
  97. package/packages/apps/pagarme/package.json +1 -1
  98. package/packages/apps/pagarme/src/pagarme-webhook.ts +1 -1
  99. package/packages/apps/pix/package.json +1 -1
  100. package/packages/apps/tiny-erp/package.json +1 -1
  101. package/packages/cli/package.json +1 -1
  102. package/packages/config/package.json +1 -1
  103. package/packages/emails/package.json +2 -2
  104. package/packages/events/lib/firebase.js +4 -0
  105. package/packages/events/lib/firebase.js.map +1 -1
  106. package/packages/events/package.json +3 -1
  107. package/packages/events/src/firebase.ts +4 -0
  108. package/packages/firebase/lib/config.d.ts +7 -0
  109. package/packages/firebase/lib/config.js +10 -0
  110. package/packages/firebase/lib/config.js.map +1 -1
  111. package/packages/firebase/package.json +1 -1
  112. package/packages/firebase/src/config.ts +11 -0
  113. package/packages/i18n/package.json +1 -1
  114. package/packages/modules/lib/firebase/call-app-module.js +5 -0
  115. package/packages/modules/lib/firebase/call-app-module.js.map +1 -1
  116. package/packages/modules/package.json +3 -2
  117. package/packages/modules/src/firebase/call-app-module.ts +5 -0
  118. package/packages/passport/package.json +1 -1
  119. package/packages/ssr/package.json +4 -3
  120. package/packages/storefront/.eslintrc.cjs +5 -1
  121. package/packages/storefront/astro.config.mjs +9 -24
  122. package/packages/storefront/client.d.ts +6 -8
  123. package/packages/storefront/dist/client/PitchBar.afe7ff5c.js +1 -0
  124. package/packages/storefront/dist/client/Prices.eaf8a32c.js +1 -0
  125. package/packages/storefront/dist/client/ProductCard.1106b153.js +1 -0
  126. package/packages/storefront/dist/client/assets/_...slug_.fea84512.css +1 -0
  127. package/packages/storefront/dist/client/assets/index.90df622b.css +1 -0
  128. package/packages/storefront/dist/client/chunks/Prices.vue_vue_type_script_setup_true_lang.781b6501.js +1 -0
  129. package/packages/storefront/dist/client/chunks/ecom-utils.63984324.js +1 -0
  130. package/packages/storefront/dist/client/chunks/runtime-core.esm-bundler.fa6cdb60.js +1 -0
  131. package/packages/storefront/dist/client/client.367a6497.js +1 -0
  132. package/packages/storefront/dist/client/hoisted.4671ed15.js +1 -0
  133. package/packages/storefront/dist/client/sw.js +1 -1
  134. package/packages/storefront/dist/client/workbox-e2ee76b5.js +1 -0
  135. package/packages/storefront/dist/server/entry.mjs +359 -537
  136. package/packages/storefront/package.json +10 -9
  137. package/packages/storefront/src/env.d.ts +9 -0
  138. package/packages/storefront/src/lib/assets/tooltip.css +6 -5
  139. package/packages/storefront/src/lib/components/Carousel.vue +259 -0
  140. package/packages/storefront/src/lib/components/CarouselControl.vue +29 -0
  141. package/packages/storefront/src/lib/components/LoginDrawer.vue +1 -1
  142. package/packages/storefront/src/lib/components/PitchBar.vue +44 -0
  143. package/packages/storefront/src/lib/components/Prices.vue +13 -17
  144. package/packages/storefront/src/lib/components/ProductCard.vue +1 -1
  145. package/packages/storefront/src/lib/components/_injection-keys.ts +9 -0
  146. package/packages/storefront/src/lib/components/globals/ALink.vue +26 -0
  147. package/packages/storefront/src/lib/layouts/BaseBody.astro +1 -5
  148. package/packages/storefront/src/lib/layouts/BaseHead.astro +7 -2
  149. package/packages/storefront/src/lib/layouts/PagesHeader.astro +38 -0
  150. package/packages/storefront/src/lib/pages/_vue.ts +3 -2
  151. package/packages/storefront/src/lib/ssr-context.ts +6 -0
  152. package/packages/storefront/src/vue-globals.d.ts +5 -5
  153. package/packages/storefront/tailwind.config.cjs +12 -6
  154. package/packages/storefront/tsconfig.json +2 -2
  155. package/packages/storefront/uno.config.cjs +4 -4
  156. package/packages/types/package.json +1 -1
  157. package/packages/storefront/dist/client/HeaderButtons.6f668467.js +0 -1
  158. package/packages/storefront/dist/client/Prices.2ada125b.js +0 -1
  159. package/packages/storefront/dist/client/ProductCard.e5bdea60.js +0 -1
  160. package/packages/storefront/dist/client/assets/_...slug_.81b9a00c.css +0 -1
  161. package/packages/storefront/dist/client/assets/index.e6a09532.css +0 -1
  162. package/packages/storefront/dist/client/chunks/HeaderButtons.cfa275db.js +0 -1
  163. package/packages/storefront/dist/client/chunks/LoginForm.1ba3ad0d.js +0 -1441
  164. package/packages/storefront/dist/client/chunks/Prices.vue_vue_type_script_setup_true_lang.9a6ab0d6.js +0 -1
  165. package/packages/storefront/dist/client/chunks/_plugin-vue_export-helper.0d33cd48.js +0 -1
  166. package/packages/storefront/dist/client/chunks/ecom-utils.b0a26608.js +0 -1
  167. package/packages/storefront/dist/client/chunks/preload-helper.1de719f8.js +0 -1
  168. package/packages/storefront/dist/client/chunks/price.ecf7fed4.js +0 -1
  169. package/packages/storefront/dist/client/chunks/runtime-core.esm-bundler.45ba83fa.js +0 -1
  170. package/packages/storefront/dist/client/client.4d2b3a73.js +0 -1
  171. package/packages/storefront/dist/client/hoisted.f6ee2883.js +0 -1
  172. package/packages/storefront/dist/client/page.5a6f3db5.js +0 -1
  173. package/packages/storefront/dist/client/workbox-abdc68aa.js +0 -1
  174. package/packages/storefront/dist/client/~partytown/partytown-atomics.js +0 -2
  175. package/packages/storefront/dist/client/~partytown/partytown-media.js +0 -2
  176. package/packages/storefront/dist/client/~partytown/partytown-sw.js +0 -2
  177. package/packages/storefront/dist/client/~partytown/partytown.js +0 -2
@@ -26,7 +26,7 @@ const isPostLinkHovered = useElementHover(postLink);
26
26
  </script>
27
27
 
28
28
  <template>
29
- <div class="relative">
29
+ <div class="HeroBanner relative">
30
30
  <slot />
31
31
  <Popover
32
32
  v-for="{ product, position } in pointers"
@@ -94,7 +94,7 @@ const isPostLinkHovered = useElementHover(postLink);
94
94
  >
95
95
  <article class="prose">
96
96
  <h3
97
- class="font-brand mb-1 bg-secondary/90 rounded-sm text-white
97
+ class="font-brand font-normal mb-1 bg-secondary/90 rounded-sm text-white
98
98
  inline-block px-3 py-2"
99
99
  style="--un-prose-links: var(--c-primary)"
100
100
  v-html="blogPost.title"
@@ -40,6 +40,10 @@ body {
40
40
  background-color: var(--c-brand-light-blue);
41
41
  }
42
42
  a, button {
43
- transition: color var(--transition), background-color var(--transition);
43
+ transition: color var(--transition), background-color var(--transition),
44
+ opacity var(--transition);
45
+ }
46
+ .prose {
47
+ max-width: 80ch;
44
48
  }
45
49
  </style>
@@ -16,7 +16,7 @@ const { pageContext, title } = Astro.props as Props;
16
16
  <slot name="header">
17
17
  <Header pageContext={pageContext} />
18
18
  </slot>
19
- <main class="container mx-auto">
19
+ <main class="container mx-auto shadow-md">
20
20
  <slot />
21
21
  </main>
22
22
  <Image
@@ -1,14 +1,22 @@
1
1
  ---
2
2
  import type { PageContext } from '@@sf/ssr-context';
3
+ import { existsSync } from 'node:fs';
4
+ import { join as joinPath } from 'node:path';
3
5
  import api from '@cloudcommerce/api';
4
- import { Image } from '@astrojs/image/components';
6
+ import { Picture } from '@astrojs/image/components';
5
7
  import PitchBar from '@@components/PitchBar.vue';
6
8
  import HeroBanner from '@@components/HeroBanner.vue';
9
+ import CategoriesGrid from '@@components/CategoriesGrid.vue';
10
+ import CategoriesSlider from '@@components/CategoriesSlider.vue';
11
+ import BrandTestimonials from '@@components/BrandTestimonials.vue';
12
+ import AboutUs from '@@components/AboutUs.astro';
7
13
 
8
14
  export interface Props {
9
15
  pageContext: PageContext;
10
16
  }
11
17
 
18
+ const { pageContext: { apiState } } = Astro.props as Props;
19
+
12
20
  const products = (await api.get('products?fields=name,slug,sku,price,base_price'))
13
21
  .data.result;
14
22
  const heroBanners = [{
@@ -41,41 +49,124 @@ const heroBanners = [{
41
49
  position: { x: 74, y: 46 },
42
50
  }],
43
51
  }];
44
- const { pageContext: { apiState } } = Astro.props as Props;
52
+
53
+ const categoriesOnGrid = apiState.categories.filter(({ parent }) => {
54
+ return parent?.slug?.includes('estilos');
55
+ });
56
+ const mainCategories = apiState.categories
57
+ .filter(({ slug, parent }) => {
58
+ return slug && !parent && !/(todos|kits|parceir|estilos)/.test(slug);
59
+ })
60
+ .map((category) => {
61
+ const localIconSrc = `/img/uploads/categoria-${category.slug}.webp`;
62
+ if (existsSync(joinPath(process.env.STOREFRONT_BASE_DIR, 'public', localIconSrc))) {
63
+ if (!category.icon) {
64
+ category.icon = { url: localIconSrc };
65
+ } else {
66
+ category.icon.url = localIconSrc;
67
+ }
68
+ }
69
+ return category;
70
+ });
45
71
  ---
46
72
 
47
- <section class="relative">
73
+ <section id="hero" class="relative">
48
74
  <PitchBar class="absolute top-0 left-0 z-10" client:load />
49
75
  <div class="bg-white grid grid-cols-2">
50
- {heroBanners.map(({ src, alt, pointers, blogPost }) => (
76
+ {heroBanners.map(({ src, alt, pointers, blogPost }, i) => (
51
77
  <HeroBanner client:visible {pointers} {blogPost}>
52
- <Image
78
+ <Picture
53
79
  src={src}
54
80
  alt={alt}
55
- format={'webp'}
81
+ widths={[600, 1080]}
82
+ sizes="(max-width: 599.98px) 600px, 1080px"
83
+ aspectRatio={1}
56
84
  quality={75}
57
- width={1080}
58
- height={1080}
85
+ formats={['webp']}
86
+ fetchpriority={i === 0 ? 'high' : 'auto'}
59
87
  />
60
88
  </HeroBanner>
61
89
  ))}
62
90
  </div>
63
91
  </section>
64
- <section class="bg-base-100 py-9">
65
- <ul role="list" class="mt-3 fs-20">
66
- {apiState.categories?.map((category) => <li>
67
- <a href={`/${category.slug}`}>{category.name} ({category.icon?.url})</a>
68
- </li>)}
69
- </ul>
92
+ <section id="categories" class="bg-base-50 p-7">
93
+ <h4 class="text-center uppercase font-bold text-base text-primary-800 mb-3">
94
+ Para seu estilo de alimentação
95
+ </h4>
96
+ <CategoriesGrid categories={categoriesOnGrid} />
97
+ <CategoriesSlider categories={mainCategories} client:visible />
98
+ </section>
99
+ <section
100
+ id="product"
101
+ style="background-color: var(--c-brand-light-blue);"
102
+ class="py-8 lg:py-14"
103
+ >
104
+ <article class="grid md:grid-cols-2 gap-4 px-8 py-4">
105
+ <Picture
106
+ src="/img/uploads/granola-tradicional-lata.webp"
107
+ alt="Granola Tradicional Tia Sônia - Lata edição especial"
108
+ widths={[600, 1000]}
109
+ sizes="(max-width: 599.98px) 600px, 1000px"
110
+ aspectRatio={1}
111
+ quality={75}
112
+ formats={['webp']}
113
+ />
114
+ <div class="md:pt-5 lg:pt-8 prose">
115
+ <div class="flex">
116
+ <img
117
+ src="/img/uploads/selo-organico-120-80.webp"
118
+ width="80"
119
+ height="53.333"
120
+ loading="lazy"
121
+ class="mr-4"
122
+ />
123
+ <img
124
+ src="/img/uploads/selo-vegano-120-80.webp"
125
+ width="80"
126
+ height="53.333"
127
+ loading="lazy"
128
+ />
129
+ <img
130
+ src="/img/uploads/selo-usda-120-80.webp"
131
+ width="80"
132
+ height="53.333"
133
+ loading="lazy"
134
+ />
135
+ </div>
136
+ <h3 class="font-brand font-normal text-2xl md:text-4xl text-base-100 mb-8">
137
+ Granola Tradicional
138
+ </h3>
139
+ <p class="grid grid-cols-2 gap-3 whitespace-nowrap
140
+ uppercase font-bold text-sm text-base-300">
141
+ <span><i class="i-square-rounded-check"></i> Saúde e muito sabor</span>
142
+ <span><i class="i-health-recognition"></i> Produto vegano</span>
143
+ <span><i class="i-leaf"></i> Cultivado organicamente</span>
144
+ <span><i class="i-checklist"></i> Ingredientes selecionados</span>
145
+ </p>
146
+ <ul class="grid grid-cols-2 gap-x-3 list-none p-0 text-white">
147
+ <li>Flocos de aveia</li>
148
+ <li>Rapadura</li>
149
+ <li>Coco</li>
150
+ <li>Tapioca</li>
151
+ <li>Uva-passa</li>
152
+ <li>Castanha de caju</li>
153
+ <li>Gérmen de trigo</li>
154
+ <li>Melaço de cana</li>
155
+ <li>Manteiga</li>
156
+ <li>Gergelim</li>
157
+ <li>Sal do Himalaia</li>
158
+ </ul>
159
+ <button class="bg-primary text-secondary hover:secondary
160
+ rounded uppercase font-bold text-lg px-6 py-3 mt-4">
161
+ <i class="i-shopping-cart-plus mr-2"></i>
162
+ Comprar
163
+ </button>
164
+ </div>
165
+ </article>
166
+ </section>
167
+ <section id="testimonials" class="bg-white py-9">
168
+ <BrandTestimonials client:visible />
169
+ </section>
170
+ <section id="about">
171
+ <AboutUs />
70
172
  </section>
71
- <article class="bg-white p-6">
72
- <h1 class="font-brand">
73
- Welcome to
74
- <span class="text-secondary font-sans font-bold">FEITO NA BAHIA</span>
75
- </h1>
76
- <ul role="list" class="mt-3 fs-20">
77
- {products.map((product) => <li>
78
- <a href={`/${product.slug}`}>{product.sku}</a>
79
- </li>)}
80
- </ul>
81
- </article>
@@ -23,6 +23,6 @@
23
23
  "url": "https://github.com/ecomplus/cloud-commerce/issues"
24
24
  },
25
25
  "dependencies": {
26
- "@cloudcommerce/cli": "^0.1.6"
26
+ "@cloudcommerce/cli": "^0.1.7"
27
27
  }
28
28
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cloudcommerce",
3
3
  "type": "module",
4
- "version": "0.1.7",
4
+ "version": "0.2.1",
5
5
  "description": "Open fair-code headless commerce platform: API-first, microservices based, event driven and cloud native",
6
6
  "main": "packages/api/lib/index.js",
7
7
  "author": "E-Com Club Softwares para E-commerce <ti@e-com.club>",
@@ -16,25 +16,25 @@
16
16
  }
17
17
  },
18
18
  "devDependencies": {
19
- "@commitlint/cli": "^17.3.0",
20
- "@commitlint/config-conventional": "^17.3.0",
21
- "@commitlint/rules": "^17.3.0",
19
+ "@commitlint/cli": "^17.4.2",
20
+ "@commitlint/config-conventional": "^17.4.2",
21
+ "@commitlint/rules": "^17.4.2",
22
22
  "@types/node": "^18.11.18",
23
- "@typescript-eslint/eslint-plugin": "^5.47.1",
24
- "@typescript-eslint/parser": "^5.47.1",
25
- "esbuild": "^0.16.12",
26
- "eslint": "^8.31.0",
23
+ "@typescript-eslint/eslint-plugin": "^5.48.1",
24
+ "@typescript-eslint/parser": "^5.48.1",
25
+ "esbuild": "^0.17.0",
26
+ "eslint": "^8.32.0",
27
27
  "eslint-config-airbnb-base": "^15.0.0",
28
- "eslint-plugin-import": "^2.26.0",
29
- "eslint-plugin-vue": "^9.8.0",
30
- "husky": "^8.0.2",
28
+ "eslint-plugin-import": "^2.27.4",
29
+ "eslint-plugin-vue": "^9.9.0",
30
+ "husky": "^8.0.3",
31
31
  "standard-version": "^9.5.0",
32
32
  "ts-node": "^10.9.1",
33
33
  "turbo": "^1.6.3",
34
34
  "typescript": "^4.9.4",
35
35
  "uglify-js": "^3.17.4",
36
36
  "vite": "^3.2.5",
37
- "vitest": "^0.26.3",
37
+ "vitest": "^0.27.1",
38
38
  "zx": "^7.1.1"
39
39
  },
40
40
  "scripts": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/api",
3
3
  "type": "module",
4
- "version": "0.1.7",
4
+ "version": "0.2.1",
5
5
  "description": "E-Com Plus Cloud Commerce APIs client/adapter",
6
6
  "main": "lib/api.js",
7
7
  "types": "lib/api.d.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-correios",
3
3
  "type": "module",
4
- "version": "0.1.7",
4
+ "version": "0.2.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for Correios shipping calculation",
6
6
  "main": "lib/correios.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-custom-payment",
3
3
  "type": "module",
4
- "version": "0.1.7",
4
+ "version": "0.2.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for simple custom payment methods",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-custom-shipping",
3
3
  "type": "module",
4
- "version": "0.1.7",
4
+ "version": "0.2.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for custom shipping methods",
6
6
  "main": "lib/custom-shipping.js",
7
7
  "repository": {
@@ -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-datafrete`
@@ -0,0 +1,4 @@
1
+ import functions from 'firebase-functions/v1';
2
+ export declare const datafrete: {
3
+ webhook: functions.HttpsFunction;
4
+ };
@@ -0,0 +1,108 @@
1
+ import api from '@cloudcommerce/api';
2
+ import config from '@cloudcommerce/firebase/lib/config';
3
+ import getEnv from '@cloudcommerce/firebase/lib/env';
4
+ import functions from 'firebase-functions/v1';
5
+ import logger from 'firebase-functions/logger';
6
+
7
+ const handleWebhook = async (req, res) => {
8
+ const operatorToken = process.env.DATAFRETE_OPERATOR_TOKEN || getEnv().apiAuth.apiKey;
9
+ if (operatorToken !== req.get('x-operator-token')) {
10
+ return res.sendStatus(401);
11
+ }
12
+ const {
13
+ order_update: {
14
+ number, fulfillment, invoices, tracking_codes: trackingCodes,
15
+ },
16
+ } = req.body;
17
+ if (!number || !fulfillment || !fulfillment.status) {
18
+ return res.sendStatus(400);
19
+ }
20
+ logger.log('> Webhook #', number);
21
+ const order = (await api.get(`orders?number=${number}&fields=_id,fulfillment_status,shipping_lines&limit=1`)).data.result[0];
22
+ if (!order) {
23
+ return res.sendStatus(404);
24
+ }
25
+ let shippingLineId = fulfillment.shipping_line_id;
26
+ let shippingLine;
27
+ if (order.shipping_lines) {
28
+ if (!shippingLineId) {
29
+ for (let i = 0; i < order.shipping_lines.length; i++) {
30
+ if (order.shipping_lines[i].flags && order.shipping_lines[i]?.flags?.includes('datafrete-ws')) {
31
+ shippingLine = order.shipping_lines[i];
32
+ shippingLineId = shippingLine && shippingLine._id;
33
+ break;
34
+ }
35
+ }
36
+ } else {
37
+ shippingLine = order.shipping_lines.find(({ _id }) => _id === shippingLineId);
38
+ }
39
+ if (!shippingLine && order.shipping_lines) {
40
+ [shippingLine] = order.shipping_lines;
41
+ }
42
+ }
43
+ const isShippingLineUpdate = shippingLine
44
+ && ((invoices && invoices.length) || (trackingCodes && trackingCodes.length));
45
+ if (order.fulfillment_status && order.fulfillment_status.current === fulfillment.status) {
46
+ if (!isShippingLineUpdate) {
47
+ logger.log('>>(App datafrete) Nothing to change on shipping line:', shippingLineId, order._id);
48
+ return res.sendStatus(304);
49
+ }
50
+ } else {
51
+ fulfillment.flags = ['datafrete'];
52
+ try {
53
+ await api.post(`orders/${order._id}/fulfillments`, fulfillment);
54
+ logger.log('>(App datafrete) Fulfillment inserted:', fulfillment.status);
55
+ if (!isShippingLineUpdate) {
56
+ return res.sendStatus(200);
57
+ }
58
+ } catch (error) {
59
+ logger.error('>(App datafrete) => ', error);
60
+ if (error.response && error.response.status) {
61
+ return res.status(error.response.status).send(error.response.data);
62
+ }
63
+ return res.sendStatus(500);
64
+ }
65
+ }
66
+ if (isShippingLineUpdate) {
67
+ logger.log('>(App datafrete) Updating shipping line:', shippingLineId, order._id);
68
+ try {
69
+ await api.patch(`orders/${order._id}/shipping_lines/${(shippingLineId || '0')}`, { invoices, tracking_codes: trackingCodes });
70
+ logger.log('>(App datafrete) Shipping line invoices/tracking updated');
71
+ res.sendStatus(200);
72
+ } catch (error) {
73
+ if (error.response) {
74
+ let { message } = error;
75
+ if (error.response.data) {
76
+ if (typeof error.response.data === 'object') {
77
+ message += `\n${JSON.stringify(error.response.data)}`;
78
+ } else {
79
+ message += `\n${error.response.data}`;
80
+ }
81
+ }
82
+ if (error.config && error.config.url) {
83
+ message += `\n${error.config.url}`;
84
+ }
85
+ logger.error('>(App datafrete) =>', new Error(message));
86
+ return res.status(error.response.status || 500)
87
+ .send(error.response.data);
88
+ }
89
+ logger.error('>(App datafrete) => ', error);
90
+ return res.sendStatus(500);
91
+ }
92
+ }
93
+ return res.sendStatus(500);
94
+ };
95
+
96
+ export const datafrete = {
97
+ webhook: functions
98
+ .region(config.get().httpsFunctionOptions.region)
99
+ .https.onRequest(async (req, res) => {
100
+ const { method } = req;
101
+ if (method === 'POST') {
102
+ handleWebhook(req, res);
103
+ } else {
104
+ res.sendStatus(405);
105
+ }
106
+ }),
107
+ };
108
+ // # sourceMappingURL=datafrete-webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datafrete-webhook.js","sourceRoot":"","sources":["../src/datafrete-webhook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AppModuleBody } from '@cloudcommerce/types';
2
+ export declare const calculateShipping: (modBody: AppModuleBody) => Promise<any>;
@@ -0,0 +1,6 @@
1
+ import handleCalculateShipping from '../lib-mjs/calculate-datafrete.mjs';
2
+
3
+ export const calculateShipping = async (modBody) => {
4
+ return handleCalculateShipping(modBody);
5
+ };
6
+ // # sourceMappingURL=datafrete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datafrete.js","sourceRoot":"","sources":["../src/datafrete.ts"],"names":[],"mappings":"AAEA,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AAEzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAsB,EAAE,EAAE;IAChE,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './datafrete';
@@ -0,0 +1,2 @@
1
+ export * from './datafrete.js';
2
+ // # sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}