@nimee/wallet-generator 1.0.1 → 1.0.3
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 +17 -24
- 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 +16 -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 +6 -1
- package/dist/google/GooglePassGenerator.js +42 -2
- package/dist/google/GooglePassGenerator.js.map +1 -1
- package/dist/google/googleAuth.d.ts +2 -0
- package/dist/google/googleAuth.js +17 -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 +16 -14
- 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 +44 -3
- package/src/google/googleAuth.ts +40 -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, _b, _c;
|
|
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
|
-
const passOverrides = Object.assign(Object.assign(Object.assign(Object.assign({ passTypeIdentifier: config.passTypeIdentifier, teamIdentifier: config.teamIdentifier, serialNumber: data.objectId, description: data.passTitle, organizationName:
|
|
113
|
-
const workerPayload = {
|
|
114
|
-
modelPath,
|
|
115
|
-
certificates: {
|
|
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 = 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: ((_c = data.startDate) !== null && _c !== void 0 ? _c : 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,16 @@
|
|
|
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
|
+
"generic": {
|
|
11
|
+
"primaryFields": [],
|
|
12
|
+
"secondaryFields": [],
|
|
13
|
+
"auxiliaryFields": [],
|
|
14
|
+
"backFields": []
|
|
15
|
+
}
|
|
16
|
+
}
|
|
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
|
+
}
|
|
@@ -23,10 +23,15 @@ export declare class GooglePassGenerator {
|
|
|
23
23
|
* Generates a Google Wallet "Add to Wallet" save URL for the given pass data.
|
|
24
24
|
*/
|
|
25
25
|
generateSaveUrl(data: IWalletPassData, config: IGoogleWalletConfig): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Generates a Google Wallet "Add to Wallet" save URL using genericObject (for subscriptions).
|
|
28
|
+
* Uses genericClass / genericObject API instead of eventTicketClass / eventTicketObject.
|
|
29
|
+
*/
|
|
30
|
+
generateSubscriptionSaveUrl(data: IWalletPassData, config: IGoogleWalletConfig): Promise<string>;
|
|
26
31
|
/**
|
|
27
32
|
* PATCHes the Google Wallet object state (ACTIVE | EXPIRED | INACTIVE).
|
|
28
33
|
* Silently no-ops on 404 (pass was never created — expected when user never added to wallet).
|
|
29
34
|
* Throws on all other errors so callers can log/alert on real failures.
|
|
30
35
|
*/
|
|
31
|
-
updateObjectState(rawObjectId: string, config: IGoogleWalletConfig, state: 'ACTIVE' | 'EXPIRED' | 'INACTIVE'): Promise<void>;
|
|
36
|
+
updateObjectState(rawObjectId: string, config: IGoogleWalletConfig, state: 'ACTIVE' | 'EXPIRED' | 'INACTIVE', passType?: 'eventTicket' | 'generic'): Promise<void>;
|
|
32
37
|
}
|
|
@@ -77,17 +77,57 @@ class GooglePassGenerator {
|
|
|
77
77
|
return `https://pay.google.com/gp/v/save/${token}`;
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Generates a Google Wallet "Add to Wallet" save URL using genericObject (for subscriptions).
|
|
82
|
+
* Uses genericClass / genericObject API instead of eventTicketClass / eventTicketObject.
|
|
83
|
+
*/
|
|
84
|
+
generateSubscriptionSaveUrl(data, config) {
|
|
85
|
+
var _a, _b, _c, _d, _e;
|
|
86
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
+
const classId = this.buildClassId(data, config);
|
|
88
|
+
const accessToken = yield (0, googleAuth_1.getGoogleAccessToken)(config);
|
|
89
|
+
const baseUrl = "https://walletobjects.googleapis.com/walletobjects/v1/genericClass";
|
|
90
|
+
const headers = { Authorization: `Bearer ${accessToken}` };
|
|
91
|
+
const classBody = (0, googleAuth_1.buildGoogleGenericClass)(classId, data);
|
|
92
|
+
try {
|
|
93
|
+
yield axios_1.default.post(baseUrl, classBody, { headers, timeout: 5000 });
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 409) {
|
|
97
|
+
yield axios_1.default.patch(`${baseUrl}/${encodeURIComponent(classId)}`, classBody, { headers, timeout: 5000 });
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
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}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const objectId = `${config.issuerId}.${data.objectId}`.replace(/[^a-zA-Z0-9_.\-]/g, '-');
|
|
104
|
+
const genericObject = (0, googleAuth_1.buildGoogleGenericObject)(objectId, classId, data);
|
|
105
|
+
const claims = {
|
|
106
|
+
iss: config.serviceAccountEmail,
|
|
107
|
+
aud: 'google',
|
|
108
|
+
origins: [],
|
|
109
|
+
typ: 'savetowallet',
|
|
110
|
+
payload: {
|
|
111
|
+
genericObjects: [genericObject],
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
const token = jsonwebtoken_1.default.sign(claims, config.privateKey, { algorithm: 'RS256' });
|
|
115
|
+
logger_1.default.info(`[GooglePassGenerator] subscription save URL generated for objectId=${data.objectId}`);
|
|
116
|
+
return `https://pay.google.com/gp/v/save/${token}`;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
80
119
|
/**
|
|
81
120
|
* PATCHes the Google Wallet object state (ACTIVE | EXPIRED | INACTIVE).
|
|
82
121
|
* Silently no-ops on 404 (pass was never created — expected when user never added to wallet).
|
|
83
122
|
* Throws on all other errors so callers can log/alert on real failures.
|
|
84
123
|
*/
|
|
85
|
-
updateObjectState(rawObjectId, config, state) {
|
|
124
|
+
updateObjectState(rawObjectId, config, state, passType = 'eventTicket') {
|
|
86
125
|
var _a;
|
|
87
126
|
return __awaiter(this, void 0, void 0, function* () {
|
|
88
127
|
const accessToken = yield (0, googleAuth_1.getGoogleAccessToken)(config);
|
|
89
128
|
const encodedId = encodeURIComponent(rawObjectId);
|
|
90
|
-
const
|
|
129
|
+
const objectType = passType === 'generic' ? 'genericObject' : 'eventTicketObject';
|
|
130
|
+
const url = `https://walletobjects.googleapis.com/walletobjects/v1/${objectType}/${encodedId}`;
|
|
91
131
|
try {
|
|
92
132
|
yield axios_1.default.patch(url, { state }, {
|
|
93
133
|
headers: { Authorization: `Bearer ${accessToken}` },
|
|
@@ -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,22 @@ 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({ 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 })), validTimeInterval: Object.assign({ start: { date: (data.startDate || new Date()).toISOString() } }, (data.endDate && { end: { date: data.endDate.toISOString() } })), textModulesData: [
|
|
101
|
+
...(data.passSubtitle ? [{ header: "PLAN", body: data.passSubtitle }] : []),
|
|
102
|
+
] });
|
|
103
|
+
}
|
|
104
|
+
exports.buildGoogleGenericObject = buildGoogleGenericObject;
|
|
105
|
+
function buildGoogleGenericClass(classId, data) {
|
|
106
|
+
return Object.assign({ id: classId, issuerName: data.marketplaceName || "", reviewStatus: "UNDER_REVIEW" }, (data.logoUrl && { logo: { sourceUri: { uri: data.logoUrl } } }));
|
|
107
|
+
}
|
|
108
|
+
exports.buildGoogleGenericClass = buildGoogleGenericClass;
|
|
93
109
|
function buildGoogleTicketClass(classId, data) {
|
|
94
110
|
return Object.assign(Object.assign({ id: classId, issuerName: data.marketplaceName || "", reviewStatus: "UNDER_REVIEW", eventName: {
|
|
95
111
|
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.3",
|
|
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;
|
|
@@ -120,8 +122,8 @@ export class ApplePassGenerator {
|
|
|
120
122
|
teamIdentifier: config.teamIdentifier,
|
|
121
123
|
serialNumber: data.objectId,
|
|
122
124
|
description: data.passTitle,
|
|
123
|
-
organizationName: data.marketplaceName
|
|
124
|
-
logoText: data.marketplaceName
|
|
125
|
+
organizationName: data.marketplaceName || 'Nimi',
|
|
126
|
+
...(data.marketplaceName ? { logoText: data.marketplaceName } : {}),
|
|
125
127
|
...(data.backgroundColor && { backgroundColor: data.backgroundColor }),
|
|
126
128
|
...(data.foregroundColor && { foregroundColor: data.foregroundColor }),
|
|
127
129
|
...(data.labelColor && { labelColor: data.labelColor }),
|
|
@@ -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
|
/**
|
|
@@ -69,6 +69,45 @@ export class GooglePassGenerator {
|
|
|
69
69
|
return `https://pay.google.com/gp/v/save/${token}`;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Generates a Google Wallet "Add to Wallet" save URL using genericObject (for subscriptions).
|
|
74
|
+
* Uses genericClass / genericObject API instead of eventTicketClass / eventTicketObject.
|
|
75
|
+
*/
|
|
76
|
+
async generateSubscriptionSaveUrl(data: IWalletPassData, config: IGoogleWalletConfig): Promise<string> {
|
|
77
|
+
const classId = this.buildClassId(data, config);
|
|
78
|
+
const accessToken = await getGoogleAccessToken(config);
|
|
79
|
+
const baseUrl = "https://walletobjects.googleapis.com/walletobjects/v1/genericClass";
|
|
80
|
+
const headers = { Authorization: `Bearer ${accessToken}` };
|
|
81
|
+
const classBody = buildGoogleGenericClass(classId, data);
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
await axios.post(baseUrl, classBody, { headers, timeout: 5000 });
|
|
85
|
+
} catch (err: any) {
|
|
86
|
+
if (err.response?.status === 409) {
|
|
87
|
+
await axios.patch(`${baseUrl}/${encodeURIComponent(classId)}`, classBody, { headers, timeout: 5000 });
|
|
88
|
+
} else {
|
|
89
|
+
throw new Error(`failed to sync Google Wallet generic class: ${err.response?.data?.error?.message ?? err.message}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const objectId = `${config.issuerId}.${data.objectId}`.replace(/[^a-zA-Z0-9_.\-]/g, '-');
|
|
94
|
+
const genericObject = buildGoogleGenericObject(objectId, classId, data);
|
|
95
|
+
|
|
96
|
+
const claims = {
|
|
97
|
+
iss: config.serviceAccountEmail,
|
|
98
|
+
aud: 'google',
|
|
99
|
+
origins: [] as string[],
|
|
100
|
+
typ: 'savetowallet',
|
|
101
|
+
payload: {
|
|
102
|
+
genericObjects: [genericObject],
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const token = jwt.sign(claims, config.privateKey, { algorithm: 'RS256' });
|
|
107
|
+
logger.info(`[GooglePassGenerator] subscription save URL generated for objectId=${data.objectId}`);
|
|
108
|
+
return `https://pay.google.com/gp/v/save/${token}`;
|
|
109
|
+
}
|
|
110
|
+
|
|
72
111
|
/**
|
|
73
112
|
* PATCHes the Google Wallet object state (ACTIVE | EXPIRED | INACTIVE).
|
|
74
113
|
* Silently no-ops on 404 (pass was never created — expected when user never added to wallet).
|
|
@@ -77,11 +116,13 @@ export class GooglePassGenerator {
|
|
|
77
116
|
async updateObjectState(
|
|
78
117
|
rawObjectId: string,
|
|
79
118
|
config: IGoogleWalletConfig,
|
|
80
|
-
state: 'ACTIVE' | 'EXPIRED' | 'INACTIVE'
|
|
119
|
+
state: 'ACTIVE' | 'EXPIRED' | 'INACTIVE',
|
|
120
|
+
passType: 'eventTicket' | 'generic' = 'eventTicket'
|
|
81
121
|
): Promise<void> {
|
|
82
122
|
const accessToken = await getGoogleAccessToken(config);
|
|
83
123
|
const encodedId = encodeURIComponent(rawObjectId);
|
|
84
|
-
const
|
|
124
|
+
const objectType = passType === 'generic' ? 'genericObject' : 'eventTicketObject';
|
|
125
|
+
const url = `https://walletobjects.googleapis.com/walletobjects/v1/${objectType}/${encodedId}`;
|
|
85
126
|
|
|
86
127
|
try {
|
|
87
128
|
await axios.patch(
|
package/src/google/googleAuth.ts
CHANGED
|
@@ -121,6 +121,46 @@ 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
|
+
validTimeInterval: {
|
|
146
|
+
start: { date: (data.startDate || new Date()).toISOString() },
|
|
147
|
+
...(data.endDate && { end: { date: data.endDate.toISOString() } }),
|
|
148
|
+
},
|
|
149
|
+
textModulesData: [
|
|
150
|
+
...(data.passSubtitle ? [{ header: "PLAN", body: data.passSubtitle }] : []),
|
|
151
|
+
],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function buildGoogleGenericClass(classId: string, data: IWalletPassData): object {
|
|
156
|
+
return {
|
|
157
|
+
id: classId,
|
|
158
|
+
issuerName: data.marketplaceName || "",
|
|
159
|
+
reviewStatus: "UNDER_REVIEW",
|
|
160
|
+
...(data.logoUrl && { logo: { sourceUri: { uri: data.logoUrl } } }),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
124
164
|
export function buildGoogleTicketClass(classId: string, data: IWalletPassData): object {
|
|
125
165
|
return {
|
|
126
166
|
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';
|