@akinon/next 2.0.135-rc.0 → 2.0.135
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/CHANGELOG.md +2 -35
- package/__tests__/theme-editor-health.test.ts +128 -0
- package/api/auth.ts +20 -97
- package/bin/pz-generate-routes.js +1 -4
- package/components/plugin-module.tsx +1 -0
- package/data/client/checkout.ts +1 -0
- package/data/client/user.ts +1 -6
- package/data/client/wishlist.ts +0 -22
- package/data/server/category.ts +2 -14
- package/data/server/list.ts +1 -13
- package/data/server/product.ts +0 -10
- package/data/server/special-page.ts +1 -14
- package/data/server/widget.ts +1 -14
- package/data/urls.ts +4 -13
- package/hooks/index.ts +0 -1
- package/hooks/use-captcha.tsx +1 -1
- package/middlewares/default.ts +258 -254
- package/middlewares/pretty-url.ts +1 -3
- package/package.json +2 -2
- package/plugins.d.ts +0 -10
- package/plugins.js +0 -1
- package/redux/middlewares/checkout.ts +3 -45
- package/redux/middlewares/pre-order/installment-option.ts +1 -9
- package/types/index.ts +9 -20
- package/utils/csrf.ts +1 -1
- package/utils/theme-editor-health.ts +141 -0
- package/with-pz-config.js +1 -6
- package/api/client-env.ts +0 -78
- package/hooks/use-client-env.ts +0 -265
- package/utils/payload-optimizer.ts +0 -481
package/middlewares/default.ts
CHANGED
|
@@ -18,11 +18,7 @@ import {
|
|
|
18
18
|
withBfcacheHeaders
|
|
19
19
|
} from '.';
|
|
20
20
|
import { getCsrfCookieFlags, urlLocaleMatcherRegex } from '../utils';
|
|
21
|
-
import {
|
|
22
|
-
getPzSegmentsConfig,
|
|
23
|
-
encodePzValue,
|
|
24
|
-
isLegacyMode
|
|
25
|
-
} from '../utils/pz-segments';
|
|
21
|
+
import { getPzSegmentsConfig, encodePzValue, isLegacyMode } from '../utils/pz-segments';
|
|
26
22
|
import withCurrency from './currency';
|
|
27
23
|
import withLocale from './locale';
|
|
28
24
|
import logger from '../utils/log';
|
|
@@ -30,6 +26,10 @@ import { user } from '../data/urls';
|
|
|
30
26
|
import { getUrlPathWithLocale } from '../utils/localization';
|
|
31
27
|
import getRootHostname from '../utils/get-root-hostname';
|
|
32
28
|
import { LocaleUrlStrategy } from '../localization';
|
|
29
|
+
import {
|
|
30
|
+
THEME_EDITOR_HEALTH_PATH,
|
|
31
|
+
themeEditorHealthResponse
|
|
32
|
+
} from '../utils/theme-editor-health';
|
|
33
33
|
|
|
34
34
|
const POST_CHECKOUT_COOKIE_MAX_AGE_MS = 1000 * 60 * 30; // 30 minutes
|
|
35
35
|
|
|
@@ -91,6 +91,13 @@ const withPzDefault =
|
|
|
91
91
|
return NextResponse.json({ status: 'ok' });
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
// Whether the theme editor can drive this storefront's preview — asked
|
|
95
|
+
// by the editor before it relies on the preview. Answered here, ahead of
|
|
96
|
+
// locale and route handling, because every brand's matcher skips /api.
|
|
97
|
+
if (url.pathname === THEME_EDITOR_HEALTH_PATH) {
|
|
98
|
+
return themeEditorHealthResponse(req);
|
|
99
|
+
}
|
|
100
|
+
|
|
94
101
|
if (url.pathname.startsWith('/metrics')) {
|
|
95
102
|
return new NextResponse(null, { status: 200 });
|
|
96
103
|
}
|
|
@@ -336,98 +343,98 @@ const withPzDefault =
|
|
|
336
343
|
req: PzNextRequest,
|
|
337
344
|
event: NextFetchEvent
|
|
338
345
|
) => {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
middlewareResult = (await middleware(
|
|
355
|
-
req,
|
|
356
|
-
event
|
|
357
|
-
)) as NextResponse | void;
|
|
358
|
-
|
|
359
|
-
let customRewriteUrlDiff = '';
|
|
346
|
+
let middlewareResult: NextResponse | void =
|
|
347
|
+
NextResponse.next();
|
|
348
|
+
|
|
349
|
+
try {
|
|
350
|
+
const { locale, prettyUrl, currency } =
|
|
351
|
+
req.middlewareParams.rewrites;
|
|
352
|
+
const { defaultLocaleValue } =
|
|
353
|
+
Settings.localization;
|
|
354
|
+
const url = req.nextUrl.clone();
|
|
355
|
+
const pathnameWithoutLocale =
|
|
356
|
+
url.pathname.replace(
|
|
357
|
+
urlLocaleMatcherRegex,
|
|
358
|
+
''
|
|
359
|
+
);
|
|
360
360
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
361
|
+
middlewareResult = (await middleware(
|
|
362
|
+
req,
|
|
363
|
+
event
|
|
364
|
+
)) as NextResponse | void;
|
|
365
|
+
|
|
366
|
+
let customRewriteUrlDiff = '';
|
|
367
|
+
|
|
368
|
+
if (
|
|
369
|
+
middlewareResult instanceof
|
|
370
|
+
NextResponse &&
|
|
371
|
+
middlewareResult.headers.get(
|
|
372
|
+
'pz-override-response'
|
|
373
|
+
) &&
|
|
374
|
+
middlewareResult.headers.get(
|
|
375
|
+
'x-middleware-rewrite'
|
|
376
|
+
)
|
|
377
|
+
) {
|
|
378
|
+
const rewriteUrl = new URL(
|
|
367
379
|
middlewareResult.headers.get(
|
|
368
380
|
'x-middleware-rewrite'
|
|
369
381
|
)
|
|
370
|
-
)
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
382
|
+
);
|
|
383
|
+
const originalUrl = new URL(req.url);
|
|
384
|
+
customRewriteUrlDiff =
|
|
385
|
+
rewriteUrl.pathname.replace(
|
|
386
|
+
originalUrl.pathname,
|
|
387
|
+
''
|
|
375
388
|
);
|
|
376
|
-
|
|
377
|
-
customRewriteUrlDiff =
|
|
378
|
-
rewriteUrl.pathname.replace(
|
|
379
|
-
originalUrl.pathname,
|
|
380
|
-
''
|
|
381
|
-
);
|
|
382
|
-
}
|
|
389
|
+
}
|
|
383
390
|
|
|
384
|
-
|
|
391
|
+
let ordersPrefix: string;
|
|
385
392
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
}${currency}/${customRewriteUrlDiff}${
|
|
393
|
+
if (isLegacyMode(Settings)) {
|
|
394
|
+
url.basePath = `/${commerceUrl}`;
|
|
395
|
+
url.pathname =
|
|
396
|
+
`/${locale.length ? `${locale}/` : ''}${currency}/${customRewriteUrlDiff}${
|
|
391
397
|
prettyUrl ?? pathnameWithoutLocale
|
|
392
398
|
}`.replace(/\/+/g, '/');
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
399
|
+
ordersPrefix = `/${currency}/orders`;
|
|
400
|
+
} else {
|
|
401
|
+
const pzConfig =
|
|
402
|
+
getPzSegmentsConfig(Settings);
|
|
403
|
+
const fullUrlPath =
|
|
404
|
+
`${customRewriteUrlDiff}${
|
|
405
|
+
prettyUrl ?? pathnameWithoutLocale
|
|
406
|
+
}`.replace(/\/+/g, '/');
|
|
407
|
+
const fullUrl = `${req.nextUrl.origin}${fullUrlPath}`;
|
|
408
|
+
const resolvedLocale =
|
|
409
|
+
locale?.length > 0
|
|
410
|
+
? locale
|
|
411
|
+
: Settings.localization
|
|
412
|
+
.defaultLocaleValue;
|
|
413
|
+
const resolveContext = {
|
|
414
|
+
req,
|
|
415
|
+
event,
|
|
416
|
+
url,
|
|
417
|
+
locale: resolvedLocale,
|
|
418
|
+
currency,
|
|
419
|
+
pathname: pathnameWithoutLocale
|
|
420
|
+
};
|
|
421
|
+
const customSegments = pzConfig.segments
|
|
422
|
+
.filter(
|
|
423
|
+
(seg) =>
|
|
424
|
+
seg.name !== 'locale' &&
|
|
425
|
+
seg.name !== 'currency' &&
|
|
426
|
+
seg.name !== 'url'
|
|
427
|
+
);
|
|
428
|
+
const segmentValues: Record<
|
|
429
|
+
string,
|
|
430
|
+
string
|
|
431
|
+
> = {
|
|
432
|
+
locale: resolvedLocale,
|
|
433
|
+
currency,
|
|
434
|
+
url: encodeURIComponent(fullUrl),
|
|
435
|
+
...Object.fromEntries(
|
|
436
|
+
customSegments
|
|
437
|
+
.map((seg) => [
|
|
431
438
|
seg.name,
|
|
432
439
|
req.middlewareParams.rewrites[
|
|
433
440
|
seg.name
|
|
@@ -436,121 +443,105 @@ const withPzDefault =
|
|
|
436
443
|
? seg.resolve(resolveContext)
|
|
437
444
|
: '')
|
|
438
445
|
])
|
|
439
|
-
|
|
440
|
-
|
|
446
|
+
)
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
const pzValue = encodePzValue(
|
|
450
|
+
segmentValues,
|
|
451
|
+
pzConfig
|
|
452
|
+
);
|
|
441
453
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
454
|
+
url.pathname =
|
|
455
|
+
`/${pzValue}/${fullUrlPath}`.replace(
|
|
456
|
+
/\/+/g,
|
|
457
|
+
'/'
|
|
445
458
|
);
|
|
459
|
+
ordersPrefix = `/${pzValue}/orders`;
|
|
460
|
+
}
|
|
446
461
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
462
|
+
if (
|
|
463
|
+
Settings.usePrettyUrlRoute &&
|
|
464
|
+
url.searchParams.toString().length > 0 &&
|
|
465
|
+
!Object.entries(ROUTES).find(
|
|
466
|
+
([, value]) =>
|
|
467
|
+
new RegExp(`^${value}/?$`).test(
|
|
468
|
+
pathnameWithoutLocale
|
|
469
|
+
)
|
|
470
|
+
)
|
|
471
|
+
) {
|
|
472
|
+
url.pathname =
|
|
473
|
+
url.pathname +
|
|
474
|
+
(/\/$/.test(url.pathname) ? '' : '/') +
|
|
475
|
+
`searchparams|${encodeURIComponent(
|
|
476
|
+
url.searchParams.toString()
|
|
477
|
+
)}`;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
Settings.rewrites.forEach((rewrite) => {
|
|
481
|
+
url.pathname = url.pathname.replace(
|
|
482
|
+
rewrite.source,
|
|
483
|
+
rewrite.destination
|
|
484
|
+
);
|
|
485
|
+
});
|
|
454
486
|
|
|
487
|
+
// if middleware.ts has a return value for current url
|
|
488
|
+
if (
|
|
489
|
+
middlewareResult instanceof NextResponse
|
|
490
|
+
) {
|
|
491
|
+
// pz-override-response header is used to prevent 404 page for custom responses.
|
|
455
492
|
if (
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
!Object.entries(ROUTES).find(
|
|
460
|
-
([, value]) =>
|
|
461
|
-
new RegExp(`^${value}/?$`).test(
|
|
462
|
-
pathnameWithoutLocale
|
|
463
|
-
)
|
|
464
|
-
)
|
|
493
|
+
middlewareResult.headers.get(
|
|
494
|
+
'pz-override-response'
|
|
495
|
+
) !== 'true'
|
|
465
496
|
) {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
? ''
|
|
470
|
-
: '/') +
|
|
471
|
-
`searchparams|${encodeURIComponent(
|
|
472
|
-
url.searchParams.toString()
|
|
473
|
-
)}`;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
Settings.rewrites.forEach((rewrite) => {
|
|
477
|
-
url.pathname = url.pathname.replace(
|
|
478
|
-
rewrite.source,
|
|
479
|
-
rewrite.destination
|
|
497
|
+
middlewareResult.headers.set(
|
|
498
|
+
'x-middleware-rewrite',
|
|
499
|
+
url.href
|
|
480
500
|
);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
middlewareResult
|
|
501
|
+
} else if (
|
|
502
|
+
middlewareResult.headers.get(
|
|
503
|
+
'x-middleware-rewrite'
|
|
504
|
+
) &&
|
|
505
|
+
middlewareResult.headers.get(
|
|
506
|
+
'pz-override-response'
|
|
507
|
+
) === 'true'
|
|
486
508
|
) {
|
|
487
|
-
// pz-override-response header is used to prevent 404 page for custom responses.
|
|
488
|
-
if (
|
|
489
|
-
middlewareResult.headers.get(
|
|
490
|
-
'pz-override-response'
|
|
491
|
-
) !== 'true'
|
|
492
|
-
) {
|
|
493
|
-
middlewareResult.headers.set(
|
|
494
|
-
'x-middleware-rewrite',
|
|
495
|
-
url.href
|
|
496
|
-
);
|
|
497
|
-
} else if (
|
|
498
|
-
middlewareResult.headers.get(
|
|
499
|
-
'x-middleware-rewrite'
|
|
500
|
-
) &&
|
|
501
|
-
middlewareResult.headers.get(
|
|
502
|
-
'pz-override-response'
|
|
503
|
-
) === 'true'
|
|
504
|
-
) {
|
|
505
|
-
middlewareResult =
|
|
506
|
-
NextResponse.rewrite(url);
|
|
507
|
-
}
|
|
508
|
-
} else {
|
|
509
|
-
// if middleware.ts doesn't have a return value.
|
|
510
|
-
// e.g. NextResponse.next() doesn't exist in middleware.ts
|
|
511
|
-
|
|
512
509
|
middlewareResult =
|
|
513
510
|
NextResponse.rewrite(url);
|
|
514
511
|
}
|
|
512
|
+
} else {
|
|
513
|
+
// if middleware.ts doesn't have a return value.
|
|
514
|
+
// e.g. NextResponse.next() doesn't exist in middleware.ts
|
|
515
515
|
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
const fallbackHost =
|
|
520
|
-
req.headers.get('x-forwarded-host') ||
|
|
521
|
-
req.headers.get('host');
|
|
522
|
-
const hostname =
|
|
523
|
-
process.env.NEXT_PUBLIC_URL ||
|
|
524
|
-
`https://${fallbackHost}`;
|
|
525
|
-
const rootHostname =
|
|
526
|
-
localeUrlStrategy ===
|
|
527
|
-
LocaleUrlStrategy.Subdomain
|
|
528
|
-
? getRootHostname(hostname)
|
|
529
|
-
: null;
|
|
530
|
-
|
|
531
|
-
if (
|
|
532
|
-
!url.pathname.startsWith(ordersPrefix)
|
|
533
|
-
) {
|
|
534
|
-
middlewareResult.cookies.set(
|
|
535
|
-
'pz-locale',
|
|
536
|
-
locale?.length > 0
|
|
537
|
-
? locale
|
|
538
|
-
: defaultLocaleValue,
|
|
539
|
-
{
|
|
540
|
-
domain: rootHostname,
|
|
541
|
-
sameSite: 'none',
|
|
542
|
-
secure: true,
|
|
543
|
-
expires: new Date(
|
|
544
|
-
Date.now() +
|
|
545
|
-
1000 * 60 * 60 * 24 * 7
|
|
546
|
-
) // 7 days
|
|
547
|
-
}
|
|
548
|
-
);
|
|
549
|
-
}
|
|
516
|
+
middlewareResult =
|
|
517
|
+
NextResponse.rewrite(url);
|
|
518
|
+
}
|
|
550
519
|
|
|
520
|
+
const { localeUrlStrategy } =
|
|
521
|
+
Settings.localization;
|
|
522
|
+
|
|
523
|
+
const fallbackHost =
|
|
524
|
+
req.headers.get('x-forwarded-host') ||
|
|
525
|
+
req.headers.get('host');
|
|
526
|
+
const hostname =
|
|
527
|
+
process.env.NEXT_PUBLIC_URL ||
|
|
528
|
+
`https://${fallbackHost}`;
|
|
529
|
+
const rootHostname =
|
|
530
|
+
localeUrlStrategy ===
|
|
531
|
+
LocaleUrlStrategy.Subdomain
|
|
532
|
+
? getRootHostname(hostname)
|
|
533
|
+
: null;
|
|
534
|
+
|
|
535
|
+
if (
|
|
536
|
+
!url.pathname.startsWith(
|
|
537
|
+
ordersPrefix
|
|
538
|
+
)
|
|
539
|
+
) {
|
|
551
540
|
middlewareResult.cookies.set(
|
|
552
|
-
'pz-
|
|
553
|
-
|
|
541
|
+
'pz-locale',
|
|
542
|
+
locale?.length > 0
|
|
543
|
+
? locale
|
|
544
|
+
: defaultLocaleValue,
|
|
554
545
|
{
|
|
555
546
|
domain: rootHostname,
|
|
556
547
|
sameSite: 'none',
|
|
@@ -560,89 +551,102 @@ const withPzDefault =
|
|
|
560
551
|
) // 7 days
|
|
561
552
|
}
|
|
562
553
|
);
|
|
554
|
+
}
|
|
563
555
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
});
|
|
556
|
+
middlewareResult.cookies.set(
|
|
557
|
+
'pz-currency',
|
|
558
|
+
currency,
|
|
559
|
+
{
|
|
560
|
+
domain: rootHostname,
|
|
561
|
+
sameSite: 'none',
|
|
562
|
+
secure: true,
|
|
563
|
+
expires: new Date(
|
|
564
|
+
Date.now() + 1000 * 60 * 60 * 24 * 7
|
|
565
|
+
) // 7 days
|
|
575
566
|
}
|
|
567
|
+
);
|
|
568
|
+
|
|
569
|
+
if (
|
|
570
|
+
req.cookies.get('pz-locale') &&
|
|
571
|
+
req.cookies.get('pz-locale').value !==
|
|
572
|
+
locale
|
|
573
|
+
) {
|
|
574
|
+
logger.debug('Locale changed', {
|
|
575
|
+
locale,
|
|
576
|
+
oldLocale:
|
|
577
|
+
req.cookies.get('pz-locale')?.value,
|
|
578
|
+
ip
|
|
579
|
+
});
|
|
580
|
+
}
|
|
576
581
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
582
|
+
middlewareResult.headers.set(
|
|
583
|
+
'pz-url',
|
|
584
|
+
req.nextUrl.toString()
|
|
585
|
+
);
|
|
586
|
+
|
|
587
|
+
if (req.cookies.get('pz-set-currency')) {
|
|
588
|
+
middlewareResult.cookies.delete(
|
|
589
|
+
'pz-set-currency'
|
|
580
590
|
);
|
|
591
|
+
}
|
|
581
592
|
|
|
582
|
-
|
|
593
|
+
if (
|
|
594
|
+
req.cookies.get('pz-post-checkout-flow')
|
|
595
|
+
) {
|
|
596
|
+
if (
|
|
597
|
+
pathnameWithoutLocale.startsWith(
|
|
598
|
+
'/orders/completed/'
|
|
599
|
+
) ||
|
|
600
|
+
pathnameWithoutLocale.startsWith(
|
|
601
|
+
'/basket'
|
|
602
|
+
)
|
|
603
|
+
) {
|
|
583
604
|
middlewareResult.cookies.delete(
|
|
584
|
-
'pz-
|
|
605
|
+
'pz-post-checkout-flow'
|
|
585
606
|
);
|
|
586
607
|
}
|
|
608
|
+
}
|
|
587
609
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
) ||
|
|
595
|
-
pathnameWithoutLocale.startsWith(
|
|
596
|
-
'/basket'
|
|
597
|
-
)
|
|
598
|
-
) {
|
|
599
|
-
middlewareResult.cookies.delete(
|
|
600
|
-
'pz-post-checkout-flow'
|
|
601
|
-
);
|
|
602
|
-
}
|
|
603
|
-
}
|
|
610
|
+
if (process.env.ACC_APP_VERSION) {
|
|
611
|
+
middlewareResult.headers.set(
|
|
612
|
+
'acc-app-version',
|
|
613
|
+
process.env.ACC_APP_VERSION
|
|
614
|
+
);
|
|
615
|
+
}
|
|
604
616
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
process.env.ACC_APP_VERSION
|
|
609
|
-
);
|
|
610
|
-
}
|
|
617
|
+
// Set CSRF token if not set
|
|
618
|
+
try {
|
|
619
|
+
const url = `${Settings.commerceUrl}${user.csrfToken}`;
|
|
611
620
|
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
domain: rootHostname,
|
|
626
|
-
...getCsrfCookieFlags()
|
|
627
|
-
}
|
|
628
|
-
);
|
|
629
|
-
}
|
|
630
|
-
} catch (error) {
|
|
631
|
-
logger.error('CSRF Error', {
|
|
632
|
-
error,
|
|
633
|
-
ip
|
|
634
|
-
});
|
|
621
|
+
if (!req.cookies.get('csrftoken')) {
|
|
622
|
+
const { csrf_token } = await (
|
|
623
|
+
await fetch(url)
|
|
624
|
+
).json();
|
|
625
|
+
middlewareResult.cookies.set(
|
|
626
|
+
'csrftoken',
|
|
627
|
+
csrf_token,
|
|
628
|
+
{
|
|
629
|
+
path: '/',
|
|
630
|
+
domain: rootHostname,
|
|
631
|
+
...getCsrfCookieFlags()
|
|
632
|
+
}
|
|
633
|
+
);
|
|
635
634
|
}
|
|
636
635
|
} catch (error) {
|
|
637
|
-
logger.error('
|
|
636
|
+
logger.error('CSRF Error', {
|
|
638
637
|
error,
|
|
639
638
|
ip
|
|
640
639
|
});
|
|
641
640
|
}
|
|
642
|
-
|
|
643
|
-
|
|
641
|
+
} catch (error) {
|
|
642
|
+
logger.error('withPzDefault Error', {
|
|
643
|
+
error,
|
|
644
|
+
ip
|
|
645
|
+
});
|
|
644
646
|
}
|
|
645
|
-
|
|
647
|
+
|
|
648
|
+
return middlewareResult;
|
|
649
|
+
})
|
|
646
650
|
)
|
|
647
651
|
)
|
|
648
652
|
)
|
|
@@ -86,9 +86,7 @@ const withPrettyUrl =
|
|
|
86
86
|
const matchedLanguagePrefix = url.pathname.match(
|
|
87
87
|
urlLocaleMatcherRegex
|
|
88
88
|
)?.[0];
|
|
89
|
-
const prettyUrlPathname = matchedLanguagePrefix
|
|
90
|
-
? url.pathname.replace(matchedLanguagePrefix, '')
|
|
91
|
-
: url.pathname;
|
|
89
|
+
const prettyUrlPathname = url.pathname.replace(matchedLanguagePrefix, '');
|
|
92
90
|
const isValidPrettyUrlPath = (pathname: string) => {
|
|
93
91
|
return (
|
|
94
92
|
new RegExp(/^\/[a-zA-Z0-9/]+(?:-[a-zA-Z0-9/]+)*$/).test(pathname) &&
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akinon/next",
|
|
3
3
|
"description": "Core package for Project Zero Next",
|
|
4
|
-
"version": "2.0.135
|
|
4
|
+
"version": "2.0.135",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"set-cookie-parser": "2.6.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@akinon/eslint-plugin-projectzero": "2.0.135
|
|
39
|
+
"@akinon/eslint-plugin-projectzero": "2.0.135",
|
|
40
40
|
"@babel/core": "7.26.10",
|
|
41
41
|
"@babel/preset-env": "7.26.9",
|
|
42
42
|
"@babel/preset-typescript": "7.27.0",
|
package/plugins.d.ts
CHANGED
|
@@ -37,16 +37,6 @@ declare module '@akinon/pz-cybersource-uc/src/redux/middleware' {
|
|
|
37
37
|
export default middleware as any;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
declare module '@akinon/pz-apple-pay' {}
|
|
41
|
-
|
|
42
|
-
declare module '@akinon/pz-similar-products' {
|
|
43
|
-
export const SimilarProductsModal: any;
|
|
44
|
-
export const SimilarProductsFilterSidebar: any;
|
|
45
|
-
export const SimilarProductsResultsGrid: any;
|
|
46
|
-
export const SimilarProductsPlugin: any;
|
|
47
|
-
export const SimilarProductsButtonPlugin: any;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
40
|
declare module '@akinon/pz-cybersource-uc/src/redux/reducer' {
|
|
51
41
|
export default reducer as any;
|
|
52
42
|
}
|