@akinon/next 1.91.0 → 1.92.0-rc.8

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.
@@ -11,7 +11,8 @@ import {
11
11
  withRedirectionPayment,
12
12
  withSavedCardRedirection,
13
13
  withThreeDRedirection,
14
- withUrlRedirection
14
+ withUrlRedirection,
15
+ withWalletCompleteRedirection
15
16
  } from '.';
16
17
  import { urlLocaleMatcherRegex } from '../utils';
17
18
  import withCurrency from './currency';
@@ -228,144 +229,168 @@ const withPzDefault =
228
229
  withCompleteGpay(
229
230
  withCompleteMasterpass(
230
231
  withSavedCardRedirection(
231
- async (req: PzNextRequest, event: NextFetchEvent) => {
232
- let middlewareResult: NextResponse | void =
233
- NextResponse.next();
234
-
235
- try {
236
- const { locale, prettyUrl, currency } =
237
- req.middlewareParams.rewrites;
238
- const { defaultLocaleValue } =
239
- Settings.localization;
240
- const url = req.nextUrl.clone();
241
- const pathnameWithoutLocale =
242
- url.pathname.replace(urlLocaleMatcherRegex, '');
243
-
244
- middlewareResult = (await middleware(
245
- req,
246
- event
247
- )) as NextResponse | void;
248
-
249
- let customRewriteUrlDiff = '';
250
-
251
- if (
252
- middlewareResult instanceof NextResponse &&
253
- middlewareResult.headers.get(
254
- 'pz-override-response'
255
- ) &&
256
- middlewareResult.headers.get(
257
- 'x-middleware-rewrite'
258
- )
259
- ) {
260
- const rewriteUrl = new URL(
261
- middlewareResult.headers.get(
262
- 'x-middleware-rewrite'
263
- )
264
- );
265
- const originalUrl = new URL(req.url);
266
- customRewriteUrlDiff =
267
- rewriteUrl.pathname.replace(
268
- originalUrl.pathname,
232
+ withWalletCompleteRedirection(
233
+ async (
234
+ req: PzNextRequest,
235
+ event: NextFetchEvent
236
+ ) => {
237
+ let middlewareResult: NextResponse | void =
238
+ NextResponse.next();
239
+
240
+ try {
241
+ const { locale, prettyUrl, currency } =
242
+ req.middlewareParams.rewrites;
243
+ const { defaultLocaleValue } =
244
+ Settings.localization;
245
+ const url = req.nextUrl.clone();
246
+ const pathnameWithoutLocale =
247
+ url.pathname.replace(
248
+ urlLocaleMatcherRegex,
269
249
  ''
270
250
  );
271
- }
272
251
 
273
- url.basePath = `/${commerceUrl}`;
274
- url.pathname = `/${
275
- locale.length ? `${locale}/` : ''
276
- }${currency}/${customRewriteUrlDiff}${
277
- prettyUrl ?? pathnameWithoutLocale
278
- }`.replace(/\/+/g, '/');
279
-
280
- if (
281
- Settings.usePrettyUrlRoute &&
282
- url.searchParams.toString().length > 0 &&
283
- !Object.entries(ROUTES).find(([, value]) =>
284
- new RegExp(`^${value}/?$`).test(
285
- pathnameWithoutLocale
286
- )
287
- )
288
- ) {
289
- url.pathname =
290
- url.pathname +
291
- (/\/$/.test(url.pathname) ? '' : '/') +
292
- `searchparams|${encodeURIComponent(
293
- url.searchParams.toString()
294
- )}`;
295
- }
252
+ middlewareResult = (await middleware(
253
+ req,
254
+ event
255
+ )) as NextResponse | void;
296
256
 
297
- if (
298
- !req.middlewareParams.found &&
299
- Settings.customNotFoundEnabled
300
- ) {
301
- const pathname = url.pathname
302
- .replace(/\/+$/, '')
303
- .split('/');
304
- url.pathname = url.pathname.replace(
305
- pathname.pop(),
306
- 'pz-not-found'
307
- );
308
- }
309
-
310
- Settings.rewrites.forEach((rewrite) => {
311
- url.pathname = url.pathname.replace(
312
- rewrite.source,
313
- rewrite.destination
314
- );
315
- });
257
+ let customRewriteUrlDiff = '';
316
258
 
317
- // if middleware.ts has a return value for current url
318
- if (middlewareResult instanceof NextResponse) {
319
- // pz-override-response header is used to prevent 404 page for custom responses.
320
259
  if (
260
+ middlewareResult instanceof NextResponse &&
321
261
  middlewareResult.headers.get(
322
262
  'pz-override-response'
323
- ) !== 'true'
324
- ) {
325
- middlewareResult.headers.set(
326
- 'x-middleware-rewrite',
327
- url.href
328
- );
329
- } else if (
330
- middlewareResult.headers.get(
331
- 'x-middleware-rewrite'
332
263
  ) &&
333
264
  middlewareResult.headers.get(
334
- 'pz-override-response'
335
- ) === 'true'
265
+ 'x-middleware-rewrite'
266
+ )
267
+ ) {
268
+ const rewriteUrl = new URL(
269
+ middlewareResult.headers.get(
270
+ 'x-middleware-rewrite'
271
+ )
272
+ );
273
+ const originalUrl = new URL(req.url);
274
+ customRewriteUrlDiff =
275
+ rewriteUrl.pathname.replace(
276
+ originalUrl.pathname,
277
+ ''
278
+ );
279
+ }
280
+
281
+ url.basePath = `/${commerceUrl}`;
282
+ url.pathname = `/${
283
+ locale.length ? `${locale}/` : ''
284
+ }${currency}/${customRewriteUrlDiff}${
285
+ prettyUrl ?? pathnameWithoutLocale
286
+ }`.replace(/\/+/g, '/');
287
+
288
+ if (
289
+ Settings.usePrettyUrlRoute &&
290
+ url.searchParams.toString().length > 0 &&
291
+ !Object.entries(ROUTES).find(([, value]) =>
292
+ new RegExp(`^${value}/?$`).test(
293
+ pathnameWithoutLocale
294
+ )
295
+ )
336
296
  ) {
297
+ url.pathname =
298
+ url.pathname +
299
+ (/\/$/.test(url.pathname) ? '' : '/') +
300
+ `searchparams|${encodeURIComponent(
301
+ url.searchParams.toString()
302
+ )}`;
303
+ }
304
+
305
+ if (
306
+ !req.middlewareParams.found &&
307
+ Settings.customNotFoundEnabled
308
+ ) {
309
+ const pathname = url.pathname
310
+ .replace(/\/+$/, '')
311
+ .split('/');
312
+ url.pathname = url.pathname.replace(
313
+ pathname.pop(),
314
+ 'pz-not-found'
315
+ );
316
+ }
317
+
318
+ Settings.rewrites.forEach((rewrite) => {
319
+ url.pathname = url.pathname.replace(
320
+ rewrite.source,
321
+ rewrite.destination
322
+ );
323
+ });
324
+
325
+ // if middleware.ts has a return value for current url
326
+ if (middlewareResult instanceof NextResponse) {
327
+ // pz-override-response header is used to prevent 404 page for custom responses.
328
+ if (
329
+ middlewareResult.headers.get(
330
+ 'pz-override-response'
331
+ ) !== 'true'
332
+ ) {
333
+ middlewareResult.headers.set(
334
+ 'x-middleware-rewrite',
335
+ url.href
336
+ );
337
+ } else if (
338
+ middlewareResult.headers.get(
339
+ 'x-middleware-rewrite'
340
+ ) &&
341
+ middlewareResult.headers.get(
342
+ 'pz-override-response'
343
+ ) === 'true'
344
+ ) {
345
+ middlewareResult =
346
+ NextResponse.rewrite(url);
347
+ }
348
+ } else {
349
+ // if middleware.ts doesn't have a return value.
350
+ // e.g. NextResponse.next() doesn't exist in middleware.ts
351
+
337
352
  middlewareResult = NextResponse.rewrite(url);
338
353
  }
339
- } else {
340
- // if middleware.ts doesn't have a return value.
341
- // e.g. NextResponse.next() doesn't exist in middleware.ts
342
354
 
343
- middlewareResult = NextResponse.rewrite(url);
344
- }
355
+ const { localeUrlStrategy } =
356
+ Settings.localization;
357
+
358
+ const fallbackHost =
359
+ req.headers.get('x-forwarded-host') ||
360
+ req.headers.get('host');
361
+ const hostname =
362
+ process.env.NEXT_PUBLIC_URL ||
363
+ `https://${fallbackHost}`;
364
+ const rootHostname =
365
+ localeUrlStrategy ===
366
+ LocaleUrlStrategy.Subdomain
367
+ ? getRootHostname(hostname)
368
+ : null;
369
+
370
+ if (
371
+ !url.pathname.startsWith(
372
+ `/${currency}/orders`
373
+ )
374
+ ) {
375
+ middlewareResult.cookies.set(
376
+ 'pz-locale',
377
+ locale?.length > 0
378
+ ? locale
379
+ : defaultLocaleValue,
380
+ {
381
+ domain: rootHostname,
382
+ sameSite: 'none',
383
+ secure: true,
384
+ expires: new Date(
385
+ Date.now() + 1000 * 60 * 60 * 24 * 7
386
+ ) // 7 days
387
+ }
388
+ );
389
+ }
345
390
 
346
- const { localeUrlStrategy } =
347
- Settings.localization;
348
-
349
- const fallbackHost =
350
- req.headers.get('x-forwarded-host') ||
351
- req.headers.get('host');
352
- const hostname =
353
- process.env.NEXT_PUBLIC_URL ||
354
- `https://${fallbackHost}`;
355
- const rootHostname =
356
- localeUrlStrategy ===
357
- LocaleUrlStrategy.Subdomain
358
- ? getRootHostname(hostname)
359
- : null;
360
-
361
- if (
362
- !url.pathname.startsWith(`/${currency}/orders`)
363
- ) {
364
391
  middlewareResult.cookies.set(
365
- 'pz-locale',
366
- locale?.length > 0
367
- ? locale
368
- : defaultLocaleValue,
392
+ 'pz-currency',
393
+ currency,
369
394
  {
370
395
  domain: rootHostname,
371
396
  sameSite: 'none',
@@ -375,82 +400,69 @@ const withPzDefault =
375
400
  ) // 7 days
376
401
  }
377
402
  );
378
- }
379
403
 
380
- middlewareResult.cookies.set(
381
- 'pz-currency',
382
- currency,
383
- {
384
- domain: rootHostname,
385
- sameSite: 'none',
386
- secure: true,
387
- expires: new Date(
388
- Date.now() + 1000 * 60 * 60 * 24 * 7
389
- ) // 7 days
404
+ if (
405
+ req.cookies.get('pz-locale') &&
406
+ req.cookies.get('pz-locale').value !== locale
407
+ ) {
408
+ logger.debug('Locale changed', {
409
+ locale,
410
+ oldLocale:
411
+ req.cookies.get('pz-locale')?.value,
412
+ ip
413
+ });
390
414
  }
391
- );
392
-
393
- if (
394
- req.cookies.get('pz-locale') &&
395
- req.cookies.get('pz-locale').value !== locale
396
- ) {
397
- logger.debug('Locale changed', {
398
- locale,
399
- oldLocale:
400
- req.cookies.get('pz-locale')?.value,
401
- ip
402
- });
403
- }
404
-
405
- middlewareResult.headers.set(
406
- 'pz-url',
407
- req.nextUrl.toString()
408
- );
409
-
410
- if (req.cookies.get('pz-set-currency')) {
411
- middlewareResult.cookies.delete(
412
- 'pz-set-currency'
413
- );
414
- }
415
415
 
416
- if (process.env.ACC_APP_VERSION) {
417
416
  middlewareResult.headers.set(
418
- 'acc-app-version',
419
- process.env.ACC_APP_VERSION
417
+ 'pz-url',
418
+ req.nextUrl.toString()
420
419
  );
421
- }
422
420
 
423
- // Set CSRF token if not set
424
- try {
425
- const url = `${Settings.commerceUrl}${user.csrfToken}`;
421
+ if (req.cookies.get('pz-set-currency')) {
422
+ middlewareResult.cookies.delete(
423
+ 'pz-set-currency'
424
+ );
425
+ }
426
426
 
427
- if (!req.cookies.get('csrftoken')) {
428
- const { csrf_token } = await (
429
- await fetch(url)
430
- ).json();
431
- middlewareResult.cookies.set(
432
- 'csrftoken',
433
- csrf_token,
434
- {
435
- domain: rootHostname
436
- }
427
+ if (process.env.ACC_APP_VERSION) {
428
+ middlewareResult.headers.set(
429
+ 'acc-app-version',
430
+ process.env.ACC_APP_VERSION
437
431
  );
438
432
  }
433
+
434
+ // Set CSRF token if not set
435
+ try {
436
+ const url = `${Settings.commerceUrl}${user.csrfToken}`;
437
+
438
+ if (!req.cookies.get('csrftoken')) {
439
+ const { csrf_token } = await (
440
+ await fetch(url)
441
+ ).json();
442
+ middlewareResult.cookies.set(
443
+ 'csrftoken',
444
+ csrf_token,
445
+ {
446
+ domain: rootHostname
447
+ }
448
+ );
449
+ }
450
+ } catch (error) {
451
+ logger.error('CSRF Error', {
452
+ error,
453
+ ip
454
+ });
455
+ }
439
456
  } catch (error) {
440
- logger.error('CSRF Error', {
457
+ logger.error('withPzDefault Error', {
441
458
  error,
442
459
  ip
443
460
  });
444
461
  }
445
- } catch (error) {
446
- logger.error('withPzDefault Error', {
447
- error,
448
- ip
449
- });
450
- }
451
462
 
452
- return middlewareResult;
453
- }
463
+ return middlewareResult;
464
+ }
465
+ )
454
466
  )
455
467
  )
456
468
  )
@@ -9,6 +9,7 @@ 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 withWalletCompleteRedirection from './wallet-complete-redirection';
12
13
  import { NextRequest } from 'next/server';
13
14
 
14
15
  export {
@@ -22,7 +23,8 @@ export {
22
23
  withCompleteGpay,
23
24
  withCompleteMasterpass,
24
25
  withCheckoutProvider,
25
- withSavedCardRedirection
26
+ withSavedCardRedirection,
27
+ withWalletCompleteRedirection
26
28
  };
27
29
 
28
30
  export interface PzNextRequest extends NextRequest {
@@ -146,7 +146,8 @@ const withRedirectionPayment =
146
146
  logger.info('Redirecting to order success page', {
147
147
  middleware: 'redirection-payment',
148
148
  redirectUrlWithLocale,
149
- ip
149
+ ip,
150
+ setCookie: request.headers.get('set-cookie')
150
151
  });
151
152
 
152
153
  // Using POST method while redirecting causes an error,
@@ -145,7 +145,8 @@ const withSavedCardRedirection =
145
145
  logger.info('Redirecting to order success page', {
146
146
  middleware: 'saved-card-redirection',
147
147
  redirectUrlWithLocale,
148
- ip
148
+ ip,
149
+ setCookie: request.headers.get('set-cookie')
149
150
  });
150
151
 
151
152
  // Using POST method while redirecting causes an error,
@@ -145,7 +145,8 @@ const withThreeDRedirection =
145
145
  logger.info('Redirecting to order success page', {
146
146
  middleware: 'three-d-redirection',
147
147
  redirectUrlWithLocale,
148
- ip
148
+ ip,
149
+ setCookie: request.headers.get('set-cookie')
149
150
  });
150
151
 
151
152
  // Using POST method while redirecting causes an error,
@@ -4,6 +4,7 @@ import { PzNextRequest } from '.';
4
4
  import logger from '../utils/log';
5
5
  import { urlLocaleMatcherRegex } from '../utils';
6
6
  import { getUrlPathWithLocale } from '../utils/localization';
7
+ import { shouldIgnoreRedirect } from '../utils/redirect-ignore';
7
8
  import { ROUTES } from 'routes';
8
9
 
9
10
  // This middleware is used to handle url redirections set in Omnitron
@@ -60,20 +61,13 @@ const withUrlRedirection =
60
61
 
61
62
  const setCookies = request.headers.getSetCookie();
62
63
 
63
- if (settings.commerceRedirectionIgnoreList) {
64
- const shouldIgnoreRedirect =
65
- settings.commerceRedirectionIgnoreList.some((ignorePath) =>
66
- redirectUrl.pathname.startsWith(
67
- getUrlPathWithLocale(
68
- ignorePath,
69
- req.middlewareParams.rewrites.locale
70
- )
71
- )
72
- );
73
-
74
- if (shouldIgnoreRedirect) {
75
- return middleware(req, event);
76
- }
64
+ if (
65
+ shouldIgnoreRedirect(
66
+ url.pathname,
67
+ req.middlewareParams.rewrites.locale
68
+ )
69
+ ) {
70
+ return middleware(req, event);
77
71
  }
78
72
 
79
73
  const response = NextResponse.redirect(redirectUrl.toString(), {