選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

utils.ts 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { CONVERSATION_ID_INFO } from '../base/chat/constants'
  2. import { fetchAccessToken } from '@/service/share'
  3. import { getProcessedSystemVariablesFromUrlParams } from '../base/chat/utils'
  4. export const isTokenV1 = (token: Record<string, any>) => {
  5. return !token.version
  6. }
  7. export const getInitialTokenV2 = (): Record<string, any> => ({
  8. version: 2,
  9. })
  10. export const checkOrSetAccessToken = async () => {
  11. const sharedToken = globalThis.location.pathname.split('/').slice(-1)[0]
  12. const userId = (await getProcessedSystemVariablesFromUrlParams()).user_id
  13. const accessToken = localStorage.getItem('token') || JSON.stringify(getInitialTokenV2())
  14. let accessTokenJson = getInitialTokenV2()
  15. try {
  16. accessTokenJson = JSON.parse(accessToken)
  17. if (isTokenV1(accessTokenJson))
  18. accessTokenJson = getInitialTokenV2()
  19. }
  20. catch {
  21. }
  22. if (!accessTokenJson[sharedToken]?.[userId || 'DEFAULT']) {
  23. const res = await fetchAccessToken(sharedToken, userId)
  24. accessTokenJson[sharedToken] = {
  25. ...accessTokenJson[sharedToken],
  26. [userId || 'DEFAULT']: res.access_token,
  27. }
  28. localStorage.setItem('token', JSON.stringify(accessTokenJson))
  29. }
  30. }
  31. export const setAccessToken = async (sharedToken: string, token: string, user_id?: string) => {
  32. const accessToken = localStorage.getItem('token') || JSON.stringify(getInitialTokenV2())
  33. let accessTokenJson = getInitialTokenV2()
  34. try {
  35. accessTokenJson = JSON.parse(accessToken)
  36. if (isTokenV1(accessTokenJson))
  37. accessTokenJson = getInitialTokenV2()
  38. }
  39. catch {
  40. }
  41. localStorage.removeItem(CONVERSATION_ID_INFO)
  42. accessTokenJson[sharedToken] = {
  43. ...accessTokenJson[sharedToken],
  44. [user_id || 'DEFAULT']: token,
  45. }
  46. localStorage.setItem('token', JSON.stringify(accessTokenJson))
  47. }
  48. export const removeAccessToken = () => {
  49. const sharedToken = globalThis.location.pathname.split('/').slice(-1)[0]
  50. const accessToken = localStorage.getItem('token') || JSON.stringify(getInitialTokenV2())
  51. let accessTokenJson = getInitialTokenV2()
  52. try {
  53. accessTokenJson = JSON.parse(accessToken)
  54. if (isTokenV1(accessTokenJson))
  55. accessTokenJson = getInitialTokenV2()
  56. }
  57. catch {
  58. }
  59. localStorage.removeItem(CONVERSATION_ID_INFO)
  60. delete accessTokenJson[sharedToken]
  61. localStorage.setItem('token', JSON.stringify(accessTokenJson))
  62. }