UNPKG

@adyen/api-library

Version:

The Adyen API Library for NodeJS enables you to work with Adyen APIs.

185 lines 6.42 kB
"use strict"; /* * ###### * ###### * ############ ####( ###### #####. ###### ############ ############ * ############# #####( ###### #####. ###### ############# ############# * ###### #####( ###### #####. ###### ##### ###### ##### ###### * ###### ###### #####( ###### #####. ###### ##### ##### ##### ###### * ###### ###### #####( ###### #####. ###### ##### ##### ###### * ############# ############# ############# ############# ##### ###### * ############ ############ ############# ############ ##### ###### * ###### * ############# * ############ * Adyen NodeJS API Library * Copyright (c) 2026 Adyen B.V. * This file is open source and available under the MIT license. * See the LICENSE file for more info. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.toBase64 = exports.toJson = exports.fromKeyValuePairs = exports.fromBase64 = exports.parse = void 0; const saleToAcquirerData_1 = require("./saleToAcquirerData"); const RECURRING_PROCESSING_MODELS = Object.values(saleToAcquirerData_1.RecurringProcessingModel); /** * Parses and serializes {@link SaleToAcquirerData} objects from/to their wire formats. * * Supports two formats: * - Base64-encoded JSON: a JSON object encoded as a Base64 string. * - Key-value pairs: form-encoded pairs using `&` as separator * (e.g. `shopperEmail=foo@bar.com&tenderOption=AskGratuity`). */ /** * Parses a raw `SaleToAcquirerData` string, auto-detecting the format. * * - If the string is valid Base64 and decodes to a JSON object, it is parsed as JSON. * - Otherwise it is parsed as form-encoded key-value pairs. * * @param raw The raw `SaleToAcquirerData` string. * @returns Parsed {@link SaleToAcquirerData}. */ function parse(raw) { const decoded = tryDecodeBase64Json(raw); if (decoded !== null) { return decoded; } return fromKeyValuePairs(raw); } exports.parse = parse; /** * Decodes a Base64-encoded JSON string into a {@link SaleToAcquirerData} object. * * @param base64 Base64-encoded JSON string. * @returns Decoded {@link SaleToAcquirerData}. */ function fromBase64(base64) { try { const json = Buffer.from(base64, "base64").toString("utf8"); return JSON.parse(json); } catch (e) { throw new Error(`Failed to deserialize SaleToAcquirerData: ${e.message}`); } } exports.fromBase64 = fromBase64; /** * Parses a form-encoded key-value pair string (e.g. * `shopperEmail=foo@bar.com&tenderOption=AskGratuity`) into a {@link SaleToAcquirerData} object. * Metadata fields use dotted notation: `metadata.key=value`. * * @param keyValuePairs Form-encoded key-value string using `&` as separator. * @returns Parsed {@link SaleToAcquirerData}. */ function fromKeyValuePairs(keyValuePairs) { const data = {}; const metadata = {}; const additionalData = {}; const params = new URLSearchParams(keyValuePairs); for (const [key, value] of params) { if (!key) { continue; } if (key.startsWith("metadata.")) { const subKey = key.substring("metadata.".length); if (subKey) { metadata[subKey] = value; } continue; } switch (key) { case "shopperEmail": data.shopperEmail = value; break; case "shopperReference": data.shopperReference = value; break; case "shopperStatement": data.shopperStatement = value; break; case "recurringContract": data.recurringContract = value; break; case "recurringDetailName": data.recurringDetailName = value; break; case "recurringTokenService": data.recurringTokenService = value; break; case "recurringProcessingModel": data.recurringProcessingModel = RECURRING_PROCESSING_MODELS.includes(value) ? value : undefined; break; case "store": data.store = value; break; case "merchantAccount": data.merchantAccount = value; break; case "currency": data.currency = value; break; case "tenderOption": data.tenderOption = value; break; case "authorisationType": data.authorisationType = value; break; case "ssc": data.ssc = value; break; case "redemptionType": data.redemptionType = value; break; default: additionalData[key] = value; break; } } if (Object.keys(metadata).length > 0) { data.metadata = metadata; } if (Object.keys(additionalData).length > 0) { data.additionalData = additionalData; } return data; } exports.fromKeyValuePairs = fromKeyValuePairs; /** * Serializes a {@link SaleToAcquirerData} object to a JSON string. * * @param data The object to serialize. * @returns JSON string representation. */ function toJson(data) { return JSON.stringify(data); } exports.toJson = toJson; /** * Encodes a {@link SaleToAcquirerData} object to a Base64-encoded JSON string. * * @param data The object to encode. * @returns Base64-encoded JSON representation. */ function toBase64(data) { return Buffer.from(toJson(data), "utf8").toString("base64"); } exports.toBase64 = toBase64; /** * Attempts to decode a Base64-encoded JSON object. Returns null when the input is not * valid Base64 or does not decode to a JSON object. */ function tryDecodeBase64Json(raw) { try { const sanitized = raw.replace(/\s/g, ""); const decoded = Buffer.from(sanitized, "base64").toString("utf8"); if (decoded.trim().startsWith("{")) { return JSON.parse(decoded); } return null; } catch (_a) { return null; } } //# sourceMappingURL=saleToAcquirerDataParser.js.map