Browse Source

fix: if shared execution error then don't signout

pull/9873/head
Pranav C 1 week ago
parent
commit
a110ec7897
  1. 11
      packages/nc-gui/composables/useApi/interceptors.ts
  2. 8
      packages/nc-gui/composables/useSharedExecutionFn.ts

11
packages/nc-gui/composables/useApi/interceptors.ts

@ -85,10 +85,13 @@ export function addAxiosInterceptors(api: Api<any>) {
return Promise.reject(refreshTokenError)
}
await state.signOut({
redirectToSignin: !isSharedPage,
skipApiCall: true,
})
// if shared execution error, don't sign out
if (!(refreshTokenError instanceof SharedExecutionError)) {
await state.signOut({
redirectToSignin: !isSharedPage,
skipApiCall: true,
})
}
return Promise.reject(error)
}

8
packages/nc-gui/composables/useSharedExecutionFn.ts

@ -1,5 +1,11 @@
import { useStorage, useTimeoutFn } from '@vueuse/core'
export class SharedExecutionError extends Error {
constructor(message?: string) {
super(message)
}
}
interface SharedExecutionOptions {
timeout?: number // Maximum time a lock can be held before it's considered stale - default 5000ms
storageDelay?: number // Delay before reading from storage to allow for changes to propagate - default 50ms
@ -102,7 +108,7 @@ export function useSharedExecutionFn<T>(key: string, fn: () => Promise<T> | T, o
() => {
timedOut = true
localStorage.removeItem(storageLockKey)
reject(new Error(`Timeout waiting for result on key ${key}`))
reject(new SharedExecutionError(`Timeout waiting for result on key ${key}`))
},
currentLock?.timestamp ? timeout - (Date.now() - currentLock.timestamp) : timeout,
)

Loading…
Cancel
Save