[JsonService] getJson: Network Error (during logout)

Hello, I have recently updated from 2.0.0-rc.3 to 2.0.2 (2.0.3) and I'm noticing an issue during logout (it seems it actually started somewhere around rc4 or rc5). It looks like the /connect/endsession endpoint fails for some reason. We are using IdentityServer4 as the back-end.
Could someone please give me a hint what has changed in the way the endpoint is called by the library? It worked before in the rc3 version. Any advice will be highly appreciated.
This is what comes out of the log:
[UserManager] _signoutStart: loaded current user from storage oidc-client-ts.js:48
[UserManager] _signoutStart: setting id_token_hint in signout request oidc-client-ts.js:48
[UserManager] removeUser: begin oidc-client-ts.js:48
[UserManager] storeUser: begin oidc-client-ts.js:48
[UserManager] removing user oidc-client-ts.js:48
[WebStorageStateStore] remove('user:https://identity.server:8443:AppName'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: loaded current user from storage oidc-client-ts.js:48
[UserManager] _signoutStart: setting id_token_hint in signout request oidc-client-ts.js:48
[UserManager] removeUser: begin oidc-client-ts.js:48
[UserManager] storeUser: begin oidc-client-ts.js:48
[UserManager] removing user oidc-client-ts.js:48
[WebStorageStateStore] remove('user:https://identity.server:8443:AppName'): begin oidc-client-ts.js:48
[UserManager] removeUser: user removed from storage oidc-client-ts.js:53
[UserManagerEvents] unload: canceling existing access token timers oidc-client-ts.js:48
[Timer('Access token expiring')] cancel: begin oidc-client-ts.js:48
[Timer('Access token expired')] cancel: begin oidc-client-ts.js:48
[Event('User unloaded')] raise: oidc-client-ts.js:48
[UserManager] removeUser: user removed from storage oidc-client-ts.js:53
[UserManagerEvents] unload: canceling existing access token timers oidc-client-ts.js:48
[Timer('Access token expiring')] cancel: begin oidc-client-ts.js:48
[Timer('Access token expired')] cancel: begin oidc-client-ts.js:48
[Event('User unloaded')] raise: oidc-client-ts.js:48
[UserManager] _signoutStart: user removed, creating signout request oidc-client-ts.js:48
[OidcClient] createSignoutRequest: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: getting metadata from https://identity.server:8443/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: begin oidc-client-ts.js:48
[JsonService] getJson: url: https://identity.server:8443/.well-known/openid-configuration oidc-client-ts.js:48
[UserManager] _signoutStart: user removed, creating signout request oidc-client-ts.js:48
[OidcClient] createSignoutRequest: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: getting metadata from https://identity.server:8443/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: begin oidc-client-ts.js:48
[JsonService] getJson: url: https://identity.server:8443/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: HTTP response received, status 200 oidc-client-ts.js:48
[MetadataService] getMetadata: merging remote JSON with seed metadata oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): resolved oidc-client-ts.js:48
[OidcClient] createSignoutRequest: Received end session endpoint https://identity.server:8443/connect/endsession oidc-client-ts.js:48
[OidcClient] createSignoutRequest: Signout request has state to persist oidc-client-ts.js:48
[State] toStorageString: begin oidc-client-ts.js:48
[WebStorageStateStore] set('916ec334c503453f859932320e64bc29'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: got signout request oidc-client-ts.js:48
[RedirectNavigator] navigate: begin oidc-client-ts.js:48
[JsonService] getJson: Network Error react_devtools_backend.js:3973:25
    overrideMethod react_devtools_backend.js:3973
    error oidc-client-ts.js:63
    getJson oidc-client-ts.js:473
    getMetadata oidc-client-ts.js:583
    _getMetadataProperty oidc-client-ts.js:614
    getEndSessionEndpoint oidc-client-ts.js:604
    createSignoutRequest oidc-client-ts.js:1476
    _signoutStart oidc-client-ts.js:2469
    signoutRedirect oidc-client-ts.js:2414
    _callee7$ AuthenticationService.ts:170
    Babel 10
    _callee2$ Logout.tsx:93
    Babel 10
    _callee$ Logout.tsx:52
    Babel 8
    Logout Logout.tsx:79
    React 4
[UserManager] _signoutStart: error after preparing navigator, closing navigator window oidc-client-ts.js:48
[RedirectNavigator] close: begin oidc-client-ts.js:48
Redirect signout error:  TypeError: NetworkError when attempting to fetch resource.

What is the difference between the working and not working signout request? url, query param, header param,...?

I have done some more investigation and I have a suspicion it might relate to the changes done for 262.
I have tried to compare IS logs with the oidc-client-ts settings and client logs. Other clients are fine with the same identity server and as mentioned above, the code worked until rc3.
Case 1
Client settings
revokeTokensOnSignout: false,
Identity Server Log (endsession endpoint called)
[14:45:12 INF] Request starting HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - -
[14:45:13 INF] CORS policy execution successful.
[14:45:13 DBG] CORS request made for path: /.well-known/openid-configuration from origin: http://localhost:3000
[14:45:13 DBG] Client list checked and origin: http://localhost:3000 is allowed
[14:45:13 DBG] CorsPolicyService allowed origin: http://localhost:3000
[14:45:13 INF] CORS policy execution successful.
[14:45:13 DBG] Request path /.well-known/openid-configuration matched to endpoint type Discovery
[14:45:13 DBG] Endpoint enabled: Discovery, successfully created handler: IdentityServer4.Endpoints.DiscoveryEndpoint
[14:45:13 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.DiscoveryEndpoint for /.well-known/openid-configuration
[14:45:13 DBG] Start discovery request
[14:45:13 INF] Request finished HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - - - 200 - application/json;+charset=UTF-8 4.2356ms
[14:45:13 INF] Request starting HTTP/2 GET https://localhost:44375/connect/endsession?id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTIyNDMsImV4cCI6MTY0OTY1MjU0MywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjUyMjQzLCJhdF9oYXNoIjoidGVrM1JYQmlyampjdm42NGg4ZVVOQSIsInNfaGFzaCI6IkpFeDFraDF2b3pLa1BUbFBfWnFNb0EiLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.fE0b3Q3q4mLapXhtmssAxdSo33d6NviXHISC7ZjlyAq1VkYW-jMrG1HO5Ic5zsi8KVgxOVZiKOcksd7MSa7JR8Vf_9mWrX5vbU3b22fdp3znOXy0cZMvy2xt13ozSUfSUYtujuPIoYxK0AVm-92RcrsNJbeuZyFepyhHMKrUeLZ_-IbULZiLSi5479v56RJtUpKIpuuYx9QewwkOZwpB59OYBDkZcz2hJYyN1eDoBEMD442iT4A4FmBA44WqiUZA4p-O4jdNHpmcj29mDK75iRNUJN0E4w0pHEGxJBtVKPC6WxCbo5MiegjQY2zaW7yvdbmv0PXWwDnHpGW96YB3hA&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauthentication%2Flogged-out&state=9b744addc1364174bd038e9404f71ed2 - -
[14:45:13 DBG] Request path /connect/endsession matched to endpoint type Endsession
[14:45:13 DBG] Endpoint enabled: Endsession, successfully created handler: IdentityServer4.Endpoints.EndSessionEndpoint
[14:45:13 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.EndSessionEndpoint for /connect/endsession
[14:45:13 DBG] Processing signout request for b16467b9-8571-40a6-2f9e-08d8797efa2b
[14:45:13 DBG] Start end session request validation
[14:45:13 DBG] Start identity token validation
[14:45:13 DBG] client configuration validation for client ClientId succeeded.
[14:45:13 DBG] Client found: ClientId / ClientName
[14:45:13 DBG] Calling into custom token validator: IdentityServer4.Validation.DefaultCustomTokenValidator
[14:45:13 DBG] Token validation success
{"ClientId": "ClientId", "ClientName": "ClientName", "ValidateLifetime": false, "AccessTokenType": null, "ExpectedScope": null, "TokenHandle": null, "JwtId": null, "Claims": {"nbf":<PHONE_NUMBER>, "exp":<PHONE_NUMBER>, "iss": "https://localhost:44375", "aud": "ClientId", "iat":<PHONE_NUMBER>, "at_hash": "tek3RXBirjjcvn64h8eUNA", "s_hash": "JEx1kh1vozKkPTlP_ZqMoA", "sid": "EA3F0006D755161FAEA33AFBFEEE27AA", "sub": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "auth_time":<PHONE_NUMBER>, "idp": "local", "amr": "pwd"}, "$type": "TokenValidationLog"}
[14:45:13 INF] End session request validation success
{"ClientId": "ClientId", "ClientName": "ClientName", "SubjectId": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "PostLogOutUri": "http://localhost:3000/authentication/logged-out", "State": "9b744addc1364174bd038e9404f71ed2", "Raw": {"id_token_hint": "***REDACTED***", "post_logout_redirect_uri": "http://localhost:3000/authentication/logged-out", "state": "9b744addc1364174bd038e9404f71ed2"}, "$type": "EndSessionRequestValidationLog"}
[14:45:13 DBG] Success validating end session request from ClientId
[14:45:13 INF] Request finished HTTP/2 GET https://localhost:44375/connect/endsession?id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTIyNDMsImV4cCI6MTY0OTY1MjU0MywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjUyMjQzLCJhdF9oYXNoIjoidGVrM1JYQmlyampjdm42NGg4ZVVOQSIsInNfaGFzaCI6IkpFeDFraDF2b3pLa1BUbFBfWnFNb0EiLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.fE0b3Q3q4mLapXhtmssAxdSo33d6NviXHISC7ZjlyAq1VkYW-jMrG1HO5Ic5zsi8KVgxOVZiKOcksd7MSa7JR8Vf_9mWrX5vbU3b22fdp3znOXy0cZMvy2xt13ozSUfSUYtujuPIoYxK0AVm-92RcrsNJbeuZyFepyhHMKrUeLZ_-IbULZiLSi5479v56RJtUpKIpuuYx9QewwkOZwpB59OYBDkZcz2hJYyN1eDoBEMD442iT4A4FmBA44WqiUZA4p-O4jdNHpmcj29mDK75iRNUJN0E4w0pHEGxJBtVKPC6WxCbo5MiegjQY2zaW7yvdbmv0PXWwDnHpGW96YB3hA&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauthentication%2Flogged-out&state=9b744addc1364174bd038e9404f71ed2 - - - 0 - - 94.7033ms

Client log
[UserManager] signoutRedirect: begin oidc-client-ts.js:48
[RedirectNavigator] prepare: begin oidc-client-ts.js:48
[UserManager] signoutRedirect: begin oidc-client-ts.js:48
[RedirectNavigator] prepare: begin oidc-client-ts.js:48
[UserManager] _signoutStart: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] _signoutStart: loaded current user from storage oidc-client-ts.js:48
[UserManager] _signoutStart: setting id_token_hint in signout request oidc-client-ts.js:48
[UserManager] removeUser: begin oidc-client-ts.js:48
[UserManager] storeUser: begin oidc-client-ts.js:48
[UserManager] removing user oidc-client-ts.js:48
[WebStorageStateStore] remove('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: loaded current user from storage oidc-client-ts.js:48
[UserManager] _signoutStart: setting id_token_hint in signout request oidc-client-ts.js:48
[UserManager] removeUser: begin oidc-client-ts.js:48
[UserManager] storeUser: begin oidc-client-ts.js:48
[UserManager] removing user oidc-client-ts.js:48
[WebStorageStateStore] remove('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] removeUser: user removed from storage oidc-client-ts.js:53
[UserManagerEvents] unload: canceling existing access token timers oidc-client-ts.js:48
[Timer('Access token expiring')] cancel: begin oidc-client-ts.js:48
[Timer('Access token expired')] cancel: begin oidc-client-ts.js:48
[Event('User unloaded')] raise: oidc-client-ts.js:48
[UserManager] removeUser: user removed from storage oidc-client-ts.js:53
[UserManagerEvents] unload: canceling existing access token timers oidc-client-ts.js:48
[Timer('Access token expiring')] cancel: begin oidc-client-ts.js:48
[Timer('Access token expired')] cancel: begin oidc-client-ts.js:48
[Event('User unloaded')] raise: oidc-client-ts.js:48
[UserManager] _signoutStart: user removed, creating signout request oidc-client-ts.js:48
[OidcClient] createSignoutRequest: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: getting metadata from https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: begin oidc-client-ts.js:48
[JsonService] getJson: url: https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[UserManager] _signoutStart: user removed, creating signout request oidc-client-ts.js:48
[OidcClient] createSignoutRequest: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: getting metadata from https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: begin oidc-client-ts.js:48
[JsonService] getJson: url: https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: HTTP response received, status 200 oidc-client-ts.js:48
Navigated to https://localhost:44375/connect/endsession?id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTMyNzMsImV4cCI6MTY0OTY1MzU3MywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjUzMjczLCJhdF9oYXNoIjoicVRxTGNNZVpFaDFqYVpnRmNNeTNuZyIsInNfaGFzaCI6IjV6MXZHdnNXWHQzSUpscTNJQl9OUFEiLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.m-ako1B2ejAg0CsaGROmt1zIzm8tE7uB3GCrRtykKvq8RGfp-zK_MCZU-RZ-lskXOk6Sx_P0NaXvX-iNtJ7HeQsQRKii6oPTs0qHqG7Mmi26ClWl8geRLQzL7Q8LHotrmRZlKqQ2MI7OfT7AeKll9ukJ0-9lMSy59Ek3ttLA1dmIZsQs1mTXheZVlZhzhKAC9dGITF_6YGx9BsZTzAAYVBjg5lY_3NPmw0MMa19ZcDPP4tD2Mfnis2YQJZe90pqCSmLFx-RfoJMsXmsWOhtmTw0bjMB623NBMFHog6XWdGS-24_jWa03ifOCVxGS5lNVF3OKWQhhkIeCeEH6b-npvA&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauthentication%2Flogged-out&state=f6e8ab8639744c32b341213ee140c499
[MetadataService] getMetadata: merging remote JSON with seed metadata oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): resolved oidc-client-ts.js:48
[OidcClient] createSignoutRequest: Received end session endpoint https://localhost:44375/connect/endsession oidc-client-ts.js:48
[OidcClient] createSignoutRequest: Signout request has state to persist oidc-client-ts.js:48
[State] toStorageString: begin oidc-client-ts.js:48
[WebStorageStateStore] set('f6e8ab8639744c32b341213ee140c499'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: got signout request oidc-client-ts.js:48
[RedirectNavigator] navigate: begin oidc-client-ts.js:48
[JsonService] getJson: Network Error react_devtools_backend.js:3973:25
[UserManager] _signoutStart: error after preparing navigator, closing navigator window oidc-client-ts.js:48
[RedirectNavigator] close: begin oidc-client-ts.js:48
Redirect signout error:  TypeError: NetworkError when attempting to fetch resource.

Case 2
Client settings
revokeTokensOnSignout: true,
revokeTokenTypes: undefined

Identity Server Log
[15:43:04 INF] Request starting HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - -
[15:43:04 INF] CORS policy execution successful.
[15:43:04 INF] Request finished HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - - - 200 - application/json;+charset=UTF-8 7.6605ms
[15:43:04 DBG] CORS request made for path: /.well-known/openid-configuration from origin: http://localhost:3000
[15:43:04 DBG] Client list checked and origin: http://localhost:3000 is allowed
[15:43:04 DBG] CorsPolicyService allowed origin: http://localhost:3000
[15:43:04 INF] CORS policy execution successful.
[15:43:04 DBG] Request path /.well-known/openid-configuration matched to endpoint type Discovery
[15:43:04 DBG] Endpoint enabled: Discovery, successfully created handler: IdentityServer4.Endpoints.DiscoveryEndpoint
[15:43:04 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.DiscoveryEndpoint for /.well-known/openid-configuration
[15:43:04 DBG] Start discovery request
[15:43:05 INF] Request finished HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - - - 200 - application/json;+charset=UTF-8 19.9811ms
[15:43:05 INF] Request starting HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 120
[15:43:05 INF] CORS policy execution successful.
[15:43:05 DBG] CORS request made for path: /connect/revocation from origin: http://localhost:3000
[15:43:05 DBG] Client list checked and origin: http://localhost:3000 is allowed
[15:43:05 DBG] CorsPolicyService allowed origin: http://localhost:3000
[15:43:05 INF] CORS policy execution successful.
[15:43:05 DBG] Request path /connect/revocation matched to endpoint type Revocation
[15:43:05 DBG] Endpoint enabled: Revocation, successfully created handler: IdentityServer4.Endpoints.TokenRevocationEndpoint
[15:43:05 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenRevocationEndpoint for /connect/revocation
[15:43:05 DBG] Start revocation request.
[15:43:05 DBG] Start client validation
[15:43:05 DBG] Start parsing Basic Authentication secret
[15:43:05 DBG] Start parsing for secret in post body
[15:43:05 DBG] client id without secret found
[15:43:05 DBG] Parser found secret: PostBodySecretParser
[15:43:05 DBG] Secret id found: ClientId
[15:43:05 DBG] client configuration validation for client ClientId succeeded.
[15:43:05 DBG] Public Client - skipping secret validation success
[15:43:05 DBG] Client validation success
[15:43:05 DBG] Token type hint found in request: access_token
[15:43:05 DBG] ValidateRequestAsync result: IdentityServer4.Validation.TokenRevocationRequestValidationResult
[15:43:05 INF] Request starting HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 120
[15:43:05 INF] CORS policy execution successful.
[15:43:05 DBG] CORS request made for path: /connect/revocation from origin: http://localhost:3000
[15:43:05 DBG] Client list checked and origin: http://localhost:3000 is allowed
[15:43:05 DBG] CorsPolicyService allowed origin: http://localhost:3000
[15:43:05 INF] CORS policy execution successful.
[15:43:05 DBG] Request path /connect/revocation matched to endpoint type Revocation
[15:43:05 DBG] Endpoint enabled: Revocation, successfully created handler: IdentityServer4.Endpoints.TokenRevocationEndpoint
[15:43:05 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenRevocationEndpoint for /connect/revocation
[15:43:05 DBG] Start revocation request.
[15:43:05 DBG] Start client validation
[15:43:05 DBG] Start parsing Basic Authentication secret
[15:43:05 DBG] Start parsing for secret in post body
[15:43:05 DBG] client id without secret found
[15:43:05 DBG] Parser found secret: PostBodySecretParser
[15:43:05 DBG] Secret id found: ClientId
[15:43:05 DBG] client configuration validation for client ClientId succeeded.
[15:43:05 DBG] Public Client - skipping secret validation success
[15:43:05 DBG] Client validation success
[15:43:05 DBG] Token type hint found in request: access_token
[15:43:05 DBG] ValidateRequestAsync result: IdentityServer4.Validation.TokenRevocationRequestValidationResult
[15:43:05 DBG] 1dRX3Nx47r5NWAkIM1ONcsSK1P53mo1zlKaQvHaqEec= found in database: True
[15:43:05 DBG] Access token revoked
[15:43:05 DBG] removing 1dRX3Nx47r5NWAkIM1ONcsSK1P53mo1zlKaQvHaqEec= persisted grant from database
[15:43:05 DBG] 1dRX3Nx47r5NWAkIM1ONcsSK1P53mo1zlKaQvHaqEec= found in database: True
[15:43:05 DBG] Access token revoked
[15:43:05 INF] Token revocation complete
[15:43:05 DBG] no 1dRX3Nx47r5NWAkIM1ONcsSK1P53mo1zlKaQvHaqEec= persisted grant found in database
[15:43:05 INF] Token revocation complete
[15:43:05 INF] Request finished HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 120 -<PHONE_NUMBER>ms
[15:43:05 INF] Request finished HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 120 -<PHONE_NUMBER>ms
[15:43:05 INF] Request starting HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 121
[15:43:05 INF] CORS policy execution successful.
[15:43:05 DBG] CORS request made for path: /connect/revocation from origin: http://localhost:3000
[15:43:05 DBG] Client list checked and origin: http://localhost:3000 is allowed
[15:43:05 DBG] CorsPolicyService allowed origin: http://localhost:3000
[15:43:05 INF] CORS policy execution successful.
[15:43:05 DBG] Request path /connect/revocation matched to endpoint type Revocation
[15:43:05 DBG] Endpoint enabled: Revocation, successfully created handler: IdentityServer4.Endpoints.TokenRevocationEndpoint
[15:43:05 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenRevocationEndpoint for /connect/revocation
[15:43:05 DBG] Start revocation request.
[15:43:05 DBG] Start client validation
[15:43:05 DBG] Start parsing Basic Authentication secret
[15:43:05 DBG] Start parsing for secret in post body
[15:43:05 DBG] client id without secret found
[15:43:05 DBG] Parser found secret: PostBodySecretParser
[15:43:05 DBG] Secret id found: ClientId
[15:43:05 DBG] client configuration validation for client ClientId succeeded.
[15:43:05 DBG] Public Client - skipping secret validation success
[15:43:05 DBG] Client validation success
[15:43:05 DBG] Token type hint found in request: refresh_token
[15:43:05 DBG] ValidateRequestAsync result: IdentityServer4.Validation.TokenRevocationRequestValidationResult
[15:43:05 INF] Request starting HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 121
[15:43:05 INF] CORS policy execution successful.
[15:43:05 DBG] 1PAWgHX1PQeY1vlY7NN5QdTe8ZLs7RotkKaGJKmPr2A= found in database: True
[15:43:05 DBG] CORS request made for path: /connect/revocation from origin: http://localhost:3000
[15:43:05 DBG] Client list checked and origin: http://localhost:3000 is allowed
[15:43:05 DBG] CorsPolicyService allowed origin: http://localhost:3000
[15:43:05 DBG] Refresh token revoked
[15:43:05 INF] CORS policy execution successful.
[15:43:05 DBG] Request path /connect/revocation matched to endpoint type Revocation
[15:43:05 DBG] Endpoint enabled: Revocation, successfully created handler: IdentityServer4.Endpoints.TokenRevocationEndpoint
[15:43:05 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenRevocationEndpoint for /connect/revocation
[15:43:05 DBG] Start revocation request.
[15:43:05 DBG] Start client validation
[15:43:05 DBG] Start parsing Basic Authentication secret
[15:43:05 DBG] Start parsing for secret in post body
[15:43:05 DBG] client id without secret found
[15:43:05 DBG] Parser found secret: PostBodySecretParser
[15:43:05 DBG] Secret id found: ClientId
[15:43:05 DBG] client configuration validation for client ClientId succeeded.
[15:43:05 DBG] Public Client - skipping secret validation success
[15:43:05 DBG] Client validation success
[15:43:05 DBG] Token type hint found in request: refresh_token
[15:43:05 DBG] ValidateRequestAsync result: IdentityServer4.Validation.TokenRevocationRequestValidationResult
[15:43:05 DBG] removing 1PAWgHX1PQeY1vlY7NN5QdTe8ZLs7RotkKaGJKmPr2A= persisted grant from database
[15:43:05 DBG] 1PAWgHX1PQeY1vlY7NN5QdTe8ZLs7RotkKaGJKmPr2A= found in database: True
[15:43:05 DBG] Refresh token revoked
[15:43:05 DBG] no 1PAWgHX1PQeY1vlY7NN5QdTe8ZLs7RotkKaGJKmPr2A= persisted grant found in database
[15:43:05 DBG] removing 1 persisted grants from database for {"SubjectId": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "SessionId": null, "ClientId": "ClientId", "Type": "reference_token", "$type": "PersistedGrantFilter"}
[15:43:05 INF] Token revocation complete
[15:43:05 INF] Request finished HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 121 -<PHONE_NUMBER>ms
[15:43:05 DBG] removing 1 persisted grants from database for {"SubjectId": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "SessionId": null, "ClientId": "ClientId", "Type": "reference_token", "$type": "PersistedGrantFilter"}
[15:43:05 INF] removing 1 persisted grants from database for subject {"SubjectId": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "SessionId": null, "ClientId": "ClientId", "Type": "reference_token", "$type": "PersistedGrantFilter"}: The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.
[15:43:05 INF] Token revocation complete
[15:43:05 INF] Request finished HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 121 - 0 - - 228.5530ms
[15:43:06 INF] Request starting HTTP/2 GET https://localhost:44375/connect/endsession?id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTU3MjQsImV4cCI6MTY0OTY1NjAyNCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjU1NzI0LCJhdF9oYXNoIjoibDcwaGxIc051dUtmeHBsT0Z3UnJOZyIsInNfaGFzaCI6IjlOdDFJcjBjSE1DRnE5aDloczFwVHciLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.VUzw9qR-kUj54rzN1hG_ZJXrJMJNBRSFoExAVku5zkYuxxyoiPlsltYyoOK18Sp-1-STZ47uLzxMOQem6VvMDtnjUcF8swEqRMNOpi_RaMb0dvZso-nENsML3nnlQ0cLFHYCfWmEfbVdGZ011zW3fp-FYBoVCacyaEsm0yl7eeavom08-G1B0TWX86FwC3ZKmkv4I6UG3ZXParmz--2jnTRSCV2vcnXb8ap4x5xmrQLnN6e6lN36JebOElxi069oIqCwt3J0DWj63X2nyEGXX0AEaoa6vohbQdAhiONTYr3ITtMhFkFBwM_EuZ84g2oMDLMqV25A_BJotZQ9T7LPBA&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauthentication%2Flogged-out&state=03fe5d4f678b41ebb88acdc58aa97de8 - -
[15:43:06 DBG] Request path /connect/endsession matched to endpoint type Endsession
[15:43:06 DBG] Endpoint enabled: Endsession, successfully created handler: IdentityServer4.Endpoints.EndSessionEndpoint
[15:43:06 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.EndSessionEndpoint for /connect/endsession
[15:43:06 DBG] Processing signout request for b16467b9-8571-40a6-2f9e-08d8797efa2b
[15:43:06 DBG] Start end session request validation
[15:43:06 DBG] Start identity token validation
[15:43:06 DBG] client configuration validation for client ClientId succeeded.
[15:43:06 DBG] Client found: ClientId / Client name
[15:43:06 DBG] Calling into custom token validator: IdentityServer4.Validation.DefaultCustomTokenValidator
[15:43:06 DBG] Token validation success
{"ClientId": "ClientId", "ClientName": "Client name", "ValidateLifetime": false, "AccessTokenType": null, "ExpectedScope": null, "TokenHandle": null, "JwtId": null, "Claims": {"nbf":<PHONE_NUMBER>, "exp":<PHONE_NUMBER>, "iss": "https://localhost:44375", "aud": "ClientId", "iat":<PHONE_NUMBER>, "at_hash": "l70hlHsNuuKfxplOFwRrNg", "s_hash": "9Nt1Ir0cHMCFq9h9hs1pTw", "sid": "EA3F0006D755161FAEA33AFBFEEE27AA", "sub": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "auth_time":<PHONE_NUMBER>, "idp": "local", "amr": "pwd"}, "$type": "TokenValidationLog"}
[15:43:06 INF] End session request validation success
{"ClientId": "ClientId", "ClientName": "Client name", "SubjectId": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "PostLogOutUri": "http://localhost:3000/authentication/logged-out", "State": "03fe5d4f678b41ebb88acdc58aa97de8", "Raw": {"id_token_hint": "***REDACTED***", "post_logout_redirect_uri": "http://localhost:3000/authentication/logged-out", "state": "03fe5d4f678b41ebb88acdc58aa97de8"}, "$type": "EndSessionRequestValidationLog"}
[15:43:06 DBG] Success validating end session request from ClientId
[15:43:06 INF] Request finished HTTP/2 GET https://localhost:44375/connect/endsession?id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTU3MjQsImV4cCI6MTY0OTY1NjAyNCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjU1NzI0LCJhdF9oYXNoIjoibDcwaGxIc051dUtmeHBsT0Z3UnJOZyIsInNfaGFzaCI6IjlOdDFJcjBjSE1DRnE5aDloczFwVHciLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.VUzw9qR-kUj54rzN1hG_ZJXrJMJNBRSFoExAVku5zkYuxxyoiPlsltYyoOK18Sp-1-STZ47uLzxMOQem6VvMDtnjUcF8swEqRMNOpi_RaMb0dvZso-nENsML3nnlQ0cLFHYCfWmEfbVdGZ011zW3fp-FYBoVCacyaEsm0yl7eeavom08-G1B0TWX86FwC3ZKmkv4I6UG3ZXParmz--2jnTRSCV2vcnXb8ap4x5xmrQLnN6e6lN36JebOElxi069oIqCwt3J0DWj63X2nyEGXX0AEaoa6vohbQdAhiONTYr3ITtMhFkFBwM_EuZ84g2oMDLMqV25A_BJotZQ9T7LPBA&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauthentication%2Flogged-out&state=03fe5d4f678b41ebb88acdc58aa97de8 - - - 302 - - 13.1718ms
[15:43:23 INF] Removing 0 grants
[15:43:23 INF] Removing 0 device flow codes

Client Log
[UserManager] getUser: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] getUser: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] getUser: user loaded oidc-client-ts.js:53
[UserManagerEvents] load: begin oidc-client-ts.js:48
[UserManagerEvents] load: access token present, remaining duration: 840 oidc-client-ts.js:48
[UserManagerEvents] load: registering expiring timer, raising in 780 seconds oidc-client-ts.js:48
[Timer('Access token expiring')] init: begin oidc-client-ts.js:48
[Timer('Access token expiring')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManagerEvents] load: registering expired timer, raising in 841 seconds oidc-client-ts.js:48
[Timer('Access token expired')] init: begin oidc-client-ts.js:48
[Timer('Access token expired')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManager] getUser: user loaded oidc-client-ts.js:53
[UserManagerEvents] load: begin oidc-client-ts.js:48
[UserManagerEvents] load: access token present, remaining duration: 840 oidc-client-ts.js:48
[UserManagerEvents] load: registering expiring timer, raising in 780 seconds oidc-client-ts.js:48
[Timer('Access token expiring')] init: begin oidc-client-ts.js:48
[Timer('Access token expiring')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManagerEvents] load: registering expired timer, raising in 841 seconds oidc-client-ts.js:48
[Timer('Access token expired')] init: begin oidc-client-ts.js:48
[Timer('Access token expired')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManager] signoutRedirect: begin oidc-client-ts.js:48
[RedirectNavigator] prepare: begin oidc-client-ts.js:48
[UserManager] signoutRedirect: begin oidc-client-ts.js:48
[RedirectNavigator] prepare: begin oidc-client-ts.js:48
[UserManager] _signoutStart: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] _signoutStart: loaded current user from storage oidc-client-ts.js:48
[UserManager] _revokeInternal: begin oidc-client-ts.js:48
[OidcClient] revokeToken: begin oidc-client-ts.js:48
[TokenClient] revoke: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: getting metadata from https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: begin oidc-client-ts.js:48
[JsonService] getJson: url: https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[UserManager] _signoutStart: loaded current user from storage oidc-client-ts.js:48
[UserManager] _revokeInternal: begin oidc-client-ts.js:48
[OidcClient] revokeToken: begin oidc-client-ts.js:48
[TokenClient] revoke: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: getting metadata from https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: begin oidc-client-ts.js:48
[JsonService] getJson: url: https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: HTTP response received, status 200 oidc-client-ts.js:48
[MetadataService] getMetadata: merging remote JSON with seed metadata oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): resolved oidc-client-ts.js:48
[TokenClient] revoke: got revocation endpoint, revoking access_token oidc-client-ts.js:48
[JsonService] postForm: begin oidc-client-ts.js:48
[JsonService] postForm: url: https://localhost:44375/connect/revocation oidc-client-ts.js:48
[JsonService] getJson: HTTP response received, status 200 oidc-client-ts.js:48
[MetadataService] getMetadata: merging remote JSON with seed metadata oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): resolved oidc-client-ts.js:48
[TokenClient] revoke: got revocation endpoint, revoking access_token oidc-client-ts.js:48
[JsonService] postForm: begin oidc-client-ts.js:48
[JsonService] postForm: url: https://localhost:44375/connect/revocation oidc-client-ts.js:48
[JsonService] postForm: HTTP response received, status 200 2 oidc-client-ts.js:48
[TokenClient] revoke: got response oidc-client-ts.js:48
[UserManager] _revokeInternal: access_token revoked successfully oidc-client-ts.js:53
[OidcClient] revokeToken: begin oidc-client-ts.js:48
[TokenClient] revoke: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: using cached values oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): resolved oidc-client-ts.js:48
[TokenClient] revoke: got revocation endpoint, revoking refresh_token oidc-client-ts.js:48
[JsonService] postForm: begin oidc-client-ts.js:48
[JsonService] postForm: url: https://localhost:44375/connect/revocation oidc-client-ts.js:48
[TokenClient] revoke: got response oidc-client-ts.js:48
[UserManager] _revokeInternal: access_token revoked successfully oidc-client-ts.js:53
[OidcClient] revokeToken: begin oidc-client-ts.js:48
[TokenClient] revoke: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: using cached values oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): resolved oidc-client-ts.js:48
[TokenClient] revoke: got revocation endpoint, revoking refresh_token oidc-client-ts.js:48
[JsonService] postForm: begin oidc-client-ts.js:48
[JsonService] postForm: url: https://localhost:44375/connect/revocation oidc-client-ts.js:48
[JsonService] postForm: HTTP response received, status 200 oidc-client-ts.js:48
[TokenClient] revoke: got response oidc-client-ts.js:48
[UserManager] _revokeInternal: refresh_token revoked successfully oidc-client-ts.js:53
[UserManager] storeUser: begin oidc-client-ts.js:48
[UserManager] storeUser: storing user oidc-client-ts.js:48
[User] toStorageString: begin oidc-client-ts.js:48
[WebStorageStateStore] set('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _revokeInternal: user stored oidc-client-ts.js:48
[UserManagerEvents] load: begin oidc-client-ts.js:48
[UserManagerEvents] load: access token present, remaining duration: 839 oidc-client-ts.js:48
[UserManagerEvents] load: registering expiring timer, raising in 779 seconds oidc-client-ts.js:48
[Timer('Access token expiring')] init: begin oidc-client-ts.js:48
[Timer('Access token expiring')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManagerEvents] load: registering expired timer, raising in 840 seconds oidc-client-ts.js:48
[Timer('Access token expired')] init: begin oidc-client-ts.js:48
[Timer('Access token expired')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[Event('User loaded')] raise:
Object { id_token: "eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTU3MjQsImV4cCI6MTY0OTY1NjAyNCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjU1NzI0LCJhdF9oYXNoIjoibDcwaGxIc051dUtmeHBsT0Z3UnJOZyIsInNfaGFzaCI6IjlOdDFJcjBjSE1DRnE5aDloczFwVHciLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.VUzw9qR-kUj54rzN1hG_ZJXrJMJNBRSFoExAVku5zkYuxxyoiPlsltYyoOK18Sp-1-STZ47uLzxMOQem6VvMDtnjUcF8swEqRMNOpi_RaMb0dvZso-nENsML3nnlQ0cLFHYCfWmEfbVdGZ011zW3fp-FYBoVCacyaEsm0yl7eeavom08-G1B0TWX86FwC3ZKmkv4I6UG3ZXParmz--2jnTRSCV2vcnXb8ap4x5xmrQLnN6e6lN36JebOElxi069oIqCwt3J0DWj63X2nyEGXX0AEaoa6vohbQdAhiONTYr3ITtMhFkFBwM_EuZ84g2oMDLMqV25A_BJotZQ9T7LPBA", session_state: "TUa0soo1iMuNIwH9HEP56esR1AeiH7XJ_-wRqj8Pz6U.0C968B3485780C396973B0B4C6C70C17", access_token: "D3C9D11A12010DAEAEB168FA6701709C85917637B589DC7B6003D3619073F5B0", refresh_token: null, token_type: "Bearer", scope: "openid profile IdentityServerApi offline_access", profile: {…}, expires_at:<PHONE_NUMBER>, state: undefined }
oidc-client-ts.js:48
Navigated to https://localhost:44375/connect/endsession?id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTU3MjQsImV4cCI6MTY0OTY1NjAyNCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjU1NzI0LCJhdF9oYXNoIjoibDcwaGxIc051dUtmeHBsT0Z3UnJOZyIsInNfaGFzaCI6IjlOdDFJcjBjSE1DRnE5aDloczFwVHciLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.VUzw9qR-kUj54rzN1hG_ZJXrJMJNBRSFoExAVku5zkYuxxyoiPlsltYyoOK18Sp-1-STZ47uLzxMOQem6VvMDtnjUcF8swEqRMNOpi_RaMb0dvZso-nENsML3nnlQ0cLFHYCfWmEfbVdGZ011zW3fp-FYBoVCacyaEsm0yl7eeavom08-G1B0TWX86FwC3ZKmkv4I6UG3ZXParmz--2jnTRSCV2vcnXb8ap4x5xmrQLnN6e6lN36JebOElxi069oIqCwt3J0DWj63X2nyEGXX0AEaoa6vohbQdAhiONTYr3ITtMhFkFBwM_EuZ84g2oMDLMqV25A_BJotZQ9T7LPBA&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauthentication%2Flogged-out&state=03fe5d4f678b41ebb88acdc58aa97de8
[UserManager] _signoutStart: setting id_token_hint in signout request oidc-client-ts.js:48
[UserManager] removeUser: begin oidc-client-ts.js:48
[UserManager] storeUser: begin oidc-client-ts.js:48
[UserManager] removing user oidc-client-ts.js:48
[WebStorageStateStore] remove('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] removeUser: user removed from storage oidc-client-ts.js:53
[UserManagerEvents] unload: canceling existing access token timers oidc-client-ts.js:48
[Timer('Access token expiring')] cancel: begin oidc-client-ts.js:48
[Timer('Access token expired')] cancel: begin oidc-client-ts.js:48
[Event('User unloaded')] raise: oidc-client-ts.js:48
[UserManager] _signoutStart: user removed, creating signout request oidc-client-ts.js:48
[OidcClient] createSignoutRequest: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: using cached values oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): resolved oidc-client-ts.js:48
[OidcClient] createSignoutRequest: Received end session endpoint https://localhost:44375/connect/endsession oidc-client-ts.js:48
[OidcClient] createSignoutRequest: Signout request has state to persist oidc-client-ts.js:48
[State] toStorageString: begin oidc-client-ts.js:48
[WebStorageStateStore] set('03fe5d4f678b41ebb88acdc58aa97de8'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: got signout request oidc-client-ts.js:48
[RedirectNavigator] navigate: begin oidc-client-ts.js:48
[JsonService] postForm: Network error react_devtools_backend.js:3973:25
[UserManager] _signoutStart: error after preparing navigator, closing navigator window oidc-client-ts.js:48
[RedirectNavigator] close: begin oidc-client-ts.js:48
Redirect signout error:  TypeError: NetworkError when attempting to fetch resource.

Case 3
Client settings
revokeTokensOnSignout: true,
revokeTokenTypes: ['access_token', 'refresh_token']

Identity Server Log
[16:03:14 INF] Request starting HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - -
[16:03:14 INF] CORS policy execution successful.
[16:03:14 DBG] CORS request made for path: /.well-known/openid-configuration from origin: http://localhost:3000
[16:03:14 DBG] Client list checked and origin: http://localhost:3000 is allowed
[16:03:14 DBG] CorsPolicyService allowed origin: http://localhost:3000
[16:03:14 INF] CORS policy execution successful.
[16:03:14 INF] Request starting HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - -
[16:03:14 INF] CORS policy execution successful.
[16:03:14 DBG] Request path /.well-known/openid-configuration matched to endpoint type Discovery
[16:03:14 DBG] Endpoint enabled: Discovery, successfully created handler: IdentityServer4.Endpoints.DiscoveryEndpoint
[16:03:14 DBG] CORS request made for path: /.well-known/openid-configuration from origin: http://localhost:3000
[16:03:14 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.DiscoveryEndpoint for /.well-known/openid-configuration
[16:03:14 DBG] Start discovery request
[16:03:14 DBG] Client list checked and origin: http://localhost:3000 is allowed
[16:03:14 DBG] CorsPolicyService allowed origin: http://localhost:3000
[16:03:14 INF] CORS policy execution successful.
[16:03:14 DBG] Request path /.well-known/openid-configuration matched to endpoint type Discovery
[16:03:14 DBG] Endpoint enabled: Discovery, successfully created handler: IdentityServer4.Endpoints.DiscoveryEndpoint
[16:03:14 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.DiscoveryEndpoint for /.well-known/openid-configuration
[16:03:14 DBG] Start discovery request
[16:03:15 INF] Request finished HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - - - 200 - application/json;+charset=UTF-8 29.6038ms
[16:03:15 INF] Request finished HTTP/2 GET https://localhost:44375/.well-known/openid-configuration - - - 200 - application/json;+charset=UTF-8 27.7408ms
[16:03:15 INF] Request starting HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 120
[16:03:15 INF] Request starting HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 120
[16:03:15 INF] CORS policy execution successful.
[16:03:15 DBG] CORS request made for path: /connect/revocation from origin: http://localhost:3000
[16:03:15 DBG] Client list checked and origin: http://localhost:3000 is allowed
[16:03:15 DBG] CorsPolicyService allowed origin: http://localhost:3000
[16:03:15 INF] CORS policy execution successful.
[16:03:15 DBG] Request path /connect/revocation matched to endpoint type Revocation
[16:03:15 DBG] Endpoint enabled: Revocation, successfully created handler: IdentityServer4.Endpoints.TokenRevocationEndpoint
[16:03:15 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenRevocationEndpoint for /connect/revocation
[16:03:15 DBG] Start revocation request.
[16:03:15 DBG] Start client validation
[16:03:15 DBG] Start parsing Basic Authentication secret
[16:03:15 DBG] Start parsing for secret in post body
[16:03:15 DBG] client id without secret found
[16:03:15 DBG] Parser found secret: PostBodySecretParser
[16:03:15 DBG] Secret id found: ClientId
[16:03:15 DBG] client configuration validation for client ClientId succeeded.
[16:03:15 DBG] Public Client - skipping secret validation success
[16:03:15 DBG] Client validation success
[16:03:15 DBG] Token type hint found in request: access_token
[16:03:15 DBG] ValidateRequestAsync result: IdentityServer4.Validation.TokenRevocationRequestValidationResult
[16:03:15 INF] CORS policy execution successful.
[16:03:15 DBG] CORS request made for path: /connect/revocation from origin: http://localhost:3000
[16:03:15 DBG] Client list checked and origin: http://localhost:3000 is allowed
[16:03:15 DBG] CorsPolicyService allowed origin: http://localhost:3000
[16:03:15 INF] CORS policy execution successful.
[16:03:15 DBG] Request path /connect/revocation matched to endpoint type Revocation
[16:03:15 DBG] Endpoint enabled: Revocation, successfully created handler: IdentityServer4.Endpoints.TokenRevocationEndpoint
[16:03:15 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenRevocationEndpoint for /connect/revocation
[16:03:15 DBG] Start revocation request.
[16:03:15 DBG] Start client validation
[16:03:15 DBG] Start parsing Basic Authentication secret
[16:03:15 DBG] Start parsing for secret in post body
[16:03:15 DBG] client id without secret found
[16:03:15 DBG] Parser found secret: PostBodySecretParser
[16:03:15 DBG] Secret id found: ClientId
[16:03:15 DBG] client configuration validation for client ClientId succeeded.
[16:03:15 DBG] Public Client - skipping secret validation success
[16:03:15 DBG] Client validation success
[16:03:15 DBG] Token type hint found in request: access_token
[16:03:15 DBG] ValidateRequestAsync result: IdentityServer4.Validation.TokenRevocationRequestValidationResult
[16:03:15 DBG] FDUHHOK8bQOPZX1v7juVsiN6asB9jWdrqv6FtGvPS3w= found in database: True
[16:03:15 DBG] FDUHHOK8bQOPZX1v7juVsiN6asB9jWdrqv6FtGvPS3w= found in database: True
[16:03:15 DBG] Access token revoked
[16:03:15 DBG] Access token revoked
[16:03:15 DBG] removing FDUHHOK8bQOPZX1v7juVsiN6asB9jWdrqv6FtGvPS3w= persisted grant from database
[16:03:15 INF] Token revocation complete
[16:03:15 DBG] removing FDUHHOK8bQOPZX1v7juVsiN6asB9jWdrqv6FtGvPS3w= persisted grant from database
[16:03:15 INF] Request finished HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 120 -<PHONE_NUMBER>ms
[16:03:15 INF] exception removing FDUHHOK8bQOPZX1v7juVsiN6asB9jWdrqv6FtGvPS3w= persisted grant from database: The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.
[16:03:15 INF] Token revocation complete
[16:03:15 INF] Request finished HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 120 -<PHONE_NUMBER>ms
[16:03:16 INF] Request starting HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 121
[16:03:16 INF] CORS policy execution successful.
[16:03:16 INF] Request starting HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 121
[16:03:16 DBG] CORS request made for path: /connect/revocation from origin: http://localhost:3000
[16:03:16 DBG] Client list checked and origin: http://localhost:3000 is allowed
[16:03:16 DBG] CorsPolicyService allowed origin: http://localhost:3000
[16:03:16 INF] CORS policy execution successful.
[16:03:16 DBG] Request path /connect/revocation matched to endpoint type Revocation
[16:03:16 INF] CORS policy execution successful.
[16:03:16 DBG] Endpoint enabled: Revocation, successfully created handler: IdentityServer4.Endpoints.TokenRevocationEndpoint
[16:03:16 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenRevocationEndpoint for /connect/revocation
[16:03:16 DBG] Start revocation request.
[16:03:16 DBG] Start client validation
[16:03:16 DBG] Start parsing Basic Authentication secret
[16:03:16 DBG] Start parsing for secret in post body
[16:03:16 DBG] client id without secret found
[16:03:16 DBG] CORS request made for path: /connect/revocation from origin: http://localhost:3000
[16:03:16 DBG] Client list checked and origin: http://localhost:3000 is allowed
[16:03:16 DBG] Parser found secret: PostBodySecretParser
[16:03:16 DBG] CorsPolicyService allowed origin: http://localhost:3000
[16:03:16 INF] CORS policy execution successful.
[16:03:16 DBG] Secret id found: ClientId
[16:03:16 DBG] Request path /connect/revocation matched to endpoint type Revocation
[16:03:16 DBG] client configuration validation for client ClientId succeeded.
[16:03:16 DBG] Public Client - skipping secret validation success
[16:03:16 DBG] Client validation success
[16:03:16 DBG] Endpoint enabled: Revocation, successfully created handler: IdentityServer4.Endpoints.TokenRevocationEndpoint
[16:03:16 INF] Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenRevocationEndpoint for /connect/revocation
[16:03:16 DBG] Token type hint found in request: refresh_token
[16:03:16 DBG] Start revocation request.
[16:03:16 DBG] Start client validation
[16:03:16 DBG] ValidateRequestAsync result: IdentityServer4.Validation.TokenRevocationRequestValidationResult
[16:03:16 DBG] Start parsing Basic Authentication secret
[16:03:16 DBG] Start parsing for secret in post body
[16:03:16 DBG] client id without secret found
[16:03:16 DBG] Parser found secret: PostBodySecretParser
[16:03:16 DBG] Secret id found: ClientId
[16:03:16 DBG] client configuration validation for client ClientId succeeded.
[16:03:16 DBG] Public Client - skipping secret validation success
[16:03:16 DBG] Client validation success
[16:03:16 DBG] Token type hint found in request: refresh_token
[16:03:16 DBG] ValidateRequestAsync result: IdentityServer4.Validation.TokenRevocationRequestValidationResult
[16:03:16 DBG] 88bDjiwIBYl9MOWpVxIWlpqwDJIUbCNvp6skAMmP6pI= found in database: True
[16:03:16 DBG] Refresh token revoked
[16:03:16 DBG] 88bDjiwIBYl9MOWpVxIWlpqwDJIUbCNvp6skAMmP6pI= found in database: True
[16:03:16 DBG] Refresh token revoked
[16:03:16 DBG] removing 88bDjiwIBYl9MOWpVxIWlpqwDJIUbCNvp6skAMmP6pI= persisted grant from database
[16:03:16 DBG] removing 88bDjiwIBYl9MOWpVxIWlpqwDJIUbCNvp6skAMmP6pI= persisted grant from database
[16:03:16 INF] exception removing 88bDjiwIBYl9MOWpVxIWlpqwDJIUbCNvp6skAMmP6pI= persisted grant from database: The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.
[16:03:16 DBG] removing 0 persisted grants from database for {"SubjectId": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "SessionId": null, "ClientId": "ClientId", "Type": "reference_token", "$type": "PersistedGrantFilter"}
[16:03:16 INF] Token revocation complete
[16:03:16 DBG] removing 0 persisted grants from database for {"SubjectId": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "SessionId": null, "ClientId": "ClientId", "Type": "reference_token", "$type": "PersistedGrantFilter"}
[16:03:16 INF] Request finished HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 121 -<PHONE_NUMBER>ms
[16:03:16 INF] removing 0 persisted grants from database for subject {"SubjectId": "b16467b9-8571-40a6-2f9e-08d8797efa2b", "SessionId": null, "ClientId": "ClientId", "Type": "reference_token", "$type": "PersistedGrantFilter"}: The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.
[16:03:16 INF] Token revocation complete
[16:03:16 INF] Request finished HTTP/2 POST https://localhost:44375/connect/revocation application/x-www-form-urlencoded 121 -<PHONE_NUMBER>ms

Client Log
[UserManager] getUser: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] getUser: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] getUser: user loaded oidc-client-ts.js:53
[UserManagerEvents] load: begin oidc-client-ts.js:48
[UserManagerEvents] load: access token present, remaining duration: 779 oidc-client-ts.js:48
[UserManagerEvents] load: registering expiring timer, raising in 719 seconds oidc-client-ts.js:48
[Timer('Access token expiring')] init: begin oidc-client-ts.js:48
[Timer('Access token expiring')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManagerEvents] load: registering expired timer, raising in 780 seconds oidc-client-ts.js:48
[Timer('Access token expired')] init: begin oidc-client-ts.js:48
[Timer('Access token expired')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManager] getUser: user loaded oidc-client-ts.js:53
[UserManagerEvents] load: begin oidc-client-ts.js:48
[UserManagerEvents] load: access token present, remaining duration: 779 oidc-client-ts.js:48
[UserManagerEvents] load: registering expiring timer, raising in 719 seconds oidc-client-ts.js:48
[Timer('Access token expiring')] init: begin oidc-client-ts.js:48
[Timer('Access token expiring')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManagerEvents] load: registering expired timer, raising in 780 seconds oidc-client-ts.js:48
[Timer('Access token expired')] init: begin oidc-client-ts.js:48
[Timer('Access token expired')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManager] signoutRedirect: begin oidc-client-ts.js:48
[RedirectNavigator] prepare: begin oidc-client-ts.js:48
[UserManager] signoutRedirect: begin oidc-client-ts.js:48
[RedirectNavigator] prepare: begin oidc-client-ts.js:48
[UserManager] _signoutStart: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: begin oidc-client-ts.js:48
[UserManager] _loadUser: begin oidc-client-ts.js:48
[WebStorageStateStore] get('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] _loadUser: user storageString loaded oidc-client-ts.js:48
[User.fromStorageString] begin oidc-client-ts.js:48
[UserManager] _signoutStart: loaded current user from storage oidc-client-ts.js:48
[UserManager] _revokeInternal: begin oidc-client-ts.js:48
[OidcClient] revokeToken: begin oidc-client-ts.js:48
[TokenClient] revoke: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: getting metadata from https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: begin oidc-client-ts.js:48
[JsonService] getJson: url: https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[UserManager] _signoutStart: loaded current user from storage oidc-client-ts.js:48
[UserManager] _revokeInternal: begin oidc-client-ts.js:48
[OidcClient] revokeToken: begin oidc-client-ts.js:48
[TokenClient] revoke: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: getting metadata from https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: begin oidc-client-ts.js:48
[JsonService] getJson: url: https://localhost:44375/.well-known/openid-configuration oidc-client-ts.js:48
[JsonService] getJson: HTTP response received, status 200 oidc-client-ts.js:48
[MetadataService] getMetadata: merging remote JSON with seed metadata oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): resolved oidc-client-ts.js:48
[TokenClient] revoke: got revocation endpoint, revoking access_token oidc-client-ts.js:48
[JsonService] postForm: begin oidc-client-ts.js:48
[JsonService] postForm: url: https://localhost:44375/connect/revocation oidc-client-ts.js:48
[JsonService] getJson: HTTP response received, status 200 oidc-client-ts.js:48
[MetadataService] getMetadata: merging remote JSON with seed metadata oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): resolved oidc-client-ts.js:48
[TokenClient] revoke: got revocation endpoint, revoking access_token oidc-client-ts.js:48
[JsonService] postForm: begin oidc-client-ts.js:48
[JsonService] postForm: url: https://localhost:44375/connect/revocation oidc-client-ts.js:48
[JsonService] postForm: HTTP response received, status 200 oidc-client-ts.js:48
[TokenClient] revoke: got response oidc-client-ts.js:48
[UserManager] _revokeInternal: access_token revoked successfully oidc-client-ts.js:53
[OidcClient] revokeToken: begin oidc-client-ts.js:48
[TokenClient] revoke: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: using cached values oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): resolved oidc-client-ts.js:48
[TokenClient] revoke: got revocation endpoint, revoking refresh_token oidc-client-ts.js:48
[JsonService] postForm: begin oidc-client-ts.js:48
[JsonService] postForm: url: https://localhost:44375/connect/revocation oidc-client-ts.js:48
[JsonService] postForm: HTTP response received, status 200 oidc-client-ts.js:48
[TokenClient] revoke: got response oidc-client-ts.js:48
[UserManager] _revokeInternal: access_token revoked successfully oidc-client-ts.js:53
[OidcClient] revokeToken: begin oidc-client-ts.js:48
[TokenClient] revoke: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: using cached values oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('revocation_endpoint'): resolved oidc-client-ts.js:48
[TokenClient] revoke: got revocation endpoint, revoking refresh_token oidc-client-ts.js:48
[JsonService] postForm: begin oidc-client-ts.js:48
[JsonService] postForm: url: https://localhost:44375/connect/revocation oidc-client-ts.js:48
[JsonService] postForm: HTTP response received, status 200 oidc-client-ts.js:48
[TokenClient] revoke: got response oidc-client-ts.js:48
[UserManager] _revokeInternal: refresh_token revoked successfully oidc-client-ts.js:53
[UserManager] storeUser: begin oidc-client-ts.js:48
[UserManager] storeUser: storing user oidc-client-ts.js:48
[User] toStorageString: begin oidc-client-ts.js:48
[WebStorageStateStore] set('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] _revokeInternal: user stored oidc-client-ts.js:48
[UserManagerEvents] load: begin oidc-client-ts.js:48
[UserManagerEvents] load: access token present, remaining duration: 777 oidc-client-ts.js:48
[UserManagerEvents] load: registering expiring timer, raising in 717 seconds oidc-client-ts.js:48
[Timer('Access token expiring')] init: begin oidc-client-ts.js:48
[Timer('Access token expiring')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[UserManagerEvents] load: registering expired timer, raising in 778 seconds oidc-client-ts.js:48
[Timer('Access token expired')] init: begin oidc-client-ts.js:48
[Timer('Access token expired')] init: skipping since already initialized for expiration at<PHONE_NUMBER> oidc-client-ts.js:48
[Event('User loaded')] raise:
Object { id_token: "eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTY4NzMsImV4cCI6MTY0OTY1NzE3MywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjU2ODczLCJhdF9oYXNoIjoiWEZDTTBkUjU0Nl9yTzAyVHBGNU1VdyIsInNfaGFzaCI6Ikl1TEFxYUpvN0k5eWFUM29vYzNaaXciLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.Gt9Y_TQ-5AgGNBAyMx74wBuQYFbzLknSKjVTGvsaiLWLsTcnQs6sPSbp7Ey9cPWvQA2zx440graYQIPNHMq1Jl23KtxOtcj3WMXT01U-J72W6APR_D2Rexx5U2K07MuXoCFEgyrHubtc5rqzvqFfj9ufteqlUmXCKhX-ut9m29E_JQzS3eIAMr3aSE-Tl_TMNM_ZfhACDrrucbdYZD09NfUKF1B8TEHWgeKghKVjumhJ0wHSHgYYMZx1ARF6lUHbwoq2ziBLWWopz3LxdyRXjvSx0VMCLbqbpGfzI0f5IFhDxGic3dyHry8LJDq1faZS4OIjJLE6VTPGRmUHGUPOmg", session_state: "2eqszBbTmiRY__6nEB15wsNpVVSPOiKaCItpgLgBP20.54D68EA071327C1C62027D7E67861EB2", access_token: "386415E6F204858B0839AFCD1BBEAFDC6527404A0DB88C4A11D82C323F7B4D30", refresh_token: null, token_type: "Bearer", scope: "openid profile IdentityServerApi offline_access", profile: {…}, expires_at:<PHONE_NUMBER>, state: undefined }
oidc-client-ts.js:48
[UserManager] _signoutStart: setting id_token_hint in signout request oidc-client-ts.js:48
[UserManager] removeUser: begin oidc-client-ts.js:48
[UserManager] storeUser: begin oidc-client-ts.js:48
[UserManager] removing user oidc-client-ts.js:48
[WebStorageStateStore] remove('user:https://localhost:44375:ClientId'): begin oidc-client-ts.js:48
[UserManager] removeUser: user removed from storage oidc-client-ts.js:53
[UserManagerEvents] unload: canceling existing access token timers oidc-client-ts.js:48
[Timer('Access token expiring')] cancel: begin oidc-client-ts.js:48
[Timer('Access token expired')] cancel: begin oidc-client-ts.js:48
[Event('User unloaded')] raise: oidc-client-ts.js:48
[UserManager] _signoutStart: user removed, creating signout request oidc-client-ts.js:48
[OidcClient] createSignoutRequest: begin oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): begin oidc-client-ts.js:48
[MetadataService] getMetadata: begin oidc-client-ts.js:48
[MetadataService] getMetadata: using cached values oidc-client-ts.js:48
[MetadataService] _getMetadataProperty('end_session_endpoint'): resolved oidc-client-ts.js:48
[OidcClient] createSignoutRequest: Received end session endpoint https://localhost:44375/connect/endsession oidc-client-ts.js:48
Navigated to https://localhost:44375/connect/endsession?id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IkE1MDZEOUM5Mjg5QTNGRkI4QTZFMTY5MkM5RUE3QTYwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDk2NTY4NzMsImV4cCI6MTY0OTY1NzE3MywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNzUiLCJhdWQiOiJOaW1idXNGYWNlIiwiaWF0IjoxNjQ5NjU2ODczLCJhdF9oYXNoIjoiWEZDTTBkUjU0Nl9yTzAyVHBGNU1VdyIsInNfaGFzaCI6Ikl1TEFxYUpvN0k5eWFUM29vYzNaaXciLCJzaWQiOiJFQTNGMDAwNkQ3NTUxNjFGQUVBMzNBRkJGRUVFMjdBQSIsInN1YiI6ImIxNjQ2N2I5LTg1NzEtNDBhNi0yZjllLTA4ZDg3OTdlZmEyYiIsImF1dGhfdGltZSI6MTY0OTY1MjIzMiwiaWRwIjoibG9jYWwiLCJhbXIiOlsicHdkIl19.Gt9Y_TQ-5AgGNBAyMx74wBuQYFbzLknSKjVTGvsaiLWLsTcnQs6sPSbp7Ey9cPWvQA2zx440graYQIPNHMq1Jl23KtxOtcj3WMXT01U-J72W6APR_D2Rexx5U2K07MuXoCFEgyrHubtc5rqzvqFfj9ufteqlUmXCKhX-ut9m29E_JQzS3eIAMr3aSE-Tl_TMNM_ZfhACDrrucbdYZD09NfUKF1B8TEHWgeKghKVjumhJ0wHSHgYYMZx1ARF6lUHbwoq2ziBLWWopz3LxdyRXjvSx0VMCLbqbpGfzI0f5IFhDxGic3dyHry8LJDq1faZS4OIjJLE6VTPGRmUHGUPOmg&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauthentication%2Flogged-out&state=c97dfe8034b847d086c5bb5b7489accc
[OidcClient] createSignoutRequest: Signout request has state to persist oidc-client-ts.js:48
[State] toStorageString: begin oidc-client-ts.js:48
[WebStorageStateStore] set('c97dfe8034b847d086c5bb5b7489accc'): begin oidc-client-ts.js:48
[UserManager] _signoutStart: got signout request oidc-client-ts.js:48
[RedirectNavigator] navigate: begin oidc-client-ts.js:48
[JsonService] postForm: Network error react_devtools_backend.js:3973:25
[UserManager] _signoutStart: error after preparing navigator, closing navigator window oidc-client-ts.js:48
[RedirectNavigator] close: begin oidc-client-ts.js:48
Redirect signout error:  TypeError: NetworkError when attempting to fetch resource.

Hello pamapa, thank you for your reply.

What is the difference between the working and not working signout request? url, query param, header param,...? Maybe id_token_hint or extraQueryParams?

Nothing has really changed, we have upgraded the library to the latest version and noticed some of the settings parameters have changed (as the compiler was yelling). We have updated the settings of the UserManager to:
revokeTokensOnSignout: true,
revokeTokenTypes: ['access_token', 'refresh_token']

This matches our previous settings revokeAccessTokenOnSignout: true.
Nothing else has changed on the client, neither on the server.
Here is the settings we are using:
authority: Config.identityServer.authority,
            client_id: Config.identityServer.clientId,
            redirect_uri: Config.clientServer + ApplicationPaths.LoginCallback,
            silent_redirect_uri: Config.clientServer + ApplicationPaths.LoginCallback,
            response_type: Config.identityServer.responseType,
            scope: Config.identityServer.scope,
            post_logout_redirect_uri: Config.clientServer + ApplicationPaths.LoggedOut,
            loadUserInfo: false,
            automaticSilentRenew: true,
            includeIdTokenInSilentRenew: true,
            revokeTokensOnSignout: true,
            revokeTokenTypes: ['access_token', 'refresh_token'],
            extraQueryParams: extraParams, // custom parameters passed to IS
            stateStore: new WebStorageStateStore({
                store: window.sessionStorage
            }),
            userStore: new WebStorageStateStore({
                store: window.localStorage
            })

I was trying to fiddle with the user store settings (comment them out and use the defaults) and revoke tokens settings, but none of them made the logout work. Login (silent or redirect) both work fine.

The addition of revokeTokenTypes: ['access_token', 'refresh_token'] was because not all identity servers support revoking the access_token, is that your problem?

@pamapa That's not the problem. The problem is that the call to the /connect/endsession endpoint keeps failing. Nothing has changed on the IS side, but the client library was updated. Revoke tokens is a guess, because it is a thing that has changed between the versions that make the working/not working difference. But it might be something else, I'm not really sure where the problem is.
When I read the log, it always comes to a network call, either [JsonService] postForm: Network error react_devtools_backend.js:3973:25 or [JsonService] getJson: Network Error react_devtools_backend.js:3973:25. This seems to depend on whether the revocation is turned on or off, but in either case, the client fails on an exception and the user is not logged out.
Also, I have tested it all on localhost and the endpoint definitely works, there is no network problem. In the end of the day, other calls to the same server work fine and other clients work fine. Seems like something has changed in a way the library processes the response from the server (302 Found).

Here is the debug of the network call (that seems to not respond - but it does in other clients or rc3 and prior versions).

When I comment out
//revokeTokensOnSignout: true,
//revokeTokenTypes: ['access_token', 'refresh_token'],

I get this
[JsonService] getJson: Network Error react_devtools_backend.js:3973:25
    overrideMethod react_devtools_backend.js:3973
    error oidc-client-ts.js:63
    getJson oidc-client-ts.js:473
    getMetadata oidc-client-ts.js:583
    _getMetadataProperty oidc-client-ts.js:614
    getEndSessionEndpoint oidc-client-ts.js:604
    createSignoutRequest oidc-client-ts.js:1476
    _signoutStart oidc-client-ts.js:2469
    signoutRedirect oidc-client-ts.js:2414
    _callee7$ AuthenticationService.ts:171
    Babel 10
    _callee2$ Logout.tsx:93
    Babel 10
    _callee$ Logout.tsx:52
    Babel 8
    Logout Logout.tsx:79
    React 14
[UserManager] _signoutStart: error after preparing navigator, closing navigator window

If the revocation is on, then I get the [JsonService] postForm: Network error.

In rc5 the following was changed in JsonService.ts, which might affect you:
        let response: Response;
        try {
            this._logger.debug("getJson, url:", url);
            response = await fetch(url, { method: "GET", headers });
        }
        catch (err) {
            this._logger.error("getJson: network error");
            throw new Error("Network Error");
        }

to
        let response: Response;
        try {
            logger.debug("url:", url);
            response = await this.fetchWithTimeout(url, { method: "POST", headers, body, timeoutInSeconds });
        }
        catch (err) {
            logger.error("Network error");
            throw err;
        }

Is that your problem? Can you alter that code temporary? If so we need to dig into fetchWithTimeout...

Question:
From client log
Where does that last postForm come from?
...
[UserManager] _signoutStart: got signout request oidc-client-ts.js:48
[RedirectNavigator] navigate: begin oidc-client-ts.js:48
[JsonService] postForm: Network error react_devtools_backend.js:3973:25
[UserManager] _signoutStart: error after preparing navigator, closing navigator window oidc-client-ts.js:48
[RedirectNavigator] close: begin oidc-client-ts.js:48
Redirect signout error:  TypeError: NetworkError when attempting to fetch resource.

Because in the same log in see two successful (code=200) postForm one for access token and one for refresh token, which is expected, but not the third one...

From #479 (comment)
It seems you are calling signoutRedirect twice?
...
[UserManager] signoutRedirect: begin oidc-client-ts.js:48
[RedirectNavigator] prepare: begin oidc-client-ts.js:48
[UserManager] signoutRedirect: begin oidc-client-ts.js:48
[RedirectNavigator] prepare: begin oidc-client-ts.js:48
...

Yeah, I have noticed that. I have to check whether that's bug in my code. Could that cause a havoc?

Yes, that could cause the havoc. The third postForm would never happen. I do not see a way to prevent that, unless making use of a locking mechanisms (https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API).
Looks like you call signoutRedirect without resolving/await the returned promise, that would also help. As _revokeInternal checks for access token and refresh token in the user...

Yes, that could cause the havoc. The third postForm would never happen. I do not see a way to prevent that, unless making use of a locking mechanisms (https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API).
Looks like you call signoutRedirect without resolving/await the returned promise. That would also help, as _revokeInternal checks for access token and refresh token in the user...

I'm awaiting it, await this._userManager!.signoutRedirect({ redirectMethod: 'replace', state: state }); just looking where double call can come from.

@pamapa I have figured out the issues. I can confirm the double call was the problem (maybe would worth to mention in the doco somewhere). The logout was called twice as the logout component was rendered twice or better to say, the
useEffect(( )=> {
    // initialization code
}, []);

is being called twice. This seems to start happening when the asynchronous rendering in React 18 is enabled. When I moved back to React 17 rendering, the problem disappeared.
We will have to investigate how to fix this issue if we want to go forward with React 18.
This was a tricky one, thank you very much for your help, really appreciated.

Thanks for reporting the root cause!


MIME Types

I came across F3D in my search for a minimal viewer for 3D models on linux, but it didn't seem to register itself as the default application for 3D files in my file browser.
As such i request the following:
New feature description

[ ] Expand the linux desktop entry to include a MimeType field, such that files can be opened with file managers

[ ] Make this line more specific. Could it be expanded it to only match known filename extensions?

[ ] Perhaps include the following MIME types i found while searching the internet, which you do no seem to be using:

model/step
model/step+xml
model/step+zip
model/step+xml+zip
model/x.stl-ascii
model/x.stl-binary
application/x-3ds

Contribution
I could contribute this, but I request comment on whether the listed MIME types look sound or not, would need direction on where it is preferable to put all the MIME types, and what exactly this line is supposed to match.

https://gitlab.kitware.com/f3d/f3d/-/issues/251

Leaving this link here for later maybe: https://github.com/cnr-isti-vclab/meshlab/blob/master/scripts/Linux/resources/meshlab.desktop


Add WebBluetooth Edison demo

Article will be out soon on how to program the device itself, but here is the client which is http2, polymer, service worker, manifest etc.
https://edison-webbt.appspot.com/

Looking forward to the article! :+1:

@kenchris it doesn't seem to work in Firefox. I see a white page and the following exceptions in the console:
ReferenceError: Polymer is not defined
NetworkError: Failed to load worker script at "https://edison-webbt.appspot.com/bootstrap/sw-toolbox-setup.js"

OK I will have a look at it when I have time

@shwetank article is out btw: https://developers.google.com/web/updates/2016/03/web-enabled-internet-of-things

OK, I can confirm that this doesn't work on Firefox. Some info here:
http://stackoverflow.com/questions/33265769/polymer-1-0-on-firefox-referenceerror-polymer-is-not-defined


Once the game starts (after the waiting room screen), every player shall stay on the same URL until the end of the game

Solved in commit db9d37d643ce7206c08384f968f0d690b257cf48


Forms with zaps paywall

https://primal.net/e/c4a85b06b4a2b656b15c74af401c31cad1fe7d2207f1130edaf658c7534cfc56

Is this a duplicate of #8?

yes you're right thanks!
closing this since it's a dup of #8


Document how to get Ubuntu's dynamic build to work on 14.04

So, a small miracle happened and I got working, dynamic Chromium packages on 14.04. I created this issue to try see if I can make a step-by-step guide on how to replicate this.

I plan to start a fresh new VM to see if I can get this to work once again, and note what I need to install and compile from source.

I'm interested to hear if you managed to write a step by step guide as proposed? :)

@stefson I actually wrote a draft, but it was for buildlib. It will not work for newer versions of ungoogled-chromium, so its useless now.
I suppose the current build system might work if you use the conservative settings and install clang-3.9 from a backport PPA.

if you can please provide this draft, I'll have a look into it.

@stefson Sorry, I just checked the notes and I actually didn't write them in English. :/
Either way, here are the packages you would need to build from source: icu, re2, harfbuzz, libsnappy, libsigsegv2, m4, libnettle and the whole ffmpeg.
You need to build ffmpeg with the --enable-shared flag. Here are the commands I was using (they're mostly the official instructions to build ffmpeg plus the --enabled-shared flag):
sudo apt-get update
sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev
mkdir ffmpeg_sources
cd ffmpeg_sources

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --enable-shared
make && sudo make install && make distclean
cd ..

wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
./configure --enable-shared --disable-opencl
make && sudo make install && make distclean
cd ..

sudo apt-get install cmake mercurial
hg clone https://bitbucket.org/multicoreware/x265
cd ~/ffmpeg_sources/x265/build/linux
cmake -G "Unix Makefiles" -DENABLE_SHARED:bool=on ../../source
make && sudo make install && make distclean
cd ..

wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --enable-shared
make && sudo make install && make distclean
cd ..

sudo apt-get install nasm
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --enable-nasm --enable-shared
make && sudo make install && make distclean
cd ..

wget http://downloads.xiph.org/releases/opus/opus-1.1.3.tar.gz
tar xzvf opus-1.1.3.tar.gz
cd opus-1.1.3
./configure --enable-shared
make && sudo make install && make distclean
cd ..

wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.0.tar.bz2
tar xjvf libvpx-1.6.0.tar.bz2
cd libvpx-1.6.0
./configure --disable-examples --disable-unit-tests --enable-shared
make && sudo make install && make distclean
cd ..

wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
./configure \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libtheora \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree
  --enable-shared
make && sudo make install && make distclean
hash -r
cd ..

At that time, Chromium only build using libvpx1.5.0, so I had to compile and install it separately from the rest. Not sure if this is still the case.
If you try to use utilikit to build it, you might find that the following packages are missing from 14.04:
libre2-dev libvpx-dev libavcodec-dev (>= 7) libavformat-dev libspeechd-dev (>= 0.8.3) libminizip-dev libcups2-dev (>= 1.5.0) libgcrypt20-dev
You might run into strange errors when building it. The solution, in most cases, is to look for the fault file, discover the associated package with it and manually install a newer version.
This should get you started in building it.

Well, I certainly don't agree to your style of bypassing the package manager, so I'd rather build a deb package for every single dependency which needs an upgrade to compile with recent chromium. The way the here hosted build scripts work seems to be different from what I learned to be "the debian way", going via the fakeroot debian/rules method.
Where can I find these sort of presets, usually found in $package-name.debian.tar.xz, for your project? All information I could find in your git tree are about the build dependencies and their respective names on ubuntu?
I would like to build dynamically linked binaries for ubuntu-14.04 for my chromebook, which is an arm device, and has not more than 512mb of ram. So I will end up compiling via a qemu-static chroot where I set up and upgraded all the build dependencies beforehand - if I make it to overcome all the obstacles I'll try to provide patches etc. pp. back here.

@stefson
Try following Ubuntu 16.04 build instructions. You should be able to modify the files from there to do what you want.
There's no .debian.tar.xz because utilikit is still used to setup the rest of the source tree. The debian directory is only used for applying patch files and building.

in order to work with utilikit, you'll need a working python3.5?

utilikit will generate the build scripts for the user, depending upon which value of ressources/config gets activated via export UTILIKIT_CONFIG_TYPE, correct? If so, it would be the best idea to create a prefix for trusty.

is anyone able to download the sources of chromium-57.0.2987.133.tar.xz via the prepare_sources.py script?

@stefson

in order to work with utilikit, you'll need a working python3.5?

Yes

utilikit will generate the build scripts for the user, depending upon which value of ressources/config gets activated via export UTILIKIT_CONFIG_TYPE, correct

Not quite. The generate_build_files.py does not depend on UTILIKIT_CONFIG_TYPE.

is anyone able to download the sources of chromium-57.0.2987.133.tar.xz via the prepare_sources.py script?

You can download the tar.xz yourself (there's a template link in download_main_source()), but prepare_sources.py can do source cleaning during extraction. I think you can use a combination of tar and some other utilities to do source cleaning during extraction if you want to.

for the UTILKIT* variables UTILIKIT_CONFIG_TYPE , UTILIKIT_RESOURCES , UTILIKIT_DOWNLOAD_DIR , UTIL_SANDBOX_DIR it seems to be mandantory to export their absolute paths (?), even though they are in the place they intended to be.
does the download work for other users? I know that I can copy over the tar.xz archive into the right place where it gets recognized, but I can't download via the scripts. Is this a bug?
is ninja or ninja-build a dependency for building chromium?
dpkg-checkbuilddeps says ninja-build, the Building.md file says ninja

for the UTILKIT* variables UTILIKIT_CONFIG_TYPE , UTILIKIT_RESOURCES , UTILIKIT_DOWNLOAD_DIR , UTIL_SANDBOX_DIR it seems to be mandantory to export their absolute paths (?), even though they are in the place they intended to be.

Only CONFIG_TYPE is mandatory. All the other ones have default values relative to where the scripts are located in the filesystem.

does the download work for other users? I know that I can copy over the tar.xz archive into the right place where it gets recognized, but I can't download via the scripts. Is this a bug?

I use prepare_sources.py every time I update. What problem are you having?

dpkg-checkbuilddeps says ninja-build, the Building.md file says ninja

That's a typo in the documentation. What dpkg-checkbuilddeps tells you is correct.

There is a PPA with python3.5 for trusty, to make utilikit working! It doesn't really with python3.4. No port for arm unfortunately, maybe I can ask for it.
https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes
I also found informations about how to setup a PPA fairly easy, I may try to config one to satisfy the build dependencies. Regarding libminizip-dev, it obviously can be taken from xenial without breaking the system.
https://opensourcehacker.com/2013/03/20/how-to-backport-packages-on-ubuntu-linux/
The libvpx dependency might be tricky, gentoo for instance doesn't allow a build against system-libvpx for >57 at the moment, and my guess is there will be a reason for it. ffmpeg-3.2 seems to be mandatory.
But tell me, what is the benefit of this project compared to the upstream chromium provided by ubuntu-security channel? I thought it was that ubuntu-security links statical, and this project links dynamical - but pointing on /usr/lib/chromium/chromium of the ubuntu-security build via file or ldd command shows that it is dynamically linked without a doubt.
Is it the patchset and some of the build options which you seem to alter?

Sorry for the delayed response. I must've forgotten to submit the message before I went elsewhere.

I thought it was that ubuntu-security links statical, and this project links dynamical - but pointing on /usr/lib/chromium/chromium of the ubuntu-security build via file or ldd command shows that it is dynamically linked without a doubt.

I don't know of any Chromium build that is completely static. Even the official Chrome builds are not static.

Is it the patchset and some of the build options which you seem to alter?

Yes. Please read the beginning of the README for more details.
The main emphasis of this project is not to provide an easy means of compiling Chromium; the build system is mainly a superfluous feature.

Can you please provide me with the output of ldd and file of the chromium binary, so that I can compare it to my gentoo build which is, in my believe, 100% dynamically linked?

@stefson What do you mean by 100%? Also, I only have a Debian build which will probably differ from your binary.

nevermind, I'll download the binaries from here to check them on my own

I can't continue with my efforts at the moment because there is no arm backport of python-3.5 for trusty available. If this ever will be available I'll try to go on with working this out. Keep the thread on subscribed, so please ping me if there is something of interest.

@stefson If python-3.5 is already on trusty in another architecture, you could try compiling it (or cross-compiling it) for arm trusty. Though I'm not sure if there's anything that would need to be tweaked for that to work...
You could also run utilikit on another machine and then copy the build sandbox over to your trusty machine to build.

I asked the guy from the ppa for an arm backport via email, to no response.
Don't think it is a reasonable idea to copy over the prepared build sandbox from my main amd64 machine into an arm environement, 100% dynamic building is not possible anyway, see - https://bugs.chromium.org/p/chromium/issues/detail?id=697843

@stefson I don't think I understand what you mean. What would happen if you copy over the build sandbox after you've done all of the domain substitution and generated all of the build scripts?

I can't imagine it would work. Maybe it does, but don't care at the moment due to #697843 and other issues ahead.

Okay. I also think it will become increasingly difficult to do dynamic building since Chromium's libraries are upgrading over time. It'll probably be easier to use linux_conservative on trusty.

Closing due to inactivity, and it's probably too impractical.


Portal "create site" creates the portal content folder in wrong place

Seems that portal's "create site" functionality in ArcGIS Enterprise cookbook is creating the content folder in wrong place when/if shared network drive is used for "content_dir". Shared folder is needed for HA configuration where content should be shared. We're using DFS namespaces for share definitions in the domain.
We have Chef node configuration (.json) with following content definition for portal:
"content_dir":"\\test.domain.com\Shared\Data\ArcGIS\portal"
Installation creates the specified "portal" folder just fine. However when recipe executes the "create_site" it creates a separate "content" folder to the parent "ArcGIS" folder (at the same level with "portal" folder) - NOT in the portal folder as specified with the "content_dir" definition.
So, we end up with a folder structure like

which is wrong and portal ends to mess!
This content folder should to my understanding be created inside the portal folder, NOT at the same level.
Chef client version 13.8.5
ArcGIS Cookbook: 3.2.0 and 3.2.1

Seems that the recipe logic is not perfect, but I managed to fix this issue by defining the content_dir as
"content_dir":"\test.domain.com\Shared\Data\ArcGIS\portal\content"
which eliminates the recipe to create this content elsewhere.

Seems that the recipe logic is not perfect, but I managed to fix this issue by defining the content_dir as
"content_dir":"\test.domain.com\Shared\Data\ArcGIS\portal\content"
which eliminates the recipe to create this content elsewhere.

I believe this issue is related to the Portal Create Site API, rather than the cookbook. The portal setup doesn't require appending 'content' to the end of the path because the setup will create this directory. Therefore, node['arcgis']['portal']['data_dir'] can be set to C:\arcgisportal and it will create C:\arcgisportal\content.
However, the Create Site behaves a bit differently and needs the 'content' directory specified in the path. This is because it uses the "connectionString":
contentStore={"type": "fileStore","provider": "FileSystem","connectionString": "C:/arcgisportal/content"}
https://developers.arcgis.com/rest/enterprise-administration/portal/create-site.htm
We have updated the attribute list to hopefully make this more clear.
node['arcgis']['portal']['content_store_connection_string'] = Portal for ArcGIS content store connection string. Default connection string is node['arcgis']['portal']['content_dir'].
node['arcgis']['portal']['content_dir'] = Portal for ArcGIS content directory. Default directory is C:\arcgisportal\content on Windows and /arcgis/portal/usr/arcgisportal/content on Linux.
node['arcgis']['portal']['data_dir'] = Data directory path used by Portal for ArcGIS setup. The path must be a local directory, not a shared network directory. Dafault path on Windows is C:\arcgisportal, on Linux is /arcgis/portal/usr/arcgisportal/.
https://github.com/Esri/arcgis-cookbook/tree/master/cookbooks/arcgis-enterprise#portal


WP-CLI -> Terminus

I've got the feeling that

Thanks! Hacking on WP-CLI should be fun

should actually read

Thanks! Hacking on Terminus should be fun

There is also this line:

Run ./bin/wp --info to test if everything was installed properly.

But I don't know how to change it, as terminus doesn't have --info. Perhaps to .bin/terminus cli info?

Actually, I just noticed many more reference to WP CLI -- Not sure how useful this PR is now... :)

@vincenzo thanks for the help. Definitely useful in its current state!


Dark background would be better

Darker background would look better and not be a pain for our eyes !

x-special/nautilus-clipboard
copy
file:///home/tkrsh/Pictures/Screenshot%20from%202020-07-29%2020-55-28.png

Oh nice 👍


How to get cache when using default config?

What is your question?
I am upgrading to the latest certmagic, and have to adjust my code given the loss of Config.Unmanage(). In my simple use of certmagic I create it using certmagic.NewDefault(), meaning I don't create the cache in my code.
The release notes say I should replace Unmanage with Cache.RemoveManaged(). But I don't have the cache.
I looked at the docs and I don't see a getter for the cache in Config.
What have you already tried?
I could try creating a default cache myself, stashing a pointer to it, and using that when I need to stop managing a cert. But that would defeat the convenience of NewDefault.
I am wondering if I missed something, or if there should maybe be a getter for the Cache in Config. Or it could be exported? It's the only non-exported field in the config.
Bonus: What do you use this package for, and does it help you?
I'm happily using certmagic in my project Dropserver.
https://github.com/teleclimber/Dropserver/blob/9585ea716ba59ddb3feeab09ff10841238be1af0/cmd/ds-host/certificatemanager.go/certificatemanager.go#L108
Thanks!

It's unexported to avoid it being changed, etc.
If you have such an advanced use case that you need to remove certs from the cache, why not just make your own cache?

Sure I can understand that this shouldn't get changed. I can totally build my own cache. I was just asking because it seemed weird (as in a step in the wrong direction) that the change to cache.RemoveManaged() has the side effect of preventing use of NewDefault.
But maybe I'm doing this all wrong. In my case users can stop using a subdomain, and as such the certificate should "go away" (deleted and no longer renewed). Is Revoke() what I should be using here? Presumably using cessationOfOperation reason code? I've never "revoked" a cert when I stopped using it, but it seems this is the correct thing to do?
Thanks.

I guess we could consider putting RemoveManaged() onto the Config instead of the cache... hmm, I'll look into it.

But maybe I'm doing this all wrong. In my case users can stop using a subdomain, and as such the certificate should "go away" (deleted and no longer renewed).

If you don't control the domains (i.e. they are their domains) then you should use on-demand TLS, which will do all this for you :+1:
It's unusual to need to stop cert management with the same config otherwise. But I can still look into this if on-demand TLS really isn't the right thing for you.

If you don't control the domains (i.e. they are their domains) then you should use on-demand TLS, which will do all this for you 👍

In Dropserver's case, people run their own instances, and use subdomains of domains that they own. It's not a service that I run where anybody from the public can use it with their domain.
Maybe on-demand TLS would work, but the Dropserver instance knows when a new subdomain is created to serve an app, and when it's deleted. So it seems natural to hook in to those events to create and remove certificates.

Hm, I see. I'll look into refactoring this when I have a chance :+1:


Suddenly stopped working

Describe the bug
I tried connecting my Android phone, a Blu device, using a USB cable, and no matter what I do, no matter how many times I click the Refresh icon, it does not load.  I have had to wirelessly transfer my files, and I will literally die before the transfer is finished.
Expected behaviour
It's supposed to load the phone's internal files and should also load the files on the microSD card when I click the microSD card icon.  It did before, then I made the mistake of updating, and now it won't work.
Current Behavior
Nothing.  Literally nothing.

Steps to Reproduce (for bugs)
Provide a link to a live example or an unambiguous set of steps to reproduce this bug. Include code to reproduce, if relevant

Buy a clearly inferior Android phone

Buy a clearly inferior USB cable.

Connect inferior phone using inferior cable to old MacBook Pro

Get angry that macOS does not natively support MTP, and realize your life would literally be easier if it did.

Stare at the screen in rage as the application that used to work suddenly doesn't.

Realize your life is completely worthless.

Context
Well, now I have to wirelessly transfer the files using Commander One as an FTP client and some cheap FTP server app I paid for a few years ago, thank God.    And yes, this happens on every single network I try.
Your Environment
Well, I'm on the West coast, at my sister's house, using her Xfinity connection.

Operating System and version [e.g. macOS 10.14 mojave]:  macOS 10.14 Mojave
App Version [e.g. OpenMTP-v1.0]: 2.4.4

I really like the app and it was wonderful when it was working, and it's likely due to the fact that I am cursed and that absolutely nothing in my life ever works.  In any case, I'm going back to using Android File Transfer.

Hey @ema1982

Your Environment
Well, I'm on the West coast, at my sister's house, using her Xfinity connection.

You made my day! :D
I feel you, we all feel ya!
I made this app literally for the same reason as I didn't find help from anywhere and all the apps found online were slow or expensive. I am well aware of the OpenMTP's incompatibility issue with certain devices. This is beyond my reach for now. I have been reaching out to the community to help me build a new Kernel which could allow OpenMTP to connect to wider range of devices.
I have some ideas, but I am not getting enough time to work on it.

it's likely due to the fact that I am cursed and that absolutely nothing in my life ever works
It's not you, it's MTP (the protocol) which is cursed.

Hold on to it, I will see if I can do something about this.

This should have been fixed by https://github.com/ganeshrvel/openmtp/pull/181
Keeping this open until the stable release it out.

Hi @ema1982,
Could you download the latest community beta version of OpenMTP from https://drive.google.com/file/d/1wpSlkGWZKe4-nRYcdJaPVA3Y6kOBMTsO/view?usp=sharing and let me know whether your device is recognized?
Cheers


handling inversion

The imu get_acc_angles() function output is incorrect when the IMU is inverted (phi and theta converge back to 0).
It seems to be due to loss of sign in the 2nd argument to the atan2 calls.  I'd like to figure out how to correct it.
https://github.com/pms67/Attitude-Estimation/blob/44a4970d33268dc9ac06fc548e2935200238ffd3/imu.py#L48-L52
Thank you for the excellent article and sample code!

This seems to work (from https://stackoverflow.com/questions/3755059/3d-accelerometer-calculate-the-orientation):
phi = math.atan2(ay, az)

However from https://www.nxp.com/files-static/sensors/doc/app_note/AN4248.pdf, there also seems to be a different way to compute theta:
phi = math.atan2(ay, az)
theta = math.atan2(-ax, ay * math.sin(phi) + az * math.cos(phi))