cloudcommerce 0.33.2 → 0.33.4
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 +23 -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 +2 -2
- package/packages/api/package.json +1 -1
- package/packages/apps/affilate-program/package.json +1 -1
- package/packages/apps/correios/package.json +1 -1
- package/packages/apps/custom-payment/package.json +1 -1
- package/packages/apps/custom-shipping/package.json +1 -1
- package/packages/apps/datafrete/package.json +1 -1
- package/packages/apps/discounts/package.json +1 -1
- package/packages/apps/emails/package.json +1 -1
- package/packages/apps/fb-conversions/package.json +1 -1
- package/packages/apps/flash-courier/package.json +1 -1
- package/packages/apps/frenet/package.json +1 -1
- package/packages/apps/galaxpay/package.json +1 -1
- package/packages/apps/google-analytics/package.json +1 -1
- package/packages/apps/jadlog/package.json +1 -1
- package/packages/apps/loyalty-points/package.json +1 -1
- package/packages/apps/mandae/package.json +1 -1
- package/packages/apps/melhor-envio/package.json +1 -1
- package/packages/apps/mercadopago/package.json +1 -1
- package/packages/apps/pagarme/package.json +1 -1
- package/packages/apps/pagarme-v5/package.json +1 -1
- package/packages/apps/paghiper/package.json +1 -1
- package/packages/apps/pix/package.json +1 -1
- package/packages/apps/tiny-erp/package.json +1 -1
- package/packages/apps/webhooks/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/config/package.json +1 -1
- package/packages/emails/package.json +1 -1
- package/packages/eslint/package.json +1 -1
- package/packages/events/package.json +1 -1
- package/packages/feeds/package.json +1 -1
- package/packages/firebase/package.json +1 -1
- package/packages/i18n/lib/en_us/i19safeBuy.txt +1 -0
- package/packages/i18n/lib/en_us.d.ts +1 -0
- package/packages/i18n/lib/en_us.js +1 -0
- package/packages/i18n/lib/en_us.js.map +1 -1
- package/packages/i18n/lib/pt_br/i19safeBuy.txt +1 -0
- package/packages/i18n/lib/pt_br.d.ts +1 -0
- package/packages/i18n/lib/pt_br.js +1 -0
- package/packages/i18n/lib/pt_br.js.map +1 -1
- package/packages/i18n/package.json +1 -1
- package/packages/i18n/src/en_us.ts +1 -0
- package/packages/i18n/src/pt_br.ts +1 -0
- package/packages/modules/lib/firebase/checkout.js +1 -1
- package/packages/modules/lib/firebase/checkout.js.map +1 -1
- package/packages/modules/package.json +1 -1
- package/packages/modules/src/firebase/checkout.ts +2 -2
- package/packages/passport/package.json +1 -1
- package/packages/ssr/lib/analytics-events.js +33 -5
- package/packages/ssr/lib/analytics-events.js.map +1 -1
- package/packages/ssr/lib/analytics-providers/google-analytics.js +48 -0
- package/packages/ssr/lib/analytics-providers/google-analytics.js.map +1 -0
- package/packages/ssr/lib/analytics-providers/meta-conversions-api.js +44 -0
- package/packages/ssr/lib/analytics-providers/meta-conversions-api.js.map +1 -0
- package/packages/ssr/lib/firebase/serve-storefront.js +16 -12
- package/packages/ssr/lib/firebase/serve-storefront.js.map +1 -1
- package/packages/ssr/package.json +3 -1
- package/packages/ssr/src/analytics-events.ts +45 -5
- package/packages/ssr/src/analytics-providers/google-analytics.ts +67 -0
- package/packages/ssr/src/analytics-providers/meta-conversions-api.ts +57 -0
- package/packages/ssr/src/firebase/serve-storefront.ts +17 -12
- package/packages/storefront/package.json +1 -1
- package/packages/storefront/src/analytics/event-to-fbq.ts +3 -0
- package/packages/storefront/src/analytics/event-to-ttq.ts +89 -10
- package/packages/storefront/src/lib/scripts/push-analytics-events.ts +15 -0
- package/packages/storefront/src/lib/scripts/vbeta-app.ts +172 -0
- package/packages/storefront/src/lib/state/shopping-cart.ts +7 -5
- package/packages/test-base/package.json +1 -1
- package/packages/types/package.json +1 -1
|
@@ -1,20 +1,48 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
|
+
import ga4Events from './analytics-providers/google-analytics.js';
|
|
3
|
+
import metaEvents from './analytics-providers/meta-conversions-api.js';
|
|
2
4
|
|
|
3
5
|
const analyticsEmitter = new EventEmitter();
|
|
4
|
-
const sendAnalyticsEvents = ({ url, events }) => {
|
|
6
|
+
const sendAnalyticsEvents = ({ url, events }, payload = {}) => {
|
|
5
7
|
analyticsEmitter.emit('send', { url, events });
|
|
8
|
+
const eventsByType = {};
|
|
9
|
+
events.forEach(({ type, name, params }) => {
|
|
10
|
+
if (!eventsByType[type]) {
|
|
11
|
+
eventsByType[type] = [];
|
|
12
|
+
}
|
|
13
|
+
eventsByType[type].push({ name, params });
|
|
14
|
+
});
|
|
15
|
+
const sendingEvents = [];
|
|
16
|
+
if (eventsByType.gtag) {
|
|
17
|
+
const sessionId = payload.g_session_id || payload.session_id;
|
|
18
|
+
const clientId = payload.g_client_id || payload.client_id;
|
|
19
|
+
const listGA4Events = ga4Events(eventsByType.gtag, clientId, sessionId, payload.utm);
|
|
20
|
+
if (listGA4Events) {
|
|
21
|
+
sendingEvents.push(...listGA4Events);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (eventsByType.fbq) {
|
|
25
|
+
const userData = {
|
|
26
|
+
client_ip_address: payload.id,
|
|
27
|
+
client_user_agent: payload.user_agent,
|
|
28
|
+
fbc: payload.fbclid,
|
|
29
|
+
fbp: payload.fbp,
|
|
30
|
+
};
|
|
31
|
+
const listMetaEvents = metaEvents(eventsByType.fbq, payload.page_location, userData);
|
|
32
|
+
if (listMetaEvents) {
|
|
33
|
+
sendingEvents.push(...listMetaEvents);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
6
36
|
/* @TODO:
|
|
7
|
-
Parse received events in GA4 (pageview and Measure ecommerce)
|
|
8
|
-
format and dispatch to GA Measurement API, Facebook Conversions API and
|
|
9
|
-
TikTok Analytics API.
|
|
10
37
|
- Get credentials from env vars, e.g. `process.env.GA_MEASUREMENT_ID`;
|
|
11
38
|
- May receive multiple events in a unique request, and dispatch multiple
|
|
12
39
|
events in one POST if possible;
|
|
13
40
|
- Consider Google Click ID (`?gclid=`), Facebook Click ID (`?fbclid=`)
|
|
14
|
-
and maybe TikTok one from
|
|
41
|
+
and maybe TikTok one from payload;
|
|
15
42
|
- Send the events in parallel for all APIs with `Promise.all(sendingEvents)`;
|
|
16
43
|
- No CORS!
|
|
17
44
|
*/
|
|
45
|
+
Promise.all(sendingEvents);
|
|
18
46
|
};
|
|
19
47
|
|
|
20
48
|
export default sendAnalyticsEvents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics-events.js","sourceRoot":"","sources":["../src/analytics-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analytics-events.js","sourceRoot":"","sources":["../src/analytics-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,SAAS,MAAM,wCAAwC,CAAC;AAC/D,OAAO,UAAU,MAAM,4CAA4C,CAAC;AAEpE,MAAM,gBAAgB,GAAG,IAAI,YAAY,EAAE,CAAC;AAS5C,MAAM,mBAAmB,GAAG,CAC1B,EAAE,GAAG,EAAE,MAAM,EAAmD,EAChE,UAA+B,EAAE,EACjC,EAAE;IACF,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAiD,EAAE,CAAC;IACtE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YACvB,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SACzB;QACA,YAAY,CAAC,IAAI,CAAsB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAuC,EAAE,CAAC;IAC7D,IAAI,YAAY,CAAC,IAAI,EAAE;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;QAC1D,MAAM,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACrF,IAAI,aAAa,EAAE;YACjB,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;SACtC;KACF;IACD,IAAI,YAAY,CAAC,GAAG,EAAE;QACpB,MAAM,QAAQ,GAAG;YACf,iBAAiB,EAAE,OAAO,CAAC,EAAE;YAC7B,iBAAiB,EAAE,OAAO,CAAC,UAAU;YACrC,GAAG,EAAE,OAAO,CAAC,MAAM;YACnB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC;QACF,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACrF,IAAI,cAAc,EAAE;YAClB,aAAa,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;SACvC;KACF;IACD;;;;;;;;MAQE;IACF,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC;AAEnC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
|
|
3
|
+
const ga4Axios = axios.create({
|
|
4
|
+
baseURL: 'https://www.google-analytics.com',
|
|
5
|
+
headers: {
|
|
6
|
+
'Content-Type': 'application/json',
|
|
7
|
+
},
|
|
8
|
+
});
|
|
9
|
+
const url = `/mp/collect?api_secret=${process.env.GA_API_TOKEN}`
|
|
10
|
+
+ `&measurement_id=${process.env.GA_MEASUREMENT_ID}`;
|
|
11
|
+
const sendEvent = (analyticsEvents, clientId, sessionId, utm) => {
|
|
12
|
+
if (process.env.GA_API_TOKEN && process.env.GA_MEASUREMENT_ID) {
|
|
13
|
+
const requests = [];
|
|
14
|
+
let events = [];
|
|
15
|
+
analyticsEvents.forEach((event, index) => {
|
|
16
|
+
if (event.params) {
|
|
17
|
+
Object.assign(event.params, { session_id: sessionId });
|
|
18
|
+
}
|
|
19
|
+
const body = event;
|
|
20
|
+
if (body.name === 'page_view') {
|
|
21
|
+
body.name = 'campaign_details';
|
|
22
|
+
body.params = {
|
|
23
|
+
source: utm?.source,
|
|
24
|
+
medium: utm?.medium,
|
|
25
|
+
campaign: utm?.campaign,
|
|
26
|
+
term: utm?.term,
|
|
27
|
+
content: utm?.content,
|
|
28
|
+
session_id: sessionId,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
events.push(body);
|
|
32
|
+
if (events.length === 25 || index === analyticsEvents.length - 1) {
|
|
33
|
+
events.push(body);
|
|
34
|
+
requests.push(ga4Axios.post(url, {
|
|
35
|
+
client_id: clientId,
|
|
36
|
+
events,
|
|
37
|
+
}));
|
|
38
|
+
events = [];
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return requests;
|
|
42
|
+
}
|
|
43
|
+
// throw new Error('Google Analytics credentials not found');
|
|
44
|
+
return null;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export default sendEvent;
|
|
48
|
+
// # sourceMappingURL=google-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-analytics.js","sourceRoot":"","sources":["../../src/analytics-providers/google-analytics.ts"],"names":[],"mappings":"AACA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAE7C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,OAAO,EAAE,kCAAkC;IAC3C,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,0BAA0B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;MAC5D,mBAAmB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;AAEvD,MAAM,SAAS,GAAG,CAChB,eAAiC,EACjC,QAAgB,EAChB,SAAiB,EACjB,GAMC,EACD,EAAE;IACF,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;QAC7D,MAAM,QAAQ,GAAuC,EAAE,CAAC;QACxD,IAAI,MAAM,GAAqB,EAAE,CAAC;QAElC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACvC,IAAI,KAAK,CAAC,MAAM,EAAE;gBAChB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;aACxD;YAED,MAAM,IAAI,GAAG,KAAK,CAAC;YACnB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;gBAC7B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;gBAC/B,IAAI,CAAC,MAAM,GAAG;oBACZ,MAAM,EAAE,GAAG,EAAE,MAAM;oBACnB,MAAM,EAAE,GAAG,EAAE,MAAM;oBACnB,QAAQ,EAAE,GAAG,EAAE,QAAQ;oBACvB,IAAI,EAAE,GAAG,EAAE,IAAI;oBACf,OAAO,EAAE,GAAG,EAAE,OAAO;oBACrB,UAAU,EAAE,SAAS;iBACtB,CAAC;aACH;YAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,KAAK,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,QAAQ,CAAC,IAAI,CACX,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;oBACjB,SAAS,EAAE,QAAQ;oBACnB,MAAM;iBACP,CAAC,CACH,CAAC;gBACF,MAAM,GAAG,EAAE,CAAC;aACb;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;KACjB;IACD,6DAA6D;IAC7D,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
|
|
3
|
+
const version = 'v18.0';
|
|
4
|
+
const metaAxios = axios.create({
|
|
5
|
+
baseURL: `https://graph.facebook.com/${version}`,
|
|
6
|
+
headers: {
|
|
7
|
+
'Content-Type': 'application/json',
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
const url = `/${process.env.FB_PIXEL_ID}/events?access_token=${process.env.FB_GRAPH_TOKEN}`;
|
|
11
|
+
const sendEvent = (metaEvents, pageLocation, userData) => {
|
|
12
|
+
if (process.env.FB_PIXEL_ID && process.env.FB_GRAPH_TOKEN) {
|
|
13
|
+
const requests = [];
|
|
14
|
+
let data = [];
|
|
15
|
+
metaEvents.forEach((event, index) => {
|
|
16
|
+
const body = event;
|
|
17
|
+
if (body.name === 'PageView') {
|
|
18
|
+
body.name = 'Lead';
|
|
19
|
+
body.params = {
|
|
20
|
+
content_name: event.params?.page_title,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
data.push({
|
|
24
|
+
event_name: body.name,
|
|
25
|
+
event_time: Date.now(),
|
|
26
|
+
event_source_url: pageLocation,
|
|
27
|
+
action_source: 'website',
|
|
28
|
+
user_data: userData,
|
|
29
|
+
custom_data: body.params,
|
|
30
|
+
});
|
|
31
|
+
if (data.length === 1000 || index === metaEvents.length - 1) {
|
|
32
|
+
requests.push(metaAxios.post(url, { data }));
|
|
33
|
+
data = [];
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return requests;
|
|
37
|
+
}
|
|
38
|
+
// throw new Error('Meta credentials not found');
|
|
39
|
+
return null;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// https://developers.facebook.com/docs/meta-pixel/reference#standard-events
|
|
43
|
+
export default sendEvent;
|
|
44
|
+
// # sourceMappingURL=meta-conversions-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-conversions-api.js","sourceRoot":"","sources":["../../src/analytics-providers/meta-conversions-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAE7C,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,8BAA8B,OAAO,EAAE;IAChD,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,wBAAwB,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;AAE5F,MAAM,SAAS,GAAG,CAChB,UAA4B,EAC5B,YAAoB,EACpB,QAA6C,EAE7C,EAAE;IACF,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;QACzD,MAAM,QAAQ,GAAuC,EAAE,CAAC;QACxD,IAAI,IAAI,GAA2B,EAAE,CAAC;QAEtC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,IAAI,GAAG,KAAK,CAAC;YACnB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;gBAC5B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;gBACnB,IAAI,CAAC,MAAM,GAAG;oBACZ,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU;iBACvC,CAAC;aACH;YAED,IAAI,CAAC,IAAI,CAAC;gBACR,UAAU,EAAE,IAAI,CAAC,IAAI;gBACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;gBACtB,gBAAgB,EAAE,YAAY;gBAC9B,aAAa,EAAE,SAAS;gBACxB,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,IAAI,CAAC,MAAM;aACzB,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3D,QAAQ,CAAC,IAAI,CACX,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAC9B,CAAC;gBACF,IAAI,GAAG,EAAE,CAAC;aACX;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;KACjB;IACD,iDAAiD;IACjD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,4EAA4E;AAC5E,eAAe,SAAS,CAAC"}
|
|
@@ -173,28 +173,32 @@ export default async (req, res) => {
|
|
|
173
173
|
return;
|
|
174
174
|
}
|
|
175
175
|
if (req.path === '/_analytics') {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
176
|
+
if (req.method !== 'POST') {
|
|
177
|
+
res.sendStatus(405);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const url = req.body?.page_location;
|
|
179
181
|
if (typeof url !== 'string' || !url) {
|
|
180
182
|
res.status(400);
|
|
181
|
-
res.send('
|
|
183
|
+
res.send('Pageview URL is required in the `{ page_location }` body field');
|
|
182
184
|
return;
|
|
183
185
|
}
|
|
184
|
-
const
|
|
185
|
-
if (Array.isArray(
|
|
186
|
-
|
|
187
|
-
if (typeof
|
|
186
|
+
const events = [];
|
|
187
|
+
if (Array.isArray(req.body?.events)) {
|
|
188
|
+
req.body.events.forEach((event) => {
|
|
189
|
+
if (typeof event.type === 'string' && event.type) {
|
|
190
|
+
if (typeof event.name === 'string' && event.name) {
|
|
191
|
+
events.push(event);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
188
194
|
});
|
|
189
|
-
} else if (Array.isArray(req.body.events)) {
|
|
190
|
-
req.body.events.forEach((event) => events.push(event));
|
|
191
195
|
}
|
|
192
196
|
if (!events.length) {
|
|
193
197
|
res.status(400);
|
|
194
|
-
res.send('
|
|
198
|
+
res.send('Event(s) must be sent via the `{ events }` array in the request body');
|
|
195
199
|
return;
|
|
196
200
|
}
|
|
197
|
-
sendAnalyticsEvents({ url, events });
|
|
201
|
+
sendAnalyticsEvents({ url, events }, { ...req.body, ip: req.ip });
|
|
198
202
|
res.sendStatus(204);
|
|
199
203
|
return;
|
|
200
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve-storefront.js","sourceRoot":"","sources":["../../src/firebase/serve-storefront.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serve-storefront.js","sourceRoot":"","sources":["../../src/firebase/serve-storefront.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAW1D,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAC5C,MAAM,OAAO,GAAG,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACrD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;AACtD,IAAI,cAAsB,CAAC;AAE3B,MAAM,WAAW,GAAiB,EAAE,CAAC;AAErC,MAAM,eAAe,GAAa,EAAE,CAAC;AACrC,IAAI,WAA+B,CAAC;AACpC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC,EAAE,OAAO,CAAC;KAClE,IAAI,CAAC,CAAC,oBAAoB,EAAE,EAAE;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChD,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC1D,IACE,WAAW;eACR,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;eAC7B,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,EACtC;YACA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;SACjC;KACF;AACH,CAAC,CAAC;KACD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAEtB,MAAM,KAAK,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAClD,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAC3D,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3F,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,IAAI,QAAyB,CAAC;IAC9B,IAAI;QACF,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAU,CAAC,CAAC;KAC1C;IAAC,MAAM;QACN,EAAE;KACH;IACD,IAAI,QAAQ,EAAE;QACZ,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QACxB,iCAAiC;QACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,sEAAsE,CAAC;SAC5F;QACD,OAAO,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC;QACpC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9B,OAAO,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACzC,gCAAgC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAC1C,IACE,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC;mBAClC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;mBAC7B,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;mBAChC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC;mBACpC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;mBACjC,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC;mBACrC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;mBAClC,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,EAC1C;gBACA,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,EAAE;YACX,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;SACvC;QACD,IAAI;YACF,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,eAAe,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC,EAAE,OAAO,CAAC,CAAC;YACZ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;gBACrC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAG,OAAkC;gBAC5C,MAAM,EAAE,eAAe,CAAC,MAAM;aAC/B,CAAC,CAAC;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACnD,QAAQ,UAAU,EAAE;oBAClB,KAAK,mBAAmB,CAAC;oBACzB,KAAK,YAAY,CAAC;oBAClB,KAAK,2BAA2B,CAAC;oBACjC,KAAK,SAAS,CAAC;oBACf,KAAK,QAAQ;wBACX,MAAM;oBACR;wBACE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;iBACrD;YACH,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;SACjC;QAAC,OAAO,GAAQ,EAAE;YACjB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACnC;QACD,OAAO;KACR;IACD,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,eAAe,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACnD,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QACtC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO;KACR;IACD,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;QAC1C,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChB,OAAO;KACR;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACtC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;QACrE,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,yBAAyB,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,IAAI,YAAY,KAAK,GAAG,CAAC,IAAI,EAAE;YAC7B,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;gBAClD,OAAO,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YAC7E,CAAC,CAAC,CAAC;YACH,IAAI,QAAQ,EAAE;gBACZ,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAClE,OAAO;aACR;SACF;QACD,IAAI,GAAG,KAAK,KAAK,IAAI,WAAW,EAAE;YAChC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACpE,OAAO;SACR;KACF;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;QAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC1D,CAAC,KAAK,IAAI,EAAE;oBACV,IAAI,CAAC,cAAc,EAAE;wBACnB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;wBAC1E,cAAc,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;wBAC3D,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;4BAC1C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BACnD,WAAW,CAAC,IAAI,CAAC;gCACf,QAAQ;gCACR,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;gCACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;6BACvB,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBACH,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;4BACxB,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;gCAAE,OAAO,CAAC,CAAC,CAAC;4BACjC,OAAO,CAAC,CAAC;wBACX,CAAC,CAAC,CAAC;qBACJ;oBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBACvE,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,mBAAmB,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;oBACrE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;wBAClD,OAAO,WAAW,CAAC,KAAK,IAAI,KAAK;+BAC5B,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC;oBACH,IAAI,UAAU,EAAE;wBACd,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;qBAC5D;oBACD,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACjC,CAAC,CAAC,EAAE,CAAC;gBACL,OAAO;aACR;SACF;QACD,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO;KACR;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE;QAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE;YACzB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO;SACR;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE;YACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAC3E,OAAO;SACR;QACD,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACnC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAChC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;oBAChD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;wBAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACpB;iBACF;YACH,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;YACjF,OAAO;SACR;QACD,mBAAmB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAClE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO;KACR;IAED,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAE5C,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,YAAoB,EAAE,EAAE;QACjE,IAAI,GAAG,CAAC,WAAW;YAAE,OAAO,GAAG,CAAC;QAChC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;aACtB,GAAG,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;aACnC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE;QAC1C,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YAC5E,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,CAAC;iBAC7C,IAAI,CAAC,cAAc;kBAChB,yCAAyC;kBACvC,yBAAyB,MAAM,QAAQ,kBAAkB,CAAC,GAAG,CAAC,KAAK;kBACrE,gBAAgB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;SACvD;aAAM;YACL,iBAAiB,CAAC,MAAM,EAAE,mCAAmC,CAAC;iBAC3D,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACzB;IACH,CAAC,CAAC;IAEF,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAC5C,MAAM,gBAAgB,GAAG,mBAAmB;QAC1C,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO;QACvD,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,gBAAgB,EAAE;QACpB;;;UAGE;QACF,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;QACjC,uCAAuC;QACvC,aAAa;QACb,GAAG,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,MAAc,EAAE,OAA4B;YAC7E,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,IAAI,WAAW,EAAE;gBAC5C,gGAAgG;gBAChG,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,GAAG,WAAW,0BAA0B,CAAC;gBACjF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;oBACjB,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;iBACxB;qBAAM;oBACL,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACpC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;qBAC/B;oBACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC5B;aACF;YACD,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC;KACH;IAED;;;;MAIE;IACF,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;QACpD,IAAI,GAAG,EAAE;YACP,IAAI,GAAG,CAAC,WAAW,EAAE;gBACnB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;aACR;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACxC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,OAAO;SACR;QACD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnC,iBAAiB,CAAC,GAAG,EAAE,kCAAkC,CAAC;iBACvD,IAAI,CAAC,IAAI,CAAC,CAAC;SACf;QAAC,OAAO,CAAC,EAAE;YACV,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAClB;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/ssr",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.33.
|
|
4
|
+
"version": "0.33.4",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce storefront SSR",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"exports": {
|
|
@@ -33,8 +33,10 @@
|
|
|
33
33
|
"@vueuse/core": "10.6.1",
|
|
34
34
|
"astro": "2.10.15",
|
|
35
35
|
"astro-capo": "^0.0.1",
|
|
36
|
+
"axios": "^1.6.2",
|
|
36
37
|
"firebase-admin": "^11.11.0",
|
|
37
38
|
"firebase-functions": "^4.5.0",
|
|
39
|
+
"mitt": "^3.0.1",
|
|
38
40
|
"vue": "^3.3.8"
|
|
39
41
|
},
|
|
40
42
|
"devDependencies": {
|
|
@@ -1,21 +1,61 @@
|
|
|
1
|
+
import type { AxiosResponse } from 'axios';
|
|
1
2
|
import { EventEmitter } from 'node:events';
|
|
3
|
+
import ga4Events from './analytics-providers/google-analytics';
|
|
4
|
+
import metaEvents from './analytics-providers/meta-conversions-api';
|
|
2
5
|
|
|
3
6
|
const analyticsEmitter = new EventEmitter();
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
export type AnalyticsEvent = {
|
|
9
|
+
name: string,
|
|
10
|
+
params?: Record<string, any>,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type GroupedAnalyticsEvents = Array<AnalyticsEvent & { type: string }>;
|
|
14
|
+
|
|
15
|
+
const sendAnalyticsEvents = (
|
|
16
|
+
{ url, events }: { url: string, events: GroupedAnalyticsEvents },
|
|
17
|
+
payload: Record<string, any> = {},
|
|
18
|
+
) => {
|
|
6
19
|
analyticsEmitter.emit('send', { url, events });
|
|
20
|
+
const eventsByType: Record<string, AnalyticsEvent[] | undefined> = {};
|
|
21
|
+
events.forEach(({ type, name, params }) => {
|
|
22
|
+
if (!eventsByType[type]) {
|
|
23
|
+
eventsByType[type] = [];
|
|
24
|
+
}
|
|
25
|
+
(eventsByType[type] as AnalyticsEvent[]).push({ name, params });
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const sendingEvents: Promise<AxiosResponse<any, any>>[] = [];
|
|
29
|
+
if (eventsByType.gtag) {
|
|
30
|
+
const sessionId = payload.g_session_id || payload.session_id;
|
|
31
|
+
const clientId = payload.g_client_id || payload.client_id;
|
|
32
|
+
const listGA4Events = ga4Events(eventsByType.gtag, clientId, sessionId, payload.utm);
|
|
33
|
+
if (listGA4Events) {
|
|
34
|
+
sendingEvents.push(...listGA4Events);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (eventsByType.fbq) {
|
|
38
|
+
const userData = {
|
|
39
|
+
client_ip_address: payload.id,
|
|
40
|
+
client_user_agent: payload.user_agent,
|
|
41
|
+
fbc: payload.fbclid,
|
|
42
|
+
fbp: payload.fbp,
|
|
43
|
+
};
|
|
44
|
+
const listMetaEvents = metaEvents(eventsByType.fbq, payload.page_location, userData);
|
|
45
|
+
if (listMetaEvents) {
|
|
46
|
+
sendingEvents.push(...listMetaEvents);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
7
49
|
/* @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
50
|
- Get credentials from env vars, e.g. `process.env.GA_MEASUREMENT_ID`;
|
|
12
51
|
- May receive multiple events in a unique request, and dispatch multiple
|
|
13
52
|
events in one POST if possible;
|
|
14
53
|
- Consider Google Click ID (`?gclid=`), Facebook Click ID (`?fbclid=`)
|
|
15
|
-
and maybe TikTok one from
|
|
54
|
+
and maybe TikTok one from payload;
|
|
16
55
|
- Send the events in parallel for all APIs with `Promise.all(sendingEvents)`;
|
|
17
56
|
- No CORS!
|
|
18
57
|
*/
|
|
58
|
+
Promise.all(sendingEvents);
|
|
19
59
|
};
|
|
20
60
|
|
|
21
61
|
export default sendAnalyticsEvents;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { AnalyticsEvent } from '../analytics-events';
|
|
2
|
+
import axios, { AxiosResponse } from 'axios';
|
|
3
|
+
|
|
4
|
+
const ga4Axios = axios.create({
|
|
5
|
+
baseURL: 'https://www.google-analytics.com',
|
|
6
|
+
headers: {
|
|
7
|
+
'Content-Type': 'application/json',
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const url = `/mp/collect?api_secret=${process.env.GA_API_TOKEN}`
|
|
12
|
+
+ `&measurement_id=${process.env.GA_MEASUREMENT_ID}`;
|
|
13
|
+
|
|
14
|
+
const sendEvent = (
|
|
15
|
+
analyticsEvents: AnalyticsEvent[],
|
|
16
|
+
clientId: string,
|
|
17
|
+
sessionId: string,
|
|
18
|
+
utm?: {
|
|
19
|
+
source?: string,
|
|
20
|
+
medium?: string,
|
|
21
|
+
campaign?: string,
|
|
22
|
+
term?: string,
|
|
23
|
+
content?: string
|
|
24
|
+
},
|
|
25
|
+
) => {
|
|
26
|
+
if (process.env.GA_API_TOKEN && process.env.GA_MEASUREMENT_ID) {
|
|
27
|
+
const requests: Promise<AxiosResponse<any, any>>[] = [];
|
|
28
|
+
let events: AnalyticsEvent[] = [];
|
|
29
|
+
|
|
30
|
+
analyticsEvents.forEach((event, index) => {
|
|
31
|
+
if (event.params) {
|
|
32
|
+
Object.assign(event.params, { session_id: sessionId });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const body = event;
|
|
36
|
+
if (body.name === 'page_view') {
|
|
37
|
+
body.name = 'campaign_details';
|
|
38
|
+
body.params = {
|
|
39
|
+
source: utm?.source,
|
|
40
|
+
medium: utm?.medium,
|
|
41
|
+
campaign: utm?.campaign,
|
|
42
|
+
term: utm?.term,
|
|
43
|
+
content: utm?.content,
|
|
44
|
+
session_id: sessionId,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
events.push(body);
|
|
49
|
+
if (events.length === 25 || index === analyticsEvents.length - 1) {
|
|
50
|
+
events.push(body);
|
|
51
|
+
requests.push(
|
|
52
|
+
ga4Axios.post(url, {
|
|
53
|
+
client_id: clientId,
|
|
54
|
+
events,
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
events = [];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
return requests;
|
|
62
|
+
}
|
|
63
|
+
// throw new Error('Google Analytics credentials not found');
|
|
64
|
+
return null;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export default sendEvent;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { AnalyticsEvent } from '../analytics-events';
|
|
2
|
+
import axios, { AxiosResponse } from 'axios';
|
|
3
|
+
|
|
4
|
+
const version = 'v18.0';
|
|
5
|
+
const metaAxios = axios.create({
|
|
6
|
+
baseURL: `https://graph.facebook.com/${version}`,
|
|
7
|
+
headers: {
|
|
8
|
+
'Content-Type': 'application/json',
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const url = `/${process.env.FB_PIXEL_ID}/events?access_token=${process.env.FB_GRAPH_TOKEN}`;
|
|
13
|
+
|
|
14
|
+
const sendEvent = (
|
|
15
|
+
metaEvents: AnalyticsEvent[],
|
|
16
|
+
pageLocation: string,
|
|
17
|
+
userData: { [x: string]: string | undefined },
|
|
18
|
+
|
|
19
|
+
) => {
|
|
20
|
+
if (process.env.FB_PIXEL_ID && process.env.FB_GRAPH_TOKEN) {
|
|
21
|
+
const requests: Promise<AxiosResponse<any, any>>[] = [];
|
|
22
|
+
let data: { [x: string]: any }[] = [];
|
|
23
|
+
|
|
24
|
+
metaEvents.forEach((event, index) => {
|
|
25
|
+
const body = event;
|
|
26
|
+
if (body.name === 'PageView') {
|
|
27
|
+
body.name = 'Lead';
|
|
28
|
+
body.params = {
|
|
29
|
+
content_name: event.params?.page_title,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
data.push({
|
|
34
|
+
event_name: body.name,
|
|
35
|
+
event_time: Date.now(),
|
|
36
|
+
event_source_url: pageLocation,
|
|
37
|
+
action_source: 'website',
|
|
38
|
+
user_data: userData,
|
|
39
|
+
custom_data: body.params,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
if (data.length === 1000 || index === metaEvents.length - 1) {
|
|
43
|
+
requests.push(
|
|
44
|
+
metaAxios.post(url, { data }),
|
|
45
|
+
);
|
|
46
|
+
data = [];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
return requests;
|
|
51
|
+
}
|
|
52
|
+
// throw new Error('Meta credentials not found');
|
|
53
|
+
return null;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// https://developers.facebook.com/docs/meta-pixel/reference#standard-events
|
|
57
|
+
export default sendEvent;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { OutgoingHttpHeaders } from 'node:http';
|
|
2
2
|
import type { Request, Response } from 'firebase-functions';
|
|
3
|
+
import type { GroupedAnalyticsEvents } from '../analytics-events';
|
|
3
4
|
import { join as joinPath } from 'node:path';
|
|
4
5
|
import { readFile } from 'node:fs/promises';
|
|
5
6
|
import logger from 'firebase-functions/logger';
|
|
@@ -194,28 +195,32 @@ export default async (req: Request, res: Response) => {
|
|
|
194
195
|
}
|
|
195
196
|
|
|
196
197
|
if (req.path === '/_analytics') {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
if (req.method !== 'POST') {
|
|
199
|
+
res.sendStatus(405);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const url = req.body?.page_location;
|
|
200
203
|
if (typeof url !== 'string' || !url) {
|
|
201
204
|
res.status(400);
|
|
202
|
-
res.send('
|
|
205
|
+
res.send('Pageview URL is required in the `{ page_location }` body field');
|
|
203
206
|
return;
|
|
204
207
|
}
|
|
205
|
-
const
|
|
206
|
-
if (Array.isArray(
|
|
207
|
-
|
|
208
|
-
if (typeof
|
|
208
|
+
const events: GroupedAnalyticsEvents = [];
|
|
209
|
+
if (Array.isArray(req.body?.events)) {
|
|
210
|
+
req.body.events.forEach((event) => {
|
|
211
|
+
if (typeof event.type === 'string' && event.type) {
|
|
212
|
+
if (typeof event.name === 'string' && event.name) {
|
|
213
|
+
events.push(event);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
209
216
|
});
|
|
210
|
-
} else if (Array.isArray(req.body.events)) {
|
|
211
|
-
req.body.events.forEach((event) => events.push(event));
|
|
212
217
|
}
|
|
213
218
|
if (!events.length) {
|
|
214
219
|
res.status(400);
|
|
215
|
-
res.send('
|
|
220
|
+
res.send('Event(s) must be sent via the `{ events }` array in the request body');
|
|
216
221
|
return;
|
|
217
222
|
}
|
|
218
|
-
sendAnalyticsEvents({ url, events });
|
|
223
|
+
sendAnalyticsEvents({ url, events }, { ...req.body, ip: req.ip });
|
|
219
224
|
res.sendStatus(204);
|
|
220
225
|
return;
|
|
221
226
|
}
|
|
@@ -1,15 +1,94 @@
|
|
|
1
1
|
import type { GtagEventMessage } from '@@sf/state/use-analytics';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
const pageContentState = {
|
|
4
|
+
waiting: Promise.resolve(),
|
|
5
|
+
params: {
|
|
6
|
+
description: '',
|
|
7
|
+
contents: [] as Record<string, any>[],
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const parseGtagItem = (
|
|
12
|
+
item: Exclude<Gtag.EventParams['items'], undefined>[0],
|
|
13
|
+
isCartEvent = false,
|
|
14
|
+
) => {
|
|
15
|
+
const params: Record<string, any> = {
|
|
16
|
+
content_id: item.item_id,
|
|
17
|
+
content_name: item.item_name,
|
|
18
|
+
price: item.price,
|
|
19
|
+
content_category: item.item_category,
|
|
20
|
+
brand: item.item_brand,
|
|
21
|
+
};
|
|
22
|
+
if (isCartEvent) {
|
|
23
|
+
params.quantity = item.quantity;
|
|
24
|
+
}
|
|
25
|
+
return params;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// https://ads.tiktok.com/help/article/standard-events-parameters?lang=en#
|
|
29
|
+
// https://ads.tiktok.com/help/article/about-parameters#
|
|
30
|
+
export const parseGtagToTtq = async ({ event }: GtagEventMessage) => {
|
|
31
|
+
if (event.name === 'page_view') {
|
|
32
|
+
pageContentState.waiting = new Promise((resolve) => {
|
|
33
|
+
setTimeout(resolve, 110);
|
|
34
|
+
});
|
|
35
|
+
pageContentState.params.description = event.params.page_title;
|
|
36
|
+
return [{ name: 'PageView' }];
|
|
37
|
+
}
|
|
38
|
+
const { items, currency } = event.params;
|
|
39
|
+
if (event.name === 'view_item' && items) {
|
|
40
|
+
const firstItem = items[0];
|
|
41
|
+
if (firstItem) {
|
|
42
|
+
if (firstItem.item_list_id === 'product-page') {
|
|
43
|
+
return [{
|
|
44
|
+
name: 'ViewContent',
|
|
45
|
+
params: {
|
|
46
|
+
contents: [parseGtagItem(firstItem)],
|
|
47
|
+
content_type: 'product',
|
|
48
|
+
currency,
|
|
49
|
+
value: firstItem.price,
|
|
50
|
+
},
|
|
51
|
+
}];
|
|
52
|
+
}
|
|
53
|
+
items.forEach((item) => {
|
|
54
|
+
pageContentState.params.contents.push(parseGtagItem(item));
|
|
55
|
+
});
|
|
56
|
+
if (pageContentState.params.contents.length > items.length) {
|
|
57
|
+
return [{ name: null }];
|
|
58
|
+
}
|
|
59
|
+
await pageContentState.waiting;
|
|
60
|
+
return [{
|
|
61
|
+
name: 'ViewContent',
|
|
62
|
+
params: {
|
|
63
|
+
...pageContentState.params,
|
|
64
|
+
content_type: 'product',
|
|
65
|
+
currency,
|
|
66
|
+
},
|
|
67
|
+
}];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if ((event.name === 'add_to_cart' || event.name === 'remove_from_cart') && items) {
|
|
71
|
+
const isAdd = event.name === 'add_to_cart';
|
|
72
|
+
return items.map((item) => {
|
|
73
|
+
const quantity = (item.quantity || 1);
|
|
74
|
+
const { price } = item;
|
|
75
|
+
return {
|
|
76
|
+
name: 'AddToCart',
|
|
77
|
+
params: {
|
|
78
|
+
contents: [
|
|
79
|
+
parseGtagItem({
|
|
80
|
+
...item,
|
|
81
|
+
quantity: isAdd ? quantity : -quantity,
|
|
82
|
+
}, true),
|
|
83
|
+
],
|
|
84
|
+
content_type: 'product',
|
|
85
|
+
currency,
|
|
86
|
+
value: isAdd && typeof price === 'number' ? quantity * price : 0,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return [{ name: null }];
|
|
13
92
|
};
|
|
14
93
|
|
|
15
94
|
export default parseGtagToTtq;
|