@nimee/wallet-generator 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apple/ApplePassGenerator.d.ts +2 -1
- package/dist/apple/ApplePassGenerator.js +16 -23
- package/dist/apple/ApplePassGenerator.js.map +1 -1
- package/dist/apple/signPassWorker.js +5 -1
- package/dist/apple/signPassWorker.js.map +1 -1
- package/dist/apple/subscription.pass/icon.png +0 -0
- package/dist/apple/subscription.pass/icon@2x.png +0 -0
- package/dist/apple/subscription.pass/pass.json +17 -0
- package/dist/apple/subscription.pass/subscription.pass/icon.png +0 -0
- package/dist/apple/subscription.pass/subscription.pass/icon@2x.png +0 -0
- package/dist/apple/subscription.pass/subscription.pass/pass.json +17 -0
- package/dist/google/GooglePassGenerator.d.ts +12 -1
- package/dist/google/GooglePassGenerator.js +54 -5
- package/dist/google/GooglePassGenerator.js.map +1 -1
- package/dist/google/googleAuth.d.ts +2 -0
- package/dist/google/googleAuth.js +19 -1
- package/dist/google/googleAuth.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +2 -2
- package/src/apple/ApplePassGenerator.ts +14 -12
- package/src/apple/signPassWorker.ts +5 -2
- package/src/apple/subscription.pass/icon.png +0 -0
- package/src/apple/subscription.pass/icon@2x.png +0 -0
- package/src/apple/subscription.pass/pass.json +17 -0
- package/src/google/GooglePassGenerator.ts +57 -6
- package/src/google/googleAuth.ts +42 -0
- package/src/index.ts +1 -1
- package/src/types.ts +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { IWalletPassData, IAppleWalletConfig, IWalletLayoutField } from '../types';
|
|
3
|
+
export declare const SUBSCRIPTION_TEMPLATE_PATH: string;
|
|
3
4
|
export interface ApplePassGeneratorOptions {
|
|
4
5
|
/** Allowed image host list passed to downloadImageBuffer. Empty = all https hosts. */
|
|
5
6
|
allowedHosts?: string[];
|
|
@@ -30,7 +31,7 @@ interface WorkerPayload {
|
|
|
30
31
|
value: string;
|
|
31
32
|
row: string;
|
|
32
33
|
}>;
|
|
33
|
-
relevantDate
|
|
34
|
+
relevantDate?: string;
|
|
34
35
|
}
|
|
35
36
|
export declare class ApplePassGenerator {
|
|
36
37
|
private readonly allowedHosts;
|
|
@@ -32,11 +32,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.ApplePassGenerator = void 0;
|
|
35
|
+
exports.ApplePassGenerator = exports.SUBSCRIPTION_TEMPLATE_PATH = void 0;
|
|
36
36
|
const fs = __importStar(require("fs"));
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const worker_threads_1 = require("worker_threads");
|
|
39
39
|
const imageHelpers = __importStar(require("../helpers/imageHelpers"));
|
|
40
|
+
exports.SUBSCRIPTION_TEMPLATE_PATH = path.join(__dirname, 'subscription.pass');
|
|
40
41
|
// ─── Apple pass image dimensions ─────────────────────────────────────────────
|
|
41
42
|
const LOGO_1X = { w: 160, h: 50 };
|
|
42
43
|
const LOGO_2X = { w: 320, h: 100 };
|
|
@@ -53,35 +54,35 @@ function resolveField(key, data) {
|
|
|
53
54
|
switch (key) {
|
|
54
55
|
case 'event':
|
|
55
56
|
case 'passTitle':
|
|
56
|
-
return data.passTitle ? { label: '
|
|
57
|
+
return data.passTitle ? { label: 'EVENT', value: data.passTitle } : undefined;
|
|
57
58
|
case 'holder':
|
|
58
59
|
case 'holderName':
|
|
59
60
|
case 'attendee':
|
|
60
|
-
return data.holderName ? { label: '
|
|
61
|
+
return data.holderName ? { label: 'NAME', value: data.holderName } : undefined;
|
|
61
62
|
case 'date':
|
|
62
63
|
case 'dateDisplay':
|
|
63
|
-
return data.dateDisplay ? { label: '
|
|
64
|
+
return data.dateDisplay ? { label: 'DATE', value: data.dateDisplay } : undefined;
|
|
64
65
|
case 'seat':
|
|
65
|
-
return data.seat ? { label: '
|
|
66
|
+
return data.seat ? { label: 'SEAT', value: data.seat } : undefined;
|
|
66
67
|
case 'order':
|
|
67
68
|
case 'orderNumber':
|
|
68
69
|
case 'order_number':
|
|
69
|
-
return data.orderNumber ? { label: '
|
|
70
|
+
return data.orderNumber ? { label: 'ORDER', value: data.orderNumber } : undefined;
|
|
70
71
|
case 'subtitle':
|
|
71
72
|
case 'passSubtitle':
|
|
72
73
|
case 'ticket_type':
|
|
73
|
-
return data.passSubtitle ? { label: '
|
|
74
|
+
return data.passSubtitle ? { label: 'TICKET', value: data.passSubtitle } : undefined;
|
|
74
75
|
case 'plan_name':
|
|
75
|
-
return data.passTitle ? { label: '
|
|
76
|
+
return data.passTitle ? { label: 'PLAN', value: data.passTitle } : undefined;
|
|
76
77
|
case 'member_name':
|
|
77
|
-
return data.holderName ? { label: '
|
|
78
|
+
return data.holderName ? { label: 'MEMBER', value: data.holderName } : undefined;
|
|
78
79
|
case 'valid_from': {
|
|
79
80
|
const value = data.dateDisplay || (data.startDate ? data.startDate.toLocaleDateString('he-IL') : '') || '';
|
|
80
|
-
return value ? { label: '
|
|
81
|
+
return value ? { label: 'VALID FROM', value } : undefined;
|
|
81
82
|
}
|
|
82
83
|
case 'valid_to': {
|
|
83
84
|
const value = data.endDate ? data.endDate.toLocaleDateString('he-IL') : '';
|
|
84
|
-
return value ? { label: '
|
|
85
|
+
return value ? { label: 'VALID TO', value } : undefined;
|
|
85
86
|
}
|
|
86
87
|
default:
|
|
87
88
|
return undefined;
|
|
@@ -104,29 +105,21 @@ class ApplePassGenerator {
|
|
|
104
105
|
* @returns Signed `.pkpass` buffer ready to stream to the client.
|
|
105
106
|
*/
|
|
106
107
|
generate(data, config, defaultLayout) {
|
|
107
|
-
var _a;
|
|
108
108
|
return __awaiter(this, void 0, void 0, function* () {
|
|
109
109
|
const images = yield this.prepareImages(data);
|
|
110
110
|
const layoutFields = this.resolveLayout(data, defaultLayout);
|
|
111
111
|
const modelPath = this.resolveTemplatePath(config);
|
|
112
112
|
const passOverrides = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ passTypeIdentifier: config.passTypeIdentifier, teamIdentifier: config.teamIdentifier, serialNumber: data.objectId, description: data.passTitle, organizationName: data.marketplaceName || 'Nimi' }, (data.marketplaceName ? { logoText: data.marketplaceName } : {})), (data.backgroundColor && { backgroundColor: data.backgroundColor })), (data.foregroundColor && { foregroundColor: data.foregroundColor })), (data.labelColor && { labelColor: data.labelColor })), (data.isCheckedIn && { voided: true }));
|
|
113
|
-
const workerPayload = {
|
|
114
|
-
modelPath,
|
|
115
|
-
certificates: {
|
|
113
|
+
const workerPayload = Object.assign({ modelPath, certificates: {
|
|
116
114
|
signerCert: config.cert,
|
|
117
115
|
signerKey: config.key,
|
|
118
116
|
wwdr: config.wwdr,
|
|
119
|
-
},
|
|
120
|
-
|
|
121
|
-
images,
|
|
122
|
-
barcodes: {
|
|
117
|
+
}, passOverrides,
|
|
118
|
+
images, barcodes: {
|
|
123
119
|
message: data.qrContent,
|
|
124
120
|
format: 'PKBarcodeFormatQR',
|
|
125
121
|
messageEncoding: 'iso-8859-1',
|
|
126
|
-
},
|
|
127
|
-
layoutFields,
|
|
128
|
-
relevantDate: ((_a = data.startDate) !== null && _a !== void 0 ? _a : new Date()).toISOString(),
|
|
129
|
-
};
|
|
122
|
+
}, layoutFields }, (data.startDate ? { relevantDate: data.startDate.toISOString() } : {}));
|
|
130
123
|
return this.spawnWorker(workerPayload);
|
|
131
124
|
});
|
|
132
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplePassGenerator.js","sourceRoot":"","sources":["../../src/apple/ApplePassGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,mDAAwC;AACxC,sEAAwD;
|
|
1
|
+
{"version":3,"file":"ApplePassGenerator.js","sourceRoot":"","sources":["../../src/apple/ApplePassGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,mDAAwC;AACxC,sEAAwD;AAG3C,QAAA,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAEpF,gFAAgF;AAEhF,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAClC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AACnC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACjC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AACpC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AA0BpC,iFAAiF;AAEjF;;;GAGG;AACH,SAAS,YAAY,CACnB,GAAW,EACX,IAAqB;IAErB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,KAAK,MAAM,CAAC;QACZ,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,KAAK,OAAO,CAAC;QACb,KAAK,aAAa,CAAC;QACnB,KAAK,cAAc;YACjB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc,CAAC;QACpB,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC3G,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,CAAC;QACD;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,MAAa,kBAAkB;IAI7B,YAAY,UAAqC,EAAE;;QACjD,IAAI,CAAC,YAAY,GAAG,MAAA,OAAO,CAAC,YAAY,mCAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,MAAA,OAAO,CAAC,eAAe,mCAAI,KAAM,CAAC;IAC3D,CAAC;IAED,8EAA8E;IAE9E;;;;;;;OAOG;IACG,QAAQ,CACZ,IAAqB,EACrB,MAA0B,EAC1B,aAAmC;;YAEnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAEnD,MAAM,aAAa,2EACjB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAC7C,cAAc,EAAE,MAAM,CAAC,cAAc,EACrC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAC3B,WAAW,EAAE,IAAI,CAAC,SAAS,EAC3B,gBAAgB,EAAE,IAAI,CAAC,eAAe,IAAI,MAAM,IAC7C,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAChE,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,GACnE,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,GACnE,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,GACpD,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAC1C,CAAC;YAEF,MAAM,aAAa,mBACjB,SAAS,EACT,YAAY,EAAE;oBACZ,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,SAAS,EAAE,MAAM,CAAC,GAAG;oBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB,EACD,aAAa;gBACb,MAAM,EACN,QAAQ,EAAE;oBACR,OAAO,EAAE,IAAI,CAAC,SAAS;oBACvB,MAAM,EAAE,mBAAmB;oBAC3B,eAAe,EAAE,YAAY;iBAC9B,EACD,YAAY,IACT,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC1E,CAAC;YAEF,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;KAAA;IAED,8EAA8E;IAE9E;;;;OAIG;IACH,mBAAmB,CAAC,MAA0B;;QAC5C,OAAO,MAAA,MAAM,CAAC,YAAY,mCAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;IAED,8EAA8E;IAE9E;;;;OAIG;IACH,WAAW,CAAC,UAAyB;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAEtE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QAEjC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,uBAAM,CAAC,UAAU,kCAC/B,CAAC,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,CAAC,KAC5D,UAAU,IACV,CAAC;YAEH,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,CAAC,CAAC;YAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,eAAe,IAAI,CAAC,CAAC,CAAC;YACxF,CAAC,EAAE,eAAe,CAAC,CAAC;YAEpB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC3B,OAAO,EAAE,CAAC;gBACV,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/B,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzB,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,OAAO,EAAE,CAAC;gBACV,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,gDAAgD,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAE9E;;;OAGG;IACW,aAAa,CAAC,IAAqB;;YAC/C,MAAM,cAAc,GAAG,IAAK,CAAC;YAC7B,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC5C,IAAI,CAAC,OAAO;oBACV,CAAC,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;oBACnF,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;gBAC9B,IAAI,CAAC,aAAa;oBAChB,CAAC,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;oBACzF,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;aAC/B,CAAC,CAAC;YAEH,4EAA4E;YAC5E,IAAI,UAAU,GAAuB,OAAO,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;gBACvE,IAAI,CAAC;oBACH,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACxD,CAAC;gBAAC,WAAM,CAAC;oBACP,4EAA4E;gBAC9E,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAgB,EAAE,CAAC;YAE/B,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACzD,YAAY,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;oBAChE,YAAY,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;oBAChE,YAAY,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;oBAChE,YAAY,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;iBACjE,CAAC,CAAC;gBACH,IAAI,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9D,IAAI,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACjE,IAAI,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9D,IAAI,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC3C,YAAY,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAChE,YAAY,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;iBACjE,CAAC,CAAC;gBACH,IAAI,OAAO;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBACjE,IAAI,OAAO;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IAED;;;OAGG;IACK,aAAa,CACnB,IAAqB,EACrB,aAAmC;;QAEnC,MAAM,MAAM,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,mCAAI,aAAa,CAAC;aAClD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;aACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAsE,EAAE,CAAC;QACrF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA7MD,gDA6MC"}
|
|
@@ -18,7 +18,9 @@ function run() {
|
|
|
18
18
|
model: data.modelPath,
|
|
19
19
|
certificates: data.certificates,
|
|
20
20
|
}, data.passOverrides);
|
|
21
|
-
|
|
21
|
+
if (data.relevantDate) {
|
|
22
|
+
pass.setRelevantDate(new Date(data.relevantDate));
|
|
23
|
+
}
|
|
22
24
|
for (const img of data.images) {
|
|
23
25
|
pass.addBuffer(img.name, Buffer.from(img.buffer));
|
|
24
26
|
}
|
|
@@ -27,6 +29,8 @@ function run() {
|
|
|
27
29
|
const entry = { key: f.key, label: f.label, value: f.value };
|
|
28
30
|
if (f.row === "header")
|
|
29
31
|
pass.headerFields.push(entry);
|
|
32
|
+
if (f.row === "primary")
|
|
33
|
+
pass.primaryFields.push(entry);
|
|
30
34
|
if (f.row === "secondary")
|
|
31
35
|
pass.secondaryFields.push(entry);
|
|
32
36
|
if (f.row === "auxiliary")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signPassWorker.js","sourceRoot":"","sources":["../../src/apple/signPassWorker.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mDAAwD;AACxD,yDAA2C;AAiB3C,SAAe,GAAG;;QAChB,MAAM,IAAI,GAAG,2BAAwB,CAAC;QAEtC,MAAM,IAAI,GAAG,MAAM,0BAAM,CAAC,IAAI,CAC5B;YACE,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,EACD,IAAI,CAAC,aAAa,CACnB,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"signPassWorker.js","sourceRoot":"","sources":["../../src/apple/signPassWorker.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mDAAwD;AACxD,yDAA2C;AAiB3C,SAAe,GAAG;;QAChB,MAAM,IAAI,GAAG,2BAAwB,CAAC;QAEtC,MAAM,IAAI,GAAG,MAAM,0BAAM,CAAC,IAAI,CAC5B;YACE,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,EACD,IAAI,CAAC,aAAa,CACnB,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAe,CAAC,CAAC;QAEvC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC7D,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;gBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW;gBAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW;gBAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,2BAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CAAA;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClB,2BAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"formatVersion": 1,
|
|
3
|
+
"passTypeIdentifier": "pass.il.co.nimi.event-ticket",
|
|
4
|
+
"teamIdentifier": "PLACEHOLDER",
|
|
5
|
+
"organizationName": "PLACEHOLDER",
|
|
6
|
+
"description": "Subscription Pass",
|
|
7
|
+
"foregroundColor": "rgb(255, 255, 255)",
|
|
8
|
+
"backgroundColor": "rgb(60, 65, 76)",
|
|
9
|
+
"labelColor": "rgb(200, 200, 200)",
|
|
10
|
+
"storeCard": {
|
|
11
|
+
"headerFields": [],
|
|
12
|
+
"primaryFields": [],
|
|
13
|
+
"secondaryFields": [],
|
|
14
|
+
"auxiliaryFields": [],
|
|
15
|
+
"backFields": []
|
|
16
|
+
}
|
|
17
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"formatVersion": 1,
|
|
3
|
+
"passTypeIdentifier": "pass.il.co.nimi.event-ticket",
|
|
4
|
+
"teamIdentifier": "PLACEHOLDER",
|
|
5
|
+
"organizationName": "PLACEHOLDER",
|
|
6
|
+
"description": "Subscription Pass",
|
|
7
|
+
"foregroundColor": "rgb(255, 255, 255)",
|
|
8
|
+
"backgroundColor": "rgb(60, 65, 76)",
|
|
9
|
+
"labelColor": "rgb(200, 200, 200)",
|
|
10
|
+
"storeCard": {
|
|
11
|
+
"headerFields": [],
|
|
12
|
+
"primaryFields": [],
|
|
13
|
+
"secondaryFields": [],
|
|
14
|
+
"auxiliaryFields": [],
|
|
15
|
+
"backFields": []
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -5,6 +5,12 @@ export declare class GooglePassGenerator {
|
|
|
5
5
|
* Uses config.classId if provided; otherwise derives from issuerId + data.classIdSuffix.
|
|
6
6
|
*/
|
|
7
7
|
private buildClassId;
|
|
8
|
+
/**
|
|
9
|
+
* Builds the full Google Wallet object ID from the raw object ID (e.g. a Mongo _id).
|
|
10
|
+
* Must be used by both the create and invalidate paths so PATCH targets the object
|
|
11
|
+
* that was actually created.
|
|
12
|
+
*/
|
|
13
|
+
private buildObjectId;
|
|
8
14
|
/**
|
|
9
15
|
* Ensures the Google Wallet EventTicketClass exists (creates or patches).
|
|
10
16
|
* Delegates to the shared googleAuth helper.
|
|
@@ -23,10 +29,15 @@ export declare class GooglePassGenerator {
|
|
|
23
29
|
* Generates a Google Wallet "Add to Wallet" save URL for the given pass data.
|
|
24
30
|
*/
|
|
25
31
|
generateSaveUrl(data: IWalletPassData, config: IGoogleWalletConfig): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Generates a Google Wallet "Add to Wallet" save URL using genericObject (for subscriptions).
|
|
34
|
+
* Uses genericClass / genericObject API instead of eventTicketClass / eventTicketObject.
|
|
35
|
+
*/
|
|
36
|
+
generateSubscriptionSaveUrl(data: IWalletPassData, config: IGoogleWalletConfig): Promise<string>;
|
|
26
37
|
/**
|
|
27
38
|
* PATCHes the Google Wallet object state (ACTIVE | EXPIRED | INACTIVE).
|
|
28
39
|
* Silently no-ops on 404 (pass was never created — expected when user never added to wallet).
|
|
29
40
|
* Throws on all other errors so callers can log/alert on real failures.
|
|
30
41
|
*/
|
|
31
|
-
updateObjectState(rawObjectId: string, config: IGoogleWalletConfig, state: 'ACTIVE' | 'EXPIRED' | 'INACTIVE'): Promise<void>;
|
|
42
|
+
updateObjectState(rawObjectId: string, config: IGoogleWalletConfig, state: 'ACTIVE' | 'EXPIRED' | 'INACTIVE', passType?: 'eventTicket' | 'generic'): Promise<void>;
|
|
32
43
|
}
|
|
@@ -29,6 +29,14 @@ class GooglePassGenerator {
|
|
|
29
29
|
const suffix = data.classIdSuffix || data.objectId;
|
|
30
30
|
return `${config.issuerId}.${suffix}`;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Builds the full Google Wallet object ID from the raw object ID (e.g. a Mongo _id).
|
|
34
|
+
* Must be used by both the create and invalidate paths so PATCH targets the object
|
|
35
|
+
* that was actually created.
|
|
36
|
+
*/
|
|
37
|
+
buildObjectId(rawObjectId, config) {
|
|
38
|
+
return `${config.issuerId}.${rawObjectId}`.replace(/[^a-zA-Z0-9_.\-]/g, '-');
|
|
39
|
+
}
|
|
32
40
|
/**
|
|
33
41
|
* Ensures the Google Wallet EventTicketClass exists (creates or patches).
|
|
34
42
|
* Delegates to the shared googleAuth helper.
|
|
@@ -70,30 +78,71 @@ class GooglePassGenerator {
|
|
|
70
78
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
79
|
const classId = this.buildClassId(data, config);
|
|
72
80
|
yield this.ensureClass(classId, data, config);
|
|
73
|
-
const objectId =
|
|
81
|
+
const objectId = this.buildObjectId(data.objectId, config);
|
|
74
82
|
const ticketObject = this.buildObject(objectId, classId, data);
|
|
75
83
|
const token = this.signJwt(ticketObject, config);
|
|
76
84
|
logger_1.default.info(`[GooglePassGenerator] save URL generated for objectId=${data.objectId}`);
|
|
77
85
|
return `https://pay.google.com/gp/v/save/${token}`;
|
|
78
86
|
});
|
|
79
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Generates a Google Wallet "Add to Wallet" save URL using genericObject (for subscriptions).
|
|
90
|
+
* Uses genericClass / genericObject API instead of eventTicketClass / eventTicketObject.
|
|
91
|
+
*/
|
|
92
|
+
generateSubscriptionSaveUrl(data, config) {
|
|
93
|
+
var _a, _b, _c, _d, _e;
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
const classId = this.buildClassId(data, config);
|
|
96
|
+
const accessToken = yield (0, googleAuth_1.getGoogleAccessToken)(config);
|
|
97
|
+
const baseUrl = "https://walletobjects.googleapis.com/walletobjects/v1/genericClass";
|
|
98
|
+
const headers = { Authorization: `Bearer ${accessToken}` };
|
|
99
|
+
const classBody = (0, googleAuth_1.buildGoogleGenericClass)(classId, data);
|
|
100
|
+
try {
|
|
101
|
+
yield axios_1.default.post(baseUrl, classBody, { headers, timeout: 5000 });
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 409) {
|
|
105
|
+
yield axios_1.default.patch(`${baseUrl}/${encodeURIComponent(classId)}`, classBody, { headers, timeout: 5000 });
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
throw new Error(`failed to sync Google Wallet generic class: ${(_e = (_d = (_c = (_b = err.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.error) === null || _d === void 0 ? void 0 : _d.message) !== null && _e !== void 0 ? _e : err.message}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const objectId = this.buildObjectId(data.objectId, config);
|
|
112
|
+
const genericObject = (0, googleAuth_1.buildGoogleGenericObject)(objectId, classId, data);
|
|
113
|
+
const claims = {
|
|
114
|
+
iss: config.serviceAccountEmail,
|
|
115
|
+
aud: 'google',
|
|
116
|
+
origins: [],
|
|
117
|
+
typ: 'savetowallet',
|
|
118
|
+
payload: {
|
|
119
|
+
genericObjects: [genericObject],
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
const token = jsonwebtoken_1.default.sign(claims, config.privateKey, { algorithm: 'RS256' });
|
|
123
|
+
logger_1.default.info(`[GooglePassGenerator] subscription save URL generated for objectId=${data.objectId}`);
|
|
124
|
+
return `https://pay.google.com/gp/v/save/${token}`;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
80
127
|
/**
|
|
81
128
|
* PATCHes the Google Wallet object state (ACTIVE | EXPIRED | INACTIVE).
|
|
82
129
|
* Silently no-ops on 404 (pass was never created — expected when user never added to wallet).
|
|
83
130
|
* Throws on all other errors so callers can log/alert on real failures.
|
|
84
131
|
*/
|
|
85
|
-
updateObjectState(rawObjectId, config, state) {
|
|
132
|
+
updateObjectState(rawObjectId, config, state, passType = 'eventTicket') {
|
|
86
133
|
var _a;
|
|
87
134
|
return __awaiter(this, void 0, void 0, function* () {
|
|
88
135
|
const accessToken = yield (0, googleAuth_1.getGoogleAccessToken)(config);
|
|
89
|
-
const
|
|
90
|
-
const
|
|
136
|
+
const fullObjectId = this.buildObjectId(rawObjectId, config);
|
|
137
|
+
const encodedId = encodeURIComponent(fullObjectId);
|
|
138
|
+
const objectType = passType === 'generic' ? 'genericObject' : 'eventTicketObject';
|
|
139
|
+
const url = `https://walletobjects.googleapis.com/walletobjects/v1/${objectType}/${encodedId}`;
|
|
91
140
|
try {
|
|
92
141
|
yield axios_1.default.patch(url, { state }, {
|
|
93
142
|
headers: { Authorization: `Bearer ${accessToken}` },
|
|
94
143
|
timeout: 5000,
|
|
95
144
|
});
|
|
96
|
-
logger_1.default.info(`[GooglePassGenerator] object ${
|
|
145
|
+
logger_1.default.info(`[GooglePassGenerator] object ${fullObjectId} state updated to ${state}`);
|
|
97
146
|
}
|
|
98
147
|
catch (err) {
|
|
99
148
|
if (((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GooglePassGenerator.js","sourceRoot":"","sources":["../../src/google/GooglePassGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,gEAA+B;AAC/B,2DAAmC;AAEnC,
|
|
1
|
+
{"version":3,"file":"GooglePassGenerator.js","sourceRoot":"","sources":["../../src/google/GooglePassGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,6 @@ export declare function getGoogleAccessToken(config: IGoogleWalletConfig): Promi
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function ensureGoogleTicketClass(config: IGoogleWalletConfig, data: IWalletPassData): Promise<void>;
|
|
10
10
|
export declare function buildGoogleTicketObject(objectId: string, classId: string, data: IWalletPassData): object;
|
|
11
|
+
export declare function buildGoogleGenericObject(objectId: string, classId: string, data: IWalletPassData): object;
|
|
12
|
+
export declare function buildGoogleGenericClass(classId: string, data: IWalletPassData): object;
|
|
11
13
|
export declare function buildGoogleTicketClass(classId: string, data: IWalletPassData): object;
|
|
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.buildGoogleTicketClass = exports.buildGoogleTicketObject = exports.ensureGoogleTicketClass = exports.getGoogleAccessToken = void 0;
|
|
15
|
+
exports.buildGoogleTicketClass = exports.buildGoogleGenericClass = exports.buildGoogleGenericObject = exports.buildGoogleTicketObject = exports.ensureGoogleTicketClass = exports.getGoogleAccessToken = void 0;
|
|
16
16
|
const axios_1 = __importDefault(require("axios"));
|
|
17
17
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
18
18
|
// Intentional module-level singletons — shared across all Wallet instances
|
|
@@ -90,6 +90,24 @@ function buildGoogleTicketObject(objectId, classId, data) {
|
|
|
90
90
|
], validTimeInterval: Object.assign({ start: { date: (data.startDate || new Date()).toISOString() } }, (data.endDate && { end: { date: data.endDate.toISOString() } })) });
|
|
91
91
|
}
|
|
92
92
|
exports.buildGoogleTicketObject = buildGoogleTicketObject;
|
|
93
|
+
function buildGoogleGenericObject(objectId, classId, data) {
|
|
94
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ id: objectId, classId, state: "ACTIVE", cardTitle: {
|
|
95
|
+
defaultValue: { language: "en-US", value: data.marketplaceName || "" },
|
|
96
|
+
}, header: {
|
|
97
|
+
defaultValue: { language: "en-US", value: data.passTitle || "" },
|
|
98
|
+
}, subheader: {
|
|
99
|
+
defaultValue: { language: "en-US", value: data.holderName || "" },
|
|
100
|
+
} }, (data.logoUrl && { logo: { sourceUri: { uri: data.logoUrl } } })), (data.backgroundColorHex && { hexBackgroundColor: data.backgroundColorHex })), { barcode: Object.assign({ type: "QR_CODE", value: data.qrContent }, (data.orderNumber && { alternateText: data.orderNumber })) }), (data.startDate && {
|
|
101
|
+
validTimeInterval: Object.assign({ start: { date: data.startDate.toISOString() } }, (data.endDate && { end: { date: data.endDate.toISOString() } })),
|
|
102
|
+
})), { textModulesData: [
|
|
103
|
+
...(data.passSubtitle ? [{ header: "PLAN", body: data.passSubtitle }] : []),
|
|
104
|
+
] });
|
|
105
|
+
}
|
|
106
|
+
exports.buildGoogleGenericObject = buildGoogleGenericObject;
|
|
107
|
+
function buildGoogleGenericClass(classId, data) {
|
|
108
|
+
return Object.assign({ id: classId, issuerName: data.marketplaceName || "", reviewStatus: "UNDER_REVIEW" }, (data.logoUrl && { logo: { sourceUri: { uri: data.logoUrl } } }));
|
|
109
|
+
}
|
|
110
|
+
exports.buildGoogleGenericClass = buildGoogleGenericClass;
|
|
93
111
|
function buildGoogleTicketClass(classId, data) {
|
|
94
112
|
return Object.assign(Object.assign({ id: classId, issuerName: data.marketplaceName || "", reviewStatus: "UNDER_REVIEW", eventName: {
|
|
95
113
|
defaultValue: { language: "en-US", value: data.passTitle || "" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"googleAuth.js","sourceRoot":"","sources":["../../src/google/googleAuth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"googleAuth.js","sourceRoot":"","sources":["../../src/google/googleAuth.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export * from './helpers/colorHelpers';
|
|
3
3
|
export * from './helpers/imageHelpers';
|
|
4
|
-
export { ApplePassGenerator } from './apple/ApplePassGenerator';
|
|
4
|
+
export { ApplePassGenerator, SUBSCRIPTION_TEMPLATE_PATH } from './apple/ApplePassGenerator';
|
|
5
5
|
export { GooglePassGenerator } from './google/GooglePassGenerator';
|
package/dist/index.js
CHANGED
|
@@ -14,12 +14,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.GooglePassGenerator = exports.ApplePassGenerator = void 0;
|
|
17
|
+
exports.GooglePassGenerator = exports.SUBSCRIPTION_TEMPLATE_PATH = exports.ApplePassGenerator = void 0;
|
|
18
18
|
__exportStar(require("./types"), exports);
|
|
19
19
|
__exportStar(require("./helpers/colorHelpers"), exports);
|
|
20
20
|
__exportStar(require("./helpers/imageHelpers"), exports);
|
|
21
21
|
var ApplePassGenerator_1 = require("./apple/ApplePassGenerator");
|
|
22
22
|
Object.defineProperty(exports, "ApplePassGenerator", { enumerable: true, get: function () { return ApplePassGenerator_1.ApplePassGenerator; } });
|
|
23
|
+
Object.defineProperty(exports, "SUBSCRIPTION_TEMPLATE_PATH", { enumerable: true, get: function () { return ApplePassGenerator_1.SUBSCRIPTION_TEMPLATE_PATH; } });
|
|
23
24
|
var GooglePassGenerator_1 = require("./google/GooglePassGenerator");
|
|
24
25
|
Object.defineProperty(exports, "GooglePassGenerator", { enumerable: true, get: function () { return GooglePassGenerator_1.GooglePassGenerator; } });
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yDAAuC;AACvC,yDAAuC;AACvC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yDAAuC;AACvC,yDAAuC;AACvC,iEAA4F;AAAnF,wHAAA,kBAAkB,OAAA;AAAE,gIAAA,0BAA0B,OAAA;AACvD,oEAAmE;AAA1D,0HAAA,mBAAmB,OAAA"}
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nimee/wallet-generator",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Apple Wallet and Google Wallet pass generation for Nimi services",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build-ts": "tsc",
|
|
9
9
|
"watch-ts": "tsc -w",
|
|
10
|
-
"build": "npm run build-ts && cp -r src/apple/template.pass dist/apple/template.pass",
|
|
10
|
+
"build": "npm run build-ts && cp -r src/apple/template.pass dist/apple/template.pass && cp -r src/apple/subscription.pass dist/apple/subscription.pass",
|
|
11
11
|
"lint": "eslint -c ../../.eslintrc.js --ext .ts src/**",
|
|
12
12
|
"test": "jest --detectOpenHandles --watch",
|
|
13
13
|
"test:deploy": "jest --ci --coverage",
|
|
@@ -4,6 +4,8 @@ import { Worker } from 'worker_threads';
|
|
|
4
4
|
import * as imageHelpers from '../helpers/imageHelpers';
|
|
5
5
|
import { IWalletPassData, IAppleWalletConfig, IWalletLayoutField } from '../types';
|
|
6
6
|
|
|
7
|
+
export const SUBSCRIPTION_TEMPLATE_PATH = path.join(__dirname, 'subscription.pass');
|
|
8
|
+
|
|
7
9
|
// ─── Apple pass image dimensions ─────────────────────────────────────────────
|
|
8
10
|
|
|
9
11
|
const LOGO_1X = { w: 160, h: 50 };
|
|
@@ -34,7 +36,7 @@ interface WorkerPayload {
|
|
|
34
36
|
images: PassImage[];
|
|
35
37
|
barcodes: { message: string; format: string; messageEncoding: string };
|
|
36
38
|
layoutFields: Array<{ key: string; label: string; value: string; row: string }>;
|
|
37
|
-
relevantDate
|
|
39
|
+
relevantDate?: string;
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
// ─── Field resolver ───────────────────────────────────────────────────────────
|
|
@@ -50,35 +52,35 @@ function resolveField(
|
|
|
50
52
|
switch (key) {
|
|
51
53
|
case 'event':
|
|
52
54
|
case 'passTitle':
|
|
53
|
-
return data.passTitle ? { label: '
|
|
55
|
+
return data.passTitle ? { label: 'EVENT', value: data.passTitle } : undefined;
|
|
54
56
|
case 'holder':
|
|
55
57
|
case 'holderName':
|
|
56
58
|
case 'attendee':
|
|
57
|
-
return data.holderName ? { label: '
|
|
59
|
+
return data.holderName ? { label: 'NAME', value: data.holderName } : undefined;
|
|
58
60
|
case 'date':
|
|
59
61
|
case 'dateDisplay':
|
|
60
|
-
return data.dateDisplay ? { label: '
|
|
62
|
+
return data.dateDisplay ? { label: 'DATE', value: data.dateDisplay } : undefined;
|
|
61
63
|
case 'seat':
|
|
62
|
-
return data.seat ? { label: '
|
|
64
|
+
return data.seat ? { label: 'SEAT', value: data.seat } : undefined;
|
|
63
65
|
case 'order':
|
|
64
66
|
case 'orderNumber':
|
|
65
67
|
case 'order_number':
|
|
66
|
-
return data.orderNumber ? { label: '
|
|
68
|
+
return data.orderNumber ? { label: 'ORDER', value: data.orderNumber } : undefined;
|
|
67
69
|
case 'subtitle':
|
|
68
70
|
case 'passSubtitle':
|
|
69
71
|
case 'ticket_type':
|
|
70
|
-
return data.passSubtitle ? { label: '
|
|
72
|
+
return data.passSubtitle ? { label: 'TICKET', value: data.passSubtitle } : undefined;
|
|
71
73
|
case 'plan_name':
|
|
72
|
-
return data.passTitle ? { label: '
|
|
74
|
+
return data.passTitle ? { label: 'PLAN', value: data.passTitle } : undefined;
|
|
73
75
|
case 'member_name':
|
|
74
|
-
return data.holderName ? { label: '
|
|
76
|
+
return data.holderName ? { label: 'MEMBER', value: data.holderName } : undefined;
|
|
75
77
|
case 'valid_from': {
|
|
76
78
|
const value = data.dateDisplay || (data.startDate ? data.startDate.toLocaleDateString('he-IL') : '') || '';
|
|
77
|
-
return value ? { label: '
|
|
79
|
+
return value ? { label: 'VALID FROM', value } : undefined;
|
|
78
80
|
}
|
|
79
81
|
case 'valid_to': {
|
|
80
82
|
const value = data.endDate ? data.endDate.toLocaleDateString('he-IL') : '';
|
|
81
|
-
return value ? { label: '
|
|
83
|
+
return value ? { label: 'VALID TO', value } : undefined;
|
|
82
84
|
}
|
|
83
85
|
default:
|
|
84
86
|
return undefined;
|
|
@@ -143,7 +145,7 @@ export class ApplePassGenerator {
|
|
|
143
145
|
messageEncoding: 'iso-8859-1',
|
|
144
146
|
},
|
|
145
147
|
layoutFields,
|
|
146
|
-
|
|
148
|
+
...(data.startDate ? { relevantDate: data.startDate.toISOString() } : {}),
|
|
147
149
|
};
|
|
148
150
|
|
|
149
151
|
return this.spawnWorker(workerPayload);
|
|
@@ -13,7 +13,7 @@ interface WorkerData {
|
|
|
13
13
|
images: PassImage[];
|
|
14
14
|
barcodes: { message: string; format: string; messageEncoding: string };
|
|
15
15
|
layoutFields: Array<{ key: string; label: string; value: string; row: string }>;
|
|
16
|
-
relevantDate
|
|
16
|
+
relevantDate?: string;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
async function run() {
|
|
@@ -27,7 +27,9 @@ async function run() {
|
|
|
27
27
|
data.passOverrides
|
|
28
28
|
);
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
if (data.relevantDate) {
|
|
31
|
+
pass.setRelevantDate(new Date(data.relevantDate));
|
|
32
|
+
}
|
|
31
33
|
|
|
32
34
|
for (const img of data.images) {
|
|
33
35
|
pass.addBuffer(img.name, Buffer.from(img.buffer));
|
|
@@ -38,6 +40,7 @@ async function run() {
|
|
|
38
40
|
for (const f of data.layoutFields) {
|
|
39
41
|
const entry = { key: f.key, label: f.label, value: f.value };
|
|
40
42
|
if (f.row === "header") pass.headerFields.push(entry);
|
|
43
|
+
if (f.row === "primary") pass.primaryFields.push(entry);
|
|
41
44
|
if (f.row === "secondary") pass.secondaryFields.push(entry);
|
|
42
45
|
if (f.row === "auxiliary") pass.auxiliaryFields.push(entry);
|
|
43
46
|
if (f.row === "back") pass.backFields.push(entry);
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"formatVersion": 1,
|
|
3
|
+
"passTypeIdentifier": "pass.il.co.nimi.event-ticket",
|
|
4
|
+
"teamIdentifier": "PLACEHOLDER",
|
|
5
|
+
"organizationName": "PLACEHOLDER",
|
|
6
|
+
"description": "Subscription Pass",
|
|
7
|
+
"foregroundColor": "rgb(255, 255, 255)",
|
|
8
|
+
"backgroundColor": "rgb(60, 65, 76)",
|
|
9
|
+
"labelColor": "rgb(200, 200, 200)",
|
|
10
|
+
"storeCard": {
|
|
11
|
+
"headerFields": [],
|
|
12
|
+
"primaryFields": [],
|
|
13
|
+
"secondaryFields": [],
|
|
14
|
+
"auxiliaryFields": [],
|
|
15
|
+
"backFields": []
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -2,7 +2,7 @@ import axios from 'axios';
|
|
|
2
2
|
import jwt from 'jsonwebtoken';
|
|
3
3
|
import logger from '@nimee/logger';
|
|
4
4
|
import { IGoogleWalletConfig, IWalletPassData } from '../types';
|
|
5
|
-
import { ensureGoogleTicketClass, getGoogleAccessToken, buildGoogleTicketObject } from './googleAuth';
|
|
5
|
+
import { ensureGoogleTicketClass, getGoogleAccessToken, buildGoogleTicketObject, buildGoogleGenericObject, buildGoogleGenericClass } from './googleAuth';
|
|
6
6
|
|
|
7
7
|
export class GooglePassGenerator {
|
|
8
8
|
/**
|
|
@@ -17,6 +17,15 @@ export class GooglePassGenerator {
|
|
|
17
17
|
return `${config.issuerId}.${suffix}`;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Builds the full Google Wallet object ID from the raw object ID (e.g. a Mongo _id).
|
|
22
|
+
* Must be used by both the create and invalidate paths so PATCH targets the object
|
|
23
|
+
* that was actually created.
|
|
24
|
+
*/
|
|
25
|
+
private buildObjectId(rawObjectId: string, config: IGoogleWalletConfig): string {
|
|
26
|
+
return `${config.issuerId}.${rawObjectId}`.replace(/[^a-zA-Z0-9_.\-]/g, '-');
|
|
27
|
+
}
|
|
28
|
+
|
|
20
29
|
/**
|
|
21
30
|
* Ensures the Google Wallet EventTicketClass exists (creates or patches).
|
|
22
31
|
* Delegates to the shared googleAuth helper.
|
|
@@ -61,7 +70,7 @@ export class GooglePassGenerator {
|
|
|
61
70
|
|
|
62
71
|
await this.ensureClass(classId, data, config);
|
|
63
72
|
|
|
64
|
-
const objectId =
|
|
73
|
+
const objectId = this.buildObjectId(data.objectId, config);
|
|
65
74
|
const ticketObject = this.buildObject(objectId, classId, data);
|
|
66
75
|
const token = this.signJwt(ticketObject, config);
|
|
67
76
|
|
|
@@ -69,6 +78,45 @@ export class GooglePassGenerator {
|
|
|
69
78
|
return `https://pay.google.com/gp/v/save/${token}`;
|
|
70
79
|
}
|
|
71
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Generates a Google Wallet "Add to Wallet" save URL using genericObject (for subscriptions).
|
|
83
|
+
* Uses genericClass / genericObject API instead of eventTicketClass / eventTicketObject.
|
|
84
|
+
*/
|
|
85
|
+
async generateSubscriptionSaveUrl(data: IWalletPassData, config: IGoogleWalletConfig): Promise<string> {
|
|
86
|
+
const classId = this.buildClassId(data, config);
|
|
87
|
+
const accessToken = await getGoogleAccessToken(config);
|
|
88
|
+
const baseUrl = "https://walletobjects.googleapis.com/walletobjects/v1/genericClass";
|
|
89
|
+
const headers = { Authorization: `Bearer ${accessToken}` };
|
|
90
|
+
const classBody = buildGoogleGenericClass(classId, data);
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
await axios.post(baseUrl, classBody, { headers, timeout: 5000 });
|
|
94
|
+
} catch (err: any) {
|
|
95
|
+
if (err.response?.status === 409) {
|
|
96
|
+
await axios.patch(`${baseUrl}/${encodeURIComponent(classId)}`, classBody, { headers, timeout: 5000 });
|
|
97
|
+
} else {
|
|
98
|
+
throw new Error(`failed to sync Google Wallet generic class: ${err.response?.data?.error?.message ?? err.message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const objectId = this.buildObjectId(data.objectId, config);
|
|
103
|
+
const genericObject = buildGoogleGenericObject(objectId, classId, data);
|
|
104
|
+
|
|
105
|
+
const claims = {
|
|
106
|
+
iss: config.serviceAccountEmail,
|
|
107
|
+
aud: 'google',
|
|
108
|
+
origins: [] as string[],
|
|
109
|
+
typ: 'savetowallet',
|
|
110
|
+
payload: {
|
|
111
|
+
genericObjects: [genericObject],
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const token = jwt.sign(claims, config.privateKey, { algorithm: 'RS256' });
|
|
116
|
+
logger.info(`[GooglePassGenerator] subscription save URL generated for objectId=${data.objectId}`);
|
|
117
|
+
return `https://pay.google.com/gp/v/save/${token}`;
|
|
118
|
+
}
|
|
119
|
+
|
|
72
120
|
/**
|
|
73
121
|
* PATCHes the Google Wallet object state (ACTIVE | EXPIRED | INACTIVE).
|
|
74
122
|
* Silently no-ops on 404 (pass was never created — expected when user never added to wallet).
|
|
@@ -77,11 +125,14 @@ export class GooglePassGenerator {
|
|
|
77
125
|
async updateObjectState(
|
|
78
126
|
rawObjectId: string,
|
|
79
127
|
config: IGoogleWalletConfig,
|
|
80
|
-
state: 'ACTIVE' | 'EXPIRED' | 'INACTIVE'
|
|
128
|
+
state: 'ACTIVE' | 'EXPIRED' | 'INACTIVE',
|
|
129
|
+
passType: 'eventTicket' | 'generic' = 'eventTicket'
|
|
81
130
|
): Promise<void> {
|
|
82
131
|
const accessToken = await getGoogleAccessToken(config);
|
|
83
|
-
const
|
|
84
|
-
const
|
|
132
|
+
const fullObjectId = this.buildObjectId(rawObjectId, config);
|
|
133
|
+
const encodedId = encodeURIComponent(fullObjectId);
|
|
134
|
+
const objectType = passType === 'generic' ? 'genericObject' : 'eventTicketObject';
|
|
135
|
+
const url = `https://walletobjects.googleapis.com/walletobjects/v1/${objectType}/${encodedId}`;
|
|
85
136
|
|
|
86
137
|
try {
|
|
87
138
|
await axios.patch(
|
|
@@ -92,7 +143,7 @@ export class GooglePassGenerator {
|
|
|
92
143
|
timeout: 5000,
|
|
93
144
|
}
|
|
94
145
|
);
|
|
95
|
-
logger.info(`[GooglePassGenerator] object ${
|
|
146
|
+
logger.info(`[GooglePassGenerator] object ${fullObjectId} state updated to ${state}`);
|
|
96
147
|
} catch (err: any) {
|
|
97
148
|
if (err?.response?.status === 404) {
|
|
98
149
|
// Pass object doesn't exist — user never added to Google Wallet, nothing to invalidate
|
package/src/google/googleAuth.ts
CHANGED
|
@@ -121,6 +121,48 @@ export function buildGoogleTicketObject(objectId: string, classId: string, data:
|
|
|
121
121
|
};
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
export function buildGoogleGenericObject(objectId: string, classId: string, data: IWalletPassData): object {
|
|
125
|
+
return {
|
|
126
|
+
id: objectId,
|
|
127
|
+
classId,
|
|
128
|
+
state: "ACTIVE",
|
|
129
|
+
cardTitle: {
|
|
130
|
+
defaultValue: { language: "en-US", value: data.marketplaceName || "" },
|
|
131
|
+
},
|
|
132
|
+
header: {
|
|
133
|
+
defaultValue: { language: "en-US", value: data.passTitle || "" },
|
|
134
|
+
},
|
|
135
|
+
subheader: {
|
|
136
|
+
defaultValue: { language: "en-US", value: data.holderName || "" },
|
|
137
|
+
},
|
|
138
|
+
...(data.logoUrl && { logo: { sourceUri: { uri: data.logoUrl } } }),
|
|
139
|
+
...(data.backgroundColorHex && { hexBackgroundColor: data.backgroundColorHex }),
|
|
140
|
+
barcode: {
|
|
141
|
+
type: "QR_CODE",
|
|
142
|
+
value: data.qrContent,
|
|
143
|
+
...(data.orderNumber && { alternateText: data.orderNumber }),
|
|
144
|
+
},
|
|
145
|
+
...(data.startDate && {
|
|
146
|
+
validTimeInterval: {
|
|
147
|
+
start: { date: data.startDate.toISOString() },
|
|
148
|
+
...(data.endDate && { end: { date: data.endDate.toISOString() } }),
|
|
149
|
+
},
|
|
150
|
+
}),
|
|
151
|
+
textModulesData: [
|
|
152
|
+
...(data.passSubtitle ? [{ header: "PLAN", body: data.passSubtitle }] : []),
|
|
153
|
+
],
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function buildGoogleGenericClass(classId: string, data: IWalletPassData): object {
|
|
158
|
+
return {
|
|
159
|
+
id: classId,
|
|
160
|
+
issuerName: data.marketplaceName || "",
|
|
161
|
+
reviewStatus: "UNDER_REVIEW",
|
|
162
|
+
...(data.logoUrl && { logo: { sourceUri: { uri: data.logoUrl } } }),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
124
166
|
export function buildGoogleTicketClass(classId: string, data: IWalletPassData): object {
|
|
125
167
|
return {
|
|
126
168
|
id: classId,
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export * from './helpers/colorHelpers';
|
|
3
3
|
export * from './helpers/imageHelpers';
|
|
4
|
-
export { ApplePassGenerator } from './apple/ApplePassGenerator';
|
|
4
|
+
export { ApplePassGenerator, SUBSCRIPTION_TEMPLATE_PATH } from './apple/ApplePassGenerator';
|
|
5
5
|
export { GooglePassGenerator } from './google/GooglePassGenerator';
|