28 lines
1.3 KiB
JavaScript
28 lines
1.3 KiB
JavaScript
function createSpaCurrentUser({ fetchJson }) {
|
|
async function requestCurrentUser() {
|
|
const debugRequests = [];
|
|
let user = null;
|
|
try {
|
|
const result = await fetchJson("https://spa.oracle.com/oalcrm/web/api/identity-management/users/current", {
|
|
method: "GET", credentials: "include", cache: "no-store", headers: { Accept: "application/json" }
|
|
}, "requestCurrentUser", debugRequests);
|
|
if (!result?.user || !Array.isArray(result.user.roles) || result.user.roles.some(role => typeof role !== "string")) {
|
|
throw new Error("requestCurrentUser returned invalid user roles.");
|
|
}
|
|
user = { id: result.user.id, name: result.user.name, roles: result.user.roles };
|
|
return { ok: true, user, debugRequests };
|
|
} catch (error) {
|
|
for (const entry of debugRequests) { entry.status = "failed"; entry.error = error.message; }
|
|
error.debugRequests = debugRequests;
|
|
throw error;
|
|
} finally {
|
|
// The identity token is not needed by content scripts or debug, including on failures.
|
|
for (const entry of debugRequests) {
|
|
entry.responseBody = JSON.stringify(user ? { user, token: "(redacted)" } : { error: "Identity response omitted." }, null, 2);
|
|
entry.responseBodyTruncated = false;
|
|
}
|
|
}
|
|
}
|
|
return { requestCurrentUser };
|
|
}
|