setSecrets method

Future<void> setSecrets({
  1. required String projectRef,
  2. required String accessToken,
  3. required Map<String, String> secrets,
})

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));
}