diff --git a/.changeset/slimy-dancers-rest.md b/.changeset/slimy-dancers-rest.md new file mode 100644 index 0000000000..b1ec6200d6 --- /dev/null +++ b/.changeset/slimy-dancers-rest.md @@ -0,0 +1,5 @@ +--- +'@adyen/adyen-web': minor +--- + +Feature: add support for sdkData API field diff --git a/packages/lib/src/components/internal/BaseElement/BaseElement.ts b/packages/lib/src/components/internal/BaseElement/BaseElement.ts index f3b34369e9..2c667b54ac 100644 --- a/packages/lib/src/components/internal/BaseElement/BaseElement.ts +++ b/packages/lib/src/components/internal/BaseElement/BaseElement.ts @@ -11,6 +11,7 @@ import { AnalyticsInitialEvent } from '../../../core/Analytics/types'; import { off, on } from '../../../utils/listenerUtils'; import { AnalyticsInfoEvent } from '../../../core/Analytics/AnalyticsInfoEvent'; import { AnalyticsEvent } from '../../../core/Analytics/AnalyticsEvent'; +import { createSdkData } from '../../../utils/createSdkData'; /** * Verify if the first parameter is instance of Core. @@ -104,9 +105,13 @@ abstract class BaseElement
implements IBaseElement { componentData.paymentMethod.checkoutAttemptId = checkoutAttemptId; } + // Create sdkData when both analytics and risk data are available + const sdkData = checkoutAttemptId && clientData ? createSdkData(checkoutAttemptId, clientData) : undefined; + return { ...(clientData && { riskData: { clientData } }), ...(order && { order: { orderData: order.orderData, pspReference: order.pspReference } }), + ...(sdkData && { sdkData }), ...componentData, clientStateDataIndicator: true }; diff --git a/packages/lib/src/utils/createSdkData.ts b/packages/lib/src/utils/createSdkData.ts new file mode 100644 index 0000000000..2e31eeef22 --- /dev/null +++ b/packages/lib/src/utils/createSdkData.ts @@ -0,0 +1,34 @@ +import { getUTCTimestamp } from '../core/Analytics/utils'; +import base64 from './base64'; + +export interface SdkDataObject { + schemaVersion: string; + createdAt: number; + analytics: { + checkoutAttemptId: string; + }; + riskData: { + clientData: string; + }; +} + +/** + * Creates the sdkData object with analytics and risk information + * @param checkoutAttemptId - The checkout attempt ID from analytics + * @param clientData - The client data from risk module + * @returns Base64 encoded JSON string of the SDK data object + */ +export function createSdkData(checkoutAttemptId: string, clientData: string): string { + const sdkDataObject: SdkDataObject = { + schemaVersion: '1.0', + createdAt: getUTCTimestamp(), + analytics: { + checkoutAttemptId + }, + riskData: { + clientData + } + }; + + return base64.encode(JSON.stringify(sdkDataObject)); +}