cloudcommerce 0.31.2 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/action.yml +8 -0
  3. package/ecomplus-stores/barra-doce/functions/many/package.json +3 -3
  4. package/ecomplus-stores/barra-doce/functions/ssr/package.json +6 -6
  5. package/ecomplus-stores/barra-doce/functions/with-apps/package.json +3 -3
  6. package/ecomplus-stores/barra-doce/package.json +2 -2
  7. package/ecomplus-stores/monocard/functions/many/package.json +3 -3
  8. package/ecomplus-stores/monocard/functions/ssr/package.json +6 -6
  9. package/ecomplus-stores/monocard/functions/with-apps/package.json +3 -3
  10. package/ecomplus-stores/monocard/package.json +2 -2
  11. package/package.json +4 -4
  12. package/packages/api/package.json +1 -1
  13. package/packages/apps/affilate-program/package.json +2 -2
  14. package/packages/apps/correios/package.json +3 -3
  15. package/packages/apps/custom-payment/package.json +1 -1
  16. package/packages/apps/custom-shipping/package.json +1 -1
  17. package/packages/apps/datafrete/package.json +2 -2
  18. package/packages/apps/discounts/package.json +1 -1
  19. package/packages/apps/emails/package.json +2 -2
  20. package/packages/apps/fb-conversions/package.json +2 -2
  21. package/packages/apps/flash-courier/package.json +2 -2
  22. package/packages/apps/frenet/package.json +2 -2
  23. package/packages/apps/galaxpay/package.json +2 -2
  24. package/packages/apps/google-analytics/package.json +2 -2
  25. package/packages/apps/jadlog/package.json +1 -1
  26. package/packages/apps/loyalty-points/package.json +1 -1
  27. package/packages/apps/mandae/package.json +3 -3
  28. package/packages/apps/melhor-envio/package.json +2 -2
  29. package/packages/apps/mercadopago/package.json +2 -2
  30. package/packages/apps/pagarme/package.json +2 -2
  31. package/packages/apps/pagarme-v5/CHANGELOG.md +1 -0
  32. package/packages/apps/pagarme-v5/README.md +1 -0
  33. package/packages/apps/pagarme-v5/assets/onload-expression.js +38 -0
  34. package/packages/apps/pagarme-v5/assets/onload-expression.min.js +1 -0
  35. package/packages/apps/pagarme-v5/events.js +1 -0
  36. package/packages/apps/pagarme-v5/lib/index.d.ts +1 -0
  37. package/packages/apps/pagarme-v5/lib/index.js +2 -0
  38. package/packages/apps/pagarme-v5/lib/index.js.map +1 -0
  39. package/packages/apps/pagarme-v5/lib/pagarme-v5-events.d.ts +6 -0
  40. package/packages/apps/pagarme-v5/lib/pagarme-v5-events.js +21 -0
  41. package/packages/apps/pagarme-v5/lib/pagarme-v5-events.js.map +1 -0
  42. package/packages/apps/pagarme-v5/lib/pagarme-v5.d.ts +4 -0
  43. package/packages/apps/pagarme-v5/lib/pagarme-v5.js +12 -0
  44. package/packages/apps/pagarme-v5/lib/pagarme-v5.js.map +1 -0
  45. package/packages/apps/pagarme-v5/lib-mjs/create-pagarme5-transaction.mjs +208 -0
  46. package/packages/apps/pagarme-v5/lib-mjs/events-to-pagarme5.mjs +209 -0
  47. package/packages/apps/pagarme-v5/lib-mjs/functions-lib/api-utils.mjs +220 -0
  48. package/packages/apps/pagarme-v5/lib-mjs/functions-lib/firestore-utils.mjs +24 -0
  49. package/packages/apps/pagarme-v5/lib-mjs/functions-lib/pagarme/create-axios.mjs +12 -0
  50. package/packages/apps/pagarme-v5/lib-mjs/functions-lib/pagarme/handle-plans.mjs +69 -0
  51. package/packages/apps/pagarme-v5/lib-mjs/functions-lib/pagarme/parses-utils.mjs +61 -0
  52. package/packages/apps/pagarme-v5/lib-mjs/functions-lib/pagarme/payment-subscription.mjs +244 -0
  53. package/packages/apps/pagarme-v5/lib-mjs/functions-lib/payments/add-installments.mjs +45 -0
  54. package/packages/apps/pagarme-v5/lib-mjs/list-pagarme5-payments.mjs +218 -0
  55. package/packages/apps/pagarme-v5/lib-mjs/pagarme5-webhooks.mjs +343 -0
  56. package/packages/apps/pagarme-v5/package.json +38 -0
  57. package/packages/apps/pagarme-v5/scripts/build.sh +4 -0
  58. package/packages/apps/pagarme-v5/scripts/tests.sh +9 -0
  59. package/packages/apps/pagarme-v5/src/index.ts +1 -0
  60. package/packages/apps/pagarme-v5/src/pagarme-v5-events.ts +27 -0
  61. package/packages/apps/pagarme-v5/src/pagarme-v5.ts +12 -0
  62. package/packages/apps/pagarme-v5/tests/1-list-payments.test.mjs +37 -0
  63. package/packages/apps/pagarme-v5/tests/2-create-transaction.test.mjs +56 -0
  64. package/packages/apps/pagarme-v5/tsconfig.json +6 -0
  65. package/packages/apps/paghiper/package.json +2 -2
  66. package/packages/apps/pix/package.json +2 -2
  67. package/packages/apps/tiny-erp/package.json +2 -2
  68. package/packages/apps/webhooks/package.json +2 -2
  69. package/packages/cli/config/firebase.json +0 -25
  70. package/packages/cli/package.json +1 -1
  71. package/packages/config/lib/config.js +1 -1
  72. package/packages/config/lib/config.js.map +1 -1
  73. package/packages/config/package.json +1 -1
  74. package/packages/config/src/config.ts +1 -1
  75. package/packages/emails/package.json +1 -1
  76. package/packages/eslint/package.json +2 -2
  77. package/packages/events/lib/firebase.js +2 -0
  78. package/packages/events/lib/firebase.js.map +1 -1
  79. package/packages/events/package.json +3 -2
  80. package/packages/events/src/firebase.ts +2 -0
  81. package/packages/feeds/package.json +1 -1
  82. package/packages/firebase/lib/config.d.ts +4 -0
  83. package/packages/firebase/lib/config.js +9 -0
  84. package/packages/firebase/lib/config.js.map +1 -1
  85. package/packages/firebase/package.json +2 -2
  86. package/packages/firebase/src/config.ts +10 -0
  87. package/packages/i18n/package.json +1 -1
  88. package/packages/modules/lib/firebase/call-app-module.js +12 -0
  89. package/packages/modules/lib/firebase/call-app-module.js.map +1 -1
  90. package/packages/modules/lib/firebase/handle-module.js +2 -1
  91. package/packages/modules/lib/firebase/handle-module.js.map +1 -1
  92. package/packages/modules/lib/firebase.js +10 -0
  93. package/packages/modules/lib/firebase.js.map +1 -1
  94. package/packages/modules/package.json +3 -2
  95. package/packages/modules/src/firebase/call-app-module.ts +12 -0
  96. package/packages/modules/src/firebase/handle-module.ts +5 -1
  97. package/packages/modules/src/firebase.ts +13 -0
  98. package/packages/passport/package.json +2 -2
  99. package/packages/ssr/cloudflare/swr-worker.js +1 -1
  100. package/packages/ssr/lib/analytics-events.js +23 -0
  101. package/packages/ssr/lib/analytics-events.js.map +1 -0
  102. package/packages/ssr/lib/firebase/serve-storefront.js +27 -0
  103. package/packages/ssr/lib/firebase/serve-storefront.js.map +1 -1
  104. package/packages/ssr/package.json +5 -4
  105. package/packages/ssr/src/analytics-events.ts +23 -0
  106. package/packages/ssr/src/cloudflare/swr-worker.ts +1 -1
  107. package/packages/ssr/src/firebase/serve-storefront.ts +28 -0
  108. package/packages/storefront/package.json +5 -5
  109. package/packages/storefront/src/lib/scripts/vbeta-app.ts +14 -4
  110. package/packages/storefront/src/lib/state/customer-session.ts +2 -6
  111. package/packages/storefront/src/lib/state/modules-info.ts +2 -1
  112. package/packages/test-base/package.json +1 -1
  113. package/packages/types/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ import { EventEmitter } from 'node:events';
2
+
3
+ const analyticsEmitter = new EventEmitter();
4
+
5
+ const sendAnalyticsEvents = ({ url, events }) => {
6
+ analyticsEmitter.emit('send', { url, events });
7
+ /* @TODO:
8
+ Parse received events in GA4 (pageview and Measure ecommerce)
9
+ format and dispatch to GA Measurement API, Facebook Conversions API and
10
+ TikTok Analytics API.
11
+ - Get credentials from env vars, e.g. `process.env.GA_MEASUREMENT_ID`;
12
+ - May receive multiple events in a unique request, and dispatch multiple
13
+ events in one POST if possible;
14
+ - Consider Google Click ID (`?gclid=`), Facebook Click ID (`?fbclid=`)
15
+ and maybe TikTok one from `url` query string;
16
+ - Send the events in parallel for all APIs with `Promise.all(sendingEvents)`;
17
+ - No CORS!
18
+ */
19
+ };
20
+
21
+ export default sendAnalyticsEvents;
22
+
23
+ export { sendAnalyticsEvents, analyticsEmitter };
@@ -107,7 +107,7 @@ const swr = async (_rewritedReq: Request, env: Env, ctx: ExecutionContext) => {
107
107
  if (
108
108
  pathname === '/_image'
109
109
  || pathname.startsWith('/~')
110
- || pathname.startsWith('/api/')
110
+ || pathname.startsWith('/_api/')
111
111
  || pathname.startsWith('/_feeds/')
112
112
  ) {
113
113
  return bypassEarly();
@@ -4,6 +4,7 @@ import { join as joinPath } from 'node:path';
4
4
  import { readFile } from 'node:fs/promises';
5
5
  import logger from 'firebase-functions/logger';
6
6
  import config from '@cloudcommerce/firebase/lib/config';
7
+ import { sendAnalyticsEvents } from '../analytics-events';
7
8
 
8
9
  declare global {
9
10
  // eslint-disable-next-line
@@ -192,6 +193,33 @@ export default async (req: Request, res: Response) => {
192
193
  return;
193
194
  }
194
195
 
196
+ if (req.path === '/_analytics') {
197
+ // @TODO: Must check to match GA4 events schema
198
+ const events: Array<{ name: string, [k: string]: any }> = [];
199
+ const { url } = req.query;
200
+ if (typeof url !== 'string' || !url) {
201
+ res.status(400);
202
+ res.send('`?url=` param must be set with original pageview URL');
203
+ return;
204
+ }
205
+ const { ev } = req.query;
206
+ if (Array.isArray(ev)) {
207
+ ev.forEach((name) => {
208
+ if (typeof name === 'string' && name) events.push({ name });
209
+ });
210
+ } else if (Array.isArray(req.body.events)) {
211
+ req.body.events.forEach((event) => events.push(event));
212
+ }
213
+ if (!events.length) {
214
+ res.status(400);
215
+ res.send('Any event from `?ev=` URL param or `{ events }` array body field');
216
+ return;
217
+ }
218
+ sendAnalyticsEvents({ url, events });
219
+ res.sendStatus(204);
220
+ return;
221
+ }
222
+
195
223
  res.set('X-XSS-Protection', '1; mode=block');
196
224
  const url = req.path.replace(/\.html$/, '');
197
225
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/storefront",
3
3
  "type": "module",
4
- "version": "0.31.2",
4
+ "version": "0.32.0",
5
5
  "description": "E-Com Plus Cloud Commerce storefront with Astro",
6
6
  "bin": {
7
7
  "storefront": "./scripts/build-prod.sh"
@@ -53,15 +53,15 @@
53
53
  "semver": "^7.5.4",
54
54
  "sharp": "^0.32.6",
55
55
  "tailwindcss": "^3.3.5",
56
- "unocss": "^0.57.1",
56
+ "unocss": "^0.57.2",
57
57
  "unplugin-auto-import": "^0.16.7",
58
58
  "vite": "^4.5.0",
59
- "vite-plugin-pwa": "^0.16.6",
60
- "vue": "^3.3.7"
59
+ "vite-plugin-pwa": "^0.16.7",
60
+ "vue": "^3.3.8"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@cloudcommerce/eslint": "workspace:*",
64
64
  "@cloudcommerce/types": "workspace:*",
65
- "@vue/runtime-core": "^3.3.7"
65
+ "@vue/runtime-core": "^3.3.8"
66
66
  }
67
67
  }
@@ -1,6 +1,5 @@
1
1
  import { watch } from 'vue';
2
2
  import {
3
- GET_PASSPORT_API_URI,
4
3
  session,
5
4
  isAuthenticated,
6
5
  customer,
@@ -8,12 +7,23 @@ import {
8
7
 
9
8
  // https://github.com/ecomplus/storefront/tree/master/%40ecomplus/storefront-app compat
10
9
  if (!import.meta.env.SSR) {
10
+ const { domain } = globalThis.$storefront.settings;
11
+ const apiBaseUri = `https://ecomplus.io/v2/:${window.ECOM_STORE_ID}/`;
12
+ // @ts-ignore
13
+ window.ECOMCLIENT_API_STORE = apiBaseUri;
14
+ // @ts-ignore
15
+ window.ECOMCLIENT_API_STORE_CACHE = apiBaseUri;
16
+ // @ts-ignore
17
+ window.ECOMCLIENT_API_PASSPORT = apiBaseUri;
18
+ // @ts-ignore
19
+ window.ECOMCLIENT_API_SEARCH = `${apiBaseUri}/search/_els/`;
20
+ // @ts-ignore
21
+ window.ECOMCLIENT_API_MODULES = `https://${domain}/_api/modules/`;
22
+
11
23
  const onLoad = () => {
12
24
  const { ecomPassport } = window as Record<string, any>;
13
25
  watch(isAuthenticated, async () => {
14
26
  if (isAuthenticated.value) {
15
- // @ts-ignore
16
- window.ECOMCLIENT_API_PASSPORT = GET_PASSPORT_API_URI();
17
27
  ecomPassport.setSession({
18
28
  auth: {
19
29
  ...session.auth,
@@ -38,7 +48,7 @@ if (!import.meta.env.SSR) {
38
48
  };
39
49
 
40
50
  const appScript = document.createElement('script');
41
- appScript.src = 'https://cdn.jsdelivr.net/npm/@ecomplus/storefront-app@2.0.0-beta.186/dist/lib/js/app.js';
51
+ appScript.src = 'https://cdn.jsdelivr.net/npm/@ecomplus/storefront-app@2.0.0-beta.187/dist/lib/js/app.js';
42
52
  appScript.onload = onLoad;
43
53
  document.body.appendChild(appScript);
44
54
  }
@@ -8,11 +8,6 @@ import useStorage from '@@sf/state/use-storage';
8
8
 
9
9
  export const EMAIL_STORAGE_KEY = 'emailForSignIn';
10
10
 
11
- export const GET_PASSPORT_API_URI = () => {
12
- const { domain } = globalThis.$storefront.settings;
13
- return `https://${domain}/_api/passport/`;
14
- };
15
-
16
11
  const storageKey = 'ecomSession';
17
12
  const emptySession = {
18
13
  customer: {
@@ -68,8 +63,9 @@ const authenticate = async () => {
68
63
  throwNoAuth('Can\'t get Firebase user ID token');
69
64
  return;
70
65
  }
66
+ const { domain } = globalThis.$storefront.settings;
71
67
  try {
72
- const resAuth = await fetch(`${GET_PASSPORT_API_URI()}token`, {
68
+ const resAuth = await fetch(`https://${domain}/_api/passport/token`, {
73
69
  method: 'POST',
74
70
  headers: {
75
71
  'Content-Type': 'application/json',
@@ -67,7 +67,8 @@ if (!import.meta.env.SSR) {
67
67
  }
68
68
 
69
69
  modulesToFetch.forEach(({ modName, reqOptions }) => {
70
- afetch(`/_api/modules/${modName}`, reqOptions)
70
+ const { domain } = globalThis.$storefront.settings;
71
+ afetch(`https://${domain}/_api/modules/${modName}`, reqOptions)
71
72
  .then(async (response) => {
72
73
  if (response.ok) {
73
74
  const modInfo = {};
@@ -2,7 +2,7 @@
2
2
  "name": "@cloudcommerce/test-base",
3
3
  "private": true,
4
4
  "type": "module",
5
- "version": "0.31.2",
5
+ "version": "0.32.0",
6
6
  "description": "E-Com Plus Cloud Commerce basic setup for testing",
7
7
  "main": "lib/index.js",
8
8
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/types",
3
3
  "type": "module",
4
- "version": "0.31.2",
4
+ "version": "0.32.0",
5
5
  "description": "E-Com Plus Cloud Commerce reusable type definitions",
6
6
  "main": "index.ts",
7
7
  "repository": {