An awesome multiple award-winning electric enduro bike
An awesome descent, with some high speed ripping at the top, some root drops in the middle, and some great bank turns at the bottom. Fun!
See your customer specific price
Create orders through express buy
Create & save favorite lists
Possible to see your orders & invoices
When you are a customer get all the benefits
Get professional advice
Webshop with your own prices
Error executing template "Designs/Swift/Paragraph/Swift_ProductComponentSlider.cshtml"
System.Exception: The Client Secret is expired. Visit the Azure portal to create new keys for your '6945a908-9a4b-44fa-9ced-6fa84bd4a866' app. GetTokenForClientCredentialsFlow failed: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 9f02c6f2-1e6c-46b5-a6b5-cac8c0860200 Correlation ID: e0313b35-7e54-460d-a1a5-d4b13f2e9467 Timestamp: 2025-11-19 07:06:34Z. Tenant:7dd45d63-24fc-4edd-8ad8-5fd66b6f9733 Client:6945a908-9a4b-44fa-9ced-6fa84bd4a866.
---> MSAL.NetCore.4.61.3.0.MsalServiceException:
ErrorCode: invalid_client
Microsoft.Identity.Client.MsalServiceException: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 9f02c6f2-1e6c-46b5-a6b5-cac8c0860200 Correlation ID: e0313b35-7e54-460d-a1a5-d4b13f2e9467 Timestamp: 2025-11-19 07:06:34Z
at Microsoft.Identity.Client.OAuth2.OAuth2Client.ThrowServerException(HttpResponse response, RequestContext requestContext)
at Microsoft.Identity.Client.OAuth2.OAuth2Client.CreateResponse[T](HttpResponse response, RequestContext requestContext)
at Microsoft.Identity.Client.OAuth2.OAuth2Client.ExecuteRequestAsync[T](Uri endPoint, HttpMethod method, RequestContext requestContext, Boolean expectErrorsOn200OK, Boolean addCommonHeaders, Func`2 onBeforePostRequestData)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendHttpAndClearTelemetryAsync(String tokenEndpoint, ILoggerAdapter logger)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendHttpAndClearTelemetryAsync(String tokenEndpoint, ILoggerAdapter logger)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendTokenRequestAsync(IDictionary`2 additionalBodyParameters, String scopeOverride, String tokenEndpointOverride, CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.SendTokenRequestAsync(IDictionary`2 additionalBodyParameters, CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.GetAccessTokenAsync(CancellationToken cancellationToken, ILoggerAdapter logger)
at Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.ExecuteAsync(CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.<>c__DisplayClass11_1.<<RunAsync>b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.Identity.Client.Utils.StopwatchService.MeasureCodeBlockAsync(Func`1 codeBlock)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.RunAsync(CancellationToken cancellationToken)
at Microsoft.Identity.Client.ApiConfig.Executors.ConfidentialClientExecutor.ExecuteAsync(AcquireTokenCommonParameters commonParameters, AcquireTokenForClientParameters clientParameters, CancellationToken cancellationToken)
StatusCode: 401
ResponseBody: {"error":"invalid_client","error_description":"AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 9f02c6f2-1e6c-46b5-a6b5-cac8c0860200 Correlation ID: e0313b35-7e54-460d-a1a5-d4b13f2e9467 Timestamp: 2025-11-19 07:06:34Z","error_codes":[7000222],"timestamp":"2025-11-19 07:06:34Z","trace_id":"9f02c6f2-1e6c-46b5-a6b5-cac8c0860200","correlation_id":"e0313b35-7e54-460d-a1a5-d4b13f2e9467","error_uri":"https://login.microsoftonline.com/error?code=7000222"}
Headers: Cache-Control: no-store, no-cache
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
client-request-id: e0313b35-7e54-460d-a1a5-d4b13f2e9467
x-ms-request-id: 9f02c6f2-1e6c-46b5-a6b5-cac8c0860200
x-ms-ests-server: 2.1.22549.3 - WEULR1 ProdSlices
x-ms-clitelem: 1,7000222,0,,
x-ms-srs: 1.P
Content-Security-Policy-Report-Only: object-src 'none'; base-uri 'self'; script-src 'self' 'nonce-MEUCHsi-lKb2Sdx4Ig186w' 'unsafe-inline' 'unsafe-eval' https://*.msauth.net https://*.msftauth.net https://*.msftauthimages.net https://*.msauthimages.net https://*.msidentity.com https://*.microsoftonline-p.com https://*.microsoftazuread-sso.com https://*.azureedge.net https://*.outlook.com https://*.office.com https://*.office365.com https://*.microsoft.com https://*.bing.com 'report-sample'; report-uri https://csp.microsoft.com/report/ESTS-UX-All
X-XSS-Protection: 0
Set-Cookie: fpc=AsN33rxwLkVAukTwPREUTlx1fVnmCwAAACtjr-AOAAAA; expires=Fri, 19-Dec-2025 07:06:34 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; path=/; secure; httponly
Date: Wed, 19 Nov 2025 07:06:34 GMT
--- End of inner exception stack trace ---
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.HandleException(Exception ex, Endpoint endpoint) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 668
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.GetResponse(Endpoint endpoint, String requestBody, TimeSpan requestTimeout) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 533
at DynamicwebLiveIntegration3.EndpointManager.ExecuteEndpointRequest(String urlSuffix, Object requestBody)
at DynamicwebLiveIntegration3.Caching.StockCache.FetchMissing(IEnumerable`1 keys)
at Dynamicweb.Caching.ServiceCache`2.GetCache(IEnumerable`1 keys) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Caching\ServiceCache.cs:line 267
at Dynamicweb.Caching.ServiceCache`2.GetCache(TKey key) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Caching\ServiceCache.cs:line 254
at DynamicwebLiveIntegration3.LiveIntegrationService.GetStock(ProductStockCacheKey productStockCacheKey, Boolean silent)
at DynamicwebLiveIntegration3.Providers.ProductStockProvider.FindStockLevel(Product product, String unitId, StockLocation stockLocation)
at Dynamicweb.Ecommerce.Stocks.StockLevelManager.FindStockLevel(Product product, String unitId, StockLocation stockLocation) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Stocks\StockLevelManager.cs:line 25
at Dynamicweb.Ecommerce.Products.ProductExtentions.GetUnitStock(Product product, StockLocation stockLocation, String unitId) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Products\ProductExtentions.cs:line 187
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelPropertyFiller`1.Fill[S](T model, String propertyName, Func`1 source) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelPropertyFiller.cs:line 49
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.BulkCreateView(ProductViewModelSettings settings, Boolean isRecursive, IList`1 products) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 128
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.CreateView(ProductListViewModelSettings settings, Group group, IList`1 products)
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelFactory.CreateView(ProductListViewModelSettings settings, IList`1 products, Group group) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelFactory.cs:line 197
at Dynamicweb.Ecommerce.Content.Items.Editors.ProductCatalogEditor.GetViewModelValue(Object value) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Content\Items\Editors\ProductCatalogEditor.cs:line 55
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Dynamicweb.Frontend.ItemFieldViewModel.GetValue[T]() in C:\Work\Repos\Dynamicweb10\src\Features\Content\Dynamicweb\Frontend\ItemFieldViewModel.cs:line 276
at Dynamicweb.Frontend.ItemViewModel.GetValue[T](String systemName) in C:\Work\Repos\Dynamicweb10\src\Features\Content\Dynamicweb\Frontend\ItemViewModel.cs:line 769
at CompiledRazorTemplates.Dynamic.RazorEngine_fe296b9b0d9743e69fc8c9b30346c3ee.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) in /_/src/Application/Providers/Dynamicweb.Rendering.Providers.NetCore/Razor/RazorTemplateRenderingProvider.cs:line 100
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Rendering\TemplateRenderingService.cs:line 22
at Dynamicweb.Rendering.Template.RenderRazorTemplate() in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Rendering\Template.cs:line 694
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel>
@using Dynamicweb.Core
@using Dynamicweb.Ecommerce.ProductCatalog
@{
ProductViewModel product = null;
if (Dynamicweb.Context.Current.Items.Contains("ProductDetails"))
{
product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"];
}
else if (Pageview.Page.Item["DummyProduct"] != null && Pageview.IsVisualEditorMode)
{
var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page);
ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel();
if (productList?.Products is object)
{
product = productList.Products[0];
}
}
string layout = Model.Item.GetRawValueString("Layout") == "slider" ? "ProductSliderComponent" : "ProductGridComponent";
string lazyHeight = Model.Item.GetBoolean("SetMinHeightForLazyLoading") ? "min-height: 360px" : "";
string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : "";
//Link generation
string pageId = Model.Item.GetLink("ProductSliderServicePage") != null ? Model.Item.GetLink("ProductSliderServicePage").PageId.ToString() : "";
string servicePageByNavigationTag = GetPageIdByNavigationTag("ProductSliderService") != 0 ? GetPageIdByNavigationTag("ProductSliderService").ToString() : "";
pageId = pageId == "" ? servicePageByNavigationTag : pageId;
string url = "/Default.aspx?ID=" + pageId;
if (Pageview.IsVisualEditorMode)
{
url += "&VisualEdit=True";
}
bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsLazyLoadingForProductInfoEnabled"]);
if (isLazyLoadingForProductInfoEnabled)
{
url += "&getproductinfo=true";
}
url += $"&ProductListPartial={layout}"; //Use this to render either a slider or a grid
//Source type
string sourceType = Model.Item.GetRawValueString("RelationType", "trending");
IList<string> relateFromProductIds = new List<string> { };
IList<string> relateFromProductVariantIds = new List<string> { };
IList<string> relateFromGroupIds = new List<string> { };
bool hasVariants = false;
ProductListViewModel relateToViewModel = Model.Item.GetValue<ProductListViewModel>("RelateTo");
//--- PRODUCTS ---
if (sourceType == "variants" || sourceType == "frequently" || sourceType == "selected")
{
if (relateToViewModel?.Products != null)
{
hasVariants = relateToViewModel.Products.Any(p => !string.IsNullOrEmpty(p.VariantId));
foreach (var fromProduct in relateToViewModel.Products)
{
if (hasVariants)
{
if (!string.IsNullOrEmpty(fromProduct.VariantId))
{
relateFromProductVariantIds.Add($"{fromProduct.Id} {fromProduct.VariantId}");
}
else
{
relateFromProductVariantIds.Add($"{fromProduct.Id}");
}
}
relateFromProductIds.Add($"{fromProduct.Id}");
}
}
}
//--- GROUPS ---
if (sourceType == "most-sold" || sourceType == "trending" || sourceType == "latest" || sourceType == "custom")
{
var groupsToRelateTo = Model.Item.GetList("RelateTo")?.GetRawValue().OfType<string>().ToList();
if (groupsToRelateTo != null) {
foreach (var fromGroup in groupsToRelateTo)
{
var groupId = fromGroup.Length > 2 ? fromGroup.Remove(0, 2) : fromGroup;
if (!fromGroup.Contains("p_"))
{
relateFromGroupIds.Add(groupId);
}
}
}
if (relateToViewModel?.Products != null)
{
foreach (var fromProduct in relateToViewModel.Products)
{
var groupId = fromProduct.PrimaryOrDefaultGroup.Id;
relateFromGroupIds.Add(groupId);
}
}
}
string relationGroupId = Model.Item.GetRawValueString("RelationGroup", string.Empty);
//--- RELATED GROUP ---
if (sourceType == "related")
{
if (relateToViewModel?.Products != null)
{
product = relateToViewModel.Products.FirstOrDefault();
}
if (product?.RelatedGroups != null)
{
foreach (var relationGroup in product.RelatedGroups)
{
if (relationGroup.Id == relationGroupId) {
hasVariants = relationGroup.Products.Any(p => !string.IsNullOrEmpty(p.VariantId));
foreach (var fromProduct in relationGroup.Products)
{
if (hasVariants)
{
if (!string.IsNullOrEmpty(fromProduct.VariantId))
{
relateFromProductVariantIds.Add($"{fromProduct.ProductId} {fromProduct.VariantId}");
}
else
{
relateFromProductVariantIds.Add($"{fromProduct.ProductId}");
}
}
relateFromProductIds.Add($"{fromProduct.ProductId}");
}
}
}
}
}
//Create group id collection and products id collection strings
string productIds = relateFromProductIds.Count > 0 ? string.Join(",", relateFromProductIds) : "";
string productVariantIds = relateFromProductVariantIds.Count > 0 ? string.Join(",", relateFromProductVariantIds) : "";
string groupIds = relateFromGroupIds.Count > 0 ? string.Join(",", relateFromGroupIds) : "";
if (product is object)
{
if (string.IsNullOrEmpty(productIds) && (sourceType == "variants" || sourceType == "frequently" || sourceType == "selected" || sourceType == "custom"))
{
productIds = product.Id;
}
if (string.IsNullOrEmpty(groupIds) && (sourceType == "most-sold" || sourceType == "trending" || sourceType == "latest"))
{
groupIds = product.PrimaryOrDefaultGroup.Id;
}
}
}
@*Container element for the request*@
@if (!string.IsNullOrEmpty(productIds) || !string.IsNullOrEmpty(groupIds) || (string.IsNullOrEmpty(productIds) && string.IsNullOrEmpty(groupIds) && sourceType != "related"))
{
<form method="post" action="@url" id="ComponentSliderProductsForm_@Model.ID" data-response-target-element="ComponentSliderProducts_@Model.ID" data-preloader="inline" data-update-url="false" class="item_@Model.Item.SystemName.ToLower()">
<input type="hidden" name="ParagraphId" value="@Model.ID" />
<input type="hidden" name="SortOrder" value="DESC">
<input type="hidden" name="SourceType" value="@sourceType">
@if (!string.IsNullOrEmpty(groupIds))
{
<input type="hidden" name="GroupId" value="@groupIds">
}
@if (sourceType != "frequently" && !string.IsNullOrEmpty(productIds) && !hasVariants)
{
<input type="hidden" name="MainProductId" value="@productIds">
}
@if (sourceType != "frequently" && hasVariants)
{
<input type="hidden" name="ProductVariantId" value="@productVariantIds">
}
@if (Model.Item.GetInt32("ProductsCount") != 0)
{
<input type="hidden" name="PageSize" value="@Model.Item.GetInt32("ProductsCount")">
}
@if (sourceType == "variants")
{
<input type="hidden" name="isVariant" value="true">
}
@if (sourceType == "most-sold")
{
<input type="hidden" name="SortBy" value="OrderCount">
}
@if (sourceType == "trending")
{
<input type="hidden" name="SortBy" value="OrderCountGrowth">
}
@if (sourceType == "frequently" && !string.IsNullOrEmpty(productIds))
{
<input type="hidden" name="BoughtWithProductIds" value="[@productIds]">
}
@if (sourceType == "latest")
{
<input type="hidden" name="SortBy" value="Created">
}
</form>
<script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script>
<script>
window.addEventListener("load", () => {
swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css');
});
</script>
<div class="w-100 h-100@(theme)">
<div id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></div>
<div id="ComponentSliderProducts_@Model.ID" class="h-100" style="@lazyHeight"></div>
</div>
<script type="module">
const productSliderContainer = document.querySelector("#ComponentSliderProducts_@Model.ID");
const productSliderForm = document.querySelector("#ComponentSliderProductsForm_@Model.ID");
swift.PageUpdater.Update(productSliderForm);
productSliderForm.addEventListener("updated.swift.pageupdater", function(e){
if (e.detail.html === "") {
productSliderContainer.closest("[data-col-size]").classList.add("d-none");
}
});
</script>
}
else if (Pageview.IsVisualEditorMode == true)
{
<div class="alert alert-dark" role="alert">
<span>@Translate("Product component slider: The slider will be rendered here, if there is anything to show")</span>
</div>
}
Innovate and inspire in the cycling world. We are dedicated to crafting high-quality, functional bicycles that cater to riders globally.
Error executing template "Designs/Swift/Paragraph/Swift_ProductComponentSlider.cshtml"
System.Exception: The Client Secret is expired. Visit the Azure portal to create new keys for your '6945a908-9a4b-44fa-9ced-6fa84bd4a866' app. GetTokenForClientCredentialsFlow failed: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 7d0ab485-d7f5-487f-a843-f1fa5e480400 Correlation ID: 59c3f83f-1fa3-4591-8981-2b96fce8cc4b Timestamp: 2025-11-19 07:06:35Z. Tenant:7dd45d63-24fc-4edd-8ad8-5fd66b6f9733 Client:6945a908-9a4b-44fa-9ced-6fa84bd4a866.
---> MSAL.NetCore.4.61.3.0.MsalServiceException:
ErrorCode: invalid_client
Microsoft.Identity.Client.MsalServiceException: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 7d0ab485-d7f5-487f-a843-f1fa5e480400 Correlation ID: 59c3f83f-1fa3-4591-8981-2b96fce8cc4b Timestamp: 2025-11-19 07:06:35Z
at Microsoft.Identity.Client.OAuth2.OAuth2Client.ThrowServerException(HttpResponse response, RequestContext requestContext)
at Microsoft.Identity.Client.OAuth2.OAuth2Client.CreateResponse[T](HttpResponse response, RequestContext requestContext)
at Microsoft.Identity.Client.OAuth2.OAuth2Client.ExecuteRequestAsync[T](Uri endPoint, HttpMethod method, RequestContext requestContext, Boolean expectErrorsOn200OK, Boolean addCommonHeaders, Func`2 onBeforePostRequestData)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendHttpAndClearTelemetryAsync(String tokenEndpoint, ILoggerAdapter logger)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendHttpAndClearTelemetryAsync(String tokenEndpoint, ILoggerAdapter logger)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendTokenRequestAsync(IDictionary`2 additionalBodyParameters, String scopeOverride, String tokenEndpointOverride, CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.SendTokenRequestAsync(IDictionary`2 additionalBodyParameters, CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.GetAccessTokenAsync(CancellationToken cancellationToken, ILoggerAdapter logger)
at Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.ExecuteAsync(CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.<>c__DisplayClass11_1.<<RunAsync>b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.Identity.Client.Utils.StopwatchService.MeasureCodeBlockAsync(Func`1 codeBlock)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.RunAsync(CancellationToken cancellationToken)
at Microsoft.Identity.Client.ApiConfig.Executors.ConfidentialClientExecutor.ExecuteAsync(AcquireTokenCommonParameters commonParameters, AcquireTokenForClientParameters clientParameters, CancellationToken cancellationToken)
StatusCode: 401
ResponseBody: {"error":"invalid_client","error_description":"AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 7d0ab485-d7f5-487f-a843-f1fa5e480400 Correlation ID: 59c3f83f-1fa3-4591-8981-2b96fce8cc4b Timestamp: 2025-11-19 07:06:35Z","error_codes":[7000222],"timestamp":"2025-11-19 07:06:35Z","trace_id":"7d0ab485-d7f5-487f-a843-f1fa5e480400","correlation_id":"59c3f83f-1fa3-4591-8981-2b96fce8cc4b","error_uri":"https://login.microsoftonline.com/error?code=7000222"}
Headers: Cache-Control: no-store, no-cache
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
client-request-id: 59c3f83f-1fa3-4591-8981-2b96fce8cc4b
x-ms-request-id: 7d0ab485-d7f5-487f-a843-f1fa5e480400
x-ms-ests-server: 2.1.22549.3 - SEC ProdSlices
x-ms-clitelem: 1,7000222,0,,
x-ms-srs: 1.P
Content-Security-Policy-Report-Only: object-src 'none'; base-uri 'self'; script-src 'self' 'nonce-cpE1Hb3gnjN6YBDBY85UyQ' 'unsafe-inline' 'unsafe-eval' https://*.msauth.net https://*.msftauth.net https://*.msftauthimages.net https://*.msauthimages.net https://*.msidentity.com https://*.microsoftonline-p.com https://*.microsoftazuread-sso.com https://*.azureedge.net https://*.outlook.com https://*.office.com https://*.office365.com https://*.microsoft.com https://*.bing.com 'report-sample'; report-uri https://csp.microsoft.com/report/ESTS-UX-All
X-XSS-Protection: 0
Set-Cookie: fpc=AsN33rxwLkVAukTwPREUTlx1fVnmDAAAACtjr-AOAAAA; expires=Fri, 19-Dec-2025 07:06:35 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; path=/; secure; httponly
Date: Wed, 19 Nov 2025 07:06:34 GMT
--- End of inner exception stack trace ---
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.HandleException(Exception ex, Endpoint endpoint) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 668
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.GetResponse(Endpoint endpoint, String requestBody, TimeSpan requestTimeout) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 533
at DynamicwebLiveIntegration3.EndpointManager.ExecuteEndpointRequest(String urlSuffix, Object requestBody)
at DynamicwebLiveIntegration3.Caching.StockCache.FetchMissing(IEnumerable`1 keys)
at Dynamicweb.Caching.ServiceCache`2.GetCache(IEnumerable`1 keys) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Caching\ServiceCache.cs:line 267
at Dynamicweb.Caching.ServiceCache`2.GetCache(TKey key) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Caching\ServiceCache.cs:line 254
at DynamicwebLiveIntegration3.LiveIntegrationService.GetStock(ProductStockCacheKey productStockCacheKey, Boolean silent)
at DynamicwebLiveIntegration3.Providers.ProductStockProvider.FindStockLevel(Product product, String unitId, StockLocation stockLocation)
at Dynamicweb.Ecommerce.Stocks.StockLevelManager.FindStockLevel(Product product, String unitId, StockLocation stockLocation) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Stocks\StockLevelManager.cs:line 25
at Dynamicweb.Ecommerce.Products.ProductExtentions.GetUnitStock(Product product, StockLocation stockLocation, String unitId) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Products\ProductExtentions.cs:line 187
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelPropertyFiller`1.Fill[S](T model, String propertyName, Func`1 source) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelPropertyFiller.cs:line 49
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.BulkCreateView(ProductViewModelSettings settings, Boolean isRecursive, IList`1 products) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 128
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.CreateView(ProductListViewModelSettings settings, Group group, IList`1 products)
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelFactory.CreateView(ProductListViewModelSettings settings, IList`1 products, Group group) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelFactory.cs:line 197
at Dynamicweb.Ecommerce.Content.Items.Editors.ProductCatalogEditor.GetViewModelValue(Object value) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Content\Items\Editors\ProductCatalogEditor.cs:line 55
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Dynamicweb.Frontend.ItemFieldViewModel.GetValue[T]() in C:\Work\Repos\Dynamicweb10\src\Features\Content\Dynamicweb\Frontend\ItemFieldViewModel.cs:line 276
at Dynamicweb.Frontend.ItemViewModel.GetValue[T](String systemName) in C:\Work\Repos\Dynamicweb10\src\Features\Content\Dynamicweb\Frontend\ItemViewModel.cs:line 769
at CompiledRazorTemplates.Dynamic.RazorEngine_fe296b9b0d9743e69fc8c9b30346c3ee.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) in /_/src/Application/Providers/Dynamicweb.Rendering.Providers.NetCore/Razor/RazorTemplateRenderingProvider.cs:line 100
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Rendering\TemplateRenderingService.cs:line 22
at Dynamicweb.Rendering.Template.RenderRazorTemplate() in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Rendering\Template.cs:line 694
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel>
@using Dynamicweb.Core
@using Dynamicweb.Ecommerce.ProductCatalog
@{
ProductViewModel product = null;
if (Dynamicweb.Context.Current.Items.Contains("ProductDetails"))
{
product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"];
}
else if (Pageview.Page.Item["DummyProduct"] != null && Pageview.IsVisualEditorMode)
{
var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page);
ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel();
if (productList?.Products is object)
{
product = productList.Products[0];
}
}
string layout = Model.Item.GetRawValueString("Layout") == "slider" ? "ProductSliderComponent" : "ProductGridComponent";
string lazyHeight = Model.Item.GetBoolean("SetMinHeightForLazyLoading") ? "min-height: 360px" : "";
string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : "";
//Link generation
string pageId = Model.Item.GetLink("ProductSliderServicePage") != null ? Model.Item.GetLink("ProductSliderServicePage").PageId.ToString() : "";
string servicePageByNavigationTag = GetPageIdByNavigationTag("ProductSliderService") != 0 ? GetPageIdByNavigationTag("ProductSliderService").ToString() : "";
pageId = pageId == "" ? servicePageByNavigationTag : pageId;
string url = "/Default.aspx?ID=" + pageId;
if (Pageview.IsVisualEditorMode)
{
url += "&VisualEdit=True";
}
bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsLazyLoadingForProductInfoEnabled"]);
if (isLazyLoadingForProductInfoEnabled)
{
url += "&getproductinfo=true";
}
url += $"&ProductListPartial={layout}"; //Use this to render either a slider or a grid
//Source type
string sourceType = Model.Item.GetRawValueString("RelationType", "trending");
IList<string> relateFromProductIds = new List<string> { };
IList<string> relateFromProductVariantIds = new List<string> { };
IList<string> relateFromGroupIds = new List<string> { };
bool hasVariants = false;
ProductListViewModel relateToViewModel = Model.Item.GetValue<ProductListViewModel>("RelateTo");
//--- PRODUCTS ---
if (sourceType == "variants" || sourceType == "frequently" || sourceType == "selected")
{
if (relateToViewModel?.Products != null)
{
hasVariants = relateToViewModel.Products.Any(p => !string.IsNullOrEmpty(p.VariantId));
foreach (var fromProduct in relateToViewModel.Products)
{
if (hasVariants)
{
if (!string.IsNullOrEmpty(fromProduct.VariantId))
{
relateFromProductVariantIds.Add($"{fromProduct.Id} {fromProduct.VariantId}");
}
else
{
relateFromProductVariantIds.Add($"{fromProduct.Id}");
}
}
relateFromProductIds.Add($"{fromProduct.Id}");
}
}
}
//--- GROUPS ---
if (sourceType == "most-sold" || sourceType == "trending" || sourceType == "latest" || sourceType == "custom")
{
var groupsToRelateTo = Model.Item.GetList("RelateTo")?.GetRawValue().OfType<string>().ToList();
if (groupsToRelateTo != null) {
foreach (var fromGroup in groupsToRelateTo)
{
var groupId = fromGroup.Length > 2 ? fromGroup.Remove(0, 2) : fromGroup;
if (!fromGroup.Contains("p_"))
{
relateFromGroupIds.Add(groupId);
}
}
}
if (relateToViewModel?.Products != null)
{
foreach (var fromProduct in relateToViewModel.Products)
{
var groupId = fromProduct.PrimaryOrDefaultGroup.Id;
relateFromGroupIds.Add(groupId);
}
}
}
string relationGroupId = Model.Item.GetRawValueString("RelationGroup", string.Empty);
//--- RELATED GROUP ---
if (sourceType == "related")
{
if (relateToViewModel?.Products != null)
{
product = relateToViewModel.Products.FirstOrDefault();
}
if (product?.RelatedGroups != null)
{
foreach (var relationGroup in product.RelatedGroups)
{
if (relationGroup.Id == relationGroupId) {
hasVariants = relationGroup.Products.Any(p => !string.IsNullOrEmpty(p.VariantId));
foreach (var fromProduct in relationGroup.Products)
{
if (hasVariants)
{
if (!string.IsNullOrEmpty(fromProduct.VariantId))
{
relateFromProductVariantIds.Add($"{fromProduct.ProductId} {fromProduct.VariantId}");
}
else
{
relateFromProductVariantIds.Add($"{fromProduct.ProductId}");
}
}
relateFromProductIds.Add($"{fromProduct.ProductId}");
}
}
}
}
}
//Create group id collection and products id collection strings
string productIds = relateFromProductIds.Count > 0 ? string.Join(",", relateFromProductIds) : "";
string productVariantIds = relateFromProductVariantIds.Count > 0 ? string.Join(",", relateFromProductVariantIds) : "";
string groupIds = relateFromGroupIds.Count > 0 ? string.Join(",", relateFromGroupIds) : "";
if (product is object)
{
if (string.IsNullOrEmpty(productIds) && (sourceType == "variants" || sourceType == "frequently" || sourceType == "selected" || sourceType == "custom"))
{
productIds = product.Id;
}
if (string.IsNullOrEmpty(groupIds) && (sourceType == "most-sold" || sourceType == "trending" || sourceType == "latest"))
{
groupIds = product.PrimaryOrDefaultGroup.Id;
}
}
}
@*Container element for the request*@
@if (!string.IsNullOrEmpty(productIds) || !string.IsNullOrEmpty(groupIds) || (string.IsNullOrEmpty(productIds) && string.IsNullOrEmpty(groupIds) && sourceType != "related"))
{
<form method="post" action="@url" id="ComponentSliderProductsForm_@Model.ID" data-response-target-element="ComponentSliderProducts_@Model.ID" data-preloader="inline" data-update-url="false" class="item_@Model.Item.SystemName.ToLower()">
<input type="hidden" name="ParagraphId" value="@Model.ID" />
<input type="hidden" name="SortOrder" value="DESC">
<input type="hidden" name="SourceType" value="@sourceType">
@if (!string.IsNullOrEmpty(groupIds))
{
<input type="hidden" name="GroupId" value="@groupIds">
}
@if (sourceType != "frequently" && !string.IsNullOrEmpty(productIds) && !hasVariants)
{
<input type="hidden" name="MainProductId" value="@productIds">
}
@if (sourceType != "frequently" && hasVariants)
{
<input type="hidden" name="ProductVariantId" value="@productVariantIds">
}
@if (Model.Item.GetInt32("ProductsCount") != 0)
{
<input type="hidden" name="PageSize" value="@Model.Item.GetInt32("ProductsCount")">
}
@if (sourceType == "variants")
{
<input type="hidden" name="isVariant" value="true">
}
@if (sourceType == "most-sold")
{
<input type="hidden" name="SortBy" value="OrderCount">
}
@if (sourceType == "trending")
{
<input type="hidden" name="SortBy" value="OrderCountGrowth">
}
@if (sourceType == "frequently" && !string.IsNullOrEmpty(productIds))
{
<input type="hidden" name="BoughtWithProductIds" value="[@productIds]">
}
@if (sourceType == "latest")
{
<input type="hidden" name="SortBy" value="Created">
}
</form>
<script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script>
<script>
window.addEventListener("load", () => {
swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css');
});
</script>
<div class="w-100 h-100@(theme)">
<div id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></div>
<div id="ComponentSliderProducts_@Model.ID" class="h-100" style="@lazyHeight"></div>
</div>
<script type="module">
const productSliderContainer = document.querySelector("#ComponentSliderProducts_@Model.ID");
const productSliderForm = document.querySelector("#ComponentSliderProductsForm_@Model.ID");
swift.PageUpdater.Update(productSliderForm);
productSliderForm.addEventListener("updated.swift.pageupdater", function(e){
if (e.detail.html === "") {
productSliderContainer.closest("[data-col-size]").classList.add("d-none");
}
});
</script>
}
else if (Pageview.IsVisualEditorMode == true)
{
<div class="alert alert-dark" role="alert">
<span>@Translate("Product component slider: The slider will be rendered here, if there is anything to show")</span>
</div>
}
Our shop provides a variety of products and bicyle parts, to realize a healty and fit body