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.
- package/CHANGELOG.md +25 -0
- package/action.yml +8 -0
- package/ecomplus-stores/barra-doce/functions/many/package.json +3 -3
- package/ecomplus-stores/barra-doce/functions/ssr/package.json +6 -6
- package/ecomplus-stores/barra-doce/functions/with-apps/package.json +3 -3
- package/ecomplus-stores/barra-doce/package.json +2 -2
- package/ecomplus-stores/monocard/functions/many/package.json +3 -3
- package/ecomplus-stores/monocard/functions/ssr/package.json +6 -6
- package/ecomplus-stores/monocard/functions/with-apps/package.json +3 -3
- package/ecomplus-stores/monocard/package.json +2 -2
- package/package.json +4 -4
- package/packages/api/package.json +1 -1
- package/packages/apps/affilate-program/package.json +2 -2
- package/packages/apps/correios/package.json +3 -3
- package/packages/apps/custom-payment/package.json +1 -1
- package/packages/apps/custom-shipping/package.json +1 -1
- package/packages/apps/datafrete/package.json +2 -2
- package/packages/apps/discounts/package.json +1 -1
- package/packages/apps/emails/package.json +2 -2
- package/packages/apps/fb-conversions/package.json +2 -2
- package/packages/apps/flash-courier/package.json +2 -2
- package/packages/apps/frenet/package.json +2 -2
- package/packages/apps/galaxpay/package.json +2 -2
- package/packages/apps/google-analytics/package.json +2 -2
- package/packages/apps/jadlog/package.json +1 -1
- package/packages/apps/loyalty-points/package.json +1 -1
- package/packages/apps/mandae/package.json +3 -3
- package/packages/apps/melhor-envio/package.json +2 -2
- package/packages/apps/mercadopago/package.json +2 -2
- package/packages/apps/pagarme/package.json +2 -2
- package/packages/apps/pagarme-v5/CHANGELOG.md +1 -0
- package/packages/apps/pagarme-v5/README.md +1 -0
- package/packages/apps/pagarme-v5/assets/onload-expression.js +38 -0
- package/packages/apps/pagarme-v5/assets/onload-expression.min.js +1 -0
- package/packages/apps/pagarme-v5/events.js +1 -0
- package/packages/apps/pagarme-v5/lib/index.d.ts +1 -0
- package/packages/apps/pagarme-v5/lib/index.js +2 -0
- package/packages/apps/pagarme-v5/lib/index.js.map +1 -0
- package/packages/apps/pagarme-v5/lib/pagarme-v5-events.d.ts +6 -0
- package/packages/apps/pagarme-v5/lib/pagarme-v5-events.js +21 -0
- package/packages/apps/pagarme-v5/lib/pagarme-v5-events.js.map +1 -0
- package/packages/apps/pagarme-v5/lib/pagarme-v5.d.ts +4 -0
- package/packages/apps/pagarme-v5/lib/pagarme-v5.js +12 -0
- package/packages/apps/pagarme-v5/lib/pagarme-v5.js.map +1 -0
- package/packages/apps/pagarme-v5/lib-mjs/create-pagarme5-transaction.mjs +208 -0
- package/packages/apps/pagarme-v5/lib-mjs/events-to-pagarme5.mjs +209 -0
- package/packages/apps/pagarme-v5/lib-mjs/functions-lib/api-utils.mjs +220 -0
- package/packages/apps/pagarme-v5/lib-mjs/functions-lib/firestore-utils.mjs +24 -0
- package/packages/apps/pagarme-v5/lib-mjs/functions-lib/pagarme/create-axios.mjs +12 -0
- package/packages/apps/pagarme-v5/lib-mjs/functions-lib/pagarme/handle-plans.mjs +69 -0
- package/packages/apps/pagarme-v5/lib-mjs/functions-lib/pagarme/parses-utils.mjs +61 -0
- package/packages/apps/pagarme-v5/lib-mjs/functions-lib/pagarme/payment-subscription.mjs +244 -0
- package/packages/apps/pagarme-v5/lib-mjs/functions-lib/payments/add-installments.mjs +45 -0
- package/packages/apps/pagarme-v5/lib-mjs/list-pagarme5-payments.mjs +218 -0
- package/packages/apps/pagarme-v5/lib-mjs/pagarme5-webhooks.mjs +343 -0
- package/packages/apps/pagarme-v5/package.json +38 -0
- package/packages/apps/pagarme-v5/scripts/build.sh +4 -0
- package/packages/apps/pagarme-v5/scripts/tests.sh +9 -0
- package/packages/apps/pagarme-v5/src/index.ts +1 -0
- package/packages/apps/pagarme-v5/src/pagarme-v5-events.ts +27 -0
- package/packages/apps/pagarme-v5/src/pagarme-v5.ts +12 -0
- package/packages/apps/pagarme-v5/tests/1-list-payments.test.mjs +37 -0
- package/packages/apps/pagarme-v5/tests/2-create-transaction.test.mjs +56 -0
- package/packages/apps/pagarme-v5/tsconfig.json +6 -0
- package/packages/apps/paghiper/package.json +2 -2
- package/packages/apps/pix/package.json +2 -2
- package/packages/apps/tiny-erp/package.json +2 -2
- package/packages/apps/webhooks/package.json +2 -2
- package/packages/cli/config/firebase.json +0 -25
- package/packages/cli/package.json +1 -1
- package/packages/config/lib/config.js +1 -1
- package/packages/config/lib/config.js.map +1 -1
- package/packages/config/package.json +1 -1
- package/packages/config/src/config.ts +1 -1
- package/packages/emails/package.json +1 -1
- package/packages/eslint/package.json +2 -2
- package/packages/events/lib/firebase.js +2 -0
- package/packages/events/lib/firebase.js.map +1 -1
- package/packages/events/package.json +3 -2
- package/packages/events/src/firebase.ts +2 -0
- package/packages/feeds/package.json +1 -1
- package/packages/firebase/lib/config.d.ts +4 -0
- package/packages/firebase/lib/config.js +9 -0
- package/packages/firebase/lib/config.js.map +1 -1
- package/packages/firebase/package.json +2 -2
- package/packages/firebase/src/config.ts +10 -0
- package/packages/i18n/package.json +1 -1
- package/packages/modules/lib/firebase/call-app-module.js +12 -0
- package/packages/modules/lib/firebase/call-app-module.js.map +1 -1
- package/packages/modules/lib/firebase/handle-module.js +2 -1
- package/packages/modules/lib/firebase/handle-module.js.map +1 -1
- package/packages/modules/lib/firebase.js +10 -0
- package/packages/modules/lib/firebase.js.map +1 -1
- package/packages/modules/package.json +3 -2
- package/packages/modules/src/firebase/call-app-module.ts +12 -0
- package/packages/modules/src/firebase/handle-module.ts +5 -1
- package/packages/modules/src/firebase.ts +13 -0
- package/packages/passport/package.json +2 -2
- package/packages/ssr/cloudflare/swr-worker.js +1 -1
- package/packages/ssr/lib/analytics-events.js +23 -0
- package/packages/ssr/lib/analytics-events.js.map +1 -0
- package/packages/ssr/lib/firebase/serve-storefront.js +27 -0
- package/packages/ssr/lib/firebase/serve-storefront.js.map +1 -1
- package/packages/ssr/package.json +5 -4
- package/packages/ssr/src/analytics-events.ts +23 -0
- package/packages/ssr/src/cloudflare/swr-worker.ts +1 -1
- package/packages/ssr/src/firebase/serve-storefront.ts +28 -0
- package/packages/storefront/package.json +5 -5
- package/packages/storefront/src/lib/scripts/vbeta-app.ts +14 -4
- package/packages/storefront/src/lib/state/customer-session.ts +2 -6
- package/packages/storefront/src/lib/state/modules-info.ts +2 -1
- package/packages/test-base/package.json +1 -1
- 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('/
|
|
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.
|
|
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.
|
|
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.
|
|
60
|
-
"vue": "^3.3.
|
|
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.
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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 = {};
|