includes/ga4.js (140 lines of code) (raw):
/*
* Copyright 2023 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
function formatSuffix(date) {
return date.toISOString().substr(0,10).replaceAll('-', '');
}
function subtractDays(date, days) {
const MS_PER_DAY = 1000 * 60 * 60 * 24;
return new Date(date.getTime() - days * MS_PER_DAY);
}
function incrementalSuffixStart() {
return formatSuffix(subtractDays(new Date(), parseInt(dataform.projectConfig.vars.ga4_incremental_processing_days_back)));
}
function incrementalSuffixEnd() {
return formatSuffix(new Date());
}
const browserUniqueColumns = [
"device_category",
"device_os",
"device_os_version",
"device_web_browser",
"normalized_device_web_browser_version",
];
const deviceUniqueColumns = ["device_category",
"device_mobile_brand_name",
"device_mobile_model_name",
"device_model",
"device_os",
"device_os_version",
"device_web_browser",
"device_web_browser_version",
"device_advertising_id",
"app_store",
"app_version",
"language"];
const normalizedDeviceUniqueColumns = ["device_category",
"device_mobile_brand_name",
"device_mobile_model_name",
"device_model",
"device_os",
"device_os_version",
"device_web_browser",
"normalized_device_web_browser_version",
"device_advertising_id",
"app_store",
"app_version",
"normalized_language"];
const eventUniqueColumns = [
"user_pseudo_id",
"ga_session_id",
"event_timestamp",
"event_name"
];
const pseudoUsersUniqueColumns = [
"pseudo_user_id",
"stream_id",
"user_first_touch_timestamp",
];
const pseudoUserPrivacyInfoUniqueColumns = [
"ads_tracking_limited",
"ads_personalization_allowed",
"last_change_date",
"last_updated_date",
];
const locationUniqueColumns = [
"continent",
"subcontinent",
"country",
"region",
"city",
"metro"
];
const trafficSourceUniqueColumns = [
"traffic_source",
"traffic_source_name",
"traffic_source_medium"
];
const aggregatedVBBColumns = {
"first_visit": "First_Visits",
"page_view": "Visit_Product_Page",
"view_item": "View_Product_Details",
"add_to_cart": "Add_Product_to_Cart",
"view_cart": "View_Cart",
"begin_checkout": "Begin_Checkout",
"add_shipping_info": "Added_Shipping_Info",
"add_payment_info": "Added_Payment_Info",
"purchase": "Purchase_Product"
};
const eventsItemsSelectedColumns = [
"item_id",
"item_name",
"item_brand",
"item_variant",
"item_category",
"item_category2",
"item_category3",
"item_category4",
"item_category5",
"price_in_usd",
"price",
"quantity",
"item_revenue_in_usd",
"item_revenue",
"item_refund_in_usd",
"item_refund",
"coupon",
"affiliation",
"location_id",
"item_list_id",
"item_list_name",
"item_list_index",
"promotion_id",
"promotion_name",
"creative_name",
"creative_slot"
];
const collectedTrafficSourceUniqueColumns = [
"collected_traffic_source_manual_campaign_id",
"collected_traffic_source_manual_campaign_name",
"collected_traffic_source_manual_source",
"collected_traffic_source_manual_medium",
"collected_traffic_source_manual_term",
"collected_traffic_source_manual_content"
];
const eventsItemsSafeCastColumns = {
"price_in_usd": "FLOAT64",
"price": "FLOAT64",
"quantity": "INT64",
"item_revenue_in_usd": "FLOAT64",
"item_revenue": "FLOAT64",
"item_refund_in_usd": "FLOAT64",
"item_refund": "FLOAT64"
};
const eventTypeTagged = "tagged";
const eventTypePredicted = "predictive";
const eventTypeCustom = "custom";
module.exports = {incrementalSuffixStart, incrementalSuffixEnd,
deviceUniqueColumns, normalizedDeviceUniqueColumns, eventUniqueColumns,
pseudoUsersUniqueColumns, locationUniqueColumns, trafficSourceUniqueColumns,
browserUniqueColumns, eventTypeTagged, eventTypePredicted,
eventTypeCustom, aggregatedVBBColumns, eventsItemsSelectedColumns,
collectedTrafficSourceUniqueColumns, eventsItemsSafeCastColumns,
pseudoUserPrivacyInfoUniqueColumns};