@akinon/next 2.0.0-beta.9 → 2.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 (121) hide show
  1. package/CHANGELOG.md +434 -23
  2. package/__tests__/next-config.test.ts +83 -0
  3. package/__tests__/tsconfig.json +23 -0
  4. package/api/auth.ts +367 -63
  5. package/api/barcode-search.ts +59 -0
  6. package/api/cache.ts +41 -5
  7. package/api/client.ts +21 -4
  8. package/api/form.ts +85 -0
  9. package/api/image-proxy.ts +75 -0
  10. package/api/product-categories.ts +53 -0
  11. package/api/similar-product-list.ts +63 -0
  12. package/api/similar-products.ts +111 -0
  13. package/api/virtual-try-on.ts +382 -0
  14. package/assets/styles/index.scss +84 -0
  15. package/babel.config.js +6 -0
  16. package/bin/pz-generate-routes.js +115 -0
  17. package/bin/pz-install-plugins.js +1 -1
  18. package/bin/pz-prebuild.js +1 -0
  19. package/bin/pz-predev.js +1 -0
  20. package/bin/pz-run-tests.js +99 -0
  21. package/components/accordion.tsx +21 -6
  22. package/components/client-root.tsx +119 -3
  23. package/components/file-input.tsx +65 -3
  24. package/components/index.ts +1 -0
  25. package/components/input.tsx +2 -2
  26. package/components/link.tsx +46 -16
  27. package/components/logger-popup.tsx +213 -0
  28. package/components/modal.tsx +32 -16
  29. package/components/plugin-module.tsx +62 -3
  30. package/components/price.tsx +2 -2
  31. package/components/select.tsx +3 -3
  32. package/components/selected-payment-option-view.tsx +21 -0
  33. package/data/client/account.ts +17 -2
  34. package/data/client/basket.ts +39 -0
  35. package/data/client/checkout.ts +336 -99
  36. package/data/client/misc.ts +13 -1
  37. package/data/server/category.ts +11 -9
  38. package/data/server/flatpage.ts +4 -1
  39. package/data/server/form.ts +4 -1
  40. package/data/server/landingpage.ts +4 -1
  41. package/data/server/list.ts +5 -4
  42. package/data/server/menu.ts +4 -1
  43. package/data/server/product.ts +97 -52
  44. package/data/server/seo.ts +4 -1
  45. package/data/server/special-page.ts +5 -4
  46. package/data/server/widget.ts +71 -1
  47. package/data/urls.ts +6 -3
  48. package/hocs/client/with-segment-defaults.tsx +2 -2
  49. package/hocs/server/with-segment-defaults.tsx +81 -20
  50. package/hooks/index.ts +3 -0
  51. package/hooks/use-localization.ts +24 -10
  52. package/hooks/use-logger-context.tsx +114 -0
  53. package/hooks/use-logger.ts +92 -0
  54. package/hooks/use-loyalty-availability.ts +21 -0
  55. package/hooks/use-payment-options.ts +2 -1
  56. package/hooks/use-pz-params.ts +37 -0
  57. package/hooks/use-router.ts +53 -19
  58. package/instrumentation/index.ts +0 -1
  59. package/instrumentation/node.ts +2 -20
  60. package/jest.config.js +25 -0
  61. package/lib/cache-handler.mjs +534 -16
  62. package/lib/cache.ts +269 -34
  63. package/localization/provider.tsx +2 -5
  64. package/middlewares/bfcache-headers.ts +18 -0
  65. package/middlewares/checkout-provider.ts +1 -1
  66. package/middlewares/complete-gpay.ts +32 -26
  67. package/middlewares/complete-masterpass.ts +33 -26
  68. package/middlewares/complete-wallet.ts +182 -0
  69. package/middlewares/default.ts +357 -203
  70. package/middlewares/index.ts +10 -2
  71. package/middlewares/locale.ts +5 -3
  72. package/middlewares/masterpass-rest-callback.ts +230 -0
  73. package/middlewares/oauth-login.ts +200 -57
  74. package/middlewares/pretty-url.ts +21 -8
  75. package/middlewares/redirection-payment.ts +32 -26
  76. package/middlewares/saved-card-redirection.ts +33 -26
  77. package/middlewares/three-d-redirection.ts +32 -26
  78. package/middlewares/url-redirection.ts +9 -15
  79. package/middlewares/wallet-complete-redirection.ts +206 -0
  80. package/package.json +24 -10
  81. package/plugins.d.ts +19 -4
  82. package/plugins.js +9 -1
  83. package/redux/actions.ts +47 -0
  84. package/redux/middlewares/checkout.ts +61 -8
  85. package/redux/middlewares/index.ts +14 -10
  86. package/redux/middlewares/pre-order/address.ts +1 -1
  87. package/redux/middlewares/pre-order/attribute-based-shipping-option.ts +1 -1
  88. package/redux/middlewares/pre-order/data-source-shipping-option.ts +1 -1
  89. package/redux/middlewares/pre-order/delivery-option.ts +1 -1
  90. package/redux/middlewares/pre-order/index.ts +3 -1
  91. package/redux/middlewares/pre-order/installment-option.ts +2 -1
  92. package/redux/middlewares/pre-order/payment-option-reset.ts +37 -0
  93. package/redux/middlewares/pre-order/payment-option.ts +1 -1
  94. package/redux/middlewares/pre-order/pre-order-validation.ts +4 -3
  95. package/redux/middlewares/pre-order/redirection.ts +2 -2
  96. package/redux/middlewares/pre-order/set-pre-order.ts +2 -2
  97. package/redux/middlewares/pre-order/shipping-option.ts +1 -1
  98. package/redux/middlewares/pre-order/shipping-step.ts +1 -1
  99. package/redux/reducers/checkout.ts +15 -1
  100. package/redux/reducers/index.ts +7 -1
  101. package/redux/reducers/widget.ts +80 -0
  102. package/sentry/index.ts +54 -17
  103. package/tailwind/content.js +16 -0
  104. package/types/commerce/checkout.ts +26 -1
  105. package/types/commerce/widget.ts +33 -0
  106. package/types/index.ts +114 -5
  107. package/types/next-auth.d.ts +2 -2
  108. package/types/widget.ts +80 -0
  109. package/utils/app-fetch.ts +7 -2
  110. package/utils/generate-commerce-search-params.ts +3 -2
  111. package/utils/get-checkout-path.ts +3 -0
  112. package/utils/get-root-hostname.ts +28 -0
  113. package/utils/index.ts +69 -18
  114. package/utils/mobile-3d-iframe.ts +8 -2
  115. package/utils/override-middleware.ts +1 -0
  116. package/utils/pz-segments.ts +92 -0
  117. package/utils/redirect-ignore.ts +35 -0
  118. package/utils/redirect.ts +9 -3
  119. package/utils/redirection-iframe.ts +8 -2
  120. package/utils/widget-styles.ts +107 -0
  121. package/with-pz-config.js +20 -7
@@ -11,14 +11,23 @@ import {
11
11
  withRedirectionPayment,
12
12
  withSavedCardRedirection,
13
13
  withThreeDRedirection,
14
- withUrlRedirection
14
+ withUrlRedirection,
15
+ withCompleteWallet,
16
+ withWalletCompleteRedirection,
17
+ withMasterpassRestCallback,
18
+ withBfcacheHeaders
15
19
  } from '.';
16
20
  import { urlLocaleMatcherRegex } from '../utils';
21
+ import { getPzSegmentsConfig, encodePzValue, isLegacyMode } from '../utils/pz-segments';
17
22
  import withCurrency from './currency';
18
23
  import withLocale from './locale';
19
24
  import logger from '../utils/log';
20
25
  import { user } from '../data/urls';
21
26
  import { getUrlPathWithLocale } from '../utils/localization';
27
+ import getRootHostname from '../utils/get-root-hostname';
28
+ import { LocaleUrlStrategy } from '../localization';
29
+
30
+ const POST_CHECKOUT_COOKIE_MAX_AGE_MS = 1000 * 60 * 30; // 30 minutes
22
31
 
23
32
  const withPzDefault =
24
33
  (middleware: NextMiddleware) =>
@@ -96,6 +105,7 @@ const withPzDefault =
96
105
  if (
97
106
  req.nextUrl.pathname.includes('/orders/hooks/') ||
98
107
  req.nextUrl.pathname.includes('/orders/checkout-with-token/') ||
108
+ req.nextUrl.pathname.includes('/orders/post-checkout-redirect/') ||
99
109
  req.nextUrl.pathname.includes('/hooks/cash_register/complete/') ||
100
110
  req.nextUrl.pathname.includes('/hooks/cash_register/pre_order/')
101
111
  ) {
@@ -123,8 +133,13 @@ const withPzDefault =
123
133
  }
124
134
 
125
135
  if (req.nextUrl.pathname.startsWith('/orders/redirection/')) {
136
+ const queryString = searchParams.toString();
126
137
  return NextResponse.rewrite(
127
- new URL(`${encodeURI(Settings.commerceUrl)}/orders/redirection/`)
138
+ new URL(
139
+ `${encodeURI(Settings.commerceUrl)}/orders/redirection/${
140
+ queryString ? `?${queryString}` : ''
141
+ }`
142
+ )
128
143
  );
129
144
  }
130
145
 
@@ -142,21 +157,35 @@ const withPzDefault =
142
157
  );
143
158
  }
144
159
 
145
- // If commerce redirects to /orders/checkout/ without locale
160
+ // If commerce redirects to /orders/checkout/ or /orders/post-checkout/ without locale
161
+ const isPostCheckout = !!req.nextUrl.pathname.match(
162
+ new RegExp('^/orders/post-checkout/$')
163
+ );
164
+ const checkoutLocalePath = getUrlPathWithLocale(
165
+ '/orders/checkout/',
166
+ req.cookies.get('pz-locale')?.value
167
+ );
146
168
  if (
147
- req.nextUrl.pathname.match(new RegExp('^/orders/checkout/$')) &&
148
- req.nextUrl.searchParams.size === 0 &&
149
- getUrlPathWithLocale(
150
- '/orders/checkout/',
151
- req.cookies.get('pz-locale')?.value
152
- ) !== req.nextUrl.pathname
169
+ (isPostCheckout && req.nextUrl.searchParams.size === 0) ||
170
+ (req.nextUrl.pathname.match(new RegExp('^/orders/checkout/$')) &&
171
+ req.nextUrl.searchParams.size === 0 &&
172
+ checkoutLocalePath !== req.nextUrl.pathname)
153
173
  ) {
154
- const redirectUrlWithLocale = `${url.origin}${getUrlPathWithLocale(
155
- '/orders/checkout/',
156
- req.cookies.get('pz-locale')?.value
157
- )}`;
174
+ const response = NextResponse.redirect(
175
+ `${url.origin}${checkoutLocalePath}`,
176
+ 303
177
+ );
178
+
179
+ if (isPostCheckout) {
180
+ response.cookies.set('pz-post-checkout-flow', 'true', {
181
+ path: '/',
182
+ sameSite: 'none',
183
+ secure: true,
184
+ expires: new Date(Date.now() + POST_CHECKOUT_COOKIE_MAX_AGE_MS)
185
+ });
186
+ }
158
187
 
159
- return NextResponse.redirect(redirectUrlWithLocale, 303);
188
+ return response;
160
189
  }
161
190
 
162
191
  // Dynamically handle any payment gateway without specifying names
@@ -211,7 +240,6 @@ const withPzDefault =
211
240
 
212
241
  req.middlewareParams = {
213
242
  commerceUrl,
214
- found: true,
215
243
  rewrites: {}
216
244
  };
217
245
 
@@ -226,195 +254,321 @@ const withPzDefault =
226
254
  withCompleteGpay(
227
255
  withCompleteMasterpass(
228
256
  withSavedCardRedirection(
229
- async (req: PzNextRequest, event: NextFetchEvent) => {
230
- let middlewareResult: NextResponse | void =
231
- NextResponse.next();
232
-
233
- try {
234
- const { locale, prettyUrl, currency } =
235
- req.middlewareParams.rewrites;
236
- const { defaultLocaleValue } =
237
- Settings.localization;
238
- const url = req.nextUrl.clone();
239
- const pathnameWithoutLocale =
240
- url.pathname.replace(urlLocaleMatcherRegex, '');
241
-
242
- middlewareResult = (await middleware(
243
- req,
244
- event
245
- )) as NextResponse | void;
246
-
247
- let customRewriteUrlDiff = '';
248
-
249
- if (
250
- middlewareResult instanceof NextResponse &&
251
- middlewareResult.headers.get(
252
- 'pz-override-response'
253
- ) &&
254
- middlewareResult.headers.get(
255
- 'x-middleware-rewrite'
256
- )
257
- ) {
258
- const rewriteUrl = new URL(
259
- middlewareResult.headers.get(
260
- 'x-middleware-rewrite'
261
- )
262
- );
263
- const originalUrl = new URL(req.url);
264
- customRewriteUrlDiff =
265
- rewriteUrl.pathname.replace(
266
- originalUrl.pathname,
267
- ''
268
- );
269
- }
270
-
271
- url.basePath = `/${commerceUrl}`;
272
- url.pathname = `/${
273
- locale.length ? `${locale}/` : ''
274
- }${currency}/${customRewriteUrlDiff}${
275
- prettyUrl ?? pathnameWithoutLocale
276
- }`.replace(/\/+/g, '/');
277
-
278
- if (
279
- Settings.usePrettyUrlRoute &&
280
- url.searchParams.toString().length > 0 &&
281
- !Object.entries(ROUTES).find(([, value]) =>
282
- new RegExp(`^${value}/?$`).test(
283
- pathnameWithoutLocale
284
- )
285
- )
286
- ) {
287
- url.pathname =
288
- url.pathname +
289
- (/\/$/.test(url.pathname) ? '' : '/') +
290
- `searchparams|${encodeURIComponent(
291
- url.searchParams.toString()
292
- )}`;
293
- }
294
-
295
- Settings.rewrites.forEach((rewrite) => {
296
- url.pathname = url.pathname.replace(
297
- rewrite.source,
298
- rewrite.destination
299
- );
300
- });
301
-
302
- // if middleware.ts has a return value for current url
303
- if (middlewareResult instanceof NextResponse) {
304
- // pz-override-response header is used to prevent 404 page for custom responses.
305
- if (
306
- middlewareResult.headers.get(
307
- 'pz-override-response'
308
- ) !== 'true'
309
- ) {
310
- middlewareResult.headers.set(
311
- 'x-middleware-rewrite',
312
- url.href
313
- );
314
- } else if (
315
- middlewareResult.headers.get(
316
- 'x-middleware-rewrite'
317
- ) &&
318
- middlewareResult.headers.get(
319
- 'pz-override-response'
320
- ) === 'true'
321
- ) {
322
- middlewareResult = NextResponse.rewrite(url);
323
- }
324
- } else {
325
- // if middleware.ts doesn't have a return value.
326
- // e.g. NextResponse.next() doesn't exist in middleware.ts
327
-
328
- middlewareResult = NextResponse.rewrite(url);
329
- }
330
-
331
- if (
332
- !url.pathname.startsWith(`/${currency}/orders`)
333
- ) {
334
- middlewareResult.cookies.set(
335
- 'pz-locale',
336
- locale?.length > 0
337
- ? locale
338
- : defaultLocaleValue,
339
- {
340
- sameSite: 'none',
341
- secure: true,
342
- expires: new Date(
343
- Date.now() + 1000 * 60 * 60 * 24 * 7
344
- ) // 7 days
257
+ withCompleteWallet(
258
+ withWalletCompleteRedirection(
259
+ withMasterpassRestCallback(
260
+ withBfcacheHeaders(
261
+ async (
262
+ req: PzNextRequest,
263
+ event: NextFetchEvent
264
+ ) => {
265
+ let middlewareResult: NextResponse | void =
266
+ NextResponse.next();
267
+
268
+ try {
269
+ const { locale, prettyUrl, currency } =
270
+ req.middlewareParams.rewrites;
271
+ const { defaultLocaleValue } =
272
+ Settings.localization;
273
+ const url = req.nextUrl.clone();
274
+ const pathnameWithoutLocale =
275
+ url.pathname.replace(
276
+ urlLocaleMatcherRegex,
277
+ ''
278
+ );
279
+
280
+ middlewareResult = (await middleware(
281
+ req,
282
+ event
283
+ )) as NextResponse | void;
284
+
285
+ let customRewriteUrlDiff = '';
286
+
287
+ if (
288
+ middlewareResult instanceof
289
+ NextResponse &&
290
+ middlewareResult.headers.get(
291
+ 'pz-override-response'
292
+ ) &&
293
+ middlewareResult.headers.get(
294
+ 'x-middleware-rewrite'
295
+ )
296
+ ) {
297
+ const rewriteUrl = new URL(
298
+ middlewareResult.headers.get(
299
+ 'x-middleware-rewrite'
300
+ )
301
+ );
302
+ const originalUrl = new URL(req.url);
303
+ customRewriteUrlDiff =
304
+ rewriteUrl.pathname.replace(
305
+ originalUrl.pathname,
306
+ ''
307
+ );
308
+ }
309
+
310
+ let ordersPrefix: string;
311
+
312
+ if (isLegacyMode(Settings)) {
313
+ url.basePath = `/${commerceUrl}`;
314
+ url.pathname =
315
+ `/${locale.length ? `${locale}/` : ''}${currency}/${customRewriteUrlDiff}${
316
+ prettyUrl ?? pathnameWithoutLocale
317
+ }`.replace(/\/+/g, '/');
318
+ ordersPrefix = `/${currency}/orders`;
319
+ } else {
320
+ const pzConfig =
321
+ getPzSegmentsConfig(Settings);
322
+ const fullUrlPath =
323
+ `${customRewriteUrlDiff}${
324
+ prettyUrl ?? pathnameWithoutLocale
325
+ }`.replace(/\/+/g, '/');
326
+ const fullUrl = `${req.nextUrl.origin}${fullUrlPath}`;
327
+ const resolvedLocale =
328
+ locale?.length > 0
329
+ ? locale
330
+ : Settings.localization
331
+ .defaultLocaleValue;
332
+ const resolveContext = {
333
+ req,
334
+ event,
335
+ url,
336
+ locale: resolvedLocale,
337
+ currency,
338
+ pathname: pathnameWithoutLocale
339
+ };
340
+ const customSegments = pzConfig.segments
341
+ .filter(
342
+ (seg) =>
343
+ seg.name !== 'locale' &&
344
+ seg.name !== 'currency' &&
345
+ seg.name !== 'url'
346
+ );
347
+ const segmentValues: Record<
348
+ string,
349
+ string
350
+ > = {
351
+ locale: resolvedLocale,
352
+ currency,
353
+ url: encodeURIComponent(fullUrl),
354
+ ...Object.fromEntries(
355
+ customSegments
356
+ .map((seg) => [
357
+ seg.name,
358
+ req.middlewareParams.rewrites[
359
+ seg.name
360
+ ] ??
361
+ (seg.resolve
362
+ ? seg.resolve(resolveContext)
363
+ : '')
364
+ ])
365
+ )
366
+ };
367
+
368
+ const pzValue = encodePzValue(
369
+ segmentValues,
370
+ pzConfig
371
+ );
372
+
373
+ url.pathname =
374
+ `/${pzValue}/${fullUrlPath}`.replace(
375
+ /\/+/g,
376
+ '/'
377
+ );
378
+ ordersPrefix = `/${pzValue}/orders`;
379
+ }
380
+
381
+ if (
382
+ Settings.usePrettyUrlRoute &&
383
+ url.searchParams.toString().length > 0 &&
384
+ !Object.entries(ROUTES).find(
385
+ ([, value]) =>
386
+ new RegExp(`^${value}/?$`).test(
387
+ pathnameWithoutLocale
388
+ )
389
+ )
390
+ ) {
391
+ url.pathname =
392
+ url.pathname +
393
+ (/\/$/.test(url.pathname) ? '' : '/') +
394
+ `searchparams|${encodeURIComponent(
395
+ url.searchParams.toString()
396
+ )}`;
397
+ }
398
+
399
+ Settings.rewrites.forEach((rewrite) => {
400
+ url.pathname = url.pathname.replace(
401
+ rewrite.source,
402
+ rewrite.destination
403
+ );
404
+ });
405
+
406
+ // if middleware.ts has a return value for current url
407
+ if (
408
+ middlewareResult instanceof NextResponse
409
+ ) {
410
+ // pz-override-response header is used to prevent 404 page for custom responses.
411
+ if (
412
+ middlewareResult.headers.get(
413
+ 'pz-override-response'
414
+ ) !== 'true'
415
+ ) {
416
+ middlewareResult.headers.set(
417
+ 'x-middleware-rewrite',
418
+ url.href
419
+ );
420
+ } else if (
421
+ middlewareResult.headers.get(
422
+ 'x-middleware-rewrite'
423
+ ) &&
424
+ middlewareResult.headers.get(
425
+ 'pz-override-response'
426
+ ) === 'true'
427
+ ) {
428
+ middlewareResult =
429
+ NextResponse.rewrite(url);
430
+ }
431
+ } else {
432
+ // if middleware.ts doesn't have a return value.
433
+ // e.g. NextResponse.next() doesn't exist in middleware.ts
434
+
435
+ middlewareResult =
436
+ NextResponse.rewrite(url);
437
+ }
438
+
439
+ const { localeUrlStrategy } =
440
+ Settings.localization;
441
+
442
+ const fallbackHost =
443
+ req.headers.get('x-forwarded-host') ||
444
+ req.headers.get('host');
445
+ const hostname =
446
+ process.env.NEXT_PUBLIC_URL ||
447
+ `https://${fallbackHost}`;
448
+ const rootHostname =
449
+ localeUrlStrategy ===
450
+ LocaleUrlStrategy.Subdomain
451
+ ? getRootHostname(hostname)
452
+ : null;
453
+
454
+ if (
455
+ !url.pathname.startsWith(
456
+ ordersPrefix
457
+ )
458
+ ) {
459
+ middlewareResult.cookies.set(
460
+ 'pz-locale',
461
+ locale?.length > 0
462
+ ? locale
463
+ : defaultLocaleValue,
464
+ {
465
+ domain: rootHostname,
466
+ sameSite: 'none',
467
+ secure: true,
468
+ expires: new Date(
469
+ Date.now() + 1000 * 60 * 60 * 24 * 7
470
+ ) // 7 days
471
+ }
472
+ );
473
+ }
474
+
475
+ middlewareResult.cookies.set(
476
+ 'pz-currency',
477
+ currency,
478
+ {
479
+ domain: rootHostname,
480
+ sameSite: 'none',
481
+ secure: true,
482
+ expires: new Date(
483
+ Date.now() + 1000 * 60 * 60 * 24 * 7
484
+ ) // 7 days
485
+ }
486
+ );
487
+
488
+ if (
489
+ req.cookies.get('pz-locale') &&
490
+ req.cookies.get('pz-locale').value !==
491
+ locale
492
+ ) {
493
+ logger.debug('Locale changed', {
494
+ locale,
495
+ oldLocale:
496
+ req.cookies.get('pz-locale')?.value,
497
+ ip
498
+ });
499
+ }
500
+
501
+ middlewareResult.headers.set(
502
+ 'pz-url',
503
+ req.nextUrl.toString()
504
+ );
505
+
506
+ if (req.cookies.get('pz-set-currency')) {
507
+ middlewareResult.cookies.delete(
508
+ 'pz-set-currency'
509
+ );
510
+ }
511
+
512
+ if (
513
+ req.cookies.get(
514
+ 'pz-post-checkout-flow'
515
+ )
516
+ ) {
517
+ if (
518
+ pathnameWithoutLocale.startsWith(
519
+ '/orders/completed/'
520
+ ) ||
521
+ pathnameWithoutLocale.startsWith(
522
+ '/basket'
523
+ )
524
+ ) {
525
+ middlewareResult.cookies.delete(
526
+ 'pz-post-checkout-flow'
527
+ );
528
+ }
529
+ }
530
+
531
+ if (process.env.ACC_APP_VERSION) {
532
+ middlewareResult.headers.set(
533
+ 'acc-app-version',
534
+ process.env.ACC_APP_VERSION
535
+ );
536
+ }
537
+
538
+ // Set CSRF token if not set
539
+ try {
540
+ const url = `${Settings.commerceUrl}${user.csrfToken}`;
541
+
542
+ if (!req.cookies.get('csrftoken')) {
543
+ const { csrf_token } = await (
544
+ await fetch(url)
545
+ ).json();
546
+ middlewareResult.cookies.set(
547
+ 'csrftoken',
548
+ csrf_token,
549
+ {
550
+ domain: rootHostname
551
+ }
552
+ );
553
+ }
554
+ } catch (error) {
555
+ logger.error('CSRF Error', {
556
+ error,
557
+ ip
558
+ });
559
+ }
560
+ } catch (error) {
561
+ logger.error('withPzDefault Error', {
562
+ error,
563
+ ip
564
+ });
345
565
  }
346
- );
347
- }
348
- middlewareResult.cookies.set(
349
- 'pz-currency',
350
- currency,
351
- {
352
- sameSite: 'none',
353
- secure: true,
354
- expires: new Date(
355
- Date.now() + 1000 * 60 * 60 * 24 * 7
356
- ) // 7 days
357
- }
358
- );
359
-
360
- if (
361
- req.cookies.get('pz-locale') &&
362
- req.cookies.get('pz-locale').value !== locale
363
- ) {
364
- logger.debug('Locale changed', {
365
- locale,
366
- oldLocale:
367
- req.cookies.get('pz-locale')?.value,
368
- ip
369
- });
370
- }
371
-
372
- middlewareResult.headers.set(
373
- 'pz-url',
374
- req.nextUrl.toString()
375
- );
376
-
377
- if (req.cookies.get('pz-set-currency')) {
378
- middlewareResult.cookies.delete(
379
- 'pz-set-currency'
380
- );
381
- }
382
-
383
- if (process.env.ACC_APP_VERSION) {
384
- middlewareResult.headers.set(
385
- 'acc-app-version',
386
- process.env.ACC_APP_VERSION
387
- );
388
- }
389
-
390
- // Set CSRF token if not set
391
- try {
392
- const url = `${Settings.commerceUrl}${user.csrfToken}`;
393
-
394
- if (!req.cookies.get('csrftoken')) {
395
- const { csrf_token } = await (
396
- await fetch(url)
397
- ).json();
398
- middlewareResult.cookies.set(
399
- 'csrftoken',
400
- csrf_token
401
- );
402
- }
403
- } catch (error) {
404
- logger.error('CSRF Error', {
405
- error,
406
- ip
407
- });
408
- }
409
- } catch (error) {
410
- logger.error('withPzDefault Error', {
411
- error,
412
- ip
413
- });
414
- }
415
-
416
- return middlewareResult;
417
- }
566
+
567
+ return middlewareResult;
568
+ })
569
+ )
570
+ )
571
+ )
418
572
  )
419
573
  )
420
574
  )
@@ -9,6 +9,10 @@ import withCompleteGpay from './complete-gpay';
9
9
  import withCompleteMasterpass from './complete-masterpass';
10
10
  import withCheckoutProvider from './checkout-provider';
11
11
  import withSavedCardRedirection from './saved-card-redirection';
12
+ import withCompleteWallet from './complete-wallet';
13
+ import withWalletCompleteRedirection from './wallet-complete-redirection';
14
+ import withMasterpassRestCallback from './masterpass-rest-callback';
15
+ import withBfcacheHeaders from './bfcache-headers';
12
16
  import { NextRequest } from 'next/server';
13
17
 
14
18
  export {
@@ -22,17 +26,21 @@ export {
22
26
  withCompleteGpay,
23
27
  withCompleteMasterpass,
24
28
  withCheckoutProvider,
25
- withSavedCardRedirection
29
+ withSavedCardRedirection,
30
+ withCompleteWallet,
31
+ withWalletCompleteRedirection,
32
+ withMasterpassRestCallback,
33
+ withBfcacheHeaders
26
34
  };
27
35
 
28
36
  export interface PzNextRequest extends NextRequest {
29
37
  middlewareParams: {
30
38
  commerceUrl: string;
31
- found: boolean;
32
39
  rewrites: {
33
40
  locale?: string;
34
41
  prettyUrl?: string;
35
42
  currency?: string;
43
+ [key: string]: string | undefined;
36
44
  };
37
45
  };
38
46
  }