PageSourceSearch

https://hlektra.gov.gr/_content/Z0.Blazor.Core/silentRefresh.js

js hlektra.gov.gr collected 2026-09-26 02:42:24 UTC 4,797 bytes, 159 lines download raw bytes

1
2
3function refreshContainer(refreshTokenExpirationTime, accessTokenExpirationTime) {
4  let refresh = false
5  let refreshCback = null
6  let afterRefreshCback = null
7  let onSessionExpireCback = null
8  let userIsInactive = false
9
10  const timersContainer = () => {
11    let refreshTokenTimer
12    let accessTokenTimer
13    const oneMinute = 60000
14    const twoMinutes = oneMinute * 2
15    window.onload = resetTimersOnMovement
16    window.onmousemove = resetTimersOnMovement
17    window.onmousedown = resetTimersOnMovement
18    window.ontouchstart = resetTimersOnMovement
19    window.ontouchmove = resetTimersOnMovement
20    window.onclick = resetTimersOnMovement
21    window.onkeydown = resetTimersOnMovement
22    window.addEventListener('scroll', resetTimersOnMovement, true)
23
24    async function inactiveIndicator() {
25      // this is called only when there is no motion during the life time of the refresh token
26      userIsInactive = true
27
28      if (onSessionExpireCback) {
29        await onSessionExpireCback()
30      }
31    }
32
33    function resetTimersOnMovement() {
34      if (userIsInactive) return
35
36      if (!refresh) {
37        refresh = true
38
39        if (refreshCback) {
40          accessTokenTimer = setTimeout(async () => {
41            // wait untill access tokens is near to expire
42            // after that time is passed, set 'refresh' to 'false'
43            // and wait for 'resetTimersOnMovement' to be called again (to refresh the tokens).
44            // if no movement is detected during the life time of the refresh token,
45            // the 'resetTimersOnMovement' will not be called and the refresh token will be expired
46            // (so the session will be killed and the user will have to login again)
47
48              await refreshCback() // call the callback to refresh the tokens
49
50              const triggerAfterRefresh = async () => {
51                  if (afterRefreshCback) {
52                      await afterRefreshCback()
53                  }
54              }
55
56              setTimeout(triggerAfterRefresh, 1500)
57
58            refresh = false
59          }, accessTokenExpirationTime * oneMinute - twoMinutes)
60        }
61      }
62
63      clearTimeout(refreshTokenTimer)
64      refreshTokenTimer = setTimeout(
65        inactiveIndicator,
66        refreshTokenExpirationTime * oneMinute - twoMinutes,
67      )
68    }
69
70    return {
71      resetTimersOnMovement,
72    }
73  }
74
75  const start = () => {
76    if (refreshCback) {
77        refreshCback()
78        if (afterRefreshCback) {
79            setTimeout(afterRefreshCback, 1500)
80        }
81    }
82    timersContainer().resetTimersOnMovement()
83  }
84
85  return {
86    onRefresh(callback) {
87      refreshCback = callback
88    },
89    afterRefresh(callback) {
90      afterRefreshCback = callback
91    },
92    onSessionExpire(callback) {
93        onSessionExpireCback = callback
94    },
95    startTimers() {
96      start()
97    }
98  }
99}
100
101function trySelect(selector, callback) {
102  const check = setInterval(() => {
103    if (document.querySelector(selector)) {
104      clearInterval(check)
105
106      callback()
107    }
108  }, 1000)
109
110  window.onpopstate = function (event) { clearInterval(check); };
111}
112
113function onPageMount(callback) {
114  document.addEventListener('DOMContentLoaded', callback)
115}
116
117window.GetRequest = async function GetRequest(url) {
118    const request = await fetch(url)
119    const response = await request.json();
120    const result = response.Result
121
122    return result
123}
124
125window.silentRefresh = async function(dotnetHelper) {
126
127    const { refreshTokenExpirationTime, accessTokenExpirationTime, appSelector, onRefreshMethodName, onAfterRefreshMethodName, onSessionExpireMethodName } =
128        window.silentRefreshSettings
129
130    console.log("Z0.Blazor.Core.window.silentRefresh: onSessionExpireMethodName = ", onSessionExpireMethodName)
131
132    trySelect(appSelector, () => {
133
134        const container = refreshContainer(
135            refreshTokenExpirationTime,
136            accessTokenExpirationTime,
137        )
138
139        container.onRefresh(async () => {
140            if (!onRefreshMethodName) return
141
142            await dotnetHelper.invokeMethodAsync(onRefreshMethodName)
143        })
144
145        container.afterRefresh(async () => {
146            if (!onAfterRefreshMethodName) return
147            await dotnetHelper.invokeMethodAsync(onAfterRefreshMethodName)
148        })
149
150        container.onSessionExpire(async () => {
151            console.log("Z0.Blazor.Core.container.onSessionExpire: onSessionExpireMethodName = ", onSessionExpireMethodName);
152            if (!onSessionExpireMethodName) return
153
154            await dotnetHelper.invokeMethodAsync(onSessionExpireMethodName)
155        })
156
157        container.startTimers()
158    })
159}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.