@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.
@@ -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: string;
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: 'Event', value: data.passTitle } : undefined;
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: 'Name', value: data.holderName } : undefined;
61
+ return data.holderName ? { label: 'NAME', value: data.holderName } : undefined;
61
62
  case 'date':
62
63
  case 'dateDisplay':
63
- return data.dateDisplay ? { label: 'Date', value: data.dateDisplay } : undefined;
64
+ return data.dateDisplay ? { label: 'DATE', value: data.dateDisplay } : undefined;
64
65
  case 'seat':
65
- return data.seat ? { label: 'Seat', value: data.seat } : undefined;
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: 'Order', value: data.orderNumber } : undefined;
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: 'Ticket', value: data.passSubtitle } : undefined;
74
+ return data.passSubtitle ? { label: 'TICKET', value: data.passSubtitle } : undefined;
74
75
  case 'plan_name':
75
- return data.passTitle ? { label: 'Plan', value: data.passTitle } : undefined;
76
+ return data.passTitle ? { label: 'PLAN', value: data.passTitle } : undefined;
76
77
  case 'member_name':
77
- return data.holderName ? { label: 'Member', value: data.holderName } : undefined;
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: 'Valid From', value } : undefined;
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: 'Valid To', value } : undefined;
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
- passOverrides,
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":"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"}
1
+ {"version":3,"file":"ApplePassGenerator.js","sourceRoot":"","sources":["../../src/apple/ApplePassGenerator.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,9 @@ function run() {
18
18
  model: data.modelPath,
19
19
  certificates: data.certificates,
20
20
  }, data.passOverrides);
21
- pass.setRelevantDate(new Date(data.relevantDate));
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;QAElD,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,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"}
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"}
@@ -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
+ }
@@ -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 = `${config.issuerId}.${data.objectId}`.replace(/[^a-zA-Z0-9_.\-]/g, '-');
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 encodedId = encodeURIComponent(rawObjectId);
90
- const url = `https://walletobjects.googleapis.com/walletobjects/v1/eventTicketObject/${encodedId}`;
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 ${rawObjectId} state updated to ${state}`);
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":"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"}
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,iEAAgE;AAAvD,wHAAA,kBAAkB,OAAA;AAC3B,oEAAmE;AAA1D,0HAAA,mBAAmB,OAAA"}
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
@@ -1,6 +1,6 @@
1
1
  export interface IWalletLayoutField {
2
2
  key: string;
3
- row: 'header' | 'secondary' | 'auxiliary' | 'back' | 'hidden';
3
+ row: 'header' | 'primary' | 'secondary' | 'auxiliary' | 'back' | 'hidden';
4
4
  position: number;
5
5
  }
6
6
  /**
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@nimee/wallet-generator",
3
- "version": "1.0.2",
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: string;
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: 'Event', value: data.passTitle } : undefined;
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: 'Name', value: data.holderName } : undefined;
59
+ return data.holderName ? { label: 'NAME', value: data.holderName } : undefined;
58
60
  case 'date':
59
61
  case 'dateDisplay':
60
- return data.dateDisplay ? { label: 'Date', value: data.dateDisplay } : undefined;
62
+ return data.dateDisplay ? { label: 'DATE', value: data.dateDisplay } : undefined;
61
63
  case 'seat':
62
- return data.seat ? { label: 'Seat', value: data.seat } : undefined;
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: 'Order', value: data.orderNumber } : undefined;
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: 'Ticket', value: data.passSubtitle } : undefined;
72
+ return data.passSubtitle ? { label: 'TICKET', value: data.passSubtitle } : undefined;
71
73
  case 'plan_name':
72
- return data.passTitle ? { label: 'Plan', value: data.passTitle } : undefined;
74
+ return data.passTitle ? { label: 'PLAN', value: data.passTitle } : undefined;
73
75
  case 'member_name':
74
- return data.holderName ? { label: 'Member', value: data.holderName } : undefined;
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: 'Valid From', value } : undefined;
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: 'Valid To', value } : undefined;
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
- relevantDate: (data.startDate ?? new Date()).toISOString(),
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: string;
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
- pass.setRelevantDate(new Date(data.relevantDate));
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);
@@ -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 = `${config.issuerId}.${data.objectId}`.replace(/[^a-zA-Z0-9_.\-]/g, '-');
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 encodedId = encodeURIComponent(rawObjectId);
84
- const url = `https://walletobjects.googleapis.com/walletobjects/v1/eventTicketObject/${encodedId}`;
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 ${rawObjectId} state updated to ${state}`);
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
@@ -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';
package/src/types.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export interface IWalletLayoutField {
2
2
  key: string;
3
- row: 'header' | 'secondary' | 'auxiliary' | 'back' | 'hidden';
3
+ row: 'header' | 'primary' | 'secondary' | 'auxiliary' | 'back' | 'hidden';
4
4
  position: number;
5
5
  }
6
6