Activities of "tahseelit1"

Answer

chat module is different., i want to add another icon for notifications

double call is also gone

hi maliming its fixed but can you validate if is correct base on my setup

AuthServer - Volo.Chat.SignalR 6.0.0

[DependsOn(typeof(ChatSignalRModule))] public class EventixAuthServerModule : AbpModule {

}

WebGateway app.Use(async (httpContext, next) => { var accessToken = httpContext.Request.Query["access_token"];

            var path = httpContext.Request.Path;
            if (!string.IsNullOrEmpty(accessToken) &&
                (path.StartsWithSegments("/signalr-hubs/chat")))
            {
                httpContext.Request.Headers["Authorization"] = "Bearer " + accessToken;
            }

            await next();
        });
      

"Chat Service": { "ClusterId": "chatCluster1", "Match": {
"Path": "/api/chat/{**everything}" } }, "Chat": { "ClusterId": "chatCluster", "Match": {
"Path": "/signalr-hubs/{**everything}" } } "chatCluster": { "Destinations": { "destination1": { "Address": "https://localhost:44367" } } }, "chatCluster1": { "Destinations": { "destination1": { "Address": "https://localhost:44367" } } }

AdministrationService.HttpApi.Host

  • Volo.Chat.SignalR" Version="6.0.0"
  • Volo.Chat.Web" Version="6.0.0"

using Volo.Chat; using Volo.Chat.Web; [DependsOn(typeof(ChatSignalRModule))] [DependsOn(typeof(ChatWebModule))]

public class AdministrationServiceHttpApiHostModule : AbpModule { }

AdministrationService Host

023-05-09 09:16:58.656 +04:00 [DBG] PermissionStore.GetCacheItemAsync: pn:C,pk:Eventix_Admin,n:Chat.Messaging
2023-05-09 09:16:58.658 +04:00 [DBG] Found in the cache: pn:C,pk:Eventix_Admin,n:Chat.Messaging
2023-05-09 09:16:58.659 +04:00 [INF] Executing endpoint '/signalr-hubs/chat/negotiate'
2023-05-09 09:16:58.660 +04:00 [INF] Executed endpoint '/signalr-hubs/chat/negotiate'
2023-05-09 09:16:58.660 +04:00 [INF] Request finished HTTP/2 POST https://localhost:44367/signalr-hubs/chat/negotiate?negotiateVersion=1 - 0 - 200 316 application/json 12.4308ms
2023-05-09 09:16:58.668 +04:00 [INF] Request starting HTTP/2 GET https://localhost:44367/signalr-hubs/chat?id=tac7c5W8SNCzuX8j1IBNNQ&access_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjZBQ0YyOUFCNDQxQ0RDRTJCM0JFRUZBREEzRUE1OUZGIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE2ODM2MDk0MTcsImV4cCI6MTcxNTE0NTQxNywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMjIiLCJhdWQiOlsiQWNjb3VudFNlcnZpY2UiLCJJZGVudGl0eVNlcnZpY2UiLCJBZG1pbmlzdHJhdGlvblNlcnZpY2UiLCJTYWFzU2VydmljZSIsIlByb2R1Y3RTZXJ2aWNlIiwiVGlja2V0U2VydmljZSIsIkNvbW1vblNlcnZpY2UiLCJNZXJjaGFudFNlcnZpY2UiLCJCb29raW5nU2VydmljZSIsIkN1c3RvbWVyU2VydmljZSIsIlZlbnVlU2VydmljZSIsIlBhc3NNYW5hZ2VtZW50U2VydmljZSIsIkV2ZW50U2VydmljZSIsIk5vdGlmaWNhdGlvblNlcnZpY2UiXSwiY2xpZW50X2lkIjoiRXZlbnRpeF9BZG1pbiIsInN1YiI6IjNhMGIwZDQ4LWNhMDktMDBkNS03NGNmLTk0ZWVmOWVkOTYwZSIsImF1dGhfdGltZSI6MTY4MzYwOTQxNiwiaWRwIjoibG9jYWwiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9naXZlbm5hbWUiOiJhZG1pbiIsIm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AYWJwLmlvIiwicm9sZSI6ImFkbWluIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjoiRmFsc2UiLCJlbWFpbF92ZXJpZmllZCI6IkZhbHNlIiwidXNlclR5cGUiOiJNZXJjaGFudCIsInNpZCI6IjBFQTA4Q0YwNDAxMjAwNDc0QkNGQUFFNzBGRTRBM0RCIiwiaWF0IjoxNjgzNjA5NDE3LCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwiZW1haWwiLCJwaG9uZSIsIkFjY291bnRTZXJ2aWNlIiwiSWRlbnRpdHlTZXJ2aWNlIiwiQWRtaW5pc3RyYXRpb25TZXJ2aWNlIiwiU2Fhc1NlcnZpY2UiLCJQcm9kdWN0U2VydmljZSIsIlRpY2tldFNlcnZpY2UiLCJDb21tb25TZXJ2aWNlIiwiTWVyY2hhbnRTZXJ2aWNlIiwiQm9va2luZ1NlcnZpY2UiLCJDdXN0b21lclNlcnZpY2UiLCJWZW51ZVNlcnZpY2UiLCJQYXNzTWFuYWdlbWVudFNlcnZpY2UiLCJFdmVudFNlcnZpY2UiLCJOb3RpZmljYXRpb25TZXJ2aWNlIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbInB3ZCJdfQ.h6jxpOmOsxZjnkDY_tz49rI95EOTMVqqESwcXGT2464wve58PBgn_fTn4QZZht2CJVxIGi7ElRyOuMWfCSLsBJ_rG9nL8OQv14waoB1TdMa3AUl2ZislZetjPCHOScoLn44pS40d4G5myiQx5IG_7KKex6z8_H-9SymYXOpyaCg-r0H97Z8W0DqpWUO86w7XmRc_hx-_Yit_ueg51vtbQ7SC97CutzTkrthNM5RnO4N99SW263LEP-9aiDfU8mGLPlviQN1eieLOVW0cxbnBxsHsuJf8qX4W3R5j4m74AQLqPU37jzOVt0jWkmvR-qTPXaHQDmY2Arj5kBnnI9ywdA - -
2023-05-09 09:16:58.668 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:16:58.671 +04:00 [INF] Authorization failed. These requirements were not met:
PermissionRequirement: Chat.Messaging
2023-05-09 09:16:58.671 +04:00 [INF] AuthenticationScheme: Bearer was challenged.
2023-05-09 09:16:58.672 +04:00 [INF] Request finished HTTP/2 GET https://localhost:44367/signalr-hubs/chat?id=tac7c5W8SNCzuX8j1IBNNQ&access_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjZBQ0YyOUFCNDQxQ0RDRTJCM0JFRUZBREEzRUE1OUZGIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE2ODM2MDk0MTcsImV4cCI6MTcxNTE0NTQxNywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMjIiLCJhdWQiOlsiQWNjb3VudFNlcnZpY2UiLCJJZGVudGl0eVNlcnZpY2UiLCJBZG1pbmlzdHJhdGlvblNlcnZpY2UiLCJTYWFzU2VydmljZSIsIlByb2R1Y3RTZXJ2aWNlIiwiVGlja2V0U2VydmljZSIsIkNvbW1vblNlcnZpY2UiLCJNZXJjaGFudFNlcnZpY2UiLCJCb29raW5nU2VydmljZSIsIkN1c3RvbWVyU2VydmljZSIsIlZlbnVlU2VydmljZSIsIlBhc3NNYW5hZ2VtZW50U2VydmljZSIsIkV2ZW50U2VydmljZSIsIk5vdGlmaWNhdGlvblNlcnZpY2UiXSwiY2xpZW50X2lkIjoiRXZlbnRpeF9BZG1pbiIsInN1YiI6IjNhMGIwZDQ4LWNhMDktMDBkNS03NGNmLTk0ZWVmOWVkOTYwZSIsImF1dGhfdGltZSI6MTY4MzYwOTQxNiwiaWRwIjoibG9jYWwiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9naXZlbm5hbWUiOiJhZG1pbiIsIm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AYWJwLmlvIiwicm9sZSI6ImFkbWluIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjoiRmFsc2UiLCJlbWFpbF92ZXJpZmllZCI6IkZhbHNlIiwidXNlclR5cGUiOiJNZXJjaGFudCIsInNpZCI6IjBFQTA4Q0YwNDAxMjAwNDc0QkNGQUFFNzBGRTRBM0RCIiwiaWF0IjoxNjgzNjA5NDE3LCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwiZW1haWwiLCJwaG9uZSIsIkFjY291bnRTZXJ2aWNlIiwiSWRlbnRpdHlTZXJ2aWNlIiwiQWRtaW5pc3RyYXRpb25TZXJ2aWNlIiwiU2Fhc1NlcnZpY2UiLCJQcm9kdWN0U2VydmljZSIsIlRpY2tldFNlcnZpY2UiLCJDb21tb25TZXJ2aWNlIiwiTWVyY2hhbnRTZXJ2aWNlIiwiQm9va2luZ1NlcnZpY2UiLCJDdXN0b21lclNlcnZpY2UiLCJWZW51ZVNlcnZpY2UiLCJQYXNzTWFuYWdlbWVudFNlcnZpY2UiLCJFdmVudFNlcnZpY2UiLCJOb3RpZmljYXRpb25TZXJ2aWNlIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbInB3ZCJdfQ.h6jxpOmOsxZjnkDY_tz49rI95EOTMVqqESwcXGT2464wve58PBgn_fTn4QZZht2CJVxIGi7ElRyOuMWfCSLsBJ_rG9nL8OQv14waoB1TdMa3AUl2ZislZetjPCHOScoLn44pS40d4G5myiQx5IG_7KKex6z8_H-9SymYXOpyaCg-r0H97Z8W0DqpWUO86w7XmRc_hx-_Yit_ueg51vtbQ7SC97CutzTkrthNM5RnO4N99SW263LEP-9aiDfU8mGLPlviQN1eieLOVW0cxbnBxsHsuJf8qX4W3R5j4m74AQLqPU37jzOVt0jWkmvR-qTPXaHQDmY2Arj5kBnnI9ywdA - - - 401 0 - 3.8241ms
2023-05-09 09:16:58.681 +04:00 [INF] Request starting HTTP/2 POST https://localhost:44367/signalr-hubs/chat/negotiate?negotiateVersion=1 - 0
2023-05-09 09:16:58.681 +04:00 [INF] CORS policy execution successful.

WebGateway logs ogs

WebGateway

2023-05-09 09:08:29.428 +04:00 [INF] Proxying to https://localhost:44367/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683608909421 HTTP/2 RequestVersionOrLower no-streaming
2023-05-09 09:09:59.460 +04:00 [INF] Executed endpoint 'Chat'
2023-05-09 09:09:59.460 +04:00 [INF] Request finished HTTP/2 GET https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683608909421 - - - 200 0 text/plain 90034.6705ms
2023-05-09 09:09:59.483 +04:00 [INF] Request starting HTTP/2 OPTIONS https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683608999479 - -
2023-05-09 09:09:59.484 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:09:59.484 +04:00 [INF] Request finished HTTP/2 OPTIONS https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683608999479 - - - 204 - - 0.3004ms
2023-05-09 09:09:59.487 +04:00 [INF] Request starting HTTP/2 GET https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683608999479 - -
2023-05-09 09:09:59.487 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:09:59.487 +04:00 [INF] Executing endpoint 'Chat'
2023-05-09 09:09:59.487 +04:00 [INF] Proxying to https://localhost:44367/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683608999479 HTTP/2 RequestVersionOrLower no-streaming
2023-05-09 09:11:29.515 +04:00 [INF] Executed endpoint 'Chat'
2023-05-09 09:11:29.515 +04:00 [INF] Request finished HTTP/2 GET https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683608999479 - - - 200 0 text/plain 90029.4374ms
2023-05-09 09:11:29.541 +04:00 [INF] Request starting HTTP/2 OPTIONS https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683609089537 - -
2023-05-09 09:11:29.541 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:11:29.541 +04:00 [INF] Request finished HTTP/2 OPTIONS https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683609089537 - - - 204 - - 0.2609ms
2023-05-09 09:11:29.544 +04:00 [INF] Request starting HTTP/2 GET https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683609089537 - -
2023-05-09 09:11:29.544 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:11:29.544 +04:00 [INF] Executing endpoint 'Chat'
2023-05-09 09:11:29.544 +04:00 [INF] Proxying to https://localhost:44367/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683609089537 HTTP/2 RequestVersionOrLower no-streaming
2023-05-09 09:12:36.360 +04:00 [INF] "RequestCanceled": The request was canceled before receiving a response.
System.Threading.Tasks.TaskCanceledException: The operation was canceled.
   at System.Net.Http.Http2Connection.Http2Stream.<>c.<WaitForDataAsync>b__80_0(Object s, CancellationToken cancellationToken)
   at System.Threading.CancellationTokenSource.Invoke(Delegate d, Object state, CancellationTokenSource source)
   at System.Threading.CancellationTokenSource.CallbackNode.ExecuteCallback()
   at System.Threading.CancellationTokenSource.ExecuteCallbackHandlers(Boolean throwOnFirstException)
   at System.Threading.CancellationTokenSource.Cancel(Boolean throwOnFirstException)
   at Yarp.ReverseProxy.Utilities.ActivityCancellationTokenSource.<>c.<.cctor>b__10_0(Object s)
   at System.Threading.CancellationTokenSource.Invoke(Delegate d, Object state, CancellationTokenSource source)
   at System.Threading.CancellationTokenSource.CallbackNode.ExecuteCallback()
   at System.Threading.CancellationTokenSource.ExecuteCallbackHandlers(Boolean throwOnFirstException)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.CancelRequestAbortedTokenCallback()
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.<>c.<CancelRequestAbortedToken>b__216_0(Object state)
   at System.Threading.ExecutionContext.RunForThreadPoolUnsafe[TState](ExecutionContext executionContext, Action`1 callback, TState& state)
   at System.Threading.QueueUserWorkItemCallback`1.Execute()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
--- End of stack trace from previous location ---
   at System.Net.Http.Http2Connection.Http2Stream.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
   at System.Net.Http.Http2Connection.Http2Stream.ReadResponseHeadersAsync(CancellationToken cancellationToken)
   at System.Net.Http.Http2Connection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)
2023-05-09 09:12:36.360 +04:00 [INF] Executed endpoint 'Chat'
2023-05-09 09:12:36.360 +04:00 [INF] Request finished HTTP/2 GET https://localhost:44325/signalr-hubs/chat?id=S60onAzxCDsYio_ZHC7_jA&_=1683609089537 - - - 0 - - 66817.6900ms
2023-05-09 09:12:39.590 +04:00 [INF] Request starting HTTP/2 OPTIONS https://localhost:44325/api/abp/application-configuration - -
2023-05-09 09:12:39.590 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:12:39.590 +04:00 [INF] Request finished HTTP/2 OPTIONS https://localhost:44325/api/abp/application-configuration - - - 204 - - 0.2322ms
2023-05-09 09:12:39.591 +04:00 [INF] Request starting HTTP/2 GET https://localhost:44325/api/abp/application-configuration - -
2023-05-09 09:12:39.591 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:12:39.591 +04:00 [INF] Executing endpoint 'Administration Service'
2023-05-09 09:12:39.591 +04:00 [INF] Proxying to https://localhost:44367/api/abp/application-configuration HTTP/2 RequestVersionOrLower no-streaming
2023-05-09 09:12:40.105 +04:00 [INF] Executed endpoint 'Administration Service'
2023-05-09 09:12:40.105 +04:00 [INF] Request finished HTTP/2 GET https://localhost:44325/api/abp/application-configuration - - - 200 - application/json;+charset=utf-8 513.8699ms
2023-05-09 09:12:44.827 +04:00 [INF] Request starting HTTP/2 OPTIONS https://localhost:44325/api/abp/application-configuration - -
2023-05-09 09:12:44.827 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:12:44.827 +04:00 [INF] Request finished HTTP/2 OPTIONS https://localhost:44325/api/abp/application-configuration - - - 204 - - 0.3398ms
2023-05-09 09:12:44.829 +04:00 [INF] Request starting HTTP/2 GET https://localhost:44325/api/abp/application-configuration - -
2023-05-09 09:12:44.829 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:12:44.829 +04:00 [INF] Executing endpoint 'Administration Service'
2023-05-09 09:12:44.829 +04:00 [INF] Proxying to https://localhost:44367/api/abp/application-configuration HTTP/2 RequestVersionOrLower no-streaming
2023-05-09 09:12:45.400 +04:00 [INF] Executed endpoint 'Administration Service'
2023-05-09 09:12:45.400 +04:00 [INF] Request finished HTTP/2 GET https://localhost:44325/api/abp/application-configuration - - - 200 - application/json;+charset=utf-8 571.6678ms
2023-05-09 09:12:45.415 +04:00 [INF] Request starting HTTP/2 OPTIONS https://localhost:44325/api/chat/contact/total-unread-message-count - -
2023-05-09 09:12:45.415 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:12:45.416 +04:00 [INF] Request finished HTTP/2 OPTIONS https://localhost:44325/api/chat/contact/total-unread-message-count - - - 204 - - 0.2922ms
2023-05-09 09:12:45.418 +04:00 [INF] Request starting HTTP/2 GET https://localhost:44325/api/chat/contact/total-unread-message-count - -
2023-05-09 09:12:45.418 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:12:45.418 +04:00 [INF] Executing endpoint 'Chat Service'
2023-05-09 09:12:45.419 +04:00 [INF] Proxying to https://localhost:44367/api/chat/contact/total-unread-message-count HTTP/2 RequestVersionOrLower no-streaming
2023-05-09 09:12:45.420 +04:00 [INF] Request starting HTTP/2 OPTIONS https://localhost:44325/signalr-hubs/chat/negotiate?negotiateVersion=1 - -
2023-05-09 09:12:45.420 +04:00 [INF] CORS policy execution successful.
2023-05-09 09:12:45.420 +04:00 [INF] Request finished HTTP/2 OPTIONS https://localhost:44325/signalr-hubs/chat/negotiate?negotiateVersion=1 - - - 204 - - 0.2881ms
2023-05-09 09:12:45.423 +04:00 [INF] Request starting HTTP/2 POST https://localhost:44325/signalr-hubs/chat/negotiate?negotiateVersion=1 - 0

in which module i need to add this., Volo.Chat.SignalR is added in AuthServer - <PackageReference Include="Volo.Chat.SignalR" Version="6.0.0" /> WebGateway - <PackageReference Include="Volo.Chat.SignalR" Version="6.0.0" /> AdministrationService.HttpApi.Host - <PackageReference Include="Volo.Chat.Web" Version="6.0.0" /> <PackageReference Include="Volo.Chat.SignalR" Version="6.0.0" /> AdministrationService.Web - <PackageReference Include="Volo.Chat.SignalR" Version="6.0.0" /> <PackageReference Include="Volo.Chat.Web" Version="6.0.0" />

yarp.js

"Chat Service": {
        "ClusterId": "chatCluster1",
        "Match": {             
          "Path": "/api/chat/{**everything}"
        }
      },
      "Chat": {
        "ClusterId": "chatCluster",
        "Match": {                     
          "Path": "/signalr-hubs/{**everything}"
        }
      }
 "chatCluster": {
          "Destinations": {
            "destination1": {
              "Address": "https://localhost:44367"
            }
          }
        },
        "chatCluster1": {
          "Destinations": {
            "destination1": {
              "Address": "https://localhost:44367"
            }
          }
        }

port 4467 is administrationservice.

l
Question

hi its possible to customize the navigation menu by adding new icon for notification (bell icon)

Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.

If you're creating a bug/problem report, please include followings:

  • ABP Framework version: v6.0.0
  • UI type: Angular
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): yes
  • Exception message and stack trace:
  • Steps to reproduce the issue:"

now im getting 401 also there is two request the first request succeed while the other one give me 401 error.

Question
  • ABP Framework version: 6.0.0
  • UI type: Angular
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): yes
  • Exception message and stack trace:
  • Steps to reproduce the issue:"

Upon adding chat module in administration service

Gateway using yarp

AuthServer

Angular

can you please help how to fixed 405 status code

Showing 1 to 10 of 43 entries
Made with ❤️ on ABP v9.1.0-preview. Updated on December 13, 2024, 06:09