@unchainedshop/ticketing 3.0.0-rc9 → 3.0.0

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.
Files changed (66) hide show
  1. package/lib/express.d.ts +4 -0
  2. package/lib/express.d.ts.map +1 -0
  3. package/lib/express.js +17 -0
  4. package/lib/express.js.map +1 -0
  5. package/lib/fastify.d.ts +4 -0
  6. package/lib/fastify.d.ts.map +1 -0
  7. package/lib/fastify.js +22 -0
  8. package/lib/fastify.js.map +1 -0
  9. package/lib/index.d.ts +6 -35
  10. package/lib/index.d.ts.map +1 -1
  11. package/lib/index.js +8 -19
  12. package/lib/index.js.map +1 -1
  13. package/lib/mobile-tickets/apple-handler-express.d.ts +7 -0
  14. package/lib/mobile-tickets/apple-handler-express.d.ts.map +1 -0
  15. package/lib/mobile-tickets/{apple-webservice.js → apple-handler-express.js} +3 -9
  16. package/lib/mobile-tickets/apple-handler-express.js.map +1 -0
  17. package/lib/mobile-tickets/apple-handler-fastify.d.ts +4 -0
  18. package/lib/mobile-tickets/apple-handler-fastify.d.ts.map +1 -0
  19. package/lib/mobile-tickets/apple-handler-fastify.js +158 -0
  20. package/lib/mobile-tickets/apple-handler-fastify.js.map +1 -0
  21. package/lib/mobile-tickets/{google-webservice.d.ts → google-handler-express.d.ts} +3 -3
  22. package/lib/mobile-tickets/google-handler-express.d.ts.map +1 -0
  23. package/lib/mobile-tickets/{google-webservice.js → google-handler-express.js} +2 -8
  24. package/lib/mobile-tickets/google-handler-express.js.map +1 -0
  25. package/lib/mobile-tickets/google-handler-fastify.d.ts +4 -0
  26. package/lib/mobile-tickets/google-handler-fastify.d.ts.map +1 -0
  27. package/lib/mobile-tickets/google-handler-fastify.js +41 -0
  28. package/lib/mobile-tickets/google-handler-fastify.js.map +1 -0
  29. package/lib/module.d.ts +56 -27
  30. package/lib/module.d.ts.map +1 -1
  31. package/lib/module.js +166 -164
  32. package/lib/module.js.map +1 -1
  33. package/lib/pdf-tickets/{print-webservice.d.ts → print-handler-express.d.ts} +3 -3
  34. package/lib/pdf-tickets/print-handler-express.d.ts.map +1 -0
  35. package/lib/pdf-tickets/{print-webservice.js → print-handler-express.js} +2 -8
  36. package/lib/pdf-tickets/print-handler-express.js.map +1 -0
  37. package/lib/pdf-tickets/print-handler-fastify.d.ts +4 -0
  38. package/lib/pdf-tickets/print-handler-fastify.d.ts.map +1 -0
  39. package/lib/pdf-tickets/print-handler-fastify.js +24 -0
  40. package/lib/pdf-tickets/print-handler-fastify.js.map +1 -0
  41. package/lib/services.d.ts +11 -5
  42. package/lib/services.d.ts.map +1 -1
  43. package/lib/services.js +17 -15
  44. package/lib/services.js.map +1 -1
  45. package/lib/types.d.ts +1 -3
  46. package/lib/types.d.ts.map +1 -1
  47. package/package.json +27 -11
  48. package/src/express.ts +35 -0
  49. package/src/fastify.ts +30 -0
  50. package/src/index.ts +13 -39
  51. package/src/mobile-tickets/{apple-webservice.ts → apple-handler-express.ts} +3 -16
  52. package/src/mobile-tickets/apple-handler-fastify.ts +227 -0
  53. package/src/mobile-tickets/{google-webservice.ts → google-handler-express.ts} +2 -12
  54. package/src/mobile-tickets/google-handler-fastify.ts +57 -0
  55. package/src/module.ts +211 -207
  56. package/src/pdf-tickets/{print-webservice.ts → print-handler-express.ts} +2 -12
  57. package/src/pdf-tickets/print-handler-fastify.ts +36 -0
  58. package/src/services.ts +28 -18
  59. package/src/types.ts +1 -1
  60. package/lib/mobile-tickets/apple-webservice.d.ts +0 -7
  61. package/lib/mobile-tickets/apple-webservice.d.ts.map +0 -1
  62. package/lib/mobile-tickets/apple-webservice.js.map +0 -1
  63. package/lib/mobile-tickets/google-webservice.d.ts.map +0 -1
  64. package/lib/mobile-tickets/google-webservice.js.map +0 -1
  65. package/lib/pdf-tickets/print-webservice.d.ts.map +0 -1
  66. package/lib/pdf-tickets/print-webservice.js.map +0 -1
package/src/module.ts CHANGED
@@ -13,232 +13,236 @@ export const APPLE_WALLET_PASSES_FILE_DIRECTORY = 'apple-wallet-passes';
13
13
 
14
14
  const logger = createLogger('unchained:apple-wallet-webservice');
15
15
 
16
- const ticketingModule = {
17
- configure: async ({ db }: ModuleInput<Record<string, never>>) => {
18
- const MediaObjects = await MediaObjectsCollection(db);
19
- const TokenSurrogates = await TokenSurrogateCollection(db);
20
-
21
- await buildDbIndexes(TokenSurrogates as any, [
22
- { index: { 'meta.cancelled': 1 }, options: { sparse: true } },
23
- ]);
24
-
25
- await buildDbIndexes(MediaObjects as any, [
26
- { index: { path: 1, 'meta.passTypeIdentifier': 1, 'meta.serialNumber': 1 } },
27
- {
28
- index: {
29
- path: 1,
30
- 'meta.passTypeIdentifier': 1,
31
- 'meta.registrations.deviceLibraryIdentifier': 1,
32
- },
33
- } as any,
34
- ]);
35
-
36
- const upsertAppleWalletPass = async (token: TokenSurrogate, unchainedAPI: UnchainedCore) => {
37
- const createAppleWalletPass = getRenderer(RendererTypes.APPLE_WALLET);
38
- const pass = await createAppleWalletPass(token, unchainedAPI);
39
- const rawFile = Promise.resolve(
40
- // wrap in promise to make stream upload work
41
- await buildPassBinary(token.chainTokenId, pass as any),
42
- );
43
-
44
- const previousFile = await MediaObjects.findOne({
45
- path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
46
- 'meta.passTypeIdentifier': pass.passTypeIdentifier,
47
- 'meta.serialNumber': pass.serialNumber,
48
- });
16
+ const configurePasses = async ({ db }: ModuleInput<Record<string, never>>) => {
17
+ const MediaObjects = await MediaObjectsCollection(db);
18
+ const TokenSurrogates = await TokenSurrogateCollection(db);
19
+
20
+ await buildDbIndexes(TokenSurrogates as any, [
21
+ { index: { 'meta.cancelled': 1 }, options: { sparse: true } },
22
+ ]);
23
+
24
+ await buildDbIndexes(MediaObjects as any, [
25
+ { index: { path: 1, 'meta.passTypeIdentifier': 1, 'meta.serialNumber': 1 } },
26
+ {
27
+ index: {
28
+ path: 1,
29
+ 'meta.passTypeIdentifier': 1,
30
+ 'meta.registrations.deviceLibraryIdentifier': 1,
31
+ },
32
+ } as any,
33
+ ]);
34
+
35
+ const upsertAppleWalletPass = async (token: TokenSurrogate, unchainedAPI: UnchainedCore) => {
36
+ const createAppleWalletPass = getRenderer(RendererTypes.APPLE_WALLET);
37
+ const pass = await createAppleWalletPass(token, unchainedAPI);
38
+ const rawFile = Promise.resolve(
39
+ // wrap in promise to make stream upload work
40
+ await buildPassBinary(token.chainTokenId, pass as any),
41
+ );
42
+
43
+ const previousFile = await MediaObjects.findOne({
44
+ path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
45
+ 'meta.passTypeIdentifier': pass.passTypeIdentifier,
46
+ 'meta.serialNumber': pass.serialNumber,
47
+ });
48
+
49
+ const registrations: any = previousFile?.meta?.registrations || [];
50
+ const pkpassFile = await unchainedAPI.services.files.uploadFileFromStream({
51
+ directoryName: APPLE_WALLET_PASSES_FILE_DIRECTORY,
52
+ rawFile,
53
+ meta: {
54
+ rawData: token,
55
+ passTypeIdentifier: pass.passTypeIdentifier,
56
+ serialNumber: pass.serialNumber,
57
+ registrations,
58
+ },
59
+ });
49
60
 
50
- const registrations: any = previousFile?.meta?.registrations || [];
51
- const pkpassFile = await unchainedAPI.services.files.uploadFileFromStream({
52
- directoryName: APPLE_WALLET_PASSES_FILE_DIRECTORY,
53
- rawFile,
54
- meta: {
55
- rawData: token,
56
- passTypeIdentifier: pass.passTypeIdentifier,
57
- serialNumber: pass.serialNumber,
58
- registrations,
59
- },
61
+ if (previousFile) {
62
+ await unchainedAPI.services.files.removeFiles({
63
+ fileIds: [previousFile._id],
60
64
  });
61
-
62
- if (previousFile) {
63
- await unchainedAPI.services.files.removeFiles({
64
- fileIds: [previousFile._id],
65
- });
66
- }
67
-
68
- // Push updates!
69
- if (registrations?.length) {
70
- try {
71
- const pushTokens = registrations.map(({ pushToken }) => pushToken);
72
- logger.info(`Send update pass notification to ${pushTokens.join(',')}`);
73
- await pushToApplePushNotificationService(pushTokens);
74
- } catch (e) {
75
- logger.error(e);
76
- }
65
+ }
66
+
67
+ // Push updates!
68
+ if (registrations?.length) {
69
+ try {
70
+ const pushTokens = registrations.map(({ pushToken }) => pushToken);
71
+ logger.info(`Send update pass notification to ${pushTokens.join(',')}`);
72
+ await pushToApplePushNotificationService(pushTokens);
73
+ } catch (e) {
74
+ logger.error(e);
77
75
  }
78
-
79
- return pkpassFile;
80
- };
81
-
82
- const upsertGoogleWalletPass = async (token: TokenSurrogate, unchainedAPI: UnchainedCore) => {
83
- const createGoogleWalletPass = getRenderer(RendererTypes.GOOGLE_WALLET);
84
- const pass = await createGoogleWalletPass(token, unchainedAPI);
85
- return pass;
86
- };
87
-
88
- const findAppleWalletPass = async (passTypeIdentifier, serialNumber): Promise<File> => {
89
- const mediaObject = await MediaObjects.findOne({
76
+ }
77
+
78
+ return pkpassFile;
79
+ };
80
+
81
+ const upsertGoogleWalletPass = async (token: TokenSurrogate, unchainedAPI: UnchainedCore) => {
82
+ const createGoogleWalletPass = getRenderer(RendererTypes.GOOGLE_WALLET);
83
+ const pass = await createGoogleWalletPass(token, unchainedAPI);
84
+ return pass;
85
+ };
86
+
87
+ const findAppleWalletPass = async (passTypeIdentifier, serialNumber): Promise<File> => {
88
+ const mediaObject = await MediaObjects.findOne({
89
+ path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
90
+ 'meta.passTypeIdentifier': passTypeIdentifier,
91
+ 'meta.serialNumber': serialNumber,
92
+ });
93
+ return mediaObject;
94
+ };
95
+
96
+ const registerDeviceForAppleWalletPass = async (
97
+ passTypeIdentifier,
98
+ serialNumber,
99
+ { deviceLibraryIdentifier, pushToken },
100
+ ) => {
101
+ const result = await MediaObjects.updateOne(
102
+ {
90
103
  path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
91
104
  'meta.passTypeIdentifier': passTypeIdentifier,
92
105
  'meta.serialNumber': serialNumber,
93
- });
94
- return mediaObject;
95
- };
96
-
97
- const registerDeviceForAppleWalletPass = async (
98
- passTypeIdentifier,
99
- serialNumber,
100
- { deviceLibraryIdentifier, pushToken },
101
- ) => {
102
- const result = await MediaObjects.updateOne(
103
- {
104
- path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
105
- 'meta.passTypeIdentifier': passTypeIdentifier,
106
- 'meta.serialNumber': serialNumber,
107
- 'meta.registrations.deviceLibraryIdentifier': {
108
- $ne: deviceLibraryIdentifier,
106
+ 'meta.registrations.deviceLibraryIdentifier': {
107
+ $ne: deviceLibraryIdentifier,
108
+ },
109
+ },
110
+ {
111
+ $push: {
112
+ 'meta.registrations': {
113
+ deviceLibraryIdentifier,
114
+ pushToken,
109
115
  },
110
116
  },
111
- {
112
- $push: {
113
- 'meta.registrations': {
114
- deviceLibraryIdentifier,
115
- pushToken,
116
- },
117
+ },
118
+ );
119
+ return Boolean(result.modifiedCount);
120
+ };
121
+
122
+ const unregisterDeviceForAppleWalletPass = async (
123
+ passTypeIdentifier,
124
+ serialNumber,
125
+ deviceLibraryIdentifier,
126
+ ) => {
127
+ const result = await MediaObjects.updateOne(
128
+ {
129
+ path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
130
+ 'meta.passTypeIdentifier': passTypeIdentifier,
131
+ 'meta.serialNumber': serialNumber,
132
+ 'meta.registrations.deviceLibraryIdentifier': deviceLibraryIdentifier,
133
+ },
134
+ {
135
+ $pull: {
136
+ 'meta.registrations': {
137
+ deviceLibraryIdentifier,
117
138
  },
118
139
  },
119
- );
120
- return Boolean(result.modifiedCount);
121
- };
122
-
123
- const unregisterDeviceForAppleWalletPass = async (
124
- passTypeIdentifier,
125
- serialNumber,
126
- deviceLibraryIdentifier,
127
- ) => {
128
- const result = await MediaObjects.updateOne(
140
+ },
141
+ );
142
+ return Boolean(result.modifiedCount);
143
+ };
144
+
145
+ const findUpdatedAppleWalletPasses = async (
146
+ passTypeIdentifier,
147
+ deviceLibraryIdentifier,
148
+ passesUpdatedSince,
149
+ ): Promise<Array<File>> => {
150
+ const selector = {
151
+ $or: [
129
152
  {
130
- path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
131
- 'meta.passTypeIdentifier': passTypeIdentifier,
132
- 'meta.serialNumber': serialNumber,
133
- 'meta.registrations.deviceLibraryIdentifier': deviceLibraryIdentifier,
153
+ updated: passesUpdatedSince ? { $gt: passesUpdatedSince } : { $exists: true },
134
154
  },
135
155
  {
136
- $pull: {
137
- 'meta.registrations': {
138
- deviceLibraryIdentifier,
139
- },
140
- },
156
+ created: passesUpdatedSince ? { $gt: passesUpdatedSince } : { $exists: true },
141
157
  },
142
- );
143
- return Boolean(result.modifiedCount);
158
+ ],
159
+ 'meta.registrations.deviceLibraryIdentifier': deviceLibraryIdentifier,
160
+ 'meta.passTypeIdentifier': passTypeIdentifier,
161
+ path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
144
162
  };
145
-
146
- const findUpdatedAppleWalletPasses = async (
147
- passTypeIdentifier,
148
- deviceLibraryIdentifier,
149
- passesUpdatedSince,
150
- ): Promise<Array<File>> => {
151
- const selector = {
152
- $or: [
153
- {
154
- updated: passesUpdatedSince ? { $gt: passesUpdatedSince } : { $exists: true },
155
- },
156
- {
157
- created: passesUpdatedSince ? { $gt: passesUpdatedSince } : { $exists: true },
158
- },
159
- ],
160
- 'meta.registrations.deviceLibraryIdentifier': deviceLibraryIdentifier,
161
- 'meta.passTypeIdentifier': passTypeIdentifier,
162
- path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
163
- };
164
- const updatedPasses = await MediaObjects.find(selector).toArray();
165
- return updatedPasses;
166
- };
167
-
168
- const invalidateAppleWalletPasses = async (unchainedAPI: UnchainedCore) => {
169
- const allPasses = await MediaObjects.find({
170
- path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
171
- }).toArray();
172
- const allTokens = await TokenSurrogates.find({}).toArray();
173
-
174
- for (const pass of allPasses) {
175
- // Check if binary is already invalidated, if so, skip
176
- const rawData = pass.meta.rawData as TokenSurrogate;
177
- if (rawData.invalidatedDate) continue;
178
-
179
- const redeemedToken = allTokens.find((t) => t._id === rawData._id && t.invalidatedDate);
180
-
181
- // Find invalidated token for the binary, if found, invalidate binary
182
- if (redeemedToken) {
183
- logger.info('Ticket redeemed, void pass', rawData);
184
- await upsertAppleWalletPass(redeemedToken, unchainedAPI);
185
- }
163
+ const updatedPasses = await MediaObjects.find(selector).toArray();
164
+ return updatedPasses;
165
+ };
166
+
167
+ const invalidateAppleWalletPasses = async (unchainedAPI: UnchainedCore) => {
168
+ const allPasses = await MediaObjects.find({
169
+ path: APPLE_WALLET_PASSES_FILE_DIRECTORY,
170
+ }).toArray();
171
+ const allTokens = await TokenSurrogates.find({}).toArray();
172
+
173
+ for (const pass of allPasses) {
174
+ // Check if binary is already invalidated, if so, skip
175
+ const rawData = pass.meta.rawData as TokenSurrogate;
176
+ if (rawData.invalidatedDate) continue;
177
+
178
+ const redeemedToken = allTokens.find((t) => t._id === rawData._id && t.invalidatedDate);
179
+
180
+ // Find invalidated token for the binary, if found, invalidate binary
181
+ if (redeemedToken) {
182
+ logger.info('Ticket redeemed, void pass', rawData);
183
+ await upsertAppleWalletPass(redeemedToken, unchainedAPI);
186
184
  }
187
- };
188
-
189
- const buildMagicKey = async (orderId: string) => {
190
- const msgUint8 = new TextEncoder().encode([orderId, process.env.UNCHAINED_SECRET].join(''));
191
- const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
192
- return Buffer.from(hashBuffer).toString('hex');
193
- };
194
-
195
- const cancelTicket = async (tokenId: string) => {
196
- return TokenSurrogates.findOneAndUpdate(
197
- { _id: tokenId },
198
- { $set: { 'meta.cancelled': true } },
199
- {
200
- returnDocument: 'after',
201
- },
202
- );
203
- };
204
-
205
- const isTicketCancelled = (token: TokenSurrogate) => {
206
- return Boolean(token.meta?.cancelled);
207
- };
208
-
209
- const getTicketsCreated = async (
185
+ }
186
+ };
187
+
188
+ const buildMagicKey = async (orderId: string) => {
189
+ const msgUint8 = new TextEncoder().encode([orderId, process.env.UNCHAINED_SECRET].join(''));
190
+ const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
191
+ return Buffer.from(hashBuffer).toString('hex');
192
+ };
193
+
194
+ const cancelTicket = async (tokenId: string) => {
195
+ return TokenSurrogates.findOneAndUpdate(
196
+ { _id: tokenId },
197
+ { $set: { 'meta.cancelled': true } },
210
198
  {
211
- productId,
212
- }: {
213
- productId: string;
199
+ returnDocument: 'after',
214
200
  },
215
- { skipCancelled }: { skipCancelled?: boolean } = {},
216
- ): Promise<number> => {
217
- const selector: any = {
218
- productId,
219
- };
220
- if (skipCancelled) {
221
- selector['meta.cancelled'] = null;
222
- }
223
- return TokenSurrogates.countDocuments(selector);
224
- };
225
-
226
- return {
227
- upsertAppleWalletPass,
228
- findAppleWalletPass,
229
- registerDeviceForAppleWalletPass,
230
- unregisterDeviceForAppleWalletPass,
231
- findUpdatedAppleWalletPasses,
232
- invalidateAppleWalletPasses,
233
- upsertGoogleWalletPass,
234
- buildMagicKey,
235
- cancelTicket,
236
- isTicketCancelled,
237
- getTicketsCreated,
201
+ );
202
+ };
203
+
204
+ const isTicketCancelled = (token: TokenSurrogate) => {
205
+ return Boolean(token.meta?.cancelled);
206
+ };
207
+
208
+ const getTicketsCreated = async (
209
+ {
210
+ productId,
211
+ }: {
212
+ productId: string;
213
+ },
214
+ { skipCancelled }: { skipCancelled?: boolean } = {},
215
+ ): Promise<number> => {
216
+ const selector: any = {
217
+ productId,
238
218
  };
239
- },
219
+ if (skipCancelled) {
220
+ selector['meta.cancelled'] = null;
221
+ }
222
+ return TokenSurrogates.countDocuments(selector);
223
+ };
224
+
225
+ return {
226
+ upsertAppleWalletPass,
227
+ findAppleWalletPass,
228
+ registerDeviceForAppleWalletPass,
229
+ unregisterDeviceForAppleWalletPass,
230
+ findUpdatedAppleWalletPasses,
231
+ invalidateAppleWalletPasses,
232
+ upsertGoogleWalletPass,
233
+ buildMagicKey,
234
+ cancelTicket,
235
+ isTicketCancelled,
236
+ getTicketsCreated,
237
+ };
240
238
  };
241
239
 
242
- export type TicketingModule = Awaited<ReturnType<(typeof ticketingModule)['configure']>>;
240
+ export type TicketingModule = {
241
+ passes: Awaited<ReturnType<typeof configurePasses>>;
242
+ };
243
243
 
244
- export default ticketingModule;
244
+ export default {
245
+ passes: {
246
+ configure: configurePasses,
247
+ },
248
+ };
@@ -1,10 +1,8 @@
1
1
  import { checkAction } from '@unchainedshop/api/lib/acl.js';
2
2
  import { actions } from '@unchainedshop/api/lib/roles/index.js';
3
- import express, { Request, Response } from 'express';
4
3
  import { Context } from '@unchainedshop/api';
5
4
  import { RendererTypes, getRenderer } from '../template-registry.js';
6
-
7
- const { UNCHAINED_PDF_PRINT_HANDLER_PATH = '/rest/print_tickets' } = process.env;
5
+ import type { Request, Response } from 'express';
8
6
 
9
7
  export async function printTicketsHandler(req: Request & { unchainedContext: Context }, res: Response) {
10
8
  const { variant, orderId, otp } = req.query || {};
@@ -30,12 +28,4 @@ export async function printTicketsHandler(req: Request & { unchainedContext: Con
30
28
  }
31
29
  }
32
30
 
33
- export default function connectPrintWebservice(app) {
34
- app.use(
35
- UNCHAINED_PDF_PRINT_HANDLER_PATH,
36
- express.json({
37
- type: 'application/json',
38
- }),
39
- printTicketsHandler,
40
- );
41
- }
31
+ export default printTicketsHandler;
@@ -0,0 +1,36 @@
1
+ import { checkAction } from '@unchainedshop/api/lib/acl.js';
2
+ import { actions } from '@unchainedshop/api/lib/roles/index.js';
3
+ import { RendererTypes, getRenderer } from '../template-registry.js';
4
+ import { TicketingAPI } from '../types.js';
5
+ import type { FastifyRequest, RouteHandlerMethod } from 'fastify';
6
+
7
+ const printTicketsHandler: RouteHandlerMethod = async (
8
+ req: FastifyRequest & {
9
+ unchainedContext: TicketingAPI;
10
+ },
11
+ reply,
12
+ ) => {
13
+ const { variant, orderId, otp } = (req.query as Record<string, any>) || {};
14
+
15
+ try {
16
+ if (
17
+ typeof orderId !== 'string' ||
18
+ typeof otp !== 'string' ||
19
+ (variant && typeof variant !== 'string')
20
+ )
21
+ throw new Error('Invalid query parameter');
22
+
23
+ await checkAction(req.unchainedContext, actions.viewOrder, [undefined, { orderId, otp }]);
24
+
25
+ const render = getRenderer(RendererTypes.ORDER_PDF);
26
+ const pdfStream = await render({ orderId, variant: variant as string }, req.unchainedContext);
27
+ reply.header('content-type', 'application/pdf');
28
+ return reply.send(pdfStream);
29
+ } catch (error) {
30
+ console.error(error);
31
+ reply.status(403);
32
+ return reply.send();
33
+ }
34
+ };
35
+
36
+ export default printTicketsHandler;
package/src/services.ts CHANGED
@@ -1,25 +1,35 @@
1
- import { TicketingAPI } from './types.js';
1
+ import { TicketingModule } from './module.js';
2
+ import { Bound, UnchainedCore } from '@unchainedshop/core';
2
3
 
3
- const ticketingServices = {
4
- cancelTicketsForProduct: async (productId: string, context: TicketingAPI): Promise<number> => {
5
- const tokensToCancel = await context.modules.warehousing.findTokens({
6
- productId,
7
- 'meta.cancelled': null,
8
- });
4
+ async function cancelTicketsForProduct(
5
+ this: TicketingModule & UnchainedCore['modules'],
6
+ productId: string,
7
+ ): Promise<number> {
8
+ const tokensToCancel = await this.warehousing.findTokens({
9
+ productId,
10
+ 'meta.cancelled': null,
11
+ });
9
12
 
10
- for (const token of tokensToCancel) {
11
- await context.modules.warehousing.invalidateToken(token._id);
12
- await context.modules.passes.cancelTicket(token._id);
13
- }
13
+ for (const token of tokensToCancel) {
14
+ await this.warehousing.invalidateToken(token._id);
15
+ await this.passes.cancelTicket(token._id);
16
+ }
14
17
 
15
- await context.modules.products.update(productId, {
16
- $set: { 'meta.cancelled': true },
17
- });
18
+ await this.products.update(productId, {
19
+ $set: { 'meta.cancelled': true },
20
+ });
18
21
 
19
- return tokensToCancel.length;
22
+ return tokensToCancel.length;
23
+ }
24
+
25
+ export default {
26
+ ticketing: {
27
+ cancelTicketsForProduct,
20
28
  },
21
29
  };
22
30
 
23
- export type TicketingServices = { ticketing: typeof ticketingServices };
24
-
25
- export default ticketingServices;
31
+ export type TicketingServices = {
32
+ ticketing: {
33
+ cancelTicketsForProduct: Bound<typeof cancelTicketsForProduct>;
34
+ };
35
+ };
package/src/types.ts CHANGED
@@ -3,6 +3,6 @@ import { TicketingModule } from './module.js';
3
3
  import { TicketingServices } from './services.js';
4
4
 
5
5
  export type TicketingAPI = UnchainedCore & {
6
- modules: { passes: TicketingModule };
6
+ modules: TicketingModule;
7
7
  services: TicketingServices;
8
8
  };
@@ -1,7 +0,0 @@
1
- import { Request, Response } from 'express';
2
- import { TicketingAPI } from '../types.js';
3
- export declare const appleWalletHandler: (req: Request & {
4
- unchainedContext: TicketingAPI;
5
- }, res: Response) => Promise<void>;
6
- export default function loadAppleWalletHandler(app: any): void;
7
- //# sourceMappingURL=apple-webservice.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apple-webservice.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/apple-webservice.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAY3C,eAAO,MAAM,kBAAkB,QACxB,OAAO,GAAG;IAAE,gBAAgB,EAAE,YAAY,CAAA;CAAE,OAC5C,QAAQ,kBA+Nd,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,GAAG,KAAA,QAQjD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"apple-webservice.js","sourceRoot":"","sources":["../../src/mobile-tickets/apple-webservice.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-webservice.d.ts","sourceRoot":"","sources":["../../src/mobile-tickets/google-webservice.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,eAAO,MAAM,mBAAmB,QACzB,OAAO,GAAG;IAAE,gBAAgB,EAAE,YAAY,CAAA;CAAE,OAC5C,QAAQ,kBA+Cd,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,GAAG,KAAA,QAQlD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-webservice.js","sourceRoot":"","sources":["../../src/mobile-tickets/google-webservice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,OAA8B,MAAM,SAAS,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,oCAAoC,CAAC,CAAC;AAElE,MAAM,EAAE,6BAA6B,GAAG,qBAAqB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAE9E,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,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,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,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBAC3B,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,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;gBAChD,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,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,GAAG;IACjD,GAAG,CAAC,GAAG,CACL,6BAA6B,EAC7B,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,kBAAkB;KACzB,CAAC,EACF,mBAAmB,CACpB,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"print-webservice.d.ts","sourceRoot":"","sources":["../../src/pdf-tickets/print-webservice.ts"],"names":[],"mappings":"AAEA,OAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,gBAAgB,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,EAAE,QAAQ,iBAsBpG;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,GAAG,KAAA,QAQjD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"print-webservice.js","sourceRoot":"","sources":["../../src/pdf-tickets/print-webservice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAChE,OAAO,OAA8B,MAAM,SAAS,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,EAAE,gCAAgC,GAAG,qBAAqB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAEjF,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,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,GAAG;IAChD,GAAG,CAAC,GAAG,CACL,gCAAgC,EAChC,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,kBAAkB;KACzB,CAAC,EACF,mBAAmB,CACpB,CAAC;AACJ,CAAC"}