passkit-generator
Version:
The easiest way to generate custom Apple Wallet passes in Node.js
360 lines • 22.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Semantics = void 0;
const tslib_1 = require("tslib");
const joi_1 = tslib_1.__importDefault(require("joi"));
const SemanticTagType = tslib_1.__importStar(require("./SemanticTagType.js"));
exports.Semantics = joi_1.default.object().keys({
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
admissionLevel: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
admissionLevelAbbreviation: joi_1.default.string(),
airlineCode: joi_1.default.string(),
artistIDs: joi_1.default.array().items(joi_1.default.string()),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
albumIDs: joi_1.default.array().items(joi_1.default.string()),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
airplay: joi_1.default.array().items({
airplayDeviceGroupToken: joi_1.default.string(),
}),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
attendeeName: joi_1.default.string(),
awayTeamAbbreviation: joi_1.default.string(),
awayTeamLocation: joi_1.default.string(),
awayTeamName: joi_1.default.string(),
/**
* @iOSVersion 18
*
* Additional ticket attributes that other tags or keys in the pass don’t include.
* Use this key for any type of event ticket.
*/
additionalTicketAttributes: joi_1.default.string(),
balance: SemanticTagType.CurrencyAmount,
/**
* A group number for boarding.
* Use this key for any type of boarding pass.
*/
boardingGroup: joi_1.default.string(),
/**
* A sequence number for boarding.
* Use this key for any type of boarding pass.
*/
boardingSequenceNumber: joi_1.default.string(),
/**
* @iOSVersion 26
*
* A zone number for boarding. Don't include the word _zone_.
*/
boardingZone: joi_1.default.string(),
/**
* The number of the passenger car.
* A train car is also called a carriage, wagon, coach, or bogie in some countries.
* Use this key only for a train or other rail boarding pass.
*/
carNumber: joi_1.default.string(),
confirmationNumber: joi_1.default.string(),
currentArrivalDate: joi_1.default.string(),
currentBoardingDate: joi_1.default.string(),
currentDepartureDate: joi_1.default.string(),
/**
* The IATA airport code for the departure airport, such as `MPM` or `LHR`.
* Use this key only for airline boarding passes.
*/
departureAirportCode: joi_1.default.string(),
/**
* The full name of the departure airport, such as `Maputo International Airport`.
* Use this key only for airline boarding passes.
*/
departureAirportName: joi_1.default.string(),
/**
* @iOSVersion 26
*
* The name of the departure city to display on the boarding pass, such as London or Shanghai.
*/
departureCityName: joi_1.default.string(),
/**
* The gate number or letters of the departure gate, such as 1A. Don’t include the word gate.
*/
departureGate: joi_1.default.string(),
/**
* An object that represents the geographic coordinates of the transit departure location,
* suitable for display on a map.
* If possible, use precise locations, which are more useful to travelers;
* for example, the specific location of an airport gate.
*
* Use this key for any type of boarding pass.
*/
departureLocation: SemanticTagType.Location,
departureLocationDescription: joi_1.default.string(),
departurePlatform: joi_1.default.string(),
departureStationName: joi_1.default.string(),
departureTerminal: joi_1.default.string(),
/**
* @iOSVersion 26
*
* A list of security programs that exist at the departure location. This only shows in the UI if a program is in `passengerEligibleSecurityPrograms` and at least one of `departureLocationSecurityPrograms` or `destinationLocationSecurityPrograms`
*/
departureLocationSecurityPrograms: joi_1.default.array().items(joi_1.default.string().regex(/(PKTransitSecurityProgramTSAPreCheck|PKTransitSecurityProgramTSAPreCheckTouchlessID|PKTransitSecurityProgramOSS|PKTransitSecurityProgramITI|PKTransitSecurityProgramITD|PKTransitSecurityProgramGlobalEntry|PKTransitSecurityProgramCLEAR)/)),
/**
* @iOSVersion 26
*
* The time zone of the departure location, such as America/Chicago. See the IANA Time Zone Database for the full list of supported time zones.
*/
departureLocationTimeZone: joi_1.default.string(),
destinationAirportCode: joi_1.default.string(),
destinationAirportName: joi_1.default.string(),
/**
* @iOSVersion 26
*
* The name of the destination city to display on the boarding pass, such as London or Shanghai.
*/
destinationCityName: joi_1.default.string(),
destinationGate: joi_1.default.string(),
destinationLocation: SemanticTagType.Location,
destinationLocationDescription: joi_1.default.string(),
destinationPlatform: joi_1.default.string(),
destinationStationName: joi_1.default.string(),
destinationTerminal: joi_1.default.string(),
/**
* @iOSVersion 26
*
* A list of security programs the passenger is eligible for. This only shows in the UI if a program is in passengerEligibleSecurityPrograms and at least one of departureLocationSecurityPrograms or destinationLocationSecurityPrograms.
*/
destinationLocationSecurityPrograms: joi_1.default.array().items(joi_1.default.string().regex(/(PKTransitSecurityProgramTSAPreCheck|PKTransitSecurityProgramTSAPreCheckTouchlessID|PKTransitSecurityProgramOSS|PKTransitSecurityProgramITI|PKTransitSecurityProgramITD|PKTransitSecurityProgramGlobalEntry|PKTransitSecurityProgramCLEAR)/)),
/**
* @iOSVersion 26
*
* The time zone of the destination location, such as America/Los_Angeles. See the IANA Time Zone Database for the full list of supported time zones.
*/
destinationLocationTimeZone: joi_1.default.string(),
duration: joi_1.default.number(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
entranceDescription: joi_1.default.string(),
eventEndDate: joi_1.default.string(),
eventName: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*
* Shows a message in the live activity
* when the activity starts.
*/
eventLiveMessage: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout).
*
* Can be used as an alternative way to
* show show start date, with more control
* on time and timeZone details and as
* a way to show the event guide, both
* instead of `eventStartDate`.
*/
eventStartDateInfo: SemanticTagType.EventDateInfo,
eventStartDate: joi_1.default.string(),
eventType: joi_1.default.string().regex(/(PKEventTypeGeneric|PKEventTypeLivePerformance|PKEventTypeMovie|PKEventTypeSports|PKEventTypeConference|PKEventTypeConvention|PKEventTypeWorkshop|PKEventTypeSocialGathering)/),
flightCode: joi_1.default.string(),
flightNumber: joi_1.default.number(),
genre: joi_1.default.string(),
homeTeamAbbreviation: joi_1.default.string(),
homeTeamLocation: joi_1.default.string(),
homeTeamName: joi_1.default.string(),
/**
* @iOSVersion 26
*
* An optional boolean that indicates whether the passenger's international documents are verified. If set to `true` Wallet displays the badge on the boarding pass with the value from `internationalDocumentsVerifiedDeclarationName`.
*/
internationalDocumentsAreVerified: joi_1.default.boolean(),
/**
* @iOSVersion 26
*
* The name of the declaration given once the passenger's international documents are verified. Examples include `DOCS OK` or `Travel Ready`. If `internationalDocumentsAreVerified` is true, Wallet displays a badge on the boarding pass with this value.
*/
internationalDocumentsVerifiedDeclarationName: joi_1.default.string(),
/**
* The abbreviated league name for a sports event. Use this key only for a sports event ticket.
*/
leagueAbbreviation: joi_1.default.string(),
/**
* The unabbreviated league name for a sports event. Use this key only for a sports event ticket.
*/
leagueName: joi_1.default.string(),
/**
* @iOSVersion 26
*
* The MapKit Place IDs that reference the transit provider lounge locations. For more information, see [Identifying unique locations with Place IDs](https://developer.apple.com/documentation/MapKit/identifying-unique-locations-with-place-ids)
*/
loungePlaceIDs: joi_1.default.array().items(joi_1.default.string()),
/**
* The name of a frequent flyer or loyalty program.
* Use this key for any type of boarding pass.
*/
membershipProgramName: joi_1.default.string(),
/**
* The ticketed passenger’s frequent flyer or loyalty number.
* Use this key for any type of boarding pass.
*/
membershipProgramNumber: joi_1.default.string(),
/**
* @iOSVersion 26
*
* The ticketed passenger’s frequent flyer or loyalty program status.
* Use this key for any type of boarding pass.
*/
membershipProgramStatus: joi_1.default.string(),
originalArrivalDate: joi_1.default.string(),
originalBoardingDate: joi_1.default.string(),
originalDepartureDate: joi_1.default.string(),
/**
* An object that represents the name of the passenger.
* Use this key for any type of boarding pass.
*/
passengerName: SemanticTagType.PersonNameComponents,
/**
* @iOSVersion 26
*
* An array of airline-specific SSRs (Special Service Requests) that apply to the ticketed passenger.
*/
passengerAirlineSSRs: joi_1.default.array().items(joi_1.default.string()),
/**
* @iOSVersion 26
*
* A list of capabilities the passenger has. Only use this key for airline boarding passes.
*/
passengerCapabilities: joi_1.default.array().items(joi_1.default.string().regex(/(PKPassengerCapabilityPreboarding|PKPassengerCapabilityPriorityBoarding|PKPassengerCapabilityCarryon|PKPassengerCapabilityPersonalItem)/)),
/**
* @iOSVersion 26
*
* A list of security programs the passenger is eligible for. This only shows in the UI if a program is in `passengerEligibleSecurityPrograms` and at least one of `departureLocationSecurityPrograms` or `destinationLocationSecurityPrograms`.
*/
passengerEligibleSecurityPrograms: joi_1.default.array().items(joi_1.default.string().regex(/(PKTransitSecurityProgramTSAPreCheck|PKTransitSecurityProgramTSAPreCheckTouchlessID|PKTransitSecurityProgramOSS|PKTransitSecurityProgramITI|PKTransitSecurityProgramITD|PKTransitSecurityProgramGlobalEntry|PKTransitSecurityProgramCLEAR)/)),
/**
* @iOSVersion 26
*
* An array of IATA information SSRs that apply to the ticketed passenger. A comprehensive list of service SSRs can be found in the [IATA Airlines Developer Guide](https://guides.developer.iata.org/docs/21-1_ImplementationGuide.pdf) under A List of Information SSRs.
*/
passengerInformationSSRs: joi_1.default.array().items(joi_1.default.string()),
/**
* @iOSVersion 26
*
* An array of IATA SSRs that apply to the ticketed passenger. A comprehensive list of service SSRs can be found in the [IATA Airlines Developer Guide](https://guides.developer.iata.org/docs/21-1_ImplementationGuide.pdf) under A List of Service SSRs.
*/
passengerServiceSSRs: joi_1.default.array().items(joi_1.default.string()),
performerNames: joi_1.default.array().items(joi_1.default.string()),
/**
* The priority status the ticketed passenger holds, such as `Gold` or `Silver`.
* Use this key for any type of boarding pass.
*/
priorityStatus: joi_1.default.string(),
playlistIDs: joi_1.default.array().items(joi_1.default.string()),
seats: joi_1.default.array().items(SemanticTagType.Seat),
securityScreening: joi_1.default.string(),
silenceRequested: joi_1.default.boolean(),
sportName: joi_1.default.string(),
tailgatingAllowed: joi_1.default.boolean(),
/**
* @iOSVersion 26
*
* A localizable string that denotes the ticket class, such as `Saver`, `Economy`, `First`. This value displays as a badge on the boarding pass.
*/
ticketFareClass: joi_1.default.string(),
totalPrice: SemanticTagType.CurrencyAmount,
/**
* The name of the transit company. Use this key for any type of boarding pass.
*/
transitProvider: joi_1.default.string(),
/**
* A brief description of the current boarding status for the vessel, such as `On Time` or `Delayed`.
* For delayed status, provide `currentBoardingDate`, `currentDepartureDate`, and `currentArrivalDate` where available.
* Use this key for any type of boarding pass.
*/
transitStatus: joi_1.default.string(),
/**
* A brief description that explains the reason for the current transitStatus, such as `Thunderstorms`.
* Use this key for any type of boarding pass.
*/
transitStatusReason: joi_1.default.string(),
vehicleName: joi_1.default.string(),
vehicleNumber: joi_1.default.string(),
vehicleType: joi_1.default.string(),
venueEntrance: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueGatesOpenDate: joi_1.default.string(),
venueLocation: SemanticTagType.Location,
venueName: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueParkingLotsOpenDate: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueBoxOfficeOpenDate: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueDoorsOpenDate: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueFanZoneOpenDate: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueOpenDate: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueCloseDate: joi_1.default.string(),
venuePhoneNumber: joi_1.default.string(),
venueRoom: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueRegionName: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueEntranceGate: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueEntranceDoor: joi_1.default.string(),
/**
* @iOSVersion 18
* @passStyle eventTicket (new layout)
*/
venueEntrancePortal: joi_1.default.string(),
wifiAccess: joi_1.default.array().items(SemanticTagType.WifiNetwork),
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VtYW50aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NjaGVtYXMvU2VtYW50aWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxzREFBc0I7QUFDdEIsOEVBQXdEO0FBbWdCM0MsUUFBQSxTQUFTLEdBQUcsYUFBRyxDQUFDLE1BQU0sRUFBYSxDQUFDLElBQUksQ0FBQztJQUNyRDs7O09BR0c7SUFDSCxjQUFjLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTtJQUU1Qjs7O09BR0c7SUFDSCwwQkFBMEIsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO0lBRXhDLFdBQVcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO0lBQ3pCLFNBQVMsRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUUxQzs7O09BR0c7SUFDSCxRQUFRLEVBQUUsYUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFekM7OztPQUdHO0lBQ0gsT0FBTyxFQUFFLGFBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDMUIsdUJBQXVCLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTtLQUNyQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsWUFBWSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7SUFFMUIsb0JBQW9CLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTtJQUNsQyxnQkFBZ0IsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO0lBQzlCLFlBQVksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO0lBRTFCOzs7OztPQUtHO0lBQ0gsMEJBQTBCLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTtJQUV4QyxPQUFPLEVBQUUsZUFBZSxDQUFDLGNBQWM7SUFFdkM7OztPQUdHO0lBQ0gsYUFBYSxFQUFFLGFBQUcsQ0FBQyxN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