diff --git a/src/PKPass.ts b/src/PKPass.ts index 61bff73..2c1fa24 100644 --- a/src/PKPass.ts +++ b/src/PKPass.ts @@ -1010,6 +1010,11 @@ export default class PKPass extends Bundle { * Allows setting a series of relevancy intervals or * relevancy entries for the pass. * + * Please note that `RelevantDate[]` `relevantDate` property was renamed + * in "date" since iOS 26. Since retro-compatibility is not ensured, + * this methods takes `date`, and fallbacks to `relevantDate`, and use + * the first value found for both properties. + * * @param {Schemas.RelevantDate[] | null} relevancyEntries * @returns {void} */ @@ -1031,10 +1036,13 @@ export default class PKPass extends Bundle { Schemas.validate(Schemas.RelevantDate, entry); if (isRelevantEntry(entry)) { + const date = Utils.processDate( + new Date(entry.date || entry.relevantDate), + ); + acc.push({ - relevantDate: Utils.processDate( - new Date(entry.relevantDate), - ), + relevantDate: date, + date, }); return acc; @@ -1193,5 +1201,8 @@ function validateJSONBuffer( function isRelevantEntry( entry: Schemas.RelevantDate, ): entry is Schemas.RelevancyEntry { - return Object.prototype.hasOwnProperty.call(entry, "relevantDate"); + return ( + Object.prototype.hasOwnProperty.call(entry, "relevantDate") || + Object.prototype.hasOwnProperty.call(entry, "date") + ); } diff --git a/src/schemas/index.ts b/src/schemas/index.ts index 8c6a695..3245c07 100644 --- a/src/schemas/index.ts +++ b/src/schemas/index.ts @@ -45,9 +45,19 @@ export interface RelevancyInterval { endDate: string | Date; } -export interface RelevancyEntry { - relevantDate: string | Date; -} +/** + * @iOSVersion 18 => "relevantDate" + * @iOSVersion 26 => "date" + */ +export type RelevancyEntry = + | { + date: string | Date; + relevantDate?: string | Date; + } + | { + date?: string | Date; + relevantDate: string | Date; + }; /** * @iOSVersion 18 @@ -73,6 +83,14 @@ export const RelevantDate = Joi.alternatives( ).required(), }), Joi.object().keys({ + /** + * Since iOS 26 + */ + date: Joi.alternatives(Joi.string().isoDate(), Joi.date().iso()), + /** + * Since iOS 18, then was renamed in + * 'date' in iOS 26 (what a breaking change) + */ relevantDate: Joi.alternatives( Joi.string().isoDate(), Joi.date().iso(),