UNPKG

@walletpass/pass-js

Version:

Apple Wallet Pass generating and pushing updates from Node.js

56 lines 2.5 kB
// SPDX-License-Identifier: AGPL-3.0-or-later // Copyright (C) 2017-2026 Konstantin Vyatkin <tino@vtkn.io> import { stripJsonComments } from './strip-json-comments.js'; const PERSONALIZATION_FIELDS = new Set([ 'PKPassPersonalizationFieldName', 'PKPassPersonalizationFieldPostalCode', 'PKPassPersonalizationFieldEmailAddress', 'PKPassPersonalizationFieldPhoneNumber', ]); const PERSONALIZATION_LOGO_RE = /(?:^|\/)personalizationLogo(?:@[23]x)?\.png$/; function assertPlainObject(value) { if (!value || typeof value !== 'object' || Array.isArray(value) || Object.getPrototypeOf(value) !== Object.prototype) { throw new TypeError('personalization must be a plain object'); } } export function validatePersonalization(value) { assertPlainObject(value); if (typeof value.description !== 'string' || value.description.length === 0) throw new TypeError('personalization.description must be a non-empty string'); if (!Array.isArray(value.requiredPersonalizationFields)) throw new TypeError('personalization.requiredPersonalizationFields must be an array'); if (value.requiredPersonalizationFields.length === 0) throw new TypeError('personalization.requiredPersonalizationFields must contain at least one field'); const requiredPersonalizationFields = value.requiredPersonalizationFields.map((field, index) => { if (typeof field !== 'string' || !PERSONALIZATION_FIELDS.has(field)) { throw new TypeError(`personalization.requiredPersonalizationFields[${index}] is invalid`); } return field; }); const res = { description: value.description, requiredPersonalizationFields, }; if (value.termsAndConditions !== undefined) { if (typeof value.termsAndConditions !== 'string') throw new TypeError('personalization.termsAndConditions must be a string'); res.termsAndConditions = value.termsAndConditions; } return res; } export function parsePersonalizationBuffer(buffer) { return validatePersonalization(JSON.parse(stripJsonComments(buffer.toString('utf8')))); } export function createPersonalizationEntry(personalization) { return { path: 'personalization.json', data: Buffer.from(JSON.stringify(validatePersonalization(personalization))), }; } export function isPersonalizationLogoPath(path) { return PERSONALIZATION_LOGO_RE.test(path); } //# sourceMappingURL=personalization.js.map