mirror of
https://github.com/marcogll/passkit-generator.git
synced 2026-03-15 19:25:23 +00:00
Completely refactored examples to run only once and have multiple endpoints
This commit is contained in:
35
examples/self-hosted/README.md
Normal file
35
examples/self-hosted/README.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Examples
|
||||||
|
|
||||||
|
This is examples folder. These examples are used to test new features and as sample showcases.
|
||||||
|
|
||||||
|
Each example owns an endpoint where a pass can be reached. This project is build upon Express.js, which is required to be installed.
|
||||||
|
|
||||||
|
Typescript compilation is done automatically through `ts-node`.
|
||||||
|
|
||||||
|
Assuming you already have cloned this repository, installed its dependencies through `npm install` and moved to `examples/self-hosted`, run these commands:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install;
|
||||||
|
$ npm run example;
|
||||||
|
```
|
||||||
|
|
||||||
|
Certificates paths in examples are linked to a folder `certificates` in the root of this project which is not provided.
|
||||||
|
To make them work, you'll have to edit both certificates and model path.
|
||||||
|
|
||||||
|
Every example runs on `0.0.0.0:8080`. Visit `http://localhost:8080/:example/:modelName`, by replacing `:example` with one of the following and `:modelName` with one inside models folder.
|
||||||
|
|
||||||
|
Please note that `field.js` example will force you to download `exampleBooking.pass`, no matter what.
|
||||||
|
|
||||||
|
| Example name | Endpoint name | Additional notes |
|
||||||
|
| -------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| localize | `/localize` | - |
|
||||||
|
| fields | `/fields` | - |
|
||||||
|
| expirationDate | `/expirationDate` | Accepts a required parameter in query string `fn`, which can be either `expiration` or `void`, to switch generated example. |
|
||||||
|
| scratch | `/scratch` | - |
|
||||||
|
| PKPass.from | pkpassfrom | - |
|
||||||
|
| barcodes | `/barcodes` | Using `?alt=true` query parameter, will lead to barcode string message usage instead of selected ones |
|
||||||
|
| pkpasses | `/pkpasses` | - |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Every contribution is really appreciated. ❤️ Thank you!
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "examples",
|
"name": "examples-self-hosted",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "examples",
|
"name": "examples-self-hosted",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
@@ -16,12 +16,34 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/express": "4.17.8",
|
"@types/express": "4.17.8",
|
||||||
|
"ts-node": "^10.4.0",
|
||||||
"typescript": "^4.4.4"
|
"typescript": "^4.4.4"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"passkit-generator": "latest"
|
"passkit-generator": "latest"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@cspotcode/source-map-consumer": {
|
||||||
|
"version": "0.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
|
||||||
|
"integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@cspotcode/source-map-support": {
|
||||||
|
"version": "0.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
|
||||||
|
"integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@cspotcode/source-map-consumer": "0.8.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@hapi/hoek": {
|
"node_modules/@hapi/hoek": {
|
||||||
"version": "9.2.0",
|
"version": "9.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
|
||||||
@@ -58,6 +80,30 @@
|
|||||||
"integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
|
"integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@tsconfig/node10": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/@tsconfig/node12": {
|
||||||
|
"version": "1.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
|
||||||
|
"integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/@tsconfig/node14": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/@tsconfig/node16": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/@types/body-parser": {
|
"node_modules/@types/body-parser": {
|
||||||
"version": "1.17.0",
|
"version": "1.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
|
||||||
@@ -146,6 +192,33 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/acorn": {
|
||||||
|
"version": "8.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
|
||||||
|
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"acorn": "bin/acorn"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/acorn-walk": {
|
||||||
|
"version": "8.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
|
||||||
|
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/arg": {
|
||||||
|
"version": "4.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
|
||||||
|
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/array-flatten": {
|
"node_modules/array-flatten": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
@@ -220,6 +293,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
},
|
},
|
||||||
|
"node_modules/create-require": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/data-uri-to-buffer": {
|
"node_modules/data-uri-to-buffer": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
|
||||||
@@ -249,6 +328,15 @@
|
|||||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
||||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
||||||
},
|
},
|
||||||
|
"node_modules/diff": {
|
||||||
|
"version": "4.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ee-first": {
|
"node_modules/ee-first": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
@@ -421,6 +509,12 @@
|
|||||||
"@sideway/pinpoint": "^2.0.0"
|
"@sideway/pinpoint": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/make-error": {
|
||||||
|
"version": "1.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||||
|
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/media-typer": {
|
"node_modules/media-typer": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
@@ -688,6 +782,47 @@
|
|||||||
"node": ">=0.6"
|
"node": ">=0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/ts-node": {
|
||||||
|
"version": "10.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz",
|
||||||
|
"integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@cspotcode/source-map-support": "0.7.0",
|
||||||
|
"@tsconfig/node10": "^1.0.7",
|
||||||
|
"@tsconfig/node12": "^1.0.7",
|
||||||
|
"@tsconfig/node14": "^1.0.0",
|
||||||
|
"@tsconfig/node16": "^1.0.2",
|
||||||
|
"acorn": "^8.4.1",
|
||||||
|
"acorn-walk": "^8.1.1",
|
||||||
|
"arg": "^4.1.0",
|
||||||
|
"create-require": "^1.1.0",
|
||||||
|
"diff": "^4.0.1",
|
||||||
|
"make-error": "^1.1.1",
|
||||||
|
"yn": "3.1.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"ts-node": "dist/bin.js",
|
||||||
|
"ts-node-cwd": "dist/bin-cwd.js",
|
||||||
|
"ts-node-script": "dist/bin-script.js",
|
||||||
|
"ts-node-transpile-only": "dist/bin-transpile.js",
|
||||||
|
"ts-script": "dist/bin-script-deprecated.js"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@swc/core": ">=1.2.50",
|
||||||
|
"@swc/wasm": ">=1.2.50",
|
||||||
|
"@types/node": "*",
|
||||||
|
"typescript": ">=2.7"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@swc/core": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@swc/wasm": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tslib": {
|
"node_modules/tslib": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||||
@@ -758,9 +893,33 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"buffer-crc32": "~0.2.3"
|
"buffer-crc32": "~0.2.3"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"node_modules/yn": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@cspotcode/source-map-consumer": {
|
||||||
|
"version": "0.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
|
||||||
|
"integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@cspotcode/source-map-support": {
|
||||||
|
"version": "0.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
|
||||||
|
"integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@cspotcode/source-map-consumer": "0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@hapi/hoek": {
|
"@hapi/hoek": {
|
||||||
"version": "9.2.0",
|
"version": "9.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
|
||||||
@@ -797,6 +956,30 @@
|
|||||||
"integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
|
"integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
|
"@tsconfig/node10": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@tsconfig/node12": {
|
||||||
|
"version": "1.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
|
||||||
|
"integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@tsconfig/node14": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@tsconfig/node16": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@types/body-parser": {
|
"@types/body-parser": {
|
||||||
"version": "1.17.0",
|
"version": "1.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
|
||||||
@@ -882,6 +1065,24 @@
|
|||||||
"negotiator": "0.6.2"
|
"negotiator": "0.6.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"acorn": {
|
||||||
|
"version": "8.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
|
||||||
|
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"acorn-walk": {
|
||||||
|
"version": "8.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
|
||||||
|
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"arg": {
|
||||||
|
"version": "4.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
|
||||||
|
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"array-flatten": {
|
"array-flatten": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
@@ -938,6 +1139,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
},
|
},
|
||||||
|
"create-require": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"data-uri-to-buffer": {
|
"data-uri-to-buffer": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
|
||||||
@@ -961,6 +1168,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
||||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
||||||
},
|
},
|
||||||
|
"diff": {
|
||||||
|
"version": "4.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"ee-first": {
|
"ee-first": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
@@ -1093,6 +1306,12 @@
|
|||||||
"@sideway/pinpoint": "^2.0.0"
|
"@sideway/pinpoint": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"make-error": {
|
||||||
|
"version": "1.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||||
|
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"media-typer": {
|
"media-typer": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
@@ -1292,6 +1511,26 @@
|
|||||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
||||||
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
|
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
|
||||||
},
|
},
|
||||||
|
"ts-node": {
|
||||||
|
"version": "10.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz",
|
||||||
|
"integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@cspotcode/source-map-support": "0.7.0",
|
||||||
|
"@tsconfig/node10": "^1.0.7",
|
||||||
|
"@tsconfig/node12": "^1.0.7",
|
||||||
|
"@tsconfig/node14": "^1.0.0",
|
||||||
|
"@tsconfig/node16": "^1.0.2",
|
||||||
|
"acorn": "^8.4.1",
|
||||||
|
"acorn-walk": "^8.1.1",
|
||||||
|
"arg": "^4.1.0",
|
||||||
|
"create-require": "^1.1.0",
|
||||||
|
"diff": "^4.0.1",
|
||||||
|
"make-error": "^1.1.1",
|
||||||
|
"yn": "3.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"tslib": {
|
"tslib": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||||
@@ -1340,6 +1579,12 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"buffer-crc32": "~0.2.3"
|
"buffer-crc32": "~0.2.3"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"yn": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
||||||
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "examples",
|
"name": "examples-self-hosted",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Passkit-generator examples",
|
"description": "Passkit-generator self-hosted examples",
|
||||||
"author": "Alexander P. Cerutti <cerutti.alexander@gmail.com>",
|
"author": "Alexander P. Cerutti <cerutti.alexander@gmail.com>",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"preinstall": "npm run clear:deps && npm unlink --no-save passkit-generator",
|
"preinstall": "npm run clear:deps && npm unlink --no-save passkit-generator",
|
||||||
"postinstall": "cd .. && npm run build && npm link && cd examples && npm link passkit-generator",
|
"postinstall": "npm --prefix ../.. run build && npm --prefix ../.. link && npm link passkit-generator",
|
||||||
"example": "cd build && node",
|
"example": "npx ts-node src/index.ts",
|
||||||
"example:debug": "cd build && node --inspect-brk",
|
"example:debug": "node -r ts-node/register --inspect-brk src/index.ts",
|
||||||
"build": "npm run build:clear && npm install && npx tsc",
|
|
||||||
"build:clear": "rm -rf build",
|
|
||||||
"clear:deps": "rm -rf node_modules"
|
"clear:deps": "rm -rf node_modules"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
@@ -24,6 +22,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/express": "4.17.8",
|
"@types/express": "4.17.8",
|
||||||
|
"ts-node": "^10.4.0",
|
||||||
"typescript": "^4.4.4"
|
"typescript": "^4.4.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,8 @@
|
|||||||
* examples, creation through templates is already shown
|
* examples, creation through templates is already shown
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import app, { getCertificates } from "./webserver";
|
import { app } from "./webserver";
|
||||||
|
import { getCertificates } from "./shared";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import { PKPass } from "passkit-generator";
|
import { PKPass } from "passkit-generator";
|
||||||
@@ -75,7 +76,7 @@ async function readDirectory(filePath: string) {
|
|||||||
// *************************** //
|
// *************************** //
|
||||||
|
|
||||||
const passTemplate = new Promise<PKPass>(async (resolve) => {
|
const passTemplate = new Promise<PKPass>(async (resolve) => {
|
||||||
const modelPath = path.resolve(__dirname, `../models/examplePass.pass`);
|
const modelPath = path.resolve(__dirname, `../../models/examplePass.pass`);
|
||||||
const [modelFilesList, certificates] = await Promise.all([
|
const [modelFilesList, certificates] = await Promise.all([
|
||||||
fs.readdir(modelPath),
|
fs.readdir(modelPath),
|
||||||
getCertificates(),
|
getCertificates(),
|
||||||
@@ -113,7 +114,7 @@ const passTemplate = new Promise<PKPass>(async (resolve) => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.all(async function manageRequest(request, response) {
|
app.route("/pkpassfrom/:modelName").get(async (request, response) => {
|
||||||
const passName =
|
const passName =
|
||||||
request.params.modelName +
|
request.params.modelName +
|
||||||
"_" +
|
"_" +
|
||||||
@@ -26,9 +26,10 @@
|
|||||||
* A feedback to Apple have been sent for this.
|
* A feedback to Apple have been sent for this.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import app, { getCertificates } from "./webserver";
|
import { app } from "./webserver";
|
||||||
import path from "path";
|
import { getCertificates } from "./shared";
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
|
import path from "path";
|
||||||
import { PKPass } from "passkit-generator";
|
import { PKPass } from "passkit-generator";
|
||||||
|
|
||||||
// *************************** //
|
// *************************** //
|
||||||
@@ -42,7 +43,10 @@ function getRandomColorPart() {
|
|||||||
async function generatePass(props: Object) {
|
async function generatePass(props: Object) {
|
||||||
const [iconFromModel, certificates] = await Promise.all([
|
const [iconFromModel, certificates] = await Promise.all([
|
||||||
fs.readFile(
|
fs.readFile(
|
||||||
path.resolve(__dirname, "../models/exampleBooking.pass/icon.png"),
|
path.resolve(
|
||||||
|
__dirname,
|
||||||
|
"../../models/exampleBooking.pass/icon.png",
|
||||||
|
),
|
||||||
),
|
),
|
||||||
getCertificates(),
|
getCertificates(),
|
||||||
]);
|
]);
|
||||||
@@ -111,7 +115,7 @@ async function generatePass(props: Object) {
|
|||||||
return pass;
|
return pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
app.all(async function manageRequest(request, response) {
|
app.route("/pkpasses/:modelName").get(async (request, response) => {
|
||||||
const passName =
|
const passName =
|
||||||
request.params.modelName +
|
request.params.modelName +
|
||||||
"_" +
|
"_" +
|
||||||
@@ -9,11 +9,12 @@
|
|||||||
* @Author: Alexander P. Cerutti
|
* @Author: Alexander P. Cerutti
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import app, { getCertificates } from "./webserver";
|
import { app } from "./webserver";
|
||||||
|
import { getCertificates } from "./shared";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { PKPass } from "passkit-generator";
|
import { PKPass } from "passkit-generator";
|
||||||
|
|
||||||
app.all(async function manageRequest(request, response) {
|
app.route("/fields/:modelName").get(async (request, response) => {
|
||||||
const passName =
|
const passName =
|
||||||
"exampleBooking" +
|
"exampleBooking" +
|
||||||
"_" +
|
"_" +
|
||||||
@@ -24,7 +25,7 @@ app.all(async function manageRequest(request, response) {
|
|||||||
try {
|
try {
|
||||||
const pass = await PKPass.from(
|
const pass = await PKPass.from(
|
||||||
{
|
{
|
||||||
model: path.resolve(__dirname, "../models/exampleBooking"),
|
model: path.resolve(__dirname, "../../models/exampleBooking"),
|
||||||
certificates: {
|
certificates: {
|
||||||
wwdr: certificates.wwdr,
|
wwdr: certificates.wwdr,
|
||||||
signerCert: certificates.signerCert,
|
signerCert: certificates.signerCert,
|
||||||
7
examples/self-hosted/src/index.ts
Normal file
7
examples/self-hosted/src/index.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import "./fields";
|
||||||
|
import "./localize";
|
||||||
|
import "./PKPass.from";
|
||||||
|
import "./PKPasses";
|
||||||
|
import "./scratch";
|
||||||
|
import "./setBarcodes";
|
||||||
|
import "./setExpirationDate";
|
||||||
@@ -4,13 +4,14 @@
|
|||||||
* .pkpass file and check for .lproj folders
|
* .pkpass file and check for .lproj folders
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import app, { getCertificates } from "./webserver";
|
import { app } from "./webserver";
|
||||||
|
import { getCertificates } from "./shared";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { PKPass } from "passkit-generator";
|
import { PKPass } from "passkit-generator";
|
||||||
/** Symbols are exported just for tests and examples. Replicate only if really needed. */
|
/** Symbols are exported just for tests and examples. Replicate only if really needed. */
|
||||||
import { localizationSymbol } from "passkit-generator/lib/PKPass";
|
import { localizationSymbol } from "passkit-generator/lib/PKPass";
|
||||||
|
|
||||||
app.all(async function manageRequest(request, response) {
|
app.route("/localize/:modelName").get(async (request, response) => {
|
||||||
const passName =
|
const passName =
|
||||||
request.params.modelName +
|
request.params.modelName +
|
||||||
"_" +
|
"_" +
|
||||||
@@ -23,7 +24,7 @@ app.all(async function manageRequest(request, response) {
|
|||||||
{
|
{
|
||||||
model: path.resolve(
|
model: path.resolve(
|
||||||
__dirname,
|
__dirname,
|
||||||
`../models/${request.params.modelName}`,
|
`../../models/${request.params.modelName}`,
|
||||||
),
|
),
|
||||||
certificates: {
|
certificates: {
|
||||||
wwdr: certificates.wwdr,
|
wwdr: certificates.wwdr,
|
||||||
@@ -3,7 +3,8 @@
|
|||||||
* by adding files later and not adding pass.json
|
* by adding files later and not adding pass.json
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import app, { getCertificates } from "./webserver";
|
import { app } from "./webserver";
|
||||||
|
import { getCertificates } from "./shared";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import { PKPass } from "passkit-generator";
|
import { PKPass } from "passkit-generator";
|
||||||
@@ -12,7 +13,7 @@ function getRandomColorPart() {
|
|||||||
return Math.floor(Math.random() * 255);
|
return Math.floor(Math.random() * 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
app.all(async function manageRequest(request, response) {
|
app.route("/scratch/:modelName").get(async (request, response) => {
|
||||||
const passName =
|
const passName =
|
||||||
request.params.modelName +
|
request.params.modelName +
|
||||||
"_" +
|
"_" +
|
||||||
@@ -20,7 +21,10 @@ app.all(async function manageRequest(request, response) {
|
|||||||
|
|
||||||
const [iconFromModel, certificates] = await Promise.all([
|
const [iconFromModel, certificates] = await Promise.all([
|
||||||
fs.readFile(
|
fs.readFile(
|
||||||
path.resolve(__dirname, "../models/exampleBooking.pass/icon.png"),
|
path.resolve(
|
||||||
|
__dirname,
|
||||||
|
"../../models/exampleBooking.pass/icon.png",
|
||||||
|
),
|
||||||
),
|
),
|
||||||
await getCertificates(),
|
await getCertificates(),
|
||||||
]);
|
]);
|
||||||
@@ -8,11 +8,12 @@
|
|||||||
* by a string
|
* by a string
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import app, { getCertificates } from "./webserver";
|
import { app } from "./webserver";
|
||||||
|
import { getCertificates } from "./shared";
|
||||||
import { PKPass } from "passkit-generator";
|
import { PKPass } from "passkit-generator";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
app.all(async function manageRequest(request, response) {
|
app.route("/barcodes/:modelName").get(async (request, response) => {
|
||||||
const passName =
|
const passName =
|
||||||
request.params.modelName +
|
request.params.modelName +
|
||||||
"_" +
|
"_" +
|
||||||
@@ -25,7 +26,7 @@ app.all(async function manageRequest(request, response) {
|
|||||||
{
|
{
|
||||||
model: path.resolve(
|
model: path.resolve(
|
||||||
__dirname,
|
__dirname,
|
||||||
`../models/${request.params.modelName}`,
|
`../../models/${request.params.modelName}`,
|
||||||
),
|
),
|
||||||
certificates: {
|
certificates: {
|
||||||
wwdr: certificates.wwdr,
|
wwdr: certificates.wwdr,
|
||||||
@@ -7,11 +7,12 @@
|
|||||||
* have to wait two minutes.
|
* have to wait two minutes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import app, { getCertificates } from "./webserver";
|
import { app } from "./webserver";
|
||||||
|
import { getCertificates } from "./shared";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { PKPass } from "passkit-generator";
|
import { PKPass } from "passkit-generator";
|
||||||
|
|
||||||
app.all(async function manageRequest(request, response) {
|
app.route("/expirationDate/:modelName").get(async (request, response) => {
|
||||||
if (!request.query.fn) {
|
if (!request.query.fn) {
|
||||||
response.send(
|
response.send(
|
||||||
"<a href='?fn=void'>Generate a voided pass.</a><br><a href='?fn=expiration'>Generate a pass with expiration date</a>",
|
"<a href='?fn=void'>Generate a voided pass.</a><br><a href='?fn=expiration'>Generate a pass with expiration date</a>",
|
||||||
@@ -31,7 +32,7 @@ app.all(async function manageRequest(request, response) {
|
|||||||
{
|
{
|
||||||
model: path.resolve(
|
model: path.resolve(
|
||||||
__dirname,
|
__dirname,
|
||||||
`../models/${request.params.modelName}`,
|
`../../models/${request.params.modelName}`,
|
||||||
),
|
),
|
||||||
certificates: {
|
certificates: {
|
||||||
wwdr: certificates.wwdr,
|
wwdr: certificates.wwdr,
|
||||||
41
examples/self-hosted/src/shared.ts
Normal file
41
examples/self-hosted/src/shared.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import { promises as fs } from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
const certificatesCache: Partial<{
|
||||||
|
signerCert: Buffer;
|
||||||
|
signerKey: Buffer;
|
||||||
|
wwdr: Buffer;
|
||||||
|
signerKeyPassphrase: string;
|
||||||
|
}> = {};
|
||||||
|
|
||||||
|
export async function getCertificates(): Promise<typeof certificatesCache> {
|
||||||
|
if (Object.keys(certificatesCache).length) {
|
||||||
|
return certificatesCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
const [signerCert, signerKey, wwdr, signerKeyPassphrase] =
|
||||||
|
await Promise.all([
|
||||||
|
fs.readFile(
|
||||||
|
path.resolve(__dirname, "../../../certificates/signerCert.pem"),
|
||||||
|
"utf-8",
|
||||||
|
),
|
||||||
|
fs.readFile(
|
||||||
|
path.resolve(__dirname, "../../../certificates/signerKey.pem"),
|
||||||
|
"utf-8",
|
||||||
|
),
|
||||||
|
fs.readFile(
|
||||||
|
path.resolve(__dirname, "../../../certificates/WWDR.pem"),
|
||||||
|
"utf-8",
|
||||||
|
),
|
||||||
|
Promise.resolve("123456"),
|
||||||
|
]);
|
||||||
|
|
||||||
|
Object.assign(certificatesCache, {
|
||||||
|
signerCert,
|
||||||
|
signerKey,
|
||||||
|
wwdr,
|
||||||
|
signerKeyPassphrase,
|
||||||
|
});
|
||||||
|
|
||||||
|
return certificatesCache;
|
||||||
|
}
|
||||||
14
examples/self-hosted/src/webserver.ts
Normal file
14
examples/self-hosted/src/webserver.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* Generic webserver instance for the examples
|
||||||
|
* @Author Alexander P. Cerutti
|
||||||
|
* Requires express to run
|
||||||
|
*/
|
||||||
|
|
||||||
|
import express from "express";
|
||||||
|
export const app = express();
|
||||||
|
|
||||||
|
app.use(express.json());
|
||||||
|
|
||||||
|
app.listen(8080, "0.0.0.0", () => {
|
||||||
|
console.log("Webserver started.");
|
||||||
|
});
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"extends": "../tsconfig.json",
|
"extends": "../../tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "ESNext",
|
"target": "ESNext",
|
||||||
"module": "CommonJS",
|
"module": "CommonJS",
|
||||||
"outDir": "build",
|
"outDir": "build",
|
||||||
"moduleResolution": "node"
|
"moduleResolution": "node",
|
||||||
|
"sourceMap": true
|
||||||
},
|
},
|
||||||
"exclude": ["node_modules"]
|
"exclude": ["node_modules"]
|
||||||
}
|
}
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
* Generic webserver instance for the examples
|
|
||||||
* @Author Alexander P. Cerutti
|
|
||||||
* Requires express to run
|
|
||||||
*/
|
|
||||||
|
|
||||||
import express from "express";
|
|
||||||
import { promises as fs } from "fs";
|
|
||||||
import path from "path";
|
|
||||||
export const app = express();
|
|
||||||
|
|
||||||
app.use(express.json());
|
|
||||||
|
|
||||||
app.listen(8080, "0.0.0.0", () => {
|
|
||||||
console.log("Webserver started.");
|
|
||||||
});
|
|
||||||
|
|
||||||
app.all("/", function (_, response) {
|
|
||||||
response.redirect("/gen/");
|
|
||||||
});
|
|
||||||
|
|
||||||
app.route("/gen").all((req, res) => {
|
|
||||||
res.set("Content-Type", "text/html");
|
|
||||||
res.send(
|
|
||||||
"Cannot generate a pass. Specify a modelName in the url to continue. <br/>Usage: /gen/<i>modelName</i>",
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
export default app.route("/gen/:modelName");
|
|
||||||
const certificatesCache: Partial<{
|
|
||||||
signerCert: Buffer;
|
|
||||||
signerKey: Buffer;
|
|
||||||
wwdr: Buffer;
|
|
||||||
signerKeyPassphrase: string;
|
|
||||||
}> = {};
|
|
||||||
|
|
||||||
export async function getCertificates(): Promise<typeof certificatesCache> {
|
|
||||||
if (Object.keys(certificatesCache).length) {
|
|
||||||
return certificatesCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
const [signerCert, signerKey, wwdr, signerKeyPassphrase] =
|
|
||||||
await Promise.all([
|
|
||||||
fs.readFile(
|
|
||||||
path.resolve(__dirname, "../../certificates/signerCert.pem"),
|
|
||||||
"utf-8",
|
|
||||||
),
|
|
||||||
fs.readFile(
|
|
||||||
path.resolve(__dirname, "../../certificates/signerKey.pem"),
|
|
||||||
"utf-8",
|
|
||||||
),
|
|
||||||
fs.readFile(
|
|
||||||
path.resolve(__dirname, "../../certificates/WWDR.pem"),
|
|
||||||
"utf-8",
|
|
||||||
),
|
|
||||||
Promise.resolve("123456"),
|
|
||||||
]);
|
|
||||||
|
|
||||||
Object.assign(certificatesCache, {
|
|
||||||
signerCert,
|
|
||||||
signerKey,
|
|
||||||
wwdr,
|
|
||||||
signerKeyPassphrase,
|
|
||||||
});
|
|
||||||
|
|
||||||
return certificatesCache;
|
|
||||||
}
|
|
||||||
@@ -9,11 +9,7 @@
|
|||||||
"build:src": "rimraf lib && npx tsc -p tsconfig.dist.json",
|
"build:src": "rimraf lib && npx tsc -p tsconfig.dist.json",
|
||||||
"build:spec": "rimraf \"./spec/*.!(ts)\" && npx tsc -p tsconfig.spec.json",
|
"build:spec": "rimraf \"./spec/*.!(ts)\" && npx tsc -p tsconfig.spec.json",
|
||||||
"prepublishOnly": "npm run build",
|
"prepublishOnly": "npm run build",
|
||||||
"test": "npm run build:spec && npx jasmine",
|
"test": "npm run build:spec && npx jasmine"
|
||||||
"example": "npm run build:src && npm --prefix examples run example",
|
|
||||||
"example:install": "npm --prefix examples install",
|
|
||||||
"example:build": "npm --prefix examples run build",
|
|
||||||
"example:debug": "npm run build:src && npm --prefix examples run example:debug"
|
|
||||||
},
|
},
|
||||||
"author": "Alexander Patrick Cerutti",
|
"author": "Alexander Patrick Cerutti",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
Reference in New Issue
Block a user