makabe.t 0212c61bbc Merged PR 550: 画面実装(トークンを定期的に更新する仕組み)
## 概要
[Task2910: 画面実装(トークンを定期的に更新する仕組み)](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2910)

- タイマーで定期的に代行操作用のアクセストークンを更新する処理を実装しました。

## レビューポイント
- 通常のアクセストークンのタイマー内で同じタイミングでチェックするように実装していますが分けたほうがいいなどありますでしょうか?

## UIの変更
- [Task2910](https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task2910?csf=1&web=1&e=g0RdIf)

## 動作確認状況
- ローカルで確認
2023-11-07 07:15:25 +00:00

79 lines
1.6 KiB
TypeScript

// トークンの型やtypeGuardの関数を配置するファイル
export interface Token {
delegateUserId?: string;
userId: string;
role: string;
tier: number;
exp: number;
iat: number;
}
// Type Guard
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const isToken = (arg: any): arg is Token => {
if (arg.userId === undefined) {
return false;
}
if (arg.role === undefined) {
return false;
}
if (arg.tier === undefined) {
return false;
}
if (arg.exp === undefined) {
return false;
}
if (arg.iat === undefined) {
return false;
}
return true;
};
interface IdToken {
credentialType: string;
homeAccountId: string;
environment: string;
clientId: string;
secret: string;
realm: string;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const isIdToken = (arg: any): arg is IdToken => {
const idToken = arg as IdToken;
if (idToken.credentialType === undefined) {
return false;
}
if (idToken.homeAccountId === undefined) {
return false;
}
if (idToken.environment === undefined) {
return false;
}
if (idToken.clientId === undefined) {
return false;
}
if (idToken.secret === undefined) {
return false;
}
if (idToken.realm === undefined) {
return false;
}
return true;
};
export const getIdTokenFromLocalStorage = (
localStorageKeyforIdToken: string
): string | null => {
const idTokenString = localStorage.getItem(localStorageKeyforIdToken);
if (idTokenString) {
const idTokenObject = JSON.parse(idTokenString);
if (isIdToken(idTokenObject)) {
return idTokenObject.secret;
}
}
return null;
};