UNPKG

passkit-generator

Version:

The easiest way to generate custom Apple Wallet passes in Node.js

360 lines 22.7 kB
"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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