References
Test
sh
npm install -D elevar-data-layer-typessh
yarn add -D elevar-data-layer-typessh
pnpm add -D elevar-data-layer-typessh
bun add -D elevar-data-layer-typessh
deno add -D npm:elevar-data-layer-typesExports
ts
import { type RequireAtLeastOne, type ValueOf } from "type-fest";
/* ========================================================================== */
type ElevarConsentCategory =
| "ad_storage"
| "ad_user_data"
| "ad_personalization"
| "analytics_storage"
| "functionality_storage"
| "personalization_storage"
| "security_storage";
export type ElevarConsent = Record<
ElevarConsentCategory,
RequireAtLeastOne<{ default: boolean; update: boolean }>
>;
export type ElevarContext = {
user_properties: {
user_id: string;
};
device: {
screen_resolution: string;
viewport_size: string;
encoding: string;
language: string;
colors: string;
};
page: {
title: string;
raw_referrer: string;
};
marketing: (
| { consent: Record<ElevarConsentCategory, boolean> }
| { consent_v2: ElevarConsent }
) &
Record<PropertyKey, unknown>;
};
export type ElevarUserProperties = Partial<{
customer_first_name: string;
customer_last_name: string;
customer_phone: string;
customer_city: string;
customer_zip: string;
customer_address_1: string;
customer_address_2: string;
customer_country: string;
customer_country_code: string;
customer_province: string;
customer_province_code: string;
customer_tags: string;
customer_order_type: "new" | "returning";
customer_order_count: string;
}> &
(
| {
visitor_type: "logged_in";
customer_id: string;
customer_email: string;
}
| {
visitor_type: "guest";
customer_email?: string;
}
);
type ElevarSignUpEvent = {
event: "dl_sign_up";
user_properties: Extract<ElevarUserProperties, { visitor_type: "logged_in" }>;
};
type ElevarLoginEvent = {
event: "dl_login";
user_properties: Extract<ElevarUserProperties, { visitor_type: "logged_in" }>;
};
type ElevarUserDataEvent = {
event: "dl_user_data";
cart_total: string;
user_properties: ElevarUserProperties;
ecommerce: {
currencyCode: string;
cart_contents: {
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
quantity: string;
list: string;
product_id: string;
variant_id: string;
compare_at_price?: string;
image: string | null;
}>;
};
};
};
type ElevarViewItemListEvent = {
event: "dl_view_item_list";
ecommerce: {
currencyCode: string;
impressions: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
position: number;
list: string;
product_id: string;
variant_id: string;
compare_at_price?: string;
image?: string;
}>;
};
};
type ElevarViewSearchResultsEvent = {
event: "dl_view_search_results";
ecommerce: {
currencyCode: string;
actionField: { list: "search results" };
impressions: Array<{
id: string;
name: string;
brand: string;
category: string;
price: string;
position: number;
list: string;
product_id: string;
variant_id: string;
}>;
};
};
type ElevarSelectItemEvent = {
event: "dl_select_item";
ecommerce: {
currencyCode: string;
click: {
actionField: { list: string };
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
position: number;
list: string;
product_id: string;
variant_id: string;
}>;
};
};
};
type ElevarViewItemEvent = {
event: "dl_view_item";
ecommerce: {
currencyCode: string;
detail: {
actionField: { list: string };
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
list: string;
product_id: string;
variant_id: string;
compare_at_price: string;
image: string | null;
}>;
};
};
};
type ElevarAddToCartEvent = {
event: "dl_add_to_cart";
ecommerce: {
currencyCode: string;
add: {
actionField: { list: string };
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
quantity: string;
list: string;
product_id: string;
variant_id: string;
compare_at_price?: string;
image: string | null;
url?: string;
}>;
};
};
};
type ElevarViewCartEvent = {
event: "dl_view_cart";
cart_total: string;
ecommerce: {
currencyCode: string;
actionField: { list: "Shopping Cart" };
impressions: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
position: number;
product_id: string;
variant_id: string;
quantity: string;
}>;
};
};
type ElevarRemoveFromCartEvent = {
event: "dl_remove_from_cart";
ecommerce: {
currencyCode: string;
remove: {
actionField: { list: string };
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
quantity: string;
list: string;
product_id: string;
variant_id: string;
image: string | null;
}>;
};
};
};
type ElevarCheckoutStepEventBase = {
event_id?: string;
user_properties: ElevarUserProperties;
ecommerce: {
currencyCode: string;
checkout: {
actionField: {
step: "1" | "2" | "3" | "4";
shipping_tier?: string;
};
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
quantity: string;
list: string;
product_id: string;
variant_id: string;
image: string;
url: string;
selling_plan_name: string;
}>;
};
};
};
type ElevarBeginCheckoutEvent = {
event: "dl_begin_checkout";
} & ElevarCheckoutStepEventBase;
type ElevarAddContactInfoEvent = {
event: "dl_add_contact_info";
} & ElevarCheckoutStepEventBase;
type ElevarAddShippingInfoEvent = {
event: "dl_add_shipping_info";
} & ElevarCheckoutStepEventBase;
type ElevarAddPaymentInfoEvent = {
event: "dl_add_payment_info";
} & ElevarCheckoutStepEventBase;
type ElevarPurchaseEvent = {
event: "dl_purchase";
user_properties: ElevarUserProperties;
ecommerce: {
currencyCode: string;
purchase: {
actionField: {
id: string | number;
order_name?: string;
revenue: string;
tax: string;
shipping: string;
coupon?: string;
sub_total?: string;
product_sub_total: string;
discount_amount?: string;
shipping_tier?: string;
sales_channel?: string;
physical_location_id?: string;
};
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
quantity: string;
list: string;
position: string;
product_id: string;
variant_id: string;
image: string;
discount_amount?: string;
selling_plan_name?: string;
cogs?: string;
}>;
};
};
marketing: { landing_site: string | null };
};
type ElevarSubscribeEvent = {
event: "dl_subscribe";
} & (
| {
lead_type: "email";
user_properties: {
customer_email: string;
customer_phone?: string;
};
}
| {
lead_type: "phone";
user_properties: {
customer_email?: string;
customer_phone: string;
};
}
);
type ElevarCompleteQuizEvent = {
event: "dl_complete_quiz";
user_properties: ElevarUserProperties;
event_properties: {
quiz_result: string;
};
};
type ElevarAddToWishlistEvent = {
event: "dl_add_to_wishlist";
user_properties: ElevarUserProperties;
event_properties: {
currencyCode: string;
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
quantity: string;
list: string;
product_id: string;
variant_id: string;
compare_at_price?: string;
image: string | null;
url?: string;
}>;
};
};
type ElevarCustomizeItemEvent = {
event: "dl_customize_item";
user_properties: ElevarUserProperties;
event_properties: {
currencyCode: string;
products: Array<{
id: string;
name: string;
brand: string;
category: string;
variant: string;
price: string;
quantity: string;
list: string;
product_id: string;
variant_id: string;
compare_at_price?: string;
image: string | null;
url?: string;
}>;
};
};
type ElevarStartTrialEvent = {
event: "dl_start_trial";
user_properties: ElevarUserProperties;
event_properties: {
pltv: string;
value: string;
currency_code: string;
};
};
type ElevarFindLocationEvent = {
event: "dl_find_location";
user_properties: ElevarUserProperties;
event_properties: {
store_location: string;
};
};
type ElevarScheduleEvent = {
event: "dl_schedule";
user_properties: ElevarUserProperties;
event_properties: {
value: string;
currency_code: string;
};
};
export type ElevarEventMap = {
dl_sign_up: ElevarSignUpEvent;
dl_login: ElevarLoginEvent;
dl_user_data: ElevarUserDataEvent;
dl_view_item_list: ElevarViewItemListEvent;
dl_view_search_results: ElevarViewSearchResultsEvent;
dl_select_item: ElevarSelectItemEvent;
dl_view_item: ElevarViewItemEvent;
dl_add_to_cart: ElevarAddToCartEvent;
dl_view_cart: ElevarViewCartEvent;
dl_remove_from_cart: ElevarRemoveFromCartEvent;
dl_begin_checkout: ElevarBeginCheckoutEvent;
dl_add_contact_info: ElevarAddContactInfoEvent;
dl_add_shipping_info: ElevarAddShippingInfoEvent;
dl_add_payment_info: ElevarAddPaymentInfoEvent;
dl_purchase: ElevarPurchaseEvent;
dl_subscribe: ElevarSubscribeEvent;
dl_complete_quiz: ElevarCompleteQuizEvent;
dl_add_to_wishlist: ElevarAddToWishlistEvent;
dl_customize_item: ElevarCustomizeItemEvent;
dl_start_trial: ElevarStartTrialEvent;
dl_find_location: ElevarFindLocationEvent;
dl_schedule: ElevarScheduleEvent;
};
export type ElevarEvent = ValueOf<ElevarEventMap>;Keys Set
ts
interface Window {
ElevarDebugMode?: (isEnabled: boolean) => Promise<void>;
ElevarInvalidateContext?: () => Promise<void>;
ElevarClearStorage?: () => Promise<void>;
ElevarDataLayer?: Array<import("./exports").ElevarEvent>;
ElevarConsent?: Array<import("./exports").ElevarConsent>;
}Keys Read
ts
interface Window {
ElevarUserIdFn?: () => string | Promise<string>;
ElevarMarketIdFn?: () => string | Promise<string>;
ElevarTransformFn?: <T extends import("./exports").ElevarEvent>(item: T) => T;
ElevarForwardFn?: (args: {
url: string;
params: URLSearchParams;
mergedItems: import("./exports").ElevarEvent;
}) => void | Promise<void>;
ElevarContextFn?: (context: import("./exports").ElevarContext) => void;
}Example Utility
ts
type ElevarItem = NonNullable<(typeof window)["ElevarDataLayer"]>[0];
export const pushToElevarDataLayer = (item: ElevarItem) => {
window.ElevarDataLayer = window.ElevarDataLayer ?? [];
window.ElevarDataLayer.push(item);
};