@meistrari/auth-nuxt 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meistrari/auth-nuxt",
3
3
  "configKey": "telaAuth",
4
- "version": "3.2.0",
4
+ "version": "3.2.1",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
@@ -29,8 +29,9 @@ export default defineNuxtPlugin({
29
29
  maxAge: SEVEN_DAYS
30
30
  });
31
31
  const authClient = createNuxtAuthClient(appConfig.apiUrl, () => null, () => refreshTokenCookie.value ?? null);
32
- let tokenRefreshInterval = null;
33
32
  let isRefreshing = false;
33
+ let refreshWorker = null;
34
+ let workerAvailable = true;
34
35
  async function refreshToken() {
35
36
  if (isRefreshing) {
36
37
  return;
@@ -65,11 +66,36 @@ export default defineNuxtPlugin({
65
66
  state.user.value = null;
66
67
  state.activeOrganization.value = null;
67
68
  }
68
- async function scheduleTokenRefresh() {
69
- if (tokenRefreshInterval) {
70
- clearTimeout(tokenRefreshInterval);
71
- tokenRefreshInterval = null;
69
+ function scheduleWorkerTimeout(delayMs, callback) {
70
+ if (refreshWorker) {
71
+ refreshWorker.terminate();
72
+ refreshWorker = null;
73
+ }
74
+ try {
75
+ const workerScript = `self.onmessage=function(e){setTimeout(function(){postMessage('tick')},e.data)}`;
76
+ const blob = new Blob([workerScript], { type: "application/javascript" });
77
+ const blobUrl = URL.createObjectURL(blob);
78
+ const worker = new Worker(blobUrl);
79
+ URL.revokeObjectURL(blobUrl);
80
+ worker.onmessage = () => {
81
+ worker.terminate();
82
+ refreshWorker = null;
83
+ callback();
84
+ };
85
+ worker.onerror = () => {
86
+ worker.terminate();
87
+ refreshWorker = null;
88
+ workerAvailable = false;
89
+ window.setTimeout(callback, delayMs);
90
+ };
91
+ worker.postMessage(delayMs);
92
+ refreshWorker = worker;
93
+ } catch {
94
+ workerAvailable = false;
95
+ window.setTimeout(callback, delayMs);
72
96
  }
97
+ }
98
+ async function scheduleTokenRefresh() {
73
99
  if (!accessTokenCookie.value || isTokenExpired(accessTokenCookie.value, TWO_MINUTES)) {
74
100
  const result = await refreshToken();
75
101
  if (!result) {
@@ -81,7 +107,7 @@ export default defineNuxtPlugin({
81
107
  return;
82
108
  }
83
109
  const nextRefresh = Math.max(expiry - TWO_MINUTES - Date.now(), 0);
84
- tokenRefreshInterval = window.setTimeout(() => void refreshToken(), nextRefresh);
110
+ scheduleWorkerTimeout(nextRefresh, () => void scheduleTokenRefresh());
85
111
  }
86
112
  if (import.meta.server) {
87
113
  if (accessTokenCookie.value) {
@@ -128,6 +154,11 @@ export default defineNuxtPlugin({
128
154
  }
129
155
  }
130
156
  void scheduleTokenRefresh();
157
+ document.addEventListener("visibilitychange", () => {
158
+ if (document.visibilityState === "visible" && !workerAvailable) {
159
+ void scheduleTokenRefresh();
160
+ }
161
+ });
131
162
  }
132
163
  }
133
164
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meistrari/auth-nuxt",
3
- "version": "3.2.0",
3
+ "version": "3.2.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {