@unchainedshop/ticketing 4.0.0-rc.15 → 4.0.0-rc.16
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/lib/mobile-tickets/apple-handler-express.d.ts.map +1 -1
- package/lib/mobile-tickets/apple-handler-express.js +18 -39
- package/lib/mobile-tickets/apple-handler-express.js.map +1 -1
- package/lib/mobile-tickets/apple-handler-fastify.d.ts.map +1 -1
- package/lib/mobile-tickets/apple-handler-fastify.js +49 -16
- package/lib/mobile-tickets/apple-handler-fastify.js.map +1 -1
- package/lib/mobile-tickets/apple-wallet.d.ts +2 -2
- package/lib/mobile-tickets/apple-wallet.d.ts.map +1 -1
- package/lib/mobile-tickets/apple-wallet.js +1 -1
- package/lib/mobile-tickets/apple-wallet.js.map +1 -1
- package/lib/mobile-tickets/google-handler-express.d.ts.map +1 -1
- package/lib/mobile-tickets/google-handler-express.js +6 -11
- package/lib/mobile-tickets/google-handler-express.js.map +1 -1
- package/lib/mobile-tickets/google-handler-fastify.d.ts.map +1 -1
- package/lib/mobile-tickets/google-handler-fastify.js +15 -5
- package/lib/mobile-tickets/google-handler-fastify.js.map +1 -1
- package/lib/pdf-tickets/print-handler-express.d.ts.map +1 -1
- package/lib/pdf-tickets/print-handler-express.js +4 -3
- package/lib/pdf-tickets/print-handler-express.js.map +1 -1
- package/lib/pdf-tickets/print-handler-fastify.d.ts.map +1 -1
- package/lib/pdf-tickets/print-handler-fastify.js +8 -2
- package/lib/pdf-tickets/print-handler-fastify.js.map +1 -1
- package/package.json +3 -3
- package/src/mobile-tickets/apple-handler-express.ts +18 -41
- package/src/mobile-tickets/apple-handler-fastify.ts +51 -20
- package/src/mobile-tickets/apple-wallet.ts +1 -1
- package/src/mobile-tickets/google-handler-express.ts +6 -11
- package/src/mobile-tickets/google-handler-fastify.ts +15 -5
- package/src/pdf-tickets/print-handler-express.ts +6 -3
- package/src/pdf-tickets/print-handler-fastify.ts +9 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-handler-express.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/apple-handler-express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3C,QAAA,MAAM,kBAAkB,GAAU,KAAK,OAAO,GAAG;IAAE,gBAAgB,EAAE,YAAY,CAAA;CAAE,EAAE,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"apple-handler-express.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/apple-handler-express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3C,QAAA,MAAM,kBAAkB,GAAU,KAAK,OAAO,GAAG;IAAE,gBAAgB,EAAE,YAAY,CAAA;CAAE,EAAE,KAAK,QAAQ,kBAuMjG,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -14,23 +14,20 @@ const appleWalletHandler = async (req, res) => {
|
|
|
14
14
|
const [, , passFileName] = req.path.split('/');
|
|
15
15
|
const [tokenId] = passFileName.split('.pkpass');
|
|
16
16
|
if (!tokenId) {
|
|
17
|
-
res.
|
|
18
|
-
res.end();
|
|
17
|
+
res.status(404).end();
|
|
19
18
|
return;
|
|
20
19
|
}
|
|
21
20
|
const token = await modules.warehousing.findToken({
|
|
22
21
|
tokenId,
|
|
23
22
|
});
|
|
24
23
|
if (!token) {
|
|
25
|
-
res.
|
|
26
|
-
res.end('Token not found');
|
|
24
|
+
res.status(404).send('Token not found');
|
|
27
25
|
return;
|
|
28
26
|
}
|
|
29
27
|
const { hash } = req.query;
|
|
30
28
|
const correctHash = await modules.warehousing.buildAccessKeyForToken(tokenId);
|
|
31
29
|
if (hash !== correctHash) {
|
|
32
|
-
res.
|
|
33
|
-
res.end('Token hash invalid for current owner');
|
|
30
|
+
res.status(403).send('Token hash invalid for current owner');
|
|
34
31
|
return;
|
|
35
32
|
}
|
|
36
33
|
const passFile = await modules.passes.upsertAppleWalletPass(token, resolvedContext);
|
|
@@ -43,14 +40,13 @@ const appleWalletHandler = async (req, res) => {
|
|
|
43
40
|
res.status(200);
|
|
44
41
|
res.setHeader('Content-Type', 'application/vnd.apple.pkpass');
|
|
45
42
|
res.setHeader('Content-Disposition', `attachment; filename=${tokenId}.pkpass`);
|
|
46
|
-
res.
|
|
43
|
+
res.send(uint8View);
|
|
47
44
|
return;
|
|
48
45
|
}
|
|
49
46
|
catch (e) {
|
|
50
|
-
|
|
47
|
+
logger.error(e);
|
|
51
48
|
}
|
|
52
|
-
res.
|
|
53
|
-
res.end();
|
|
49
|
+
res.status(500).end();
|
|
54
50
|
return;
|
|
55
51
|
}
|
|
56
52
|
const [, apiVersion, endpoint, ...pathComponents] = req.path.split("/"); /* eslint-disable-line */
|
|
@@ -62,8 +58,7 @@ const appleWalletHandler = async (req, res) => {
|
|
|
62
58
|
const pass = await modules.passes.findAppleWalletPass(passTypeIdentifier, serialNumber);
|
|
63
59
|
if (pass) {
|
|
64
60
|
if (!isAuthenticationTokenCorrect(req, pass.meta.rawData._id || pass.meta.rawData.tokenId)) {
|
|
65
|
-
res.
|
|
66
|
-
res.end();
|
|
61
|
+
res.status(401).end();
|
|
67
62
|
return;
|
|
68
63
|
}
|
|
69
64
|
const newRegistration = await modules.passes.registerDeviceForAppleWalletPass(passTypeIdentifier, serialNumber, {
|
|
@@ -71,12 +66,10 @@ const appleWalletHandler = async (req, res) => {
|
|
|
71
66
|
pushToken,
|
|
72
67
|
});
|
|
73
68
|
if (!newRegistration) {
|
|
74
|
-
res.
|
|
75
|
-
res.end();
|
|
69
|
+
res.status(200).end();
|
|
76
70
|
return;
|
|
77
71
|
}
|
|
78
|
-
res.
|
|
79
|
-
res.end();
|
|
72
|
+
res.status(201).end();
|
|
80
73
|
return;
|
|
81
74
|
}
|
|
82
75
|
}
|
|
@@ -88,18 +81,10 @@ const appleWalletHandler = async (req, res) => {
|
|
|
88
81
|
const passes = await modules.passes.findUpdatedAppleWalletPasses(passTypeIdentifier, deviceLibraryIdentifier, passesUpdatedSince);
|
|
89
82
|
const serialNumbers = passes.map((t) => t.meta.serialNumber);
|
|
90
83
|
if (serialNumbers?.length) {
|
|
91
|
-
res.
|
|
92
|
-
'Content-Type': 'application/json',
|
|
93
|
-
});
|
|
94
|
-
res.write(JSON.stringify({
|
|
95
|
-
serialNumbers,
|
|
96
|
-
lastUpdated,
|
|
97
|
-
}));
|
|
98
|
-
res.end();
|
|
84
|
+
res.status(200).send({ serialNumbers, lastUpdated });
|
|
99
85
|
return;
|
|
100
86
|
}
|
|
101
|
-
res.
|
|
102
|
-
res.end();
|
|
87
|
+
res.status(204).end();
|
|
103
88
|
return;
|
|
104
89
|
}
|
|
105
90
|
else if (req.method === 'DELETE') {
|
|
@@ -108,14 +93,12 @@ const appleWalletHandler = async (req, res) => {
|
|
|
108
93
|
const pass = await modules.passes.findAppleWalletPass(passTypeIdentifier, serialNumber);
|
|
109
94
|
if (pass) {
|
|
110
95
|
if (!isAuthenticationTokenCorrect(req, pass.meta.rawData._id || pass.meta.rawData.tokenId)) {
|
|
111
|
-
res.
|
|
112
|
-
res.end();
|
|
96
|
+
res.status(401).end();
|
|
113
97
|
return;
|
|
114
98
|
}
|
|
115
99
|
await modules.passes.unregisterDeviceForAppleWalletPass(passTypeIdentifier, serialNumber, deviceLibraryIdentifier);
|
|
116
100
|
// Unregistered
|
|
117
|
-
res.
|
|
118
|
-
res.end();
|
|
101
|
+
res.status(200).end();
|
|
119
102
|
return;
|
|
120
103
|
}
|
|
121
104
|
}
|
|
@@ -128,8 +111,7 @@ const appleWalletHandler = async (req, res) => {
|
|
|
128
111
|
logger.info(log);
|
|
129
112
|
}
|
|
130
113
|
});
|
|
131
|
-
res.
|
|
132
|
-
res.end();
|
|
114
|
+
res.status(200).end();
|
|
133
115
|
return;
|
|
134
116
|
}
|
|
135
117
|
else if (endpoint === 'passes') {
|
|
@@ -139,8 +121,7 @@ const appleWalletHandler = async (req, res) => {
|
|
|
139
121
|
const pass = await modules.passes.findAppleWalletPass(passTypeIdentifier, serialNumber);
|
|
140
122
|
if (pass) {
|
|
141
123
|
if (!isAuthenticationTokenCorrect(req, pass.meta.rawData._id || pass.meta.rawData.tokenId)) {
|
|
142
|
-
res.
|
|
143
|
-
res.end();
|
|
124
|
+
res.status(401).end();
|
|
144
125
|
return;
|
|
145
126
|
}
|
|
146
127
|
const { updated, created } = pass;
|
|
@@ -149,8 +130,7 @@ const appleWalletHandler = async (req, res) => {
|
|
|
149
130
|
const ifModifiedSinceDate = new Date(req.header('if-modified-since'));
|
|
150
131
|
ifModifiedSinceDate.setMilliseconds(0);
|
|
151
132
|
if (ifModifiedSinceDate.getTime() >= lastModifiedDate.getTime()) {
|
|
152
|
-
res.
|
|
153
|
-
res.end();
|
|
133
|
+
res.status(304).end();
|
|
154
134
|
return;
|
|
155
135
|
}
|
|
156
136
|
const fileUploadAdapter = getFileAdapter();
|
|
@@ -163,13 +143,12 @@ const appleWalletHandler = async (req, res) => {
|
|
|
163
143
|
'Content-Type': 'application/vnd.apple.pkpass',
|
|
164
144
|
'Last-Modified': lastModifiedDate.toUTCString(),
|
|
165
145
|
});
|
|
166
|
-
res.
|
|
146
|
+
res.send(uint8View);
|
|
167
147
|
return;
|
|
168
148
|
}
|
|
169
149
|
}
|
|
170
150
|
}
|
|
171
|
-
res.
|
|
172
|
-
res.end();
|
|
151
|
+
res.status(404).end();
|
|
173
152
|
};
|
|
174
153
|
export default appleWalletHandler;
|
|
175
154
|
//# sourceMappingURL=apple-handler-express.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-handler-express.js","sourceRoot":"","sources":["../../src/mobile-tickets/apple-handler-express.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,GAAG,YAAY,CAAC,mCAAmC,CAAC,CAAC;AAEjE,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IAChE,MAAM,0BAA0B,GAAG,aAAa,mBAAmB,EAAE,CAAC;IACtE,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,0BAA0B,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,GAAiD,EAAE,GAAa,EAAE,EAAE;IACpG,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IACpC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE1D,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,AAAD,EAAG,YAAY,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"apple-handler-express.js","sourceRoot":"","sources":["../../src/mobile-tickets/apple-handler-express.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,GAAG,YAAY,CAAC,mCAAmC,CAAC,CAAC;AAEjE,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IAChE,MAAM,0BAA0B,GAAG,aAAa,mBAAmB,EAAE,CAAC;IACtE,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,0BAA0B,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,GAAiD,EAAE,GAAa,EAAE,EAAE;IACpG,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IACpC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE1D,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,AAAD,EAAG,YAAY,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;gBAChD,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;YAC3B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAEpF,MAAM,iBAAiB,GAAG,cAAc,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACtE,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YAE3E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAEvC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;YAC9D,GAAG,CAAC,SAAS,CAAC,qBAAqB,EAAE,wBAAwB,OAAO,SAAS,CAAC,CAAC;YAC/E,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;IAClG,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,kBAAkB;YAClB,MAAM,CAAC,uBAAuB,EAAE,AAAD,EAAG,kBAAkB,EAAE,YAAY,CAAC,GAAG,cAAc,CAAC;YACrF,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YAE/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;YAExF,IAAI,IAAI,EAAE,CAAC;gBACT,IACE,CAAC,4BAA4B,CAC3B,GAAG,EACF,IAAI,CAAC,IAAI,CAAC,OAAe,CAAC,GAAG,IAAK,IAAI,CAAC,IAAI,CAAC,OAAe,CAAC,OAAO,CACrE,EACD,CAAC;oBACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,gCAAgC,CAC3E,kBAAkB,EAClB,YAAY,EACZ;oBACE,uBAAuB;oBACvB,SAAS;iBACV,CACF,CAAC;gBAEF,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAChC,mCAAmC;YACnC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,uBAAuB,EAAE,AAAD,EAAG,kBAAkB,CAAC,GAAG,cAAc,CAAC;YACvE,MAAM,kBAAkB,GACtB,GAAG,CAAC,KAAK,EAAE,kBAAkB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAA4B,CAAC,CAAC;YAEpF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAC9D,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,CACnB,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE7D,IAAI,aAAa,EAAE,MAAM,EAAE,CAAC;gBAC1B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnC,oBAAoB;YACpB,MAAM,CAAC,uBAAuB,EAAE,AAAD,EAAG,kBAAkB,EAAE,YAAY,CAAC,GAAG,cAAc,CAAC;YAErF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;YAExF,IAAI,IAAI,EAAE,CAAC;gBACT,IACE,CAAC,4BAA4B,CAC3B,GAAG,EACF,IAAI,CAAC,IAAI,CAAC,OAAe,CAAC,GAAG,IAAK,IAAI,CAAC,IAAI,CAAC,OAAe,CAAC,OAAO,CACrE,EACD,CAAC;oBACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,MAAM,OAAO,CAAC,MAAM,CAAC,kCAAkC,CACrD,kBAAkB,EAClB,YAAY,EACZ,uBAAuB,CACxB,CAAC;gBAEF,eAAe;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9B,aAAa;QACb,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACzB,sBAAsB;YACtB,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,GAAG,cAAc,CAAC;YAE1D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;YAExF,IAAI,IAAI,EAAE,CAAC;gBACT,IACE,CAAC,4BAA4B,CAC3B,GAAG,EACF,IAAI,CAAC,IAAI,CAAC,OAAe,CAAC,GAAG,IAAK,IAAI,CAAC,IAAI,CAAC,OAAe,CAAC,OAAO,CACrE,EACD,CAAC;oBACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;gBAElC,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;gBACtD,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAEpC,MAAM,mBAAmB,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACtE,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAEvC,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;oBAChE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,MAAM,iBAAiB,GAAG,cAAc,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAClE,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBAE3E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEvC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;oBACjB,cAAc,EAAE,8BAA8B;oBAC9C,eAAe,EAAE,gBAAgB,CAAC,WAAW,EAAE;iBAChD,CAAC,CAAC;gBACH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-handler-fastify.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/apple-handler-fastify.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AASlE,QAAA,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"apple-handler-fastify.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/apple-handler-fastify.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AASlE,QAAA,MAAM,kBAAkB,EAAE,kBAmPzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -22,14 +22,20 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
22
22
|
tokenId,
|
|
23
23
|
});
|
|
24
24
|
if (!token) {
|
|
25
|
+
logger.error('Token not found', { tokenId });
|
|
25
26
|
reply.status(404);
|
|
26
|
-
return reply.send(
|
|
27
|
+
return reply.send();
|
|
27
28
|
}
|
|
28
29
|
const { hash } = req.query;
|
|
29
30
|
const correctHash = await modules.warehousing.buildAccessKeyForToken(tokenId);
|
|
30
31
|
if (hash !== correctHash) {
|
|
32
|
+
logger.error('Token hash invalid for current owner', { tokenId });
|
|
31
33
|
reply.status(403);
|
|
32
|
-
return reply.send(
|
|
34
|
+
return reply.send({
|
|
35
|
+
success: false,
|
|
36
|
+
message: 'Token hash invalid for current owner',
|
|
37
|
+
name: 'HASH_MISMATCH',
|
|
38
|
+
});
|
|
33
39
|
}
|
|
34
40
|
const passFile = await modules.passes.upsertAppleWalletPass(token, resolvedContext);
|
|
35
41
|
const fileUploadAdapter = getFileAdapter();
|
|
@@ -44,10 +50,14 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
44
50
|
return reply.send(uint8View);
|
|
45
51
|
}
|
|
46
52
|
catch (e) {
|
|
47
|
-
|
|
53
|
+
logger.error(e);
|
|
54
|
+
reply.status(500);
|
|
55
|
+
return reply.send({
|
|
56
|
+
success: false,
|
|
57
|
+
message: 'Error generating pass',
|
|
58
|
+
name: 'PASS_GENERATION_ERROR',
|
|
59
|
+
});
|
|
48
60
|
}
|
|
49
|
-
reply.status(500);
|
|
50
|
-
return reply.send();
|
|
51
61
|
}
|
|
52
62
|
const [, apiVersion, endpoint, ...pathComponents] = path.split("/"); /* eslint-disable-line */
|
|
53
63
|
if (endpoint === 'devices') {
|
|
@@ -58,6 +68,7 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
58
68
|
const pass = await modules.passes.findAppleWalletPass(passTypeIdentifier, serialNumber);
|
|
59
69
|
if (pass) {
|
|
60
70
|
if (!isAuthenticationTokenCorrect(req, pass.meta.rawData._id || pass.meta.rawData.tokenId)) {
|
|
71
|
+
logger.error('Unauthorized', { passTypeIdentifier, serialNumber });
|
|
61
72
|
reply.status(401);
|
|
62
73
|
return reply.send();
|
|
63
74
|
}
|
|
@@ -67,10 +78,14 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
67
78
|
});
|
|
68
79
|
if (!newRegistration) {
|
|
69
80
|
reply.status(200);
|
|
70
|
-
return reply.send(
|
|
81
|
+
return reply.send({
|
|
82
|
+
success: true,
|
|
83
|
+
});
|
|
71
84
|
}
|
|
72
85
|
reply.status(201);
|
|
73
|
-
return reply.send(
|
|
86
|
+
return reply.send({
|
|
87
|
+
success: true,
|
|
88
|
+
});
|
|
74
89
|
}
|
|
75
90
|
}
|
|
76
91
|
else if (req.method === 'GET') {
|
|
@@ -83,14 +98,14 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
83
98
|
const serialNumbers = passes.map((t) => t.meta.serialNumber);
|
|
84
99
|
if (serialNumbers?.length) {
|
|
85
100
|
reply.status(200);
|
|
86
|
-
reply.
|
|
87
|
-
|
|
101
|
+
return reply.send({
|
|
102
|
+
success: true,
|
|
88
103
|
serialNumbers,
|
|
89
104
|
lastUpdated,
|
|
90
|
-
})
|
|
105
|
+
});
|
|
91
106
|
}
|
|
92
107
|
reply.status(204);
|
|
93
|
-
return reply.send();
|
|
108
|
+
return reply.send({ success: true });
|
|
94
109
|
}
|
|
95
110
|
else if (req.method === 'DELETE') {
|
|
96
111
|
// Unregister Device
|
|
@@ -98,13 +113,20 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
98
113
|
const pass = await modules.passes.findAppleWalletPass(passTypeIdentifier, serialNumber);
|
|
99
114
|
if (pass) {
|
|
100
115
|
if (!isAuthenticationTokenCorrect(req, pass.meta.rawData._id || pass.meta.rawData.tokenId)) {
|
|
116
|
+
logger.error('Unauthorized', { passTypeIdentifier, serialNumber });
|
|
101
117
|
reply.status(401);
|
|
102
|
-
return reply.send(
|
|
118
|
+
return reply.send({
|
|
119
|
+
success: false,
|
|
120
|
+
message: 'Unauthorized',
|
|
121
|
+
name: 'UNAUTHORIZED',
|
|
122
|
+
});
|
|
103
123
|
}
|
|
104
124
|
await modules.passes.unregisterDeviceForAppleWalletPass(passTypeIdentifier, serialNumber, deviceLibraryIdentifier);
|
|
105
125
|
// Unregistered
|
|
106
126
|
reply.status(200);
|
|
107
|
-
return reply.send(
|
|
127
|
+
return reply.send({
|
|
128
|
+
success: true,
|
|
129
|
+
});
|
|
108
130
|
}
|
|
109
131
|
}
|
|
110
132
|
}
|
|
@@ -117,7 +139,9 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
117
139
|
}
|
|
118
140
|
});
|
|
119
141
|
reply.status(200);
|
|
120
|
-
return reply.send(
|
|
142
|
+
return reply.send({
|
|
143
|
+
success: true,
|
|
144
|
+
});
|
|
121
145
|
}
|
|
122
146
|
else if (endpoint === 'passes') {
|
|
123
147
|
if (req.method === 'GET') {
|
|
@@ -126,8 +150,13 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
126
150
|
const pass = await modules.passes.findAppleWalletPass(passTypeIdentifier, serialNumber);
|
|
127
151
|
if (pass) {
|
|
128
152
|
if (!isAuthenticationTokenCorrect(req, pass.meta.rawData._id || pass.meta.rawData.tokenId)) {
|
|
153
|
+
logger.error('Unauthorized', { passTypeIdentifier, serialNumber });
|
|
129
154
|
reply.status(401);
|
|
130
|
-
return reply.send(
|
|
155
|
+
return reply.send({
|
|
156
|
+
success: false,
|
|
157
|
+
message: 'Unauthorized',
|
|
158
|
+
name: 'UNAUTHORIZED',
|
|
159
|
+
});
|
|
131
160
|
}
|
|
132
161
|
const { updated, created } = pass;
|
|
133
162
|
const lastModifiedDate = new Date(updated || created);
|
|
@@ -136,7 +165,11 @@ const appleWalletHandler = async (req, reply) => {
|
|
|
136
165
|
ifModifiedSinceDate.setMilliseconds(0);
|
|
137
166
|
if (ifModifiedSinceDate.getTime() >= lastModifiedDate.getTime()) {
|
|
138
167
|
reply.status(304);
|
|
139
|
-
return reply.send(
|
|
168
|
+
return reply.send({
|
|
169
|
+
success: true,
|
|
170
|
+
message: 'Not modified',
|
|
171
|
+
name: 'NOT_MODIFIED',
|
|
172
|
+
});
|
|
140
173
|
}
|
|
141
174
|
const fileUploadAdapter = getFileAdapter();
|
|
142
175
|
const signedUrl = await fileUploadAdapter.createDownloadURL(pass);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-handler-fastify.js","sourceRoot":"","sources":["../../src/mobile-tickets/apple-handler-fastify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,MAAM,MAAM,GAAG,YAAY,CAAC,mCAAmC,CAAC,CAAC;AAEjE,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IAChE,MAAM,0BAA0B,GAAG,aAAa,mBAAmB,EAAE,CAAC;IACtE,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,0BAA0B,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAuB,KAAK,EAClD,GAEC,EACD,KAAK,EACL,EAAE;IACF,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IAEpC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;IAErB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,AAAD,EAAG,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;gBAChD,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"apple-handler-fastify.js","sourceRoot":"","sources":["../../src/mobile-tickets/apple-handler-fastify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import apn from '@
|
|
1
|
+
import apn from '@parse/node-apn';
|
|
2
2
|
import { Readable } from 'node:stream';
|
|
3
|
-
export declare const pushToApplePushNotificationService: (deviceTokens: any) => Promise<apn.Responses
|
|
3
|
+
export declare const pushToApplePushNotificationService: (deviceTokens: any) => Promise<apn.Responses<apn.ResponseSent, apn.ResponseFailure>>;
|
|
4
4
|
export declare const buildPassBinary: (chainTokenId: string, pass: {
|
|
5
5
|
serialNumber: string;
|
|
6
6
|
asBuffer: () => Promise<Buffer>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-wallet.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/apple-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"apple-wallet.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/apple-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,eAAO,MAAM,kCAAkC,GAAU,iBAAY,kEAUpE,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,cAAc,MAAM,EACpB,MAAM;IACJ,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC;;;;;EAUF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-wallet.js","sourceRoot":"","sources":["../../src/mobile-tickets/apple-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"apple-wallet.js","sourceRoot":"","sources":["../../src/mobile-tickets/apple-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAK,EAAE,YAAY,EAAE,EAAE;IACvE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;QACnC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACvC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACtC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAC/C,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,YAAoB,EACpB,IAGC,EACD,EAAE;IACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,IAAI,CAAC,YAAY;QACtB,QAAQ,EAAE,GAAG,YAAY,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS;QAC1D,gBAAgB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QACjD,QAAQ,EAAE,8BAA8B;KACzC,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-handler-express.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/google-handler-express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,eAAO,MAAM,mBAAmB,GAC9B,KAAK,OAAO,GAAG;IAAE,gBAAgB,EAAE,YAAY,CAAA;CAAE,EACjD,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"google-handler-express.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/google-handler-express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,eAAO,MAAM,mBAAmB,GAC9B,KAAK,OAAO,GAAG;IAAE,gBAAgB,EAAE,YAAY,CAAA;CAAE,EACjD,KAAK,QAAQ,kBA0Cd,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -8,23 +8,20 @@ export const googleWalletHandler = async (req, res) => {
|
|
|
8
8
|
try {
|
|
9
9
|
const [, , tokenId] = req.path.split('/');
|
|
10
10
|
if (!tokenId) {
|
|
11
|
-
res.
|
|
12
|
-
res.end();
|
|
11
|
+
res.status(404).end();
|
|
13
12
|
return;
|
|
14
13
|
}
|
|
15
14
|
const token = await modules.warehousing.findToken({
|
|
16
15
|
tokenId,
|
|
17
16
|
});
|
|
18
17
|
if (!token) {
|
|
19
|
-
res.
|
|
20
|
-
res.end('Token not found');
|
|
18
|
+
res.status(404).send('Token not found');
|
|
21
19
|
return;
|
|
22
20
|
}
|
|
23
21
|
const { hash } = req.query;
|
|
24
22
|
const correctHash = await modules.warehousing.buildAccessKeyForToken(tokenId);
|
|
25
23
|
if (hash !== correctHash) {
|
|
26
|
-
res.
|
|
27
|
-
res.end('Token hash invalid for current owner');
|
|
24
|
+
res.status(403).send('Token hash invalid for current owner');
|
|
28
25
|
return;
|
|
29
26
|
}
|
|
30
27
|
const pass = await modules.passes.upsertGoogleWalletPass(token, resolvedContext);
|
|
@@ -32,14 +29,12 @@ export const googleWalletHandler = async (req, res) => {
|
|
|
32
29
|
return;
|
|
33
30
|
}
|
|
34
31
|
catch (e) {
|
|
35
|
-
|
|
32
|
+
logger.error(e);
|
|
36
33
|
}
|
|
37
|
-
res.
|
|
38
|
-
res.end();
|
|
34
|
+
res.status(500).end();
|
|
39
35
|
return;
|
|
40
36
|
}
|
|
41
|
-
res.
|
|
42
|
-
res.end();
|
|
37
|
+
res.status(404).end();
|
|
43
38
|
};
|
|
44
39
|
export default googleWalletHandler;
|
|
45
40
|
//# sourceMappingURL=google-handler-express.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-handler-express.js","sourceRoot":"","sources":["../../src/mobile-tickets/google-handler-express.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,MAAM,GAAG,YAAY,CAAC,oCAAoC,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,GAAiD,EACjD,GAAa,EACb,EAAE;IACF,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IACpC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE1D,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"google-handler-express.js","sourceRoot":"","sources":["../../src/mobile-tickets/google-handler-express.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,MAAM,GAAG,YAAY,CAAC,oCAAoC,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,GAAiD,EACjD,GAAa,EACb,EAAE;IACF,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IACpC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE1D,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;gBAChD,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;YAC3B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAEjF,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-handler-fastify.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/google-handler-fastify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIlE,QAAA,MAAM,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"google-handler-fastify.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/google-handler-fastify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIlE,QAAA,MAAM,mBAAmB,EAAE,kBA0D1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -16,23 +16,33 @@ const googleWalletHandler = async (req, reply) => {
|
|
|
16
16
|
tokenId,
|
|
17
17
|
});
|
|
18
18
|
if (!token) {
|
|
19
|
+
logger.error('Token not found', { tokenId });
|
|
19
20
|
reply.status(404);
|
|
20
|
-
return reply.send(
|
|
21
|
+
return reply.send();
|
|
21
22
|
}
|
|
22
23
|
const { hash } = req.query;
|
|
23
24
|
const correctHash = await modules.warehousing.buildAccessKeyForToken(tokenId);
|
|
24
25
|
if (hash !== correctHash) {
|
|
26
|
+
logger.error('Token hash invalid for current owner', { tokenId });
|
|
25
27
|
reply.status(403);
|
|
26
|
-
return reply.send(
|
|
28
|
+
return reply.send({
|
|
29
|
+
success: false,
|
|
30
|
+
message: 'Token hash invalid for current owner',
|
|
31
|
+
name: 'HASH_MISMATCH',
|
|
32
|
+
});
|
|
27
33
|
}
|
|
28
34
|
const pass = await modules.passes.upsertGoogleWalletPass(token, resolvedContext);
|
|
29
35
|
return reply.redirect(await pass.asURL());
|
|
30
36
|
}
|
|
31
37
|
catch (e) {
|
|
32
|
-
|
|
38
|
+
logger.error(e);
|
|
39
|
+
reply.status(500);
|
|
40
|
+
return reply.send({
|
|
41
|
+
success: false,
|
|
42
|
+
message: 'Error generating pass',
|
|
43
|
+
name: 'PASS_GENERATION_ERROR',
|
|
44
|
+
});
|
|
33
45
|
}
|
|
34
|
-
reply.status(500);
|
|
35
|
-
return reply.send();
|
|
36
46
|
}
|
|
37
47
|
reply.status(404);
|
|
38
48
|
return reply.send();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-handler-fastify.js","sourceRoot":"","sources":["../../src/mobile-tickets/google-handler-fastify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,MAAM,GAAG,YAAY,CAAC,oCAAoC,CAAC,CAAC;AAElE,MAAM,mBAAmB,GAAuB,KAAK,EACnD,GAEC,EACD,KAAK,EACL,EAAE;IACF,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IAEpC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;IAErB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;gBAChD,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"google-handler-fastify.js","sourceRoot":"","sources":["../../src/mobile-tickets/google-handler-fastify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,MAAM,GAAG,YAAY,CAAC,oCAAoC,CAAC,CAAC;AAElE,MAAM,mBAAmB,GAAuB,KAAK,EACnD,GAEC,EACD,KAAK,EACL,EAAE;IACF,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IAEpC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;IAErB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;gBAChD,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC7C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAA+B,CAAC;YACrD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;gBAClE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,IAAI,CAAC;oBAChB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,sCAAsC;oBAC/C,IAAI,EAAE,eAAe;iBACtB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YACjF,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,KAAK,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,uBAAuB;gBAChC,IAAI,EAAE,uBAAuB;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-handler-express.d.ts","sourceRoot":"","sources":["../../src/pdf-tickets/print-handler-express.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"print-handler-express.d.ts","sourceRoot":"","sources":["../../src/pdf-tickets/print-handler-express.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMjD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,gBAAgB,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,EAAE,QAAQ,iBAqBpG;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { checkAction } from '@unchainedshop/api/lib/acl.js';
|
|
2
2
|
import { actions } from '@unchainedshop/api/lib/roles/index.js';
|
|
3
3
|
import { RendererTypes, getRenderer } from '../template-registry.js';
|
|
4
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
5
|
+
const logger = createLogger('unchained:ticketing');
|
|
4
6
|
export async function printTicketsHandler(req, res) {
|
|
5
7
|
const { variant, orderId, otp } = req.query || {};
|
|
6
8
|
try {
|
|
@@ -15,9 +17,8 @@ export async function printTicketsHandler(req, res) {
|
|
|
15
17
|
pdfStream.pipe(res);
|
|
16
18
|
}
|
|
17
19
|
catch (error) {
|
|
18
|
-
|
|
19
|
-
res.status(403);
|
|
20
|
-
res.end();
|
|
20
|
+
logger.error(error);
|
|
21
|
+
res.status(403).end();
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
export default printTicketsHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-handler-express.js","sourceRoot":"","sources":["../../src/pdf-tickets/print-handler-express.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGrE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAA4C,EAAE,GAAa;IACnG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,GAAG,KAAK,QAAQ;YACvB,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC;YAExC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE7C,MAAM,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAE1F,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAiB,EAAE,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9F,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QACjD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,
|
|
1
|
+
{"version":3,"file":"print-handler-express.js","sourceRoot":"","sources":["../../src/pdf-tickets/print-handler-express.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAA4C,EAAE,GAAa;IACnG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,GAAG,KAAK,QAAQ;YACvB,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC;YAExC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE7C,MAAM,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAE1F,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAiB,EAAE,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9F,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QACjD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-handler-fastify.d.ts","sourceRoot":"","sources":["../../src/pdf-tickets/print-handler-fastify.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"print-handler-fastify.d.ts","sourceRoot":"","sources":["../../src/pdf-tickets/print-handler-fastify.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAKlE,QAAA,MAAM,mBAAmB,EAAE,kBA+B1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { checkAction } from '@unchainedshop/api/lib/acl.js';
|
|
2
2
|
import { actions } from '@unchainedshop/api/lib/roles/index.js';
|
|
3
3
|
import { RendererTypes, getRenderer } from '../template-registry.js';
|
|
4
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
5
|
+
const logger = createLogger('unchained:ticketing:print-handler');
|
|
4
6
|
const printTicketsHandler = async (req, reply) => {
|
|
5
7
|
const { variant, orderId, otp } = req.query || {};
|
|
6
8
|
try {
|
|
@@ -15,9 +17,13 @@ const printTicketsHandler = async (req, reply) => {
|
|
|
15
17
|
return reply.send(pdfStream);
|
|
16
18
|
}
|
|
17
19
|
catch (error) {
|
|
18
|
-
|
|
20
|
+
logger.error(error);
|
|
19
21
|
reply.status(403);
|
|
20
|
-
return reply.send(
|
|
22
|
+
return reply.send({
|
|
23
|
+
success: false,
|
|
24
|
+
message: 'Error generating PDF',
|
|
25
|
+
name: 'PDF_GENERATION_ERROR',
|
|
26
|
+
});
|
|
21
27
|
}
|
|
22
28
|
};
|
|
23
29
|
export default printTicketsHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-handler-fastify.js","sourceRoot":"","sources":["../../src/pdf-tickets/print-handler-fastify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"print-handler-fastify.js","sourceRoot":"","sources":["../../src/pdf-tickets/print-handler-fastify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,GAAG,YAAY,CAAC,mCAAmC,CAAC,CAAC;AAEjE,MAAM,mBAAmB,GAAuB,KAAK,EACnD,GAEC,EACD,KAAK,EACL,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAI,GAAG,CAAC,KAA6B,IAAI,EAAE,CAAC;IAE3E,IAAI,CAAC;QACH,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,GAAG,KAAK,QAAQ;YACvB,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC;YAExC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE7C,MAAM,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAE1F,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAiB,EAAE,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9F,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,sBAAsB;YAC/B,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/ticketing",
|
|
3
|
-
"version": "4.0.0-rc.
|
|
3
|
+
"version": "4.0.0-rc.16",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"types": "lib/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -41,12 +41,12 @@
|
|
|
41
41
|
"@unchainedshop/mongodb": "^4.0.0-rc.15"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
|
-
"@
|
|
44
|
+
"@parse/node-apn": "^6.5.0",
|
|
45
45
|
"express": "5.x",
|
|
46
46
|
"fastify": ">= 5.2 < 6"
|
|
47
47
|
},
|
|
48
48
|
"peerDependenciesMeta": {
|
|
49
|
-
"@
|
|
49
|
+
"@parse/node-apn": {
|
|
50
50
|
"optional": false
|
|
51
51
|
},
|
|
52
52
|
"express": {
|
|
@@ -21,8 +21,7 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
21
21
|
const [tokenId] = passFileName.split('.pkpass');
|
|
22
22
|
|
|
23
23
|
if (!tokenId) {
|
|
24
|
-
res.
|
|
25
|
-
res.end();
|
|
24
|
+
res.status(404).end();
|
|
26
25
|
return;
|
|
27
26
|
}
|
|
28
27
|
|
|
@@ -31,16 +30,14 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
31
30
|
});
|
|
32
31
|
|
|
33
32
|
if (!token) {
|
|
34
|
-
res.
|
|
35
|
-
res.end('Token not found');
|
|
33
|
+
res.status(404).send('Token not found');
|
|
36
34
|
return;
|
|
37
35
|
}
|
|
38
36
|
|
|
39
37
|
const { hash } = req.query;
|
|
40
38
|
const correctHash = await modules.warehousing.buildAccessKeyForToken(tokenId);
|
|
41
39
|
if (hash !== correctHash) {
|
|
42
|
-
res.
|
|
43
|
-
res.end('Token hash invalid for current owner');
|
|
40
|
+
res.status(403).send('Token hash invalid for current owner');
|
|
44
41
|
return;
|
|
45
42
|
}
|
|
46
43
|
|
|
@@ -57,13 +54,12 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
57
54
|
res.status(200);
|
|
58
55
|
res.setHeader('Content-Type', 'application/vnd.apple.pkpass');
|
|
59
56
|
res.setHeader('Content-Disposition', `attachment; filename=${tokenId}.pkpass`);
|
|
60
|
-
res.
|
|
57
|
+
res.send(uint8View);
|
|
61
58
|
return;
|
|
62
59
|
} catch (e) {
|
|
63
|
-
|
|
60
|
+
logger.error(e);
|
|
64
61
|
}
|
|
65
|
-
res.
|
|
66
|
-
res.end();
|
|
62
|
+
res.status(500).end();
|
|
67
63
|
return;
|
|
68
64
|
}
|
|
69
65
|
|
|
@@ -83,8 +79,7 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
83
79
|
(pass.meta.rawData as any)._id || (pass.meta.rawData as any).tokenId,
|
|
84
80
|
)
|
|
85
81
|
) {
|
|
86
|
-
res.
|
|
87
|
-
res.end();
|
|
82
|
+
res.status(401).end();
|
|
88
83
|
return;
|
|
89
84
|
}
|
|
90
85
|
|
|
@@ -98,13 +93,11 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
98
93
|
);
|
|
99
94
|
|
|
100
95
|
if (!newRegistration) {
|
|
101
|
-
res.
|
|
102
|
-
res.end();
|
|
96
|
+
res.status(200).end();
|
|
103
97
|
return;
|
|
104
98
|
}
|
|
105
99
|
|
|
106
|
-
res.
|
|
107
|
-
res.end();
|
|
100
|
+
res.status(201).end();
|
|
108
101
|
return;
|
|
109
102
|
}
|
|
110
103
|
} else if (req.method === 'GET') {
|
|
@@ -122,21 +115,11 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
122
115
|
const serialNumbers = passes.map((t) => t.meta.serialNumber);
|
|
123
116
|
|
|
124
117
|
if (serialNumbers?.length) {
|
|
125
|
-
res.
|
|
126
|
-
'Content-Type': 'application/json',
|
|
127
|
-
});
|
|
128
|
-
res.write(
|
|
129
|
-
JSON.stringify({
|
|
130
|
-
serialNumbers,
|
|
131
|
-
lastUpdated,
|
|
132
|
-
}),
|
|
133
|
-
);
|
|
134
|
-
res.end();
|
|
118
|
+
res.status(200).send({ serialNumbers, lastUpdated });
|
|
135
119
|
return;
|
|
136
120
|
}
|
|
137
121
|
|
|
138
|
-
res.
|
|
139
|
-
res.end();
|
|
122
|
+
res.status(204).end();
|
|
140
123
|
return;
|
|
141
124
|
} else if (req.method === 'DELETE') {
|
|
142
125
|
// Unregister Device
|
|
@@ -151,8 +134,7 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
151
134
|
(pass.meta.rawData as any)._id || (pass.meta.rawData as any).tokenId,
|
|
152
135
|
)
|
|
153
136
|
) {
|
|
154
|
-
res.
|
|
155
|
-
res.end();
|
|
137
|
+
res.status(401).end();
|
|
156
138
|
return;
|
|
157
139
|
}
|
|
158
140
|
|
|
@@ -163,8 +145,7 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
163
145
|
);
|
|
164
146
|
|
|
165
147
|
// Unregistered
|
|
166
|
-
res.
|
|
167
|
-
res.end();
|
|
148
|
+
res.status(200).end();
|
|
168
149
|
return;
|
|
169
150
|
}
|
|
170
151
|
}
|
|
@@ -176,8 +157,7 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
176
157
|
logger.info(log);
|
|
177
158
|
}
|
|
178
159
|
});
|
|
179
|
-
res.
|
|
180
|
-
res.end();
|
|
160
|
+
res.status(200).end();
|
|
181
161
|
return;
|
|
182
162
|
} else if (endpoint === 'passes') {
|
|
183
163
|
if (req.method === 'GET') {
|
|
@@ -193,8 +173,7 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
193
173
|
(pass.meta.rawData as any)._id || (pass.meta.rawData as any).tokenId,
|
|
194
174
|
)
|
|
195
175
|
) {
|
|
196
|
-
res.
|
|
197
|
-
res.end();
|
|
176
|
+
res.status(401).end();
|
|
198
177
|
return;
|
|
199
178
|
}
|
|
200
179
|
|
|
@@ -207,8 +186,7 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
207
186
|
ifModifiedSinceDate.setMilliseconds(0);
|
|
208
187
|
|
|
209
188
|
if (ifModifiedSinceDate.getTime() >= lastModifiedDate.getTime()) {
|
|
210
|
-
res.
|
|
211
|
-
res.end();
|
|
189
|
+
res.status(304).end();
|
|
212
190
|
return;
|
|
213
191
|
}
|
|
214
192
|
|
|
@@ -224,14 +202,13 @@ const appleWalletHandler = async (req: Request & { unchainedContext: TicketingAP
|
|
|
224
202
|
'Content-Type': 'application/vnd.apple.pkpass',
|
|
225
203
|
'Last-Modified': lastModifiedDate.toUTCString(),
|
|
226
204
|
});
|
|
227
|
-
res.
|
|
205
|
+
res.send(uint8View);
|
|
228
206
|
return;
|
|
229
207
|
}
|
|
230
208
|
}
|
|
231
209
|
}
|
|
232
210
|
|
|
233
|
-
res.
|
|
234
|
-
res.end();
|
|
211
|
+
res.status(404).end();
|
|
235
212
|
};
|
|
236
213
|
|
|
237
214
|
export default appleWalletHandler;
|
|
@@ -38,15 +38,21 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
if (!token) {
|
|
41
|
+
logger.error('Token not found', { tokenId });
|
|
41
42
|
reply.status(404);
|
|
42
|
-
return reply.send(
|
|
43
|
+
return reply.send();
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
const { hash } = req.query as Record<string, string>;
|
|
46
47
|
const correctHash = await modules.warehousing.buildAccessKeyForToken(tokenId);
|
|
47
48
|
if (hash !== correctHash) {
|
|
49
|
+
logger.error('Token hash invalid for current owner', { tokenId });
|
|
48
50
|
reply.status(403);
|
|
49
|
-
return reply.send(
|
|
51
|
+
return reply.send({
|
|
52
|
+
success: false,
|
|
53
|
+
message: 'Token hash invalid for current owner',
|
|
54
|
+
name: 'HASH_MISMATCH',
|
|
55
|
+
});
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
const passFile = await modules.passes.upsertAppleWalletPass(token, resolvedContext);
|
|
@@ -64,10 +70,14 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
64
70
|
reply.header('Content-Disposition', `attachment; filename=${tokenId}.pkpass`);
|
|
65
71
|
return reply.send(uint8View);
|
|
66
72
|
} catch (e) {
|
|
67
|
-
|
|
73
|
+
logger.error(e);
|
|
74
|
+
reply.status(500);
|
|
75
|
+
return reply.send({
|
|
76
|
+
success: false,
|
|
77
|
+
message: 'Error generating pass',
|
|
78
|
+
name: 'PASS_GENERATION_ERROR',
|
|
79
|
+
});
|
|
68
80
|
}
|
|
69
|
-
reply.status(500);
|
|
70
|
-
return reply.send();
|
|
71
81
|
}
|
|
72
82
|
|
|
73
83
|
const [, apiVersion, endpoint, ...pathComponents] = path.split("/"); /* eslint-disable-line */
|
|
@@ -86,6 +96,7 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
86
96
|
(pass.meta.rawData as any)._id || (pass.meta.rawData as any).tokenId,
|
|
87
97
|
)
|
|
88
98
|
) {
|
|
99
|
+
logger.error('Unauthorized', { passTypeIdentifier, serialNumber });
|
|
89
100
|
reply.status(401);
|
|
90
101
|
return reply.send();
|
|
91
102
|
}
|
|
@@ -101,11 +112,15 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
101
112
|
|
|
102
113
|
if (!newRegistration) {
|
|
103
114
|
reply.status(200);
|
|
104
|
-
return reply.send(
|
|
115
|
+
return reply.send({
|
|
116
|
+
success: true,
|
|
117
|
+
});
|
|
105
118
|
}
|
|
106
119
|
|
|
107
120
|
reply.status(201);
|
|
108
|
-
return reply.send(
|
|
121
|
+
return reply.send({
|
|
122
|
+
success: true,
|
|
123
|
+
});
|
|
109
124
|
}
|
|
110
125
|
} else if (req.method === 'GET') {
|
|
111
126
|
// Get the List of Updatable Passes
|
|
@@ -124,17 +139,15 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
124
139
|
|
|
125
140
|
if (serialNumbers?.length) {
|
|
126
141
|
reply.status(200);
|
|
127
|
-
reply.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}),
|
|
133
|
-
);
|
|
142
|
+
return reply.send({
|
|
143
|
+
success: true,
|
|
144
|
+
serialNumbers,
|
|
145
|
+
lastUpdated,
|
|
146
|
+
});
|
|
134
147
|
}
|
|
135
148
|
|
|
136
149
|
reply.status(204);
|
|
137
|
-
return reply.send();
|
|
150
|
+
return reply.send({ success: true });
|
|
138
151
|
} else if (req.method === 'DELETE') {
|
|
139
152
|
// Unregister Device
|
|
140
153
|
const [deviceLibraryIdentifier, , passTypeIdentifier, serialNumber] = pathComponents;
|
|
@@ -148,8 +161,13 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
148
161
|
(pass.meta.rawData as any)._id || (pass.meta.rawData as any).tokenId,
|
|
149
162
|
)
|
|
150
163
|
) {
|
|
164
|
+
logger.error('Unauthorized', { passTypeIdentifier, serialNumber });
|
|
151
165
|
reply.status(401);
|
|
152
|
-
return reply.send(
|
|
166
|
+
return reply.send({
|
|
167
|
+
success: false,
|
|
168
|
+
message: 'Unauthorized',
|
|
169
|
+
name: 'UNAUTHORIZED',
|
|
170
|
+
});
|
|
153
171
|
}
|
|
154
172
|
|
|
155
173
|
await modules.passes.unregisterDeviceForAppleWalletPass(
|
|
@@ -160,7 +178,9 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
160
178
|
|
|
161
179
|
// Unregistered
|
|
162
180
|
reply.status(200);
|
|
163
|
-
return reply.send(
|
|
181
|
+
return reply.send({
|
|
182
|
+
success: true,
|
|
183
|
+
});
|
|
164
184
|
}
|
|
165
185
|
}
|
|
166
186
|
} else if (endpoint === 'log') {
|
|
@@ -172,7 +192,9 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
172
192
|
}
|
|
173
193
|
});
|
|
174
194
|
reply.status(200);
|
|
175
|
-
return reply.send(
|
|
195
|
+
return reply.send({
|
|
196
|
+
success: true,
|
|
197
|
+
});
|
|
176
198
|
} else if (endpoint === 'passes') {
|
|
177
199
|
if (req.method === 'GET') {
|
|
178
200
|
// Get an updated Pass
|
|
@@ -187,8 +209,13 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
187
209
|
(pass.meta.rawData as any)._id || (pass.meta.rawData as any).tokenId,
|
|
188
210
|
)
|
|
189
211
|
) {
|
|
212
|
+
logger.error('Unauthorized', { passTypeIdentifier, serialNumber });
|
|
190
213
|
reply.status(401);
|
|
191
|
-
return reply.send(
|
|
214
|
+
return reply.send({
|
|
215
|
+
success: false,
|
|
216
|
+
message: 'Unauthorized',
|
|
217
|
+
name: 'UNAUTHORIZED',
|
|
218
|
+
});
|
|
192
219
|
}
|
|
193
220
|
|
|
194
221
|
const { updated, created } = pass;
|
|
@@ -201,7 +228,11 @@ const appleWalletHandler: RouteHandlerMethod = async (
|
|
|
201
228
|
|
|
202
229
|
if (ifModifiedSinceDate.getTime() >= lastModifiedDate.getTime()) {
|
|
203
230
|
reply.status(304);
|
|
204
|
-
return reply.send(
|
|
231
|
+
return reply.send({
|
|
232
|
+
success: true,
|
|
233
|
+
message: 'Not modified',
|
|
234
|
+
name: 'NOT_MODIFIED',
|
|
235
|
+
});
|
|
205
236
|
}
|
|
206
237
|
|
|
207
238
|
const fileUploadAdapter = getFileAdapter();
|
|
@@ -17,8 +17,7 @@ export const googleWalletHandler = async (
|
|
|
17
17
|
const [, , tokenId] = req.path.split('/');
|
|
18
18
|
|
|
19
19
|
if (!tokenId) {
|
|
20
|
-
res.
|
|
21
|
-
res.end();
|
|
20
|
+
res.status(404).end();
|
|
22
21
|
return;
|
|
23
22
|
}
|
|
24
23
|
|
|
@@ -27,16 +26,14 @@ export const googleWalletHandler = async (
|
|
|
27
26
|
});
|
|
28
27
|
|
|
29
28
|
if (!token) {
|
|
30
|
-
res.
|
|
31
|
-
res.end('Token not found');
|
|
29
|
+
res.status(404).send('Token not found');
|
|
32
30
|
return;
|
|
33
31
|
}
|
|
34
32
|
|
|
35
33
|
const { hash } = req.query;
|
|
36
34
|
const correctHash = await modules.warehousing.buildAccessKeyForToken(tokenId);
|
|
37
35
|
if (hash !== correctHash) {
|
|
38
|
-
res.
|
|
39
|
-
res.end('Token hash invalid for current owner');
|
|
36
|
+
res.status(403).send('Token hash invalid for current owner');
|
|
40
37
|
return;
|
|
41
38
|
}
|
|
42
39
|
|
|
@@ -45,14 +42,12 @@ export const googleWalletHandler = async (
|
|
|
45
42
|
res.redirect(await pass.asURL());
|
|
46
43
|
return;
|
|
47
44
|
} catch (e) {
|
|
48
|
-
|
|
45
|
+
logger.error(e);
|
|
49
46
|
}
|
|
50
|
-
res.
|
|
51
|
-
res.end();
|
|
47
|
+
res.status(500).end();
|
|
52
48
|
return;
|
|
53
49
|
}
|
|
54
|
-
res.
|
|
55
|
-
res.end();
|
|
50
|
+
res.status(404).end();
|
|
56
51
|
};
|
|
57
52
|
|
|
58
53
|
export default googleWalletHandler;
|
|
@@ -31,24 +31,34 @@ const googleWalletHandler: RouteHandlerMethod = async (
|
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
if (!token) {
|
|
34
|
+
logger.error('Token not found', { tokenId });
|
|
34
35
|
reply.status(404);
|
|
35
|
-
return reply.send(
|
|
36
|
+
return reply.send();
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
const { hash } = req.query as Record<string, string>;
|
|
39
40
|
const correctHash = await modules.warehousing.buildAccessKeyForToken(tokenId);
|
|
40
41
|
if (hash !== correctHash) {
|
|
42
|
+
logger.error('Token hash invalid for current owner', { tokenId });
|
|
41
43
|
reply.status(403);
|
|
42
|
-
return reply.send(
|
|
44
|
+
return reply.send({
|
|
45
|
+
success: false,
|
|
46
|
+
message: 'Token hash invalid for current owner',
|
|
47
|
+
name: 'HASH_MISMATCH',
|
|
48
|
+
});
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
const pass = await modules.passes.upsertGoogleWalletPass(token, resolvedContext);
|
|
46
52
|
return reply.redirect(await pass.asURL());
|
|
47
53
|
} catch (e) {
|
|
48
|
-
|
|
54
|
+
logger.error(e);
|
|
55
|
+
reply.status(500);
|
|
56
|
+
return reply.send({
|
|
57
|
+
success: false,
|
|
58
|
+
message: 'Error generating pass',
|
|
59
|
+
name: 'PASS_GENERATION_ERROR',
|
|
60
|
+
});
|
|
49
61
|
}
|
|
50
|
-
reply.status(500);
|
|
51
|
-
return reply.send();
|
|
52
62
|
}
|
|
53
63
|
reply.status(404);
|
|
54
64
|
return reply.send();
|
|
@@ -4,6 +4,10 @@ import { Context } from '@unchainedshop/api';
|
|
|
4
4
|
import { RendererTypes, getRenderer } from '../template-registry.js';
|
|
5
5
|
import type { Request, Response } from 'express';
|
|
6
6
|
|
|
7
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
8
|
+
|
|
9
|
+
const logger = createLogger('unchained:ticketing');
|
|
10
|
+
|
|
7
11
|
export async function printTicketsHandler(req: Request & { unchainedContext: Context }, res: Response) {
|
|
8
12
|
const { variant, orderId, otp } = req.query || {};
|
|
9
13
|
|
|
@@ -22,9 +26,8 @@ export async function printTicketsHandler(req: Request & { unchainedContext: Con
|
|
|
22
26
|
res.setHeader('Content-Type', 'application/pdf');
|
|
23
27
|
pdfStream.pipe(res);
|
|
24
28
|
} catch (error) {
|
|
25
|
-
|
|
26
|
-
res.status(403);
|
|
27
|
-
res.end();
|
|
29
|
+
logger.error(error);
|
|
30
|
+
res.status(403).end();
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
33
|
|
|
@@ -3,6 +3,9 @@ import { actions } from '@unchainedshop/api/lib/roles/index.js';
|
|
|
3
3
|
import { RendererTypes, getRenderer } from '../template-registry.js';
|
|
4
4
|
import { TicketingAPI } from '../types.js';
|
|
5
5
|
import type { FastifyRequest, RouteHandlerMethod } from 'fastify';
|
|
6
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
7
|
+
|
|
8
|
+
const logger = createLogger('unchained:ticketing:print-handler');
|
|
6
9
|
|
|
7
10
|
const printTicketsHandler: RouteHandlerMethod = async (
|
|
8
11
|
req: FastifyRequest & {
|
|
@@ -27,9 +30,13 @@ const printTicketsHandler: RouteHandlerMethod = async (
|
|
|
27
30
|
reply.header('content-type', 'application/pdf');
|
|
28
31
|
return reply.send(pdfStream);
|
|
29
32
|
} catch (error) {
|
|
30
|
-
|
|
33
|
+
logger.error(error);
|
|
31
34
|
reply.status(403);
|
|
32
|
-
return reply.send(
|
|
35
|
+
return reply.send({
|
|
36
|
+
success: false,
|
|
37
|
+
message: 'Error generating PDF',
|
|
38
|
+
name: 'PDF_GENERATION_ERROR',
|
|
39
|
+
});
|
|
33
40
|
}
|
|
34
41
|
};
|
|
35
42
|
|