From 7c7a8680dee536a89fcb1916288e5f127cd249ca Mon Sep 17 00:00:00 2001 From: Alexander Cerutti Date: Sat, 18 Sep 2021 23:17:47 +0200 Subject: [PATCH] Added signatures for PKPass methods --- src/PKPass.ts | 255 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) diff --git a/src/PKPass.ts b/src/PKPass.ts index 8e91c3d..c5cfb36 100644 --- a/src/PKPass.ts +++ b/src/PKPass.ts @@ -9,7 +9,15 @@ interface NamedBuffers { [key: string]: Buffer; } +type TransitTypes = `PKTransitType${ + | "Air" + | "Boat" + | "Bus" + | "Generic" + | "Train"}`; + export class PKPass extends Bundle { + private certificates: Certificates; private [fieldKeysPoolSymbol] = new Set(); public primaryFields /*****/ = new FieldsArray(this[fieldKeysPoolSymbol]); public secondaryFields /***/ = new FieldsArray(this[fieldKeysPoolSymbol]); @@ -72,4 +80,251 @@ export class PKPass extends Bundle { this.addBuffer(fileName, contentBuffer); } } + + /** + * Allows getting an image of the props + * that are composing your pass instance. + */ + + get props(): Readonly { + /** + * @TODO implement + */ + + return undefined; + } + + /** + * Allows setting a transitType property + * for a boardingPass + * + * @param value + */ + + set transitType(value: TransitTypes) { + /** + * @TODO implement + * @TODO validate against schema + * @TODO save into props + */ + } + + /** + * Allows getting the current transitType + * from pass props + */ + + get transitType(): TransitTypes { + /** + * @TODO implement + * @TODO read from props + */ + + return undefined; + } + + // **************************** // + // *** ASSETS SETUP METHODS *** // + // **************************** // + + /** + * Allows adding a new asset inside the pass / bundle; + * + * @param pathName + * @param buffer + */ + + public addBuffer(pathName: string, buffer: Buffer): void { + /** + * @TODO implement + * @TODO exclude pass.json, manifest, signature files + */ + + super.addBuffer(pathName, buffer); + } + + // ************************* // + // *** EXPORTING METHODS *** // + // ************************* // + + /** + * Exports the pass as a zip buffer. When this method + * is invoked, the bundle will get frozen and, thus, + * no files will be allowed to be added any further. + * + * @returns + */ + + public async getAsBuffer(): Promise { + /** + * @TODO compile this pass into something usable + * @TODO like _patch on old version + * @TODO share implementation with getAsStream + */ + + return super.getAsBuffer(); + } + + /** + * Exports the pass as a zip stream. When this method + * is invoked, the bundle will get frozen and, thus, + * no files will be allowed to be added any further. + * + * @returns + */ + + public getAsStream(): Stream { + /** + * @TODO compile this pass into something usable + * @TODO like _patch on old version + * @TODO share implementation with getAsBuffer + */ + + return super.getAsStream(); + } + + // ************************** // + // *** DATA SETUP METHODS *** // + // ************************** // + + /** + * Allows to specify a language to be added to the + * final bundle, along with some optionals / additional + * translations. + * + * If the language already exists in the origin source, + * translations will be added to the existing ones. + * + * @param lang + * @param translations + */ + + localize(lang: string, translations?: any): this { + /** + * @TODO change translations format + * @TODO specify a way to get current ones deleted + * @TODO Default languages from source + * @TODO print warning if lang is already in selection? + */ + + return this; + } + + /** + * Allows to specify an expiration date for the pass. + * + * @param date + * @returns + */ + + setExpiration(date: Date | null): this { + /** + * @TODO implement + */ + + return this; + } + + /** + * Allows to set the Pass directly as voided. + * Useful for updates. + * + * @TODO REMOVE, can be passed in overrides. It doesn't require any validation. + * It is just a boolean + */ + + void(): this { + /** + * @TODO implement + */ + + return this; + } + + /** + * Allows setting some beacons the OS should + * react to and show this pass. + * + * @param beacons + * @returns + */ + + setBeacons(...beacons: Schemas.Beacon[]): this { + /** + * @TODO implement + * @TODO specify a way to get current ones deleted + */ + + return this; + } + + /** + * Allows setting some locations the OS should + * react to and show this pass. + * + * @param locations + * @returns + */ + + setLocations(...locations: Schemas.Location[]): this { + /** + * @TODO implement + * @TODO specify a way to get current ones deleted + */ + + return this; + } + + /** + * Allows setting a relevant date in which the OS + * should show this pass. + * + * @param date + */ + + setRelevantDate(date: Date): this { + /** + * @TODO implement + */ + + return this; + } + + /** + * Allows to specify some barcodes formats. + * As per the current specifications, only the first + * will be shown to the user, without any possibility + * to change it. + * + * @param barcodes + * @returns + */ + + setBarcodes(...barcodes: Schemas.Barcode[]): this { + /** + * @TODO implement + * @TODO implement data completion + * @TODO specify a way to get current ones deleted + */ + + return this; + } + + /** + * Allows to specify details to make this, an + * NFC-capable pass. + * + * @see https://developer.apple.com/documentation/walletpasses/pass/nfc + * @param data + * @returns + */ + + setNFCCapability(data: Schemas.NFC): this { + /** + * @TODO implement + * @TODO specify a way to get current one deleted + */ + + return this; + } }