Updates a project's auth config

Script supabase Verified

by hugo697 ยท 10/17/2025

The script

Submitted by hugo697 Bun
Verified 207 days ago
1
//native
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