fix: password update response parsing
This commit is contained in:
parent
709d0892b9
commit
37fe85a7b4
@ -103,6 +103,7 @@ export const accessToken: Writable<string | null> = writable(null)
|
|||||||
export const csrfToken: Writable<string | null> = writable(null)
|
export const csrfToken: Writable<string | null> = writable(null)
|
||||||
export const isPending: Writable<boolean> = writable(false)
|
export const isPending: Writable<boolean> = writable(false)
|
||||||
export const cError: Writable<string | null> = writable(null)
|
export const cError: Writable<string | null> = writable(null)
|
||||||
|
export const cSuccess: Writable<string | null> = writable(null)
|
||||||
|
|
||||||
class ApiClient {
|
class ApiClient {
|
||||||
private viewCookieName: string
|
private viewCookieName: string
|
||||||
@ -122,10 +123,11 @@ class ApiClient {
|
|||||||
|
|
||||||
private async handleRequest<T>(
|
private async handleRequest<T>(
|
||||||
fn: () => Promise<T>,
|
fn: () => Promise<T>,
|
||||||
options: { useBearerAuth: boolean }
|
options: { useBearerAuth: boolean; suspendGlobalErr: boolean }
|
||||||
): Promise<T | null> {
|
): Promise<T | null> {
|
||||||
isPending.set(true)
|
isPending.set(true)
|
||||||
cError.set(null)
|
cError.set(null)
|
||||||
|
cSuccess.set(null)
|
||||||
|
|
||||||
// NOTE: If `handleResponse` is used, errors thrown from it will be caught here
|
// NOTE: If `handleResponse` is used, errors thrown from it will be caught here
|
||||||
|
|
||||||
@ -145,8 +147,17 @@ class ApiClient {
|
|||||||
|
|
||||||
return await fn()
|
return await fn()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
cError.set(err instanceof Error ? err.message : "Unknown error")
|
const errMsg = err instanceof Error ? err.message : "Unknown error"
|
||||||
console.log(`[ERR] ${get(cError)}`)
|
|
||||||
|
// 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 {
|
} finally {
|
||||||
isPending.set(false)
|
isPending.set(false)
|
||||||
}
|
}
|
||||||
@ -224,7 +235,7 @@ class ApiClient {
|
|||||||
accessToken.set(newToken)
|
accessToken.set(newToken)
|
||||||
this.lastAtUpdate = new Date()
|
this.lastAtUpdate = new Date()
|
||||||
},
|
},
|
||||||
{ useBearerAuth: false }
|
{ useBearerAuth: false, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,7 +269,7 @@ class ApiClient {
|
|||||||
csrfToken.set(newToken)
|
csrfToken.set(newToken)
|
||||||
this.lastCsrfUpdate = new Date()
|
this.lastCsrfUpdate = new Date()
|
||||||
},
|
},
|
||||||
{ useBearerAuth: false }
|
{ useBearerAuth: false, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -414,7 +425,7 @@ class ApiClient {
|
|||||||
|
|
||||||
await goto("/login")
|
await goto("/login")
|
||||||
},
|
},
|
||||||
{ useBearerAuth: false }
|
{ useBearerAuth: false, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -437,7 +448,7 @@ class ApiClient {
|
|||||||
|
|
||||||
goto("/")
|
goto("/")
|
||||||
},
|
},
|
||||||
{ useBearerAuth: false }
|
{ useBearerAuth: false, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,10 +469,10 @@ class ApiClient {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.handleResponse<void>(response, { useBearerAuth: false })
|
await this.handleResponse<void>(response, { useBearerAuth: true })
|
||||||
await this.handleLocalLogout()
|
await this.handleLocalLogout()
|
||||||
},
|
},
|
||||||
{ useBearerAuth: true }
|
{ useBearerAuth: true, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,12 +484,12 @@ class ApiClient {
|
|||||||
...this.getAuthHeader()
|
...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)
|
const user = this.deserializeUser(data)
|
||||||
|
|
||||||
currentUser.set(user)
|
currentUser.set(user)
|
||||||
},
|
},
|
||||||
{ useBearerAuth: true }
|
{ useBearerAuth: true, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,19 +509,20 @@ class ApiClient {
|
|||||||
...this.getAuthHeader(),
|
...this.getAuthHeader(),
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
},
|
},
|
||||||
|
credentials: "include",
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
})
|
})
|
||||||
|
|
||||||
const { accessToken: token, user } = await this.handleResponse<{
|
const { access_token: token, user } = await this.handleResponse<{
|
||||||
accessToken: string
|
access_token: string
|
||||||
user: User
|
user: User
|
||||||
}>(response, { useBearerAuth: false })
|
}>(response, { useBearerAuth: true })
|
||||||
|
|
||||||
accessToken.set(token)
|
accessToken.set(token)
|
||||||
currentUser.set(user || null)
|
currentUser.set(user || null)
|
||||||
this.lastAtUpdate = new Date()
|
this.lastAtUpdate = new Date()
|
||||||
},
|
},
|
||||||
{ useBearerAuth: true }
|
{ useBearerAuth: true, suspendGlobalErr: true } // Error displayed inside the settings modal
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -532,10 +544,10 @@ class ApiClient {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.handleResponse<void>(response, { useBearerAuth: false })
|
await this.handleResponse<void>(response, { useBearerAuth: true })
|
||||||
await this.handleLocalLogout()
|
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`)
|
console.log(`[ADMIN] Got ${users.length} user results`)
|
||||||
|
|
||||||
return users
|
return users
|
||||||
},
|
},
|
||||||
{ useBearerAuth: true }
|
{ useBearerAuth: true, suspendGlobalErr: true } // Error displayed inside the settings modal
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -589,9 +601,9 @@ class ApiClient {
|
|||||||
return
|
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 notes: NoteMetadata[] = []
|
||||||
let data = await this.handleResponse<ApiNoteMetadataResponse[]>(response, {
|
let data = await this.handleResponse<ApiNoteMetadataResponse[]>(response, {
|
||||||
useBearerAuth: false
|
useBearerAuth: true
|
||||||
})
|
})
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
@ -620,7 +632,7 @@ class ApiClient {
|
|||||||
|
|
||||||
return notes
|
return notes
|
||||||
},
|
},
|
||||||
{ useBearerAuth: true }
|
{ useBearerAuth: true, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,9 +648,9 @@ class ApiClient {
|
|||||||
...this.getAuthHeader()
|
...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, {
|
const data = await this.handleResponse<ApiFullNoteResponse>(response, {
|
||||||
useBearerAuth: false
|
useBearerAuth: true
|
||||||
})
|
})
|
||||||
const note = this.deserializeFullNote(data)
|
const note = this.deserializeFullNote(data)
|
||||||
|
|
||||||
@ -675,7 +687,7 @@ class ApiClient {
|
|||||||
|
|
||||||
return note
|
return note
|
||||||
},
|
},
|
||||||
{ useBearerAuth: true }
|
{ useBearerAuth: true, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,9 +710,9 @@ class ApiClient {
|
|||||||
return
|
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, {
|
const data = await this.handleResponse<ApiVersionMetadataResponse[]>(response, {
|
||||||
useBearerAuth: false
|
useBearerAuth: true
|
||||||
})
|
})
|
||||||
const versions = this.deserializeVersionMetadatas(data)
|
const versions = this.deserializeVersionMetadatas(data)
|
||||||
|
|
||||||
@ -737,7 +749,7 @@ class ApiClient {
|
|||||||
|
|
||||||
return versions
|
return versions
|
||||||
},
|
},
|
||||||
{ useBearerAuth: true }
|
{ useBearerAuth: true, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -764,9 +776,9 @@ class ApiClient {
|
|||||||
return
|
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, {
|
const data = await this.handleResponse<ApiFullVersionResponse>(response, {
|
||||||
useBearerAuth: false
|
useBearerAuth: true
|
||||||
})
|
})
|
||||||
const version = this.joinDeserializedVersion(noteID, data)
|
const version = this.joinDeserializedVersion(noteID, data)
|
||||||
|
|
||||||
@ -811,7 +823,7 @@ class ApiClient {
|
|||||||
|
|
||||||
return version
|
return version
|
||||||
},
|
},
|
||||||
{ useBearerAuth: true }
|
{ useBearerAuth: true, suspendGlobalErr: false }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user