@walletpass/pass-js
Version:
Apple Wallet Pass generating and pushing updates from Node.js
373 lines (372 loc) • 13.8 kB
TypeScript
/**
* Field accessors class
*
* @see {@link https://developer.apple.com/library/archive/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/FieldDictionary.html}
*/
import { PassColor } from './lib/pass-color';
import { FieldsMap } from './lib/fieldsMap';
export declare type DataDetectors = 'PKDataDetectorTypePhoneNumber' | 'PKDataDetectorTypeLink' | 'PKDataDetectorTypeAddress' | 'PKDataDetectorTypeCalendarEvent';
export declare type DataStyleFormat = 'PKDateStyleNone' | 'PKDateStyleShort' | 'PKDateStyleMedium' | 'PKDateStyleLong' | 'PKDateStyleFull';
export declare type TextAlignment = 'PKTextAlignmentLeft' | 'PKTextAlignmentCenter' | 'PKTextAlignmentRight' | 'PKTextAlignmentNatural';
export declare type NumberStyle = 'PKNumberStyleDecimal' | 'PKNumberStylePercent' | 'PKNumberStyleScientific' | 'PKNumberStyleSpellOut';
export declare type FieldDescriptor = {
label?: string;
attributedValue?: string | number;
changeMessage?: string;
dataDetectorTypes?: DataDetectors[];
} & ({
value: string;
textAlignment?: TextAlignment;
} | {
value: Date;
dateStyle?: DataStyleFormat;
ignoresTimeZone?: boolean;
isRelative?: boolean;
timeStyle?: DataStyleFormat;
} | {
value: number;
currencyCode?: string;
numberStyle?: NumberStyle;
});
export declare type Field = {
key: string;
} & FieldDescriptor;
export declare type PassStyle = 'boardingPass' | 'coupon' | 'eventTicket' | 'storeCard' | 'generic';
export declare type BarcodeFormat = 'PKBarcodeFormatQR' | 'PKBarcodeFormatPDF417' | 'PKBarcodeFormatAztec' | 'PKBarcodeFormatCode128';
export interface BarcodeDescriptor {
/**
* Barcode format. For the barcode dictionary, you can use only the following values: PKBarcodeFormatQR, PKBarcodeFormatPDF417, or PKBarcodeFormatAztec. For dictionaries in the barcodes array, you may also use PKBarcodeFormatCode128.
*/
format: BarcodeFormat;
/**
* Message or payload to be displayed as a barcode.
*/
message: string;
/**
* Text encoding that is used to convert the message from the string representation to a data representation to render the barcode. The value is typically iso-8859-1, but you may use another encoding that is supported by your barcode scanning infrastructure.
*/
messageEncoding: string;
/**
* Optional. Text displayed near the barcode. For example, a human-readable version of the barcode data in case the barcode doesn’t scan.
*/
altText?: string;
}
/**
* Top-Level Keys
* The top level of the pass.json file is a dictionary.
* The following sections list the required and optional keys used in this dictionary.
* For each key whose value is a dictionary or an array of dictionaries,
* there is also a section in Lower-Level Keys that lists the keys for that dictionary.
*
* @see {@link https://developer.apple.com/library/archive/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/TopLevel.html#//apple_ref/doc/uid/TP40012026-CH2-SW1}
*/
/**
* Information that is required for all passes.
*/
export interface PassStandardKeys {
/**
* Brief description of the pass, used by the iOS accessibility technologies.
* Don’t try to include all of the data on the pass in its description,
* just include enough detail to distinguish passes of the same type.
*/
description: string;
/**
* Version of the file format. The value must be 1.
*/
formatVersion: 1;
/**
* Display name of the organization that originated and signed the pass.
*/
organizationName: string;
/**
* Pass type identifier, as issued by Apple.
* The value must correspond with your signing certificate.
*/
passTypeIdentifier: string;
/**
* Serial number that uniquely identifies the pass.
* No two passes with the same pass type identifier may have the same serial number.
*/
serialNumber: string;
/**
* Team identifier of the organization that originated and signed the pass, as issued by Apple.
*/
teamIdentifier: string;
/**
* Possibility to prohibit a sharing of pass
*/
sharingProhibited: boolean;
}
/**
* Information about an app that is associated with a pass.
*/
export interface PassAssociatedAppKeys {
/**
* A URL to be passed to the associated app when launching it.
* The app receives this URL in the application:didFinishLaunchingWithOptions:
* and application:openURL:options: methods of its app delegate.
* If this key is present, the associatedStoreIdentifiers key must also be present.
*/
appLaunchURL?: string;
/**
* A list of iTunes Store item identifiers for the associated apps.
* Only one item in the list is used—the first item identifier for an app
* compatible with the current device.
* If the app is not installed, the link opens the App Store and shows the app.
* If the app is already installed, the link launches the app.
*/
associatedStoreIdentifiers?: number[];
}
/**
* Custom information about a pass provided for a companion app to use.
*/
export interface PassCompanionAppKeys {
/**
* Custom information for companion apps. This data is not displayed to the user.
* For example, a pass for a cafe could include information about
* the user’s favorite drink and sandwich in a machine-readable form
* for the companion app to read, making it easy to place an order for “the usual” from the app.
*/
userInfo?: any;
}
/**
* Information about when a pass expires and whether it is still valid.
* A pass is marked as expired if the current date is after the pass’s expiration date,
* or if the pass has been explicitly marked as voided.
*/
export interface PassExpirationKeys {
/**
* Date and time when the pass expires.
* The value must be a complete date with hours and minutes,
* and may optionally include seconds.
*/
expirationDate?: string | Date;
/**
* Indicates that the pass is void—for example, a one time use coupon that has been redeemed.
* The default value is false.
*/
voided?: boolean;
}
/**
* Information about a location beacon.
*/
export interface Beacon {
/**
* Unique identifier of a Bluetooth Low Energy location beacon.
*/
proximityUUID: string;
/**
* Major identifier of a Bluetooth Low Energy location beacon.
*/
major?: number;
/**
* Minor identifier of a Bluetooth Low Energy location beacon.
*/
minor?: number;
/**
* Text displayed on the lock screen when the pass is currently relevant.
* For example, a description of the nearby location
*
* @example “Store nearby on 1st and Main.”
*/
relevantText?: string;
}
/**
* Location Dictionary Keys
*/
export interface Location {
/**
* Latitude, in degrees, of the location.
*/
latitude: number;
/**
* Longitude, in degrees, of the location.
*/
longitude: number;
/**
* Altitude, in meters, of the location.
*/
altitude?: number;
/**
* Text displayed on the lock screen when the pass is currently relevant.
* For example, a description of the nearby location
*
* @example “Store nearby on 1st and Main.”
*/
relevantText?: string;
}
/**
* Information about where and when a pass is relevant.
*/
export interface PassRelevanceKeys {
/**
* Beacons marking locations where the pass is relevant.
*/
beacons?: Beacon[];
/**
* Locations where the pass is relevant.
* For example, the location of your store.
*/
locations?: Location[];
/**
* Maximum distance in meters from a relevant latitude and longitude that the pass is relevant.
* This number is compared to the pass’s default distance and the smaller value is used.
*/
maxDistance?: number;
/**
* Date and time when the pass becomes relevant.
* For example, the start time of a movie.
* The value must be a complete date with hours and minutes,
* and may optionally include seconds.
*/
relevantDate?: string | Date;
}
/**
* Pass common structure keys
*
* @see {@link https://developer.apple.com/library/content/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/LowerLevel.html#//apple_ref/doc/uid/TP40012026-CH3-SW3}
*/
export interface PassCommonStructure {
/**
* Fields to be displayed in the header on the front of the pass.
* Use header fields sparingly; unlike all other fields,
* they remain visible when a stack of passes are displayed.
*/
headerFields?: Field[] | FieldsMap;
/**
* Fields to be displayed prominently on the front of the pass.
*/
primaryFields?: Field[] | FieldsMap;
/**
* Fields to be displayed on the front of the pass.
*/
secondaryFields?: Field[] | FieldsMap;
/**
* Additional fields to be displayed on the front of the pass.
*/
auxiliaryFields?: Field[] | FieldsMap;
/**
* Fields to be on the back of the pass.
*/
backFields?: Field[] | FieldsMap;
}
/**
* Keys that define the visual style and appearance of the pass.
*/
export interface PassVisualAppearanceKeys {
/**
* Information specific to the pass’s barcode.
* For this dictionary’s keys, see Barcode Dictionary Keys.
* DEPRECATED in iOS 9.0 and later; use `barcodes` instead.
*/
barcode?: BarcodeDescriptor;
/**
* Information specific to the pass’s barcode.
* The system uses the first valid barcode dictionary in the array.
* Additional dictionaries can be added as fallbacks.
*/
barcodes?: BarcodeDescriptor[];
/**
* Background color of the pass, specified as an CSS-style RGB triple.
*
* @example rgb(23, 187, 82)
*/
backgroundColor?: PassColor | string;
/**
* Foreground color of the pass, specified as a CSS-style RGB triple.
*
* @example rgb(100, 10, 110)
*/
foregroundColor?: PassColor | string;
/**
* Optional for event tickets and boarding passes; otherwise not allowed.
* Identifier used to group related passes.
* If a grouping identifier is specified, passes with the same style,
* pass type identifier, and grouping identifier are displayed as a group.
* Otherwise, passes are grouped automatically.
* Use this to group passes that are tightly related,
* such as the boarding passes for different connections of the same trip.
*/
groupingIdentifier?: string;
/**
* Color of the label text, specified as a CSS-style RGB triple.
*
* @example rgb(255, 255, 255)
*/
labelColor?: PassColor | string;
/**
* Color of the strip text, specified as a CSS-style RGB triple.
*
* @example rgb(255, 255, 255)
*/
stripColor?: PassColor | string;
/**
* Text displayed next to the logo on the pass.
*/
logoText?: string;
/**
* If true, the strip image is displayed without a shine effect.
* The default value prior to iOS 7.0 is false.
* In iOS 7.0, a shine effect is never applied, and this key is deprecated.
*/
suppressStripShine?: boolean;
}
export interface PassWebServiceKeys {
/**
* The URL of a web service that conforms to the API described in PassKit Web Service Reference.
* The web service must use the HTTPS protocol in production; the leading https:// is included in the value of this key.
* On devices configured for development, there is UI in Settings to allow HTTP web services. You can use the options
* parameter to set allowHTTP to be able to use URLs that use the HTTP protocol.
*
* @see {@link https://developer.apple.com/library/archive/documentation/PassKit/Reference/PassKit_WebService/WebService.html#//apple_ref/doc/uid/TP40011988}
*/
webServiceURL?: URL | string;
/**
* The authentication token to use with the web service.
* The token must be 16 characters or longer.
*/
authenticationToken?: string;
}
export interface NFCDictionary {
/**
* The payload to be transmitted to the Apple Pay terminal.
* Must be 64 bytes or less.
* Messages longer than 64 bytes are truncated by the system.
*/
message: string;
/**
* The public encryption key used by the Value Added Services protocol.
* Use a Base64 encoded X.509 SubjectPublicKeyInfo structure containing a ECDH public key for group P256.
*/
encryptionPublicKey?: string | import('node-forge').pki.PublicKey;
}
/**
* NFC-enabled pass keys support sending reward card information as part of an Apple Pay transaction.
*/
export declare type TransitType = 'PKTransitTypeAir' | 'PKTransitTypeBoat' | 'PKTransitTypeBus' | 'PKTransitTypeTrain' | 'PKTransitTypeGeneric';
export interface BoardingPass {
boardingPass: {
/**
* Type of transit.
*/
transitType: TransitType;
} & PassCommonStructure;
}
export interface CouponPass {
coupon: PassCommonStructure;
}
export interface EventTicketPass {
eventTicket: PassCommonStructure;
}
export interface GenericPass {
generic: PassCommonStructure;
}
export interface StoreCardPass {
storeCard: PassCommonStructure;
nfc?: NFCDictionary;
}
export declare type PassStructureFields = BoardingPass | CouponPass | EventTicketPass | GenericPass | StoreCardPass;
export declare type ApplePass = PassStandardKeys & PassAssociatedAppKeys & PassCompanionAppKeys & PassExpirationKeys & PassRelevanceKeys & PassVisualAppearanceKeys & PassWebServiceKeys & PassStructureFields;
export interface Options {
allowHttp: boolean;
}