setSecrets method
Creates or updates one or more Edge Function secrets on the project.
Maps to POST /v1/projects/{ref}/secrets. The Management API accepts
a JSON array of {name, value} pairs; if a name already exists it is
overwritten. Secret values never appear in any exception message.
Implementation
Future<void> setSecrets({
required String projectRef,
required String accessToken,
required Map<String, String> secrets,
}) async {
if (secrets.isEmpty) return;
final url = '$_baseUrl/v1/projects/$projectRef/secrets';
final payload = secrets.entries
.map((e) => {'name': e.key, 'value': e.value})
.toList();
final Response<dynamic> response;
try {
response = await _dio.post<dynamic>(
url,
data: payload,
options: Options(
headers: {
..._authHeaders(accessToken),
'Content-Type': 'application/json',
},
sendTimeout: _timeout,
receiveTimeout: _timeout,
validateStatus: (_) => true,
),
);
} on DioException catch (e) {
throw ProvisioningException(_dioMessage(e, 'setting function secrets'));
}
final status = response.statusCode ?? 0;
if (status >= 200 && status < 300) {
dev.log(
'Secrets set on project $projectRef (${secrets.length} keys).',
name: 'SupabaseProvisioner',
);
return;
}
throw ProvisioningException(_mapStatus(status, projectRef, response.data));
}