| 668 | env.LINKEDIN_OAUTH_CLIENT_SECRET !== ""); |
| 669 | |
| 670 | const checkOAuth = (env: Env): string[] => { |
| 671 | const pairs = [ |
| 672 | { |
| 673 | name: "Google", |
| 674 | id: env.GOOGLE_OAUTH_CLIENT_ID, |
| 675 | secret: env.GOOGLE_OAUTH_CLIENT_SECRET, |
| 676 | }, |
| 677 | { |
| 678 | name: "GitHub", |
| 679 | id: env.GITHUB_OAUTH_CLIENT_ID, |
| 680 | secret: env.GITHUB_OAUTH_CLIENT_SECRET, |
| 681 | }, |
| 682 | { |
| 683 | name: "LinkedIn", |
| 684 | id: env.LINKEDIN_OAUTH_CLIENT_ID, |
| 685 | secret: env.LINKEDIN_OAUTH_CLIENT_SECRET, |
| 686 | }, |
| 687 | ]; |
| 688 | |
| 689 | return pairs |
| 690 | .filter( |
| 691 | (provider) => |
| 692 | (provider.id === "" && provider.secret !== "") || |
| 693 | (provider.id !== "" && provider.secret === "") |
| 694 | ) |
| 695 | .map( |
| 696 | (provider) => |
| 697 | `${provider.name} OAuth requires both client id and client secret` |
| 698 | ); |
| 699 | }; |
| 700 | |
| 701 | /** |
| 702 | * Production must run with QUEUES_ENABLED=true so transactional email |