migrate token store to composition API and typescript

This commit is contained in:
MaysWind
2025-01-05 22:56:07 +08:00
parent 5171f23c09
commit 92a626fb21
8 changed files with 131 additions and 121 deletions
+1 -1
View File
@@ -23,7 +23,7 @@ import { mapStores } from 'pinia';
import { useRootStore } from '@/stores/index.js';
import { useSettingsStore } from '@/stores/setting.ts';
import { useUserStore } from '@/stores/user.ts';
import { useTokensStore } from '@/stores/token.js';
import { useTokensStore } from '@/stores/token.ts';
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
import { APPLICATION_LOGO_PATH } from '@/consts/asset.ts';
+1 -1
View File
@@ -12,7 +12,7 @@ import { mapStores } from 'pinia';
import { useRootStore } from '@/stores/index.js';
import { useSettingsStore } from '@/stores/setting.ts';
import { useUserStore } from '@/stores/user.ts';
import { useTokensStore } from '@/stores/token.js';
import { useTokensStore } from '@/stores/token.ts';
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
import { APPLICATION_LOGO_PATH } from '@/consts/asset.ts';
-115
View File
@@ -1,115 +0,0 @@
import { defineStore } from 'pinia';
import { useUserStore } from './user.ts';
import { updateCurrentToken } from '@/lib/userstate.ts';
import services from '@/lib/services.ts';
import logger from '@/lib/logger.ts';
import { isObject } from '@/lib/common.ts';
export const useTokensStore = defineStore('tokens', {
actions: {
getAllTokens() {
return new Promise((resolve, reject) => {
services.getTokens().then(response => {
const data = response.data;
if (!data || !data.success || !data.result) {
reject({ message: 'Unable to retrieve session list' });
return;
}
resolve(data.result);
}).catch(error => {
logger.error('failed to load token list', error);
if (error.response && error.response.data && error.response.data.errorMessage) {
reject({ error: error.response.data });
} else if (!error.processed) {
reject({ message: 'Unable to retrieve session list' });
} else {
reject(error);
}
});
});
},
refreshTokenAndRevokeOldToken() {
const self = this;
return new Promise((resolve) => {
services.refreshToken().then(response => {
const data = response.data;
if (data && data.success && data.result && data.result.user && isObject(data.result.user)) {
const userStore = useUserStore();
userStore.storeUserBasicInfo(data.result.user);
}
if (data && data.success && data.result && data.result.newToken) {
updateCurrentToken(data.result.newToken);
if (data.result.oldTokenId) {
self.revokeToken({
tokenId: data.result.oldTokenId,
ignoreError: true
});
}
}
resolve(data.result);
});
});
},
revokeToken({ tokenId, ignoreError }) {
return new Promise((resolve, reject) => {
services.revokeToken({
tokenId: tokenId,
ignoreError: !!ignoreError
}).then(response => {
const data = response.data;
if (!data || !data.success || !data.result) {
reject({ message: 'Unable to logout from this session' });
return;
}
resolve(data.result);
}).catch(error => {
logger.error('failed to revoke token', error);
if (error.response && error.response.data && error.response.data.errorMessage) {
reject({ error: error.response.data });
} else if (!error.processed) {
reject({ message: 'Unable to logout from this session' });
} else {
reject(error);
}
});
});
},
revokeAllTokens() {
return new Promise((resolve, reject) => {
services.revokeAllTokens().then(response => {
const data = response.data;
if (!data || !data.success || !data.result) {
reject({ message: 'Unable to logout all other sessions' });
return;
}
resolve(data.result);
}).catch(error => {
logger.error('failed to revoke all tokens', error);
if (error.response && error.response.data && error.response.data.errorMessage) {
reject({ error: error.response.data });
} else if (!error.processed) {
reject({ message: 'Unable to logout all other sessions' });
} else {
reject(error);
}
});
});
}
}
});
+125
View File
@@ -0,0 +1,125 @@
import { defineStore } from 'pinia';
import { useUserStore } from './user.ts';
import type { TokenRefreshResponse, TokenInfoResponse } from '@/models/token.ts';
import { isObject } from '@/lib/common.ts';
import { updateCurrentToken } from '@/lib/userstate.ts';
import logger from '@/lib/logger.ts';
import services from '@/lib/services.ts';
export const useTokensStore = defineStore('tokens', () => {
function getAllTokens(): Promise<TokenInfoResponse[]> {
return new Promise((resolve, reject) => {
services.getTokens().then(response => {
const data = response.data;
if (!data || !data.success || !data.result) {
reject({ message: 'Unable to retrieve session list' });
return;
}
resolve(data.result);
}).catch(error => {
logger.error('failed to load token list', error);
if (error.response && error.response.data && error.response.data.errorMessage) {
reject({ error: error.response.data });
} else if (!error.processed) {
reject({ message: 'Unable to retrieve session list' });
} else {
reject(error);
}
});
});
}
function refreshTokenAndRevokeOldToken(): Promise<TokenRefreshResponse> {
return new Promise((resolve) => {
services.refreshToken().then(response => {
const data = response.data;
if (data && data.success && data.result && data.result.user && isObject(data.result.user)) {
const userStore = useUserStore();
userStore.storeUserBasicInfo(data.result.user);
}
if (data && data.success && data.result && data.result.newToken) {
updateCurrentToken(data.result.newToken);
if (data.result.oldTokenId) {
revokeToken({
tokenId: data.result.oldTokenId,
ignoreError: true
});
}
}
resolve(data.result);
});
});
}
function revokeToken(req: { tokenId: string, ignoreError?: boolean }): Promise<boolean> {
return new Promise((resolve, reject) => {
services.revokeToken({
tokenId: req.tokenId,
ignoreError: !!req.ignoreError
}).then(response => {
const data = response.data;
if (!data || !data.success || !data.result) {
reject({ message: 'Unable to logout from this session' });
return;
}
resolve(data.result);
}).catch(error => {
logger.error('failed to revoke token', error);
if (error.response && error.response.data && error.response.data.errorMessage) {
reject({ error: error.response.data });
} else if (!error.processed) {
reject({ message: 'Unable to logout from this session' });
} else {
reject(error);
}
});
});
}
function revokeAllTokens(): Promise<boolean> {
return new Promise((resolve, reject) => {
services.revokeAllTokens().then(response => {
const data = response.data;
if (!data || !data.success || !data.result) {
reject({ message: 'Unable to logout all other sessions' });
return;
}
resolve(data.result);
}).catch(error => {
logger.error('failed to revoke all tokens', error);
if (error.response && error.response.data && error.response.data.errorMessage) {
reject({ error: error.response.data });
} else if (!error.processed) {
reject({ message: 'Unable to logout all other sessions' });
} else {
reject(error);
}
});
});
}
return {
// functions
getAllTokens,
refreshTokenAndRevokeOldToken,
revokeToken,
revokeAllTokens
};
});
+1 -1
View File
@@ -113,7 +113,7 @@ import { mapStores } from 'pinia';
import { useRootStore } from '@/stores/index.js';
import { useSettingsStore } from '@/stores/setting.ts';
import { useUserStore } from '@/stores/user.ts';
import { useTokensStore } from '@/stores/token.js';
import { useTokensStore } from '@/stores/token.ts';
import { useTransactionsStore } from '@/stores/transaction.js';
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
@@ -133,7 +133,7 @@ import { mapStores } from 'pinia';
import { useRootStore } from '@/stores/index.js';
import { useSettingsStore } from '@/stores/setting.ts';
import { useUserStore } from '@/stores/user.ts';
import { useTokensStore } from '@/stores/token.js';
import { useTokensStore } from '@/stores/token.ts';
import { isEquals } from '@/lib/common.ts';
import { parseSessionInfo } from '@/lib/session.ts';
+1 -1
View File
@@ -69,7 +69,7 @@ import { mapStores } from 'pinia';
import { useRootStore } from '@/stores/index.js';
import { useSettingsStore } from '@/stores/setting.ts';
import { useUserStore } from '@/stores/user.ts';
import { useTokensStore } from '@/stores/token.js';
import { useTokensStore } from '@/stores/token.ts';
import { useTransactionsStore } from '@/stores/transaction.js';
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
+1 -1
View File
@@ -45,7 +45,7 @@
<script>
import { mapStores } from 'pinia';
import { useUserStore } from '@/stores/user.ts';
import { useTokensStore } from '@/stores/token.js';
import { useTokensStore } from '@/stores/token.ts';
import { isEquals } from '@/lib/common.ts';
import { parseSessionInfo } from '@/lib/session.ts';