@causalfoundry/js-sdk
Version:
Causal Foundry WEB SDK (JS/TS)
85 lines (75 loc) • 1.92 kB
text/typescript
import { injectEvent } from "../../core/injector";
import {
CancelCheckoutProperties,
CartProperties,
CheckoutInternalProperties,
CheckoutProperties,
DeliveryProperties,
ECommerceTypes,
ItemReportProperties,
ItemRequestProperties,
ItemProperties,
} from "./typings";
import { validate } from "./validators";
import { getPayloadFromItem } from "./itemObjectMapper";
export const logIngestEvent = async (
eventType: ECommerceTypes,
properties:
| CancelCheckoutProperties
| CheckoutProperties
| CartProperties
| DeliveryProperties
| ItemReportProperties
| ItemRequestProperties
| ItemProperties,
sendNow = false,
eventTime?: string
) => {
if (!validate(eventType, properties)) return;
if (eventType === ECommerceTypes.Item || eventType === ECommerceTypes.Cart) {
const prs = properties as ItemProperties | CartProperties;
const payload = getPayloadFromItem(prs.item);
injectEvent(
eventType,
(properties as any).action,
payload,
sendNow,
"",
eventTime
);
return;
}
if (eventType === ECommerceTypes.Checkout) {
const prs = properties as CheckoutProperties;
if (!prs.items?.length) return;
for (const itemObj of prs.items) {
const itemPayload = getPayloadFromItem(itemObj);
const payload: CheckoutInternalProperties = {
order_id: prs.order_id,
is_successful: prs.is_successful,
cart_price: prs.cart_price,
cart_id: prs.cart_id,
shop_mode: prs.shop_mode,
meta: prs.meta,
items: itemPayload,
};
injectEvent(
eventType,
(prs.is_successful) ? "is_successful" : "not_successful",
payload,
sendNow,
"",
eventTime
);
}
return;
}
injectEvent(
eventType,
(properties as any).action,
properties,
sendNow,
"",
eventTime
);
};