Improved typings and type checkings

This commit is contained in:
Alexander Cerutti
2023-07-30 00:32:58 +02:00
parent 5895bb7ba0
commit ec8981185f

View File

@@ -27,20 +27,20 @@ interface RequestWithBody extends functions.Request {
textColor: string; textColor: string;
backgroundColor: string; backgroundColor: string;
labelColor: string; labelColor: string;
relevantDate: string; relevantDate?: string;
expiryDate: string; expiryDate?: string;
relevantLocationLat: number | "Blank"; relevantLocationLat?: number;
relevantLocationLong: number | "Blank"; relevantLocationLong?: number;
header: { value: string; label: string }[]; header?: { value: string; label: string }[];
primary: { value: string; label: string }[]; primary?: { value: string; label: string }[];
secondary: { value: string; label: string }[]; secondary?: { value: string; label: string }[];
auxiliary: { value: string; label: string }[]; auxiliary?: { value: string; label: string }[];
codeAlt: string; codeAlt?: string;
qrText: string; qrText?: string;
transitType: TransitType; transitType?: TransitType;
codeType: Barcode["format"]; codeType?: Barcode["format"];
thumbnailFile: string; thumbnailFile?: string;
logoFile: string; logoFile?: string;
}; };
} }
@@ -84,8 +84,11 @@ export const pass = functions.https.onRequest(
const newPass = await PKPass.from( const newPass = await PKPass.from(
{ {
// Get relevant pass model from model folder (see passkit-generator/examples/models/) /**
model: `./model/${request.body.passModel}.pass`, * Get relevant pass model from model folder (see passkit-generator/examples/models/)
* Path seems to get read like the function is in "firebase/" folder and not in "firebase/functions/"
*/
model: `../../models/${request.body.passModel}.pass`,
certificates: { certificates: {
// Assigning certificates from certs folder (you will need to provide these yourself) // Assigning certificates from certs folder (you will need to provide these yourself)
wwdr: process.env.WWDR, wwdr: process.env.WWDR,
@@ -105,20 +108,29 @@ export const pass = functions.https.onRequest(
); );
if (newPass.type == "boardingPass") { if (newPass.type == "boardingPass") {
if (!request.body.transitType) {
response.status(400);
response.send({
error: "transitType is required",
});
return;
}
newPass.transitType = request.body.transitType; newPass.transitType = request.body.transitType;
} }
if (request.body.relevantDate !== "Blank") { if (typeof request.body.relevantDate === "string") {
newPass.setRelevantDate(new Date(request.body.relevantDate)); newPass.setRelevantDate(new Date(request.body.relevantDate));
} }
if (request.body.expiryDate !== "Blank") { if (typeof request.body.expiryDate === "string") {
newPass.setExpirationDate(new Date(request.body.expiryDate)); newPass.setExpirationDate(new Date(request.body.expiryDate));
} }
if ( if (
request.body.relevantLocationLat !== "Blank" && request.body.relevantLocationLat &&
request.body.relevantLocationLong !== "Blank" request.body.relevantLocationLong
) { ) {
newPass.setLocations({ newPass.setLocations({
latitude: request.body.relevantLocationLat, latitude: request.body.relevantLocationLat,
@@ -126,91 +138,93 @@ export const pass = functions.https.onRequest(
}); });
} }
for (let i = 0; i < request.body.header.length; i++) { if (Array.isArray(request.body.header)) {
const field = request.body.header[i]; for (let i = 0; i < request.body.header.length; i++) {
const field = request.body.header[i];
if (!(field?.label && field.value)) { if (!(field?.label && field.value)) {
continue; continue;
}
newPass.headerFields.push({
key: `header${i}`,
label: field.label,
value: field.value,
});
} }
newPass.headerFields.push({
key: `header${i}`,
label: field.label,
value: field.value,
});
} }
for (let i = 0; i < request.body.primary.length; i++) { if (Array.isArray(request.body.primary)) {
const field = request.body.primary[i]; for (let i = 0; i < request.body.primary.length; i++) {
const field = request.body.primary[i];
if (!(field?.label && field.value)) { if (!(field?.label && field.value)) {
continue; continue;
}
newPass.primaryFields.push({
key: `primary${i}`,
label: field.label,
value:
newPass.type == "boardingPass"
? field.value.toUpperCase()
: field.value,
});
} }
newPass.primaryFields.push({
key: `primary${i}`,
label: field.label,
value:
newPass.type == "boardingPass"
? field.value.toUpperCase()
: field.value,
});
} }
for (let i = 0; i < request.body.secondary.length; i++) { if (Array.isArray(request.body.secondary)) {
const field = request.body.secondary[i]; for (let i = 0; i < request.body.secondary.length; i++) {
const field = request.body.secondary[i];
if (!(field?.label && field.value)) { if (!(field?.label && field.value)) {
continue; continue;
}
const isElementInLastTwoPositions =
i === request.body.secondary.length - 2 ||
i === request.body.secondary.length - 1;
newPass.secondaryFields.push({
key: `secondary${i}`,
label: field.label,
value: field.value,
textAlignment: isElementInLastTwoPositions
? "PKTextAlignmentRight"
: "PKTextAlignmentLeft",
});
} }
const isElementInLastTwoPositions =
i === request.body.secondary.length - 2 ||
i === request.body.secondary.length - 1;
newPass.secondaryFields.push({
key: `secondary${i}`,
label: field.label,
value: field.value,
textAlignment: isElementInLastTwoPositions
? "PKTextAlignmentRight"
: "PKTextAlignmentLeft",
});
} }
for (let i = 0; i < request.body.auxiliary.length; i++) { if (Array.isArray(request.body.auxiliary)) {
const field = request.body.auxiliary[i]; for (let i = 0; i < request.body.auxiliary.length; i++) {
const field = request.body.auxiliary[i];
if (!(field?.label && field.value)) { if (!(field?.label && field.value)) {
continue; continue;
}
const isElementInLastTwoPositions =
i === request.body.auxiliary.length - 2 ||
i === request.body.auxiliary.length - 1;
newPass.auxiliaryFields.push({
key: `auxiliary${i}`,
label: field.label,
value: field.value,
textAlignment: isElementInLastTwoPositions
? "PKTextAlignmentRight"
: "PKTextAlignmentLeft",
});
} }
const isElementInLastTwoPositions =
i === request.body.auxiliary.length - 2 ||
i === request.body.auxiliary.length - 1;
newPass.auxiliaryFields.push({
key: `auxiliary${i}`,
label: field.label,
value: field.value,
textAlignment: isElementInLastTwoPositions
? "PKTextAlignmentRight"
: "PKTextAlignmentLeft",
});
} }
if (!request.body.codeAlt || request.body.codeAlt.trim() === "") { if (request.body.qrText && request.body.codeType) {
newPass.setBarcodes({ newPass.setBarcodes({
message: request.body.qrText, message: request.body.qrText,
format: request.body.codeType, format: request.body.codeType,
messageEncoding: "iso-8859-1", messageEncoding: "iso-8859-1",
}); altText: request.body.codeAlt?.trim() ?? "",
} else {
newPass.setBarcodes({
message: request.body.qrText,
format: request.body.codeType,
messageEncoding: "iso-8859-1",
altText: request.body.codeAlt,
}); });
} }