fix: password update response parsing

This commit is contained in:
ae 2025-04-21 22:21:06 +03:00
parent 709d0892b9
commit 37fe85a7b4
Signed by: ae
GPG Key ID: 995EFD5C1B532B3E

View File

@ -103,6 +103,7 @@ export const accessToken: Writable<string | null> = writable(null)
export const csrfToken: Writable<string | null> = writable(null)
export const isPending: Writable<boolean> = writable(false)
export const cError: Writable<string | null> = writable(null)
export const cSuccess: Writable<string | null> = writable(null)
class ApiClient {
private viewCookieName: string
@ -122,10 +123,11 @@ class ApiClient {
private async handleRequest<T>(
fn: () => Promise<T>,
options: { useBearerAuth: boolean }
options: { useBearerAuth: boolean; suspendGlobalErr: boolean }
): Promise<T | null> {
isPending.set(true)
cError.set(null)
cSuccess.set(null)
// NOTE: If `handleResponse` is used, errors thrown from it will be caught here
@ -145,8 +147,17 @@ class ApiClient {
return await fn()
} catch (err) {
cError.set(err instanceof Error ? err.message : "Unknown error")
console.log(`[ERR] ${get(cError)}`)
const errMsg = err instanceof Error ? err.message : "Unknown error"
// The suspension option is handy when we want to display the error inside a modal instead of in a global notification
if (options.suspendGlobalErr) {
// Throw the same error to the next handler (should be handled inside the caller component)
throw new Error(errMsg)
} else {
cError.set(errMsg)
}
console.log(`[ERR] ${errMsg}`)
} finally {
isPending.set(false)
}
@ -224,7 +235,7 @@ class ApiClient {
accessToken.set(newToken)
this.lastAtUpdate = new Date()
},
{ useBearerAuth: false }
{ useBearerAuth: false, suspendGlobalErr: false }
)
}
@ -258,7 +269,7 @@ class ApiClient {
csrfToken.set(newToken)
this.lastCsrfUpdate = new Date()
},
{ useBearerAuth: false }
{ useBearerAuth: false, suspendGlobalErr: false }
)
}
@ -414,7 +425,7 @@ class ApiClient {
await goto("/login")
},
{ useBearerAuth: false }
{ useBearerAuth: false, suspendGlobalErr: false }
)
}
@ -437,7 +448,7 @@ class ApiClient {
goto("/")
},
{ useBearerAuth: false }
{ useBearerAuth: false, suspendGlobalErr: false }
)
}
@ -458,10 +469,10 @@ class ApiClient {
return
}
await this.handleResponse<void>(response, { useBearerAuth: false })
await this.handleResponse<void>(response, { useBearerAuth: true })
await this.handleLocalLogout()
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
@ -473,12 +484,12 @@ class ApiClient {
...this.getAuthHeader()
}
})
const data = await this.handleResponse<ApiUserResponse>(response, { useBearerAuth: false })
const data = await this.handleResponse<ApiUserResponse>(response, { useBearerAuth: true })
const user = this.deserializeUser(data)
currentUser.set(user)
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
@ -498,19 +509,20 @@ class ApiClient {
...this.getAuthHeader(),
"Content-Type": "application/json"
},
credentials: "include",
body: JSON.stringify(data)
})
const { accessToken: token, user } = await this.handleResponse<{
accessToken: string
const { access_token: token, user } = await this.handleResponse<{
access_token: string
user: User
}>(response, { useBearerAuth: false })
}>(response, { useBearerAuth: true })
accessToken.set(token)
currentUser.set(user || null)
this.lastAtUpdate = new Date()
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: true } // Error displayed inside the settings modal
)
}
@ -532,10 +544,10 @@ class ApiClient {
return
}
await this.handleResponse<void>(response, { useBearerAuth: false })
await this.handleResponse<void>(response, { useBearerAuth: true })
await this.handleLocalLogout()
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: true } // Error displayed inside the settings modal
)
}
@ -556,12 +568,12 @@ class ApiClient {
}
})
const users = await this.handleResponse<User[]>(response, { useBearerAuth: false })
const users = await this.handleResponse<User[]>(response, { useBearerAuth: true })
console.log(`[ADMIN] Got ${users.length} user results`)
return users
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: true } // Error displayed inside the settings modal
)
}
@ -589,9 +601,9 @@ class ApiClient {
return
}
await this.handleResponse<void>(response, { useBearerAuth: false })
await this.handleResponse<void>(response, { useBearerAuth: true })
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: true } // Error displayed inside the settings modal
)
}
@ -609,7 +621,7 @@ class ApiClient {
let notes: NoteMetadata[] = []
let data = await this.handleResponse<ApiNoteMetadataResponse[]>(response, {
useBearerAuth: false
useBearerAuth: true
})
if (data) {
@ -620,7 +632,7 @@ class ApiClient {
return notes
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
@ -636,9 +648,9 @@ class ApiClient {
...this.getAuthHeader()
}
})
return await this.handleResponse<NewNoteResponse>(response, { useBearerAuth: false })
return await this.handleResponse<NewNoteResponse>(response, { useBearerAuth: true })
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
@ -665,7 +677,7 @@ class ApiClient {
})
const data = await this.handleResponse<ApiFullNoteResponse>(response, {
useBearerAuth: false
useBearerAuth: true
})
const note = this.deserializeFullNote(data)
@ -675,7 +687,7 @@ class ApiClient {
return note
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
@ -698,9 +710,9 @@ class ApiClient {
return
}
await this.handleResponse<void>(response, { useBearerAuth: false })
await this.handleResponse<void>(response, { useBearerAuth: true })
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
@ -728,7 +740,7 @@ class ApiClient {
})
const data = await this.handleResponse<ApiVersionMetadataResponse[]>(response, {
useBearerAuth: false
useBearerAuth: true
})
const versions = this.deserializeVersionMetadatas(data)
@ -737,7 +749,7 @@ class ApiClient {
return versions
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
@ -764,9 +776,9 @@ class ApiClient {
return
}
await this.handleResponse<void>(response, { useBearerAuth: false })
await this.handleResponse<void>(response, { useBearerAuth: true })
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
@ -798,7 +810,7 @@ class ApiClient {
})
const data = await this.handleResponse<ApiFullVersionResponse>(response, {
useBearerAuth: false
useBearerAuth: true
})
const version = this.joinDeserializedVersion(noteID, data)
@ -811,7 +823,7 @@ class ApiClient {
return version
},
{ useBearerAuth: true }
{ useBearerAuth: true, suspendGlobalErr: false }
)
}
}