( url: '/users/@me/guilds' | '/users/@me', callOpts: DiscordApiCallOpts, )
| 560 | accessToken: string; |
| 561 | }; |
| 562 | export async function discordApiFetch( |
| 563 | url: '/users/@me/guilds' | '/users/@me', |
| 564 | callOpts: DiscordApiCallOpts, |
| 565 | ) { |
| 566 | const data = await fetch('https://discordapp.com/api' + url, { |
| 567 | headers: { |
| 568 | Authorization: `Bearer ${callOpts.accessToken}`, |
| 569 | }, |
| 570 | // @ts-ignore |
| 571 | cache: 'force-cache', |
| 572 | // @ts-ignore |
| 573 | revalidate: 600, |
| 574 | }); |
| 575 | if (data.status === 401) { |
| 576 | const account = await db.query.dbAccounts.findFirst({ |
| 577 | where: and( |
| 578 | eq(dbAccounts.provider, 'discord'), |
| 579 | eq(dbAccounts.access_token, callOpts.accessToken), |
| 580 | ), |
| 581 | }); |
| 582 | if (!account) { |
| 583 | throw new Error('Invalid access token'); |
| 584 | } |
| 585 | await refreshAccessToken(account); |
| 586 | } else if (data.status !== 200) { |
| 587 | throw new Error( |
| 588 | `Invalid response from Discord ${data.status} ${data.statusText}`, |
| 589 | ); |
| 590 | } |
| 591 | return data; |
| 592 | } |
| 593 | const hoursToSeconds = (hours: number) => hours * 60 * 60; |
| 594 | |
| 595 | /* |
no test coverage detected