mirror of
https://github.com/marcogll/passkit-generator.git
synced 2026-03-15 22:25:24 +00:00
136 lines
54 KiB
Markdown
136 lines
54 KiB
Markdown
# Firebase example
|
|
|
|
This is a sample project for showing passkit-generator working on a Firebase Cloud Function.
|
|
|
|
Cloud Functions are Google **a paid service** that run your code like a unit. They take some files in input and output something (in this case the compiled Apple Wallet Pass).
|
|
|
|
Please note that this example offers just one endpoint example.
|
|
|
|
## Setting up
|
|
|
|
Install the dependencies from wherever path you are with `pnpm install`. Installing the dependencies will link passkit-generator in the parent workspace, so to reflect any change, it will be enough to build passkit-generator and restart the example.
|
|
|
|
`firebase-tools` (which are suggested to get installed globally) are installed locally too. To access them, prefix `firebase` command with `pnpm`, just like done in `package.json`.
|
|
|
|
```sh
|
|
$ pnpm firebase <command>
|
|
```
|
|
|
|
---
|
|
|
|
Proceed creating your cloud function on firebase portal like shown in [Firebase official documentation](https://firebase.google.com/docs/functions/get-started?hl=en&gen=2nd), step 1. In order to run this example, you don't need to follow the other steps.
|
|
|
|
Login with your code on firebase. You'll be redirected on a web page to complete login.
|
|
|
|
```sh
|
|
$ pnpm firebase login
|
|
```
|
|
|
|
You **don't need** to run `pnpm firebase init` as the project is already initialized.
|
|
|
|
Pick your project name and put it inside `.firebaserc` at `project.default`.
|
|
|
|
Remember: once you setup login, your credentials and used functions will be stored inside in your user root path. On MacOS it is `~/.config/configstore/firebase-tools.json`. You might want to delete it to clear the cache of functions. Deleting it will log you out.
|
|
|
|
### Setting up the storage
|
|
|
|
Go to "Storage" on the web page. You'll be provided with an URI that starts by `gs://`.
|
|
Take the part right after the protocol and put it in the file `src/startData.json`, at the key `FIREBASE_BUCKET_ADDR`.
|
|
|
|
<img src="data:image/png;base64,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"/>
|
|
|
|
Create a new folder `logos` (like in the screenshot) and upload in there one of the model logo files (called `logo.png`).
|
|
|
|
### Secrets and certificates
|
|
|
|
In order to show the example, you'll have to set your certificates data in the `.env` file, which will get deployed along with the Firebase. In production, it is suggested to have either different `.env` files or set these data as secrets.
|
|
|
|
Open `.env` file and fill the fields. Please remember your should put in there the contents and not the paths.
|
|
|
|
### Running locally
|
|
|
|
To run the firebase cloud function emulator, use this command:
|
|
|
|
```sh
|
|
$ pnpm serve
|
|
```
|
|
|
|
You will be provided with your local function URL, you can ping (POST Request) with a body like the following one. Keep reading for the parameter reference.
|
|
|
|
```json
|
|
{
|
|
"passModel": "exampleBooking",
|
|
"serialNumber": "unnannasyg1341",
|
|
"transitType": "PKTransitTypeAir",
|
|
"textColor": "rgb(255,255,255)",
|
|
"backgroundColor": "rgb(10,10,10)",
|
|
"labelColor": "rgb(255,255,255)",
|
|
"logoFile": "logo.png",
|
|
"header": [
|
|
{
|
|
"label": "When",
|
|
"value": "10/10/2023"
|
|
}
|
|
],
|
|
"primary": [
|
|
{
|
|
"label": "Napoli Capodichino",
|
|
"value": "NAP"
|
|
},
|
|
{
|
|
"label": "Amsterdam Schiphol",
|
|
"value": "AMS"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Deployment
|
|
|
|
In order to deploy your function, run
|
|
|
|
```sh
|
|
$ pnpm deploy
|
|
```
|
|
|
|
While deploying you might/will incur into several error.
|
|
While CLI doesn't provide you with very much details, it will create a file in `functions/firebase-debug.log` which will provide very much details on what gone wrong.
|
|
|
|
For some errors, you might want to try again to deploy without changing anything after a while: it might happen things are still getting created on the backend and not everything is yet synchronized on the backend.
|
|
|
|
During creation test, some errors came up that didn't came up later, even with a clean situation. If you incur in any problem with this example, please open an issue on passkit-generator repo.
|
|
|
|
#### Notes on deployed files
|
|
|
|
Within this examples, models folder are set to be deployed with your function files (see `firebase.json`, `predeploy` and `postdeploy` scripts).
|
|
This inherently brings to a higher upload memory and higher deploy times. It might, also, bring to higher cold-startup times.
|
|
|
|
You might want to consider other options for uploading your models or, perhaps, you might want to use a Buffer Model. If you choose to use Firebase Storage, please remember that it has a free bandwith quota, after which your are going to pay for calls. It is all a trade-off.
|
|
|
|
## Parameters reference
|
|
|
|
Function accept an `application/json` body. These are the supported parameters:
|
|
|
|
| Name | Type | Required | Description |
|
|
| -------------------- | :---------------------------------------: | :------: | -------------------------------------------------------------------------------------------------------------------- |
|
|
| passModel | `string` | YES | Name of the model. Must be one of the `examples/models` folder. `.pass` extension is optional |
|
|
| serialNumber | `string` | YES | Serial number of the pass. Required for generating a valid and unique pass |
|
|
| logoText | `string` | NO | |
|
|
| textColor | `string` | YES | The `foregroundColor` of `pass.json` |
|
|
| backgroundColor | `string` | YES | The `backgroundColor` of `pass.json` |
|
|
| labelColor | `string` | YES | The `labelColor` of `pass.json` |
|
|
| relevantDate | `string` | NO | |
|
|
| expiryDate | `string` | NO | |
|
|
| relevantLocationLat | `number` | NO | A latitude to be set on `setLocations`. Must be passed along with `relevandLocationLong`. |
|
|
| relevantLocationLong | `number` | NO | A longitude to be set on `setLocations`. Must be passed along with `relevantLocationLat`. |
|
|
| header | `Array<{ value: string; label: string }>` | NO | A set of fields to be shown in the header fields of the pass |
|
|
| primary | `Array<{ value: string; label: string }>` | NO | A set of fields to be shown in the primary fields of the pass |
|
|
| secondary | `Array<{ value: string; label: string }>` | NO | A set of fields to be shown in the secondary fields of the pass |
|
|
| auxiliary | `Array<{ value: string; label: string }>` | NO | A set of fields to be shown in the auxiliary fields of the pass |
|
|
| codeAlt | `string` | NO | Barcode Alternative Text |
|
|
| qrText | `string` | NO | Barcode message |
|
|
| codeType | `Barcode["format"]`` | NO | Barcode format |
|
|
| transitType | `TransitType` | NO | Transit Type. Required for boardingPasses |
|
|
| thumbnailFile | `string` | NO | File path of the thumbnail file in the storage bucket. If not available, the storage won't be invoked for this file. |
|
|
| logoFile | `string` | NO | File path of the logo file in the storage bucket. If not available, the storage won't be invoked for this file. |
|