1 | |
2 | type Supabase = { |
3 | key: string |
4 | } |
5 | |
6 | * Updates a project's auth config |
7 | * |
8 | */ |
9 | export async function main( |
10 | auth: Supabase, |
11 | ref: string, |
12 | body: { |
13 | site_url?: string |
14 | disable_signup?: false | true |
15 | jwt_exp?: number |
16 | smtp_admin_email?: string |
17 | smtp_host?: string |
18 | smtp_port?: string |
19 | smtp_user?: string |
20 | smtp_pass?: string |
21 | smtp_max_frequency?: number |
22 | smtp_sender_name?: string |
23 | mailer_allow_unverified_email_sign_ins?: false | true |
24 | mailer_autoconfirm?: false | true |
25 | mailer_subjects_invite?: string |
26 | mailer_subjects_confirmation?: string |
27 | mailer_subjects_recovery?: string |
28 | mailer_subjects_email_change?: string |
29 | mailer_subjects_magic_link?: string |
30 | mailer_subjects_reauthentication?: string |
31 | mailer_templates_invite_content?: string |
32 | mailer_templates_confirmation_content?: string |
33 | mailer_templates_recovery_content?: string |
34 | mailer_templates_email_change_content?: string |
35 | mailer_templates_magic_link_content?: string |
36 | mailer_templates_reauthentication_content?: string |
37 | mfa_max_enrolled_factors?: number |
38 | uri_allow_list?: string |
39 | external_anonymous_users_enabled?: false | true |
40 | external_email_enabled?: false | true |
41 | external_phone_enabled?: false | true |
42 | saml_enabled?: false | true |
43 | saml_external_url?: string |
44 | security_captcha_enabled?: false | true |
45 | security_captcha_provider?: 'turnstile' | 'hcaptcha' |
46 | security_captcha_secret?: string |
47 | sessions_timebox?: number |
48 | sessions_inactivity_timeout?: number |
49 | sessions_single_per_user?: false | true |
50 | sessions_tags?: string |
51 | rate_limit_anonymous_users?: number |
52 | rate_limit_email_sent?: number |
53 | rate_limit_sms_sent?: number |
54 | rate_limit_verify?: number |
55 | rate_limit_token_refresh?: number |
56 | rate_limit_otp?: number |
57 | rate_limit_web3?: number |
58 | mailer_secure_email_change_enabled?: false | true |
59 | refresh_token_rotation_enabled?: false | true |
60 | password_hibp_enabled?: false | true |
61 | password_min_length?: number |
62 | password_required_characters?: |
63 | | '' |
64 | | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' |
65 | | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' |
66 | | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\\\:"|<>?,./`~' |
67 | security_manual_linking_enabled?: false | true |
68 | security_update_password_require_reauthentication?: false | true |
69 | security_refresh_token_reuse_interval?: number |
70 | mailer_otp_exp?: number |
71 | mailer_otp_length?: number |
72 | sms_autoconfirm?: false | true |
73 | sms_max_frequency?: number |
74 | sms_otp_exp?: number |
75 | sms_otp_length?: number |
76 | sms_provider?: 'messagebird' | 'textlocal' | 'twilio' | 'twilio_verify' | 'vonage' |
77 | sms_messagebird_access_key?: string |
78 | sms_messagebird_originator?: string |
79 | sms_test_otp?: string |
80 | sms_test_otp_valid_until?: string |
81 | sms_textlocal_api_key?: string |
82 | sms_textlocal_sender?: string |
83 | sms_twilio_account_sid?: string |
84 | sms_twilio_auth_token?: string |
85 | sms_twilio_content_sid?: string |
86 | sms_twilio_message_service_sid?: string |
87 | sms_twilio_verify_account_sid?: string |
88 | sms_twilio_verify_auth_token?: string |
89 | sms_twilio_verify_message_service_sid?: string |
90 | sms_vonage_api_key?: string |
91 | sms_vonage_api_secret?: string |
92 | sms_vonage_from?: string |
93 | sms_template?: string |
94 | hook_mfa_verification_attempt_enabled?: false | true |
95 | hook_mfa_verification_attempt_uri?: string |
96 | hook_mfa_verification_attempt_secrets?: string |
97 | hook_password_verification_attempt_enabled?: false | true |
98 | hook_password_verification_attempt_uri?: string |
99 | hook_password_verification_attempt_secrets?: string |
100 | hook_custom_access_token_enabled?: false | true |
101 | hook_custom_access_token_uri?: string |
102 | hook_custom_access_token_secrets?: string |
103 | hook_send_sms_enabled?: false | true |
104 | hook_send_sms_uri?: string |
105 | hook_send_sms_secrets?: string |
106 | hook_send_email_enabled?: false | true |
107 | hook_send_email_uri?: string |
108 | hook_send_email_secrets?: string |
109 | external_apple_enabled?: false | true |
110 | external_apple_client_id?: string |
111 | external_apple_secret?: string |
112 | external_apple_additional_client_ids?: string |
113 | external_azure_enabled?: false | true |
114 | external_azure_client_id?: string |
115 | external_azure_secret?: string |
116 | external_azure_url?: string |
117 | external_bitbucket_enabled?: false | true |
118 | external_bitbucket_client_id?: string |
119 | external_bitbucket_secret?: string |
120 | external_discord_enabled?: false | true |
121 | external_discord_client_id?: string |
122 | external_discord_secret?: string |
123 | external_facebook_enabled?: false | true |
124 | external_facebook_client_id?: string |
125 | external_facebook_secret?: string |
126 | external_figma_enabled?: false | true |
127 | external_figma_client_id?: string |
128 | external_figma_secret?: string |
129 | external_github_enabled?: false | true |
130 | external_github_client_id?: string |
131 | external_github_secret?: string |
132 | external_gitlab_enabled?: false | true |
133 | external_gitlab_client_id?: string |
134 | external_gitlab_secret?: string |
135 | external_gitlab_url?: string |
136 | external_google_enabled?: false | true |
137 | external_google_client_id?: string |
138 | external_google_secret?: string |
139 | external_google_additional_client_ids?: string |
140 | external_google_skip_nonce_check?: false | true |
141 | external_kakao_enabled?: false | true |
142 | external_kakao_client_id?: string |
143 | external_kakao_secret?: string |
144 | external_keycloak_enabled?: false | true |
145 | external_keycloak_client_id?: string |
146 | external_keycloak_secret?: string |
147 | external_keycloak_url?: string |
148 | external_linkedin_oidc_enabled?: false | true |
149 | external_linkedin_oidc_client_id?: string |
150 | external_linkedin_oidc_secret?: string |
151 | external_slack_oidc_enabled?: false | true |
152 | external_slack_oidc_client_id?: string |
153 | external_slack_oidc_secret?: string |
154 | external_notion_enabled?: false | true |
155 | external_notion_client_id?: string |
156 | external_notion_secret?: string |
157 | external_slack_enabled?: false | true |
158 | external_slack_client_id?: string |
159 | external_slack_secret?: string |
160 | external_spotify_enabled?: false | true |
161 | external_spotify_client_id?: string |
162 | external_spotify_secret?: string |
163 | external_twitch_enabled?: false | true |
164 | external_twitch_client_id?: string |
165 | external_twitch_secret?: string |
166 | external_twitter_enabled?: false | true |
167 | external_twitter_client_id?: string |
168 | external_twitter_secret?: string |
169 | external_workos_enabled?: false | true |
170 | external_workos_client_id?: string |
171 | external_workos_secret?: string |
172 | external_workos_url?: string |
173 | external_web3_solana_enabled?: false | true |
174 | external_zoom_enabled?: false | true |
175 | external_zoom_client_id?: string |
176 | external_zoom_secret?: string |
177 | db_max_pool_size?: number |
178 | api_max_request_duration?: number |
179 | mfa_totp_enroll_enabled?: false | true |
180 | mfa_totp_verify_enabled?: false | true |
181 | mfa_web_authn_enroll_enabled?: false | true |
182 | mfa_web_authn_verify_enabled?: false | true |
183 | mfa_phone_enroll_enabled?: false | true |
184 | mfa_phone_verify_enabled?: false | true |
185 | mfa_phone_max_frequency?: number |
186 | mfa_phone_otp_length?: number |
187 | mfa_phone_template?: string |
188 | } |
189 | ) { |
190 | const url = new URL(`https://api.supabase.com/v1/projects/${ref}/config/auth`) |
191 |
|
192 | const response = await fetch(url, { |
193 | method: 'PATCH', |
194 | headers: { |
195 | 'Content-Type': 'application/json', |
196 | Authorization: 'Bearer ' + auth.key |
197 | }, |
198 | body: JSON.stringify(body) |
199 | }) |
200 | if (!response.ok) { |
201 | const text = await response.text() |
202 | throw new Error(`${response.status} ${text}`) |
203 | } |
204 | return await response.json() |
205 | } |
206 |
|