mirror of
https://github.com/marcogll/passkit-generator.git
synced 2026-03-15 19:25:23 +00:00
Added support to semantics keys to fields in schema
This commit is contained in:
120
src/schema.js
120
src/schema.js
@@ -1,7 +1,7 @@
|
|||||||
const Joi = require("joi");
|
const Joi = require("joi");
|
||||||
const debug = require("debug")("Schema");
|
const debug = require("debug")("Schema");
|
||||||
|
|
||||||
let instance = Joi.object().keys({
|
const instance = Joi.object().keys({
|
||||||
model: Joi.string().required(),
|
model: Joi.string().required(),
|
||||||
certificates: Joi.object().keys({
|
certificates: Joi.object().keys({
|
||||||
wwdr: Joi.string().required(),
|
wwdr: Joi.string().required(),
|
||||||
@@ -15,7 +15,7 @@ let instance = Joi.object().keys({
|
|||||||
shouldOverwrite: Joi.boolean()
|
shouldOverwrite: Joi.boolean()
|
||||||
});
|
});
|
||||||
|
|
||||||
let supportedOptions = Joi.object().keys({
|
const supportedOptions = Joi.object().keys({
|
||||||
serialNumber: Joi.string(),
|
serialNumber: Joi.string(),
|
||||||
description: Joi.string(),
|
description: Joi.string(),
|
||||||
userInfo: Joi.alternatives(Joi.object().unknown(), Joi.array()),
|
userInfo: Joi.alternatives(Joi.object().unknown(), Joi.array()),
|
||||||
@@ -30,14 +30,14 @@ let supportedOptions = Joi.object().keys({
|
|||||||
suppressStripShine: Joi.boolean()
|
suppressStripShine: Joi.boolean()
|
||||||
}).with("webServiceURL", "authenticationToken");
|
}).with("webServiceURL", "authenticationToken");
|
||||||
|
|
||||||
let barcode = Joi.object().keys({
|
const barcode = Joi.object().keys({
|
||||||
altText: Joi.string(),
|
altText: Joi.string(),
|
||||||
messageEncoding: Joi.string().default("iso-8859-1"),
|
messageEncoding: Joi.string().default("iso-8859-1"),
|
||||||
format: Joi.string().required().regex(/(PKBarcodeFormatQR|PKBarcodeFormatPDF417|PKBarcodeFormatAztec|PKBarcodeFormatCode128)/, "barcodeType"),
|
format: Joi.string().required().regex(/(PKBarcodeFormatQR|PKBarcodeFormatPDF417|PKBarcodeFormatAztec|PKBarcodeFormatCode128)/, "barcodeType"),
|
||||||
message: Joi.string().required()
|
message: Joi.string().required()
|
||||||
});
|
});
|
||||||
|
|
||||||
let field = Joi.object().keys({
|
const field = Joi.object().keys({
|
||||||
attributedValue: Joi.alternatives(Joi.string().allow(""), Joi.number(), Joi.date().iso()),
|
attributedValue: Joi.alternatives(Joi.string().allow(""), Joi.number(), Joi.date().iso()),
|
||||||
changeMessage: Joi.string(),
|
changeMessage: Joi.string(),
|
||||||
dataDetectorType: Joi.array().items(Joi.string().regex(/(PKDataDetectorTypePhoneNumber|PKDataDetectorTypeLink|PKDataDetectorTypeAddress|PKDataDetectorTypeCalendarEvent)/, "dataDetectorType")),
|
dataDetectorType: Joi.array().items(Joi.string().regex(/(PKDataDetectorTypePhoneNumber|PKDataDetectorTypeLink|PKDataDetectorTypeAddress|PKDataDetectorTypeCalendarEvent)/, "dataDetectorType")),
|
||||||
@@ -45,6 +45,7 @@ let field = Joi.object().keys({
|
|||||||
textAlignment: Joi.string().regex(/(PKTextAlignmentLeft|PKTextAlignmentCenter|PKTextAlignmentRight|PKTextAlignmentNatural)/, "graphic-alignment"),
|
textAlignment: Joi.string().regex(/(PKTextAlignmentLeft|PKTextAlignmentCenter|PKTextAlignmentRight|PKTextAlignmentNatural)/, "graphic-alignment"),
|
||||||
key: Joi.string().required(),
|
key: Joi.string().required(),
|
||||||
value: Joi.alternatives(Joi.string().allow(""), Joi.number(), Joi.date().iso()).required(),
|
value: Joi.alternatives(Joi.string().allow(""), Joi.number(), Joi.date().iso()).required(),
|
||||||
|
semantics,
|
||||||
// date fields formatters, all optionals
|
// date fields formatters, all optionals
|
||||||
dateStyle: Joi.string().regex(/(PKDateStyleNone|PKDateStyleShort|PKDateStyleMedium|PKDateStyleLong|PKDateStyleFull)/, "date style"),
|
dateStyle: Joi.string().regex(/(PKDateStyleNone|PKDateStyleShort|PKDateStyleMedium|PKDateStyleLong|PKDateStyleFull)/, "date style"),
|
||||||
ignoreTimeZone: Joi.boolean(),
|
ignoreTimeZone: Joi.boolean(),
|
||||||
@@ -64,21 +65,21 @@ let field = Joi.object().keys({
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
let beaconsDict = Joi.object().keys({
|
const beaconsDict = Joi.object().keys({
|
||||||
major: Joi.number().integer().positive().max(65535).greater(Joi.ref("minor")),
|
major: Joi.number().integer().positive().max(65535).greater(Joi.ref("minor")),
|
||||||
minor: Joi.number().integer().positive().max(65535).less(Joi.ref("major")),
|
minor: Joi.number().integer().positive().max(65535).less(Joi.ref("major")),
|
||||||
proximityUUID: Joi.string().required(),
|
proximityUUID: Joi.string().required(),
|
||||||
relevantText: Joi.string()
|
relevantText: Joi.string()
|
||||||
});
|
});
|
||||||
|
|
||||||
let locationsDict = Joi.object().keys({
|
const locationsDict = Joi.object().keys({
|
||||||
altitude: Joi.number(),
|
altitude: Joi.number(),
|
||||||
latitude: Joi.number().required(),
|
latitude: Joi.number().required(),
|
||||||
longitude: Joi.number().required(),
|
longitude: Joi.number().required(),
|
||||||
relevantText: Joi.string()
|
relevantText: Joi.string()
|
||||||
});
|
});
|
||||||
|
|
||||||
let passDict = Joi.object().keys({
|
const passDict = Joi.object().keys({
|
||||||
auxiliaryFields: Joi.array().items(field),
|
auxiliaryFields: Joi.array().items(field),
|
||||||
backFields: Joi.array().items(field),
|
backFields: Joi.array().items(field),
|
||||||
headerFields: Joi.array().items(field),
|
headerFields: Joi.array().items(field),
|
||||||
@@ -86,14 +87,113 @@ let passDict = Joi.object().keys({
|
|||||||
secondaryFields: Joi.array().items(field)
|
secondaryFields: Joi.array().items(field)
|
||||||
});
|
});
|
||||||
|
|
||||||
let transitType = Joi.string().regex(/(PKTransitTypeAir|PKTransitTypeBoat|PKTransitTypeBus|PKTransitTypeGeneric|PKTransitTypeTrain)/);
|
const transitType = Joi.string().regex(/(PKTransitTypeAir|PKTransitTypeBoat|PKTransitTypeBus|PKTransitTypeGeneric|PKTransitTypeTrain)/);
|
||||||
|
|
||||||
let nfcDict = Joi.object().keys({
|
const nfcDict = Joi.object().keys({
|
||||||
message: Joi.string().required().max(64),
|
message: Joi.string().required().max(64),
|
||||||
encryptionPublicKey: Joi.string()
|
encryptionPublicKey: Joi.string()
|
||||||
});
|
});
|
||||||
|
|
||||||
let schemas = {
|
/* For a correct usage of semantics, please refer to https://apple.co/2I66Phk */
|
||||||
|
|
||||||
|
const semantics = Joi.object().keys({
|
||||||
|
// All
|
||||||
|
totalPrice: currencyAmount,
|
||||||
|
// boarding Passes and Events
|
||||||
|
duration: Joi.number(),
|
||||||
|
seats: Joi.array().items(seat),
|
||||||
|
silenceRequested: Joi.boolean(),
|
||||||
|
// all boarding passes
|
||||||
|
departureLocation: location,
|
||||||
|
destinationLocation: location,
|
||||||
|
destinationLocationDescription: location,
|
||||||
|
transitProvider: Joi.string(),
|
||||||
|
vehicleName: Joi.string(),
|
||||||
|
vehicleType: Joi.string(),
|
||||||
|
originalDepartureDate: Joi.string(),
|
||||||
|
currentDepartureDate: Joi.string(),
|
||||||
|
originalArrivalDate: Joi.string(),
|
||||||
|
currentArrivalDate: Joi.string(),
|
||||||
|
originalBoardingDate: Joi.string(),
|
||||||
|
currentBoardingDate: Joi.string(),
|
||||||
|
boardingGroup: Joi.string(),
|
||||||
|
boardingSequenceNumber: Joi.string(),
|
||||||
|
confirmationNumber: Joi.string(),
|
||||||
|
transitStatus: Joi.string(),
|
||||||
|
transitStatuReason: Joi.string(),
|
||||||
|
passengetName: personNameComponents,
|
||||||
|
membershipProgramName: Joi.string(),
|
||||||
|
membershipProgramNumber: Joi.string(),
|
||||||
|
priorityStatus: Joi.string(),
|
||||||
|
securityScreening: Joi.string(),
|
||||||
|
// Airline Boarding Passes
|
||||||
|
flightCode: Joi.string(),
|
||||||
|
airlineCode: Joi.string(),
|
||||||
|
flightNumber: Joi.number(),
|
||||||
|
departureAirportCode: Joi.string(),
|
||||||
|
departureAirportName: Joi.string(),
|
||||||
|
destinationTerminal: Joi.string(),
|
||||||
|
destinationGate: Joi.string(),
|
||||||
|
// Train and Other Rail Boarding Passes
|
||||||
|
departurePlatform: Joi.string(),
|
||||||
|
departureStationName: Joi.string(),
|
||||||
|
destinationPlatform: Joi.string(),
|
||||||
|
destinationStationName: Joi.string(),
|
||||||
|
carNumber: Joi.string(),
|
||||||
|
// All Event Tickets
|
||||||
|
eventName: Joi.string(),
|
||||||
|
venueName: Joi.string(),
|
||||||
|
venueLocation: location,
|
||||||
|
venueEntrance: Joi.string(),
|
||||||
|
venuePhoneNumber: Joi.string(),
|
||||||
|
venueRoom: Joi.string(),
|
||||||
|
eventType: Joi.string().regex(/(PKEventTypeGeneric|PKEventTypeLivePerformance|PKEventTypeMovie|PKEventTypeSports|PKEventTypeConference|PKEventTypeConvention|PKEventTypeWorkshop|PKEventTypeSocialGathering)/),
|
||||||
|
eventStartDate: Joi.string(),
|
||||||
|
eventEndDate: Joi.string(),
|
||||||
|
artistIDs: Joi.string(),
|
||||||
|
performerNames: Joi.array().items(Joi.string()),
|
||||||
|
genre: Joi.string(),
|
||||||
|
// Sport Event Tickets
|
||||||
|
leagueName: Joi.string(),
|
||||||
|
leagueAbbreviation: Joi.string(),
|
||||||
|
homeTeamLocation: Joi.string(),
|
||||||
|
homeTeamName: Joi.string(),
|
||||||
|
homeTeamAbbreviation: Joi.string(),
|
||||||
|
awayTeamLocation: Joi.string(),
|
||||||
|
awayTeamName: Joi.string(),
|
||||||
|
awayTeamAbbreviation: Joi.string(),
|
||||||
|
sportName: Joi.string(),
|
||||||
|
// Store Card Passes
|
||||||
|
balance: currencyAmount
|
||||||
|
});
|
||||||
|
|
||||||
|
const currencyAmount = Joi.object().keys({
|
||||||
|
currencyCode: Joi.string().required(),
|
||||||
|
amount: Joi.string().required(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const personNameComponents = Joi.object().keys({
|
||||||
|
givenName: Joi.string().required(),
|
||||||
|
familyName: Joi.string().required()
|
||||||
|
});
|
||||||
|
|
||||||
|
const seat = Joi.object().keys({
|
||||||
|
seatSection: Joi.string(),
|
||||||
|
seatRow: Joi.string(),
|
||||||
|
seatNumber: Joi.string(),
|
||||||
|
seatIdentifier: Joi.string(),
|
||||||
|
seatType: Joi.string(),
|
||||||
|
seatDescription: Joi.string()
|
||||||
|
});
|
||||||
|
|
||||||
|
const location = Joi.object().keys({
|
||||||
|
latitude: Joi.number(),
|
||||||
|
longitude: Joi.number()
|
||||||
|
});
|
||||||
|
|
||||||
|
// --------- UTILITIES ---------- //
|
||||||
|
|
||||||
|
const schemas = {
|
||||||
instance,
|
instance,
|
||||||
barcode,
|
barcode,
|
||||||
field,
|
field,
|
||||||
|
|||||||
Reference in New Issue
Block a user