({email, scopes = []})
| 115 | } |
| 116 | |
| 117 | export async function getAccessToken({email, scopes = []}) { |
| 118 | scopes = deDup([...GMAIL_SCOPES_DEFAULT, ...scopes]); |
| 119 | const storedTokens = await mvelo.storage.get(GOOGLE_OAUTH_STORE); |
| 120 | const storedToken = storedTokens?.[email]; |
| 121 | if (!storedToken || !scopes.every(scope => storedToken.scope.split(' ').includes(scope))) { |
| 122 | return; |
| 123 | } |
| 124 | if (checkStoredToken(storedToken)) { |
| 125 | return storedToken.access_token; |
| 126 | } |
| 127 | if (storedToken.refresh_token) { |
| 128 | const refreshedToken = await getRefreshedAccessToken(storedToken.refresh_token); |
| 129 | if (refreshedToken.access_token) { |
| 130 | await storeAuthData(email, buildAuthMeta(refreshedToken)); |
| 131 | return refreshedToken.access_token; |
| 132 | } |
| 133 | } |
| 134 | } |
| 135 | |
| 136 | function checkStoredToken(storedData) { |
| 137 | return storedData.access_token && (storedData.access_token_exp >= new Date().getTime()); |
nothing calls this directly
no test coverage detected