diff --git a/android/build.gradle b/android/build.gradle
index bf7e09c6..13645686 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -39,6 +39,6 @@ subprojects {
project.evaluationDependsOn(':app')
}
-task clean(type: Delete) {
+tasks.register("clean", Delete) {
delete rootProject.buildDir
}
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index cc5527d7..02e5f581 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
diff --git a/assets/images/logos/cloudflare.svg b/assets/images/logos/cloudflare.svg
new file mode 100644
index 00000000..7099a7e9
--- /dev/null
+++ b/assets/images/logos/cloudflare.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/logos/desec.svg b/assets/images/logos/desec.svg
new file mode 100644
index 00000000..cb54b268
--- /dev/null
+++ b/assets/images/logos/desec.svg
@@ -0,0 +1,89 @@
+
+
+
+
diff --git a/assets/markdown/how_desec-en.md b/assets/markdown/how_desec-en.md
new file mode 100644
index 00000000..b5bac67c
--- /dev/null
+++ b/assets/markdown/how_desec-en.md
@@ -0,0 +1,9 @@
+### How to get deSEC API Token
+1. Log in at: https://desec.io/login
+2. Go to **Domains** page at: https://desec.io/domains
+3. Go to **Token management** tab.
+4. Click on the round "plus" button in the upper right corner.
+5. **"Generate New Token"** dialogue must be displayed. Enter any **Token name** you wish. *Advanced settings* are not required, so do not touch anything there.
+6. Click on **Save**.
+7. Make sure you save the token's "**secret value**" as it will only be displayed once.
+8. Now you can safely **close** the dialogue.
\ No newline at end of file
diff --git a/assets/markdown/how_desec-ru.md b/assets/markdown/how_desec-ru.md
new file mode 100644
index 00000000..a93acc77
--- /dev/null
+++ b/assets/markdown/how_desec-ru.md
@@ -0,0 +1,9 @@
+### Как получить deSEC API Токен
+1. Авторизуемся в deSEC: https://desec.io/login
+2. Переходим на страницу **Domains** по ссылке: https://desec.io/domains
+3. Переходим на вкладку **Token management**.
+4. Нажимаем на большую кнопку с плюсом в правом верхнем углу страницы.
+5. Должен был появиться **"Generate New Token"** диалог. Вводим любое имя токена в **Token name**. *Advanced settings* необязательны, так что ничего там не трогаем.
+6. Кликаем **Save**.
+7. Обязательно сохраняем "**secret value**" ключ токена, потому что он отображается исключительно один раз.
+8. Теперь спокойно закрываем диалог, нажав **close**.
\ No newline at end of file
diff --git a/assets/translations/en.json b/assets/translations/en.json
index 0d825bff..653e33f8 100644
--- a/assets/translations/en.json
+++ b/assets/translations/en.json
@@ -286,11 +286,13 @@
"select_provider_countries_text_hetzner": "Germany, Finland, USA",
"select_provider_countries_text_do": "USA, Netherlands, Singapore, UK, Germany, Canada, India, Australia",
"select_provider_price_title": "Average price",
+ "select_provider_price_free": "Free",
"select_provider_price_text_hetzner": "€8 per month for a relatively small server and 50GB of disk storage",
"select_provider_price_text_do": "$17 per month for a relatively small server and 50GB of disk storage",
"select_provider_payment_title": "Payment methods",
"select_provider_payment_text_hetzner": "Credit cards, SWIFT, SEPA, PayPal",
"select_provider_payment_text_do": "Credit cards, Google Pay, PayPal",
+ "select_provider_payment_text_cloudflare": "Credit cards",
"select_provider_email_notice": "E-mail hosting won't be available for new clients. Nevertheless it will be unlocked as soon as you complete your first payment.",
"select_provider_site_button": "Visit site",
"connect_to_server_provider": "Now log in ",
@@ -311,13 +313,13 @@
"choose_server_type_storage": "{} GB of system storage",
"choose_server_type_payment_per_month": "{} per month",
"no_server_types_found": "No available server types found. Make sure your account is accessible and try to change your server location.",
- "cloudflare_bad_key_error": "Cloudflare API key is invalid",
+ "cloudflare_bad_key_error": "DNS Provider API key is invalid",
"backblaze_bad_key_error": "Backblaze storage information is invalid",
"select_dns": "Now let's select a DNS provider",
"manage_domain_dns": "To manage your domain's DNS",
"use_this_domain": "Use this domain?",
"use_this_domain_text": "The token you provided gives access to the following domain",
- "cloudflare_api_token": "CloudFlare API Token",
+ "cloudflare_api_token": "DNS Provider API Token",
"connect_backblaze_storage": "Connect Backblaze storage",
"no_connected_domains": "No connected domains at the moment",
"loading_domain_list": "Loading domain list",
@@ -388,8 +390,8 @@
"modal_confirmation_dns_invalid": "Reverse DNS points to another domain",
"modal_confirmation_ip_valid": "IP is the same as in DNS record",
"modal_confirmation_ip_invalid": "IP is not the same as in DNS record",
- "confirm_cloudflare": "Connect to CloudFlare",
- "confirm_cloudflare_description": "Enter a Cloudflare token with access to {}:",
+ "confirm_cloudflare": "Connect to your DNS Provider",
+ "confirm_cloudflare_description": "Enter a token of your DNS Provider with access to {}:",
"confirm_backblaze": "Connect to Backblaze",
"confirm_backblaze_description": "Enter a Backblaze token with access to backup storage:"
},
@@ -506,4 +508,4 @@
"reset_onboarding_description": "Reset onboarding switch to show onboarding screen again",
"cubit_statuses": "Cubit loading statuses"
}
-}
+}
\ No newline at end of file
diff --git a/assets/translations/ru.json b/assets/translations/ru.json
index 35498bd9..b4bdd938 100644
--- a/assets/translations/ru.json
+++ b/assets/translations/ru.json
@@ -280,10 +280,12 @@
"select_provider_countries_text_hetzner": "Германия, Финляндия, США",
"select_provider_countries_text_do": "США, Нидерланды, Сингапур, Великобритания, Германия, Канада, Индия, Австралия",
"select_provider_price_title": "Средняя цена",
+ "select_provider_price_free": "Бесплатно",
"select_provider_price_text_hetzner": "€8 в месяц за небольшой сервер и 50GB места на диске",
"select_provider_price_text_do": "$17 в месяц за небольшой сервер и 50GB места на диске",
"select_provider_payment_title": "Методы оплаты",
"select_provider_payment_text_hetzner": "Банковские карты, SWIFT, SEPA, PayPal",
+ "select_provider_payment_text_cloudflare": "Банковские карты",
"select_provider_payment_text_do": "Банковские карты, Google Pay, PayPal",
"select_provider_email_notice": "Хостинг электронной почты недоступен для новых клиентов. Разблокировать можно будет после первой оплаты.",
"select_provider_site_button": "Посетить сайт",
@@ -305,12 +307,12 @@
"choose_server_type_storage": "{} GB системного хранилища",
"choose_server_type_payment_per_month": "{} в месяц",
"no_server_types_found": "Не найдено доступных типов сервера! Пожалуйста, убедитесь, что у вас есть доступ к провайдеру сервера...",
- "cloudflare_bad_key_error": "Cloudflare API ключ неверен",
+ "cloudflare_bad_key_error": "API ключ неверен",
"backblaze_bad_key_error": "Информация о Backblaze хранилище неверна",
"manage_domain_dns": "Для управления DNS вашего домена",
"use_this_domain": "Используем этот домен?",
"use_this_domain_text": "Указанный вами токен даёт контроль над этим доменом",
- "cloudflare_api_token": "CloudFlare API ключ",
+ "cloudflare_api_token": "API ключ DNS провайдера",
"connect_backblaze_storage": "Подключите облачное хранилище Backblaze",
"no_connected_domains": "На данный момент подлюченных доменов нет",
"loading_domain_list": "Загружаем список доменов",
@@ -366,8 +368,8 @@
"modal_confirmation_dns_invalid": "Обратный DNS указывает на другой домен",
"modal_confirmation_ip_valid": "IP совпадает с указанным в DNS записи",
"modal_confirmation_ip_invalid": "IP не совпадает с указанным в DNS записи",
- "confirm_cloudflare": "Подключение к Cloudflare",
- "confirm_cloudflare_description": "Введите токен Cloudflare, который имеет права на {}:",
+ "confirm_cloudflare": "Подключение к DNS Провайдеру",
+ "confirm_cloudflare_description": "Введите токен DNS Провайдера, который имеет права на {}:",
"confirm_backblaze_description": "Введите токен Backblaze, который имеет права на хранилище резервных копий:",
"confirm_backblaze": "Подключение к Backblaze",
"server_provider_connected": "Подключение к вашему серверному провайдеру",
@@ -473,4 +475,4 @@
"length_not_equal": "Длина строки [], должна быть равна {}",
"length_longer": "Длина строки [], должна быть меньше либо равна {}"
}
-}
+}
\ No newline at end of file
diff --git a/lib/config/hive_config.dart b/lib/config/hive_config.dart
index b6ba018c..44b03f26 100644
--- a/lib/config/hive_config.dart
+++ b/lib/config/hive_config.dart
@@ -93,6 +93,9 @@ class BNames {
/// A String field of [serverInstallationBox] box.
static String serverProvider = 'serverProvider';
+ /// A String field of [serverInstallationBox] box.
+ static String dnsProvider = 'dnsProvider';
+
/// A String field of [serverLocation] box.
static String serverLocation = 'serverLocation';
diff --git a/lib/logic/api_maps/graphql_maps/api_map.dart b/lib/logic/api_maps/graphql_maps/api_map.dart
index a633866e..34e39b7a 100644
--- a/lib/logic/api_maps/graphql_maps/api_map.dart
+++ b/lib/logic/api_maps/graphql_maps/api_map.dart
@@ -56,7 +56,7 @@ class ResponseLoggingParser extends ResponseParser {
abstract class ApiMap {
Future getClient() async {
IOClient? ioClient;
- if (StagingOptions.stagingAcme) {
+ if (StagingOptions.stagingAcme || !StagingOptions.verifyCertificate) {
final HttpClient httpClient = HttpClient();
httpClient.badCertificateCallback = (
final cert,
diff --git a/lib/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart b/lib/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart
index 22409ef9..84550cc2 100644
--- a/lib/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart
+++ b/lib/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart
@@ -141,6 +141,177 @@ extension UtilityExtension$Fragment$basicMutationReturnFields
this,
(i) => i,
);
+ _T when<_T>({
+ required _T Function(
+ Fragment$basicMutationReturnFields$$ApiKeyMutationReturn)
+ apiKeyMutationReturn,
+ required _T Function(
+ Fragment$basicMutationReturnFields$$AutoUpgradeSettingsMutationReturn)
+ autoUpgradeSettingsMutationReturn,
+ required _T Function(
+ Fragment$basicMutationReturnFields$$DeviceApiTokenMutationReturn)
+ deviceApiTokenMutationReturn,
+ required _T Function(
+ Fragment$basicMutationReturnFields$$GenericJobButationReturn)
+ genericJobButationReturn,
+ required _T Function(
+ Fragment$basicMutationReturnFields$$GenericMutationReturn)
+ genericMutationReturn,
+ required _T Function(
+ Fragment$basicMutationReturnFields$$ServiceJobMutationReturn)
+ serviceJobMutationReturn,
+ required _T Function(
+ Fragment$basicMutationReturnFields$$ServiceMutationReturn)
+ serviceMutationReturn,
+ required _T Function(
+ Fragment$basicMutationReturnFields$$TimezoneMutationReturn)
+ timezoneMutationReturn,
+ required _T Function(Fragment$basicMutationReturnFields$$UserMutationReturn)
+ userMutationReturn,
+ required _T Function() orElse,
+ }) {
+ switch ($__typename) {
+ case "ApiKeyMutationReturn":
+ return apiKeyMutationReturn(
+ this as Fragment$basicMutationReturnFields$$ApiKeyMutationReturn);
+
+ case "AutoUpgradeSettingsMutationReturn":
+ return autoUpgradeSettingsMutationReturn(this
+ as Fragment$basicMutationReturnFields$$AutoUpgradeSettingsMutationReturn);
+
+ case "DeviceApiTokenMutationReturn":
+ return deviceApiTokenMutationReturn(this
+ as Fragment$basicMutationReturnFields$$DeviceApiTokenMutationReturn);
+
+ case "GenericJobButationReturn":
+ return genericJobButationReturn(this
+ as Fragment$basicMutationReturnFields$$GenericJobButationReturn);
+
+ case "GenericMutationReturn":
+ return genericMutationReturn(
+ this as Fragment$basicMutationReturnFields$$GenericMutationReturn);
+
+ case "ServiceJobMutationReturn":
+ return serviceJobMutationReturn(this
+ as Fragment$basicMutationReturnFields$$ServiceJobMutationReturn);
+
+ case "ServiceMutationReturn":
+ return serviceMutationReturn(
+ this as Fragment$basicMutationReturnFields$$ServiceMutationReturn);
+
+ case "TimezoneMutationReturn":
+ return timezoneMutationReturn(
+ this as Fragment$basicMutationReturnFields$$TimezoneMutationReturn);
+
+ case "UserMutationReturn":
+ return userMutationReturn(
+ this as Fragment$basicMutationReturnFields$$UserMutationReturn);
+
+ default:
+ return orElse();
+ }
+ }
+
+ _T maybeWhen<_T>({
+ _T Function(Fragment$basicMutationReturnFields$$ApiKeyMutationReturn)?
+ apiKeyMutationReturn,
+ _T Function(
+ Fragment$basicMutationReturnFields$$AutoUpgradeSettingsMutationReturn)?
+ autoUpgradeSettingsMutationReturn,
+ _T Function(
+ Fragment$basicMutationReturnFields$$DeviceApiTokenMutationReturn)?
+ deviceApiTokenMutationReturn,
+ _T Function(Fragment$basicMutationReturnFields$$GenericJobButationReturn)?
+ genericJobButationReturn,
+ _T Function(Fragment$basicMutationReturnFields$$GenericMutationReturn)?
+ genericMutationReturn,
+ _T Function(Fragment$basicMutationReturnFields$$ServiceJobMutationReturn)?
+ serviceJobMutationReturn,
+ _T Function(Fragment$basicMutationReturnFields$$ServiceMutationReturn)?
+ serviceMutationReturn,
+ _T Function(Fragment$basicMutationReturnFields$$TimezoneMutationReturn)?
+ timezoneMutationReturn,
+ _T Function(Fragment$basicMutationReturnFields$$UserMutationReturn)?
+ userMutationReturn,
+ required _T Function() orElse,
+ }) {
+ switch ($__typename) {
+ case "ApiKeyMutationReturn":
+ if (apiKeyMutationReturn != null) {
+ return apiKeyMutationReturn(
+ this as Fragment$basicMutationReturnFields$$ApiKeyMutationReturn);
+ } else {
+ return orElse();
+ }
+
+ case "AutoUpgradeSettingsMutationReturn":
+ if (autoUpgradeSettingsMutationReturn != null) {
+ return autoUpgradeSettingsMutationReturn(this
+ as Fragment$basicMutationReturnFields$$AutoUpgradeSettingsMutationReturn);
+ } else {
+ return orElse();
+ }
+
+ case "DeviceApiTokenMutationReturn":
+ if (deviceApiTokenMutationReturn != null) {
+ return deviceApiTokenMutationReturn(this
+ as Fragment$basicMutationReturnFields$$DeviceApiTokenMutationReturn);
+ } else {
+ return orElse();
+ }
+
+ case "GenericJobButationReturn":
+ if (genericJobButationReturn != null) {
+ return genericJobButationReturn(this
+ as Fragment$basicMutationReturnFields$$GenericJobButationReturn);
+ } else {
+ return orElse();
+ }
+
+ case "GenericMutationReturn":
+ if (genericMutationReturn != null) {
+ return genericMutationReturn(this
+ as Fragment$basicMutationReturnFields$$GenericMutationReturn);
+ } else {
+ return orElse();
+ }
+
+ case "ServiceJobMutationReturn":
+ if (serviceJobMutationReturn != null) {
+ return serviceJobMutationReturn(this
+ as Fragment$basicMutationReturnFields$$ServiceJobMutationReturn);
+ } else {
+ return orElse();
+ }
+
+ case "ServiceMutationReturn":
+ if (serviceMutationReturn != null) {
+ return serviceMutationReturn(this
+ as Fragment$basicMutationReturnFields$$ServiceMutationReturn);
+ } else {
+ return orElse();
+ }
+
+ case "TimezoneMutationReturn":
+ if (timezoneMutationReturn != null) {
+ return timezoneMutationReturn(this
+ as Fragment$basicMutationReturnFields$$TimezoneMutationReturn);
+ } else {
+ return orElse();
+ }
+
+ case "UserMutationReturn":
+ if (userMutationReturn != null) {
+ return userMutationReturn(
+ this as Fragment$basicMutationReturnFields$$UserMutationReturn);
+ } else {
+ return orElse();
+ }
+
+ default:
+ return orElse();
+ }
+ }
}
abstract class CopyWith$Fragment$basicMutationReturnFields {
@@ -171,7 +342,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields
final TRes Function(Fragment$basicMutationReturnFields) _then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -297,7 +468,7 @@ class Fragment$basicMutationReturnFields$$ApiKeyMutationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'ApiKeyMutationReturn',
});
factory Fragment$basicMutationReturnFields$$ApiKeyMutationReturn.fromJson(
@@ -428,7 +599,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$ApiKeyMutationReturn<
final TRes Function(Fragment$basicMutationReturnFields$$ApiKeyMutationReturn)
_then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -476,7 +647,7 @@ class Fragment$basicMutationReturnFields$$AutoUpgradeSettingsMutationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'AutoUpgradeSettingsMutationReturn',
});
factory Fragment$basicMutationReturnFields$$AutoUpgradeSettingsMutationReturn.fromJson(
@@ -612,7 +783,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$AutoUpgradeSettingsMutat
Fragment$basicMutationReturnFields$$AutoUpgradeSettingsMutationReturn)
_then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -661,7 +832,7 @@ class Fragment$basicMutationReturnFields$$DeviceApiTokenMutationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'DeviceApiTokenMutationReturn',
});
factory Fragment$basicMutationReturnFields$$DeviceApiTokenMutationReturn.fromJson(
@@ -795,7 +966,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$DeviceApiTokenMutationRe
final TRes Function(
Fragment$basicMutationReturnFields$$DeviceApiTokenMutationReturn) _then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -843,7 +1014,7 @@ class Fragment$basicMutationReturnFields$$GenericJobButationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'GenericJobButationReturn',
});
factory Fragment$basicMutationReturnFields$$GenericJobButationReturn.fromJson(
@@ -975,7 +1146,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$GenericJobButationReturn
final TRes Function(
Fragment$basicMutationReturnFields$$GenericJobButationReturn) _then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -1023,7 +1194,7 @@ class Fragment$basicMutationReturnFields$$GenericMutationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'GenericMutationReturn',
});
factory Fragment$basicMutationReturnFields$$GenericMutationReturn.fromJson(
@@ -1154,7 +1325,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$GenericMutationReturn<
final TRes Function(Fragment$basicMutationReturnFields$$GenericMutationReturn)
_then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -1202,7 +1373,7 @@ class Fragment$basicMutationReturnFields$$ServiceJobMutationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'ServiceJobMutationReturn',
});
factory Fragment$basicMutationReturnFields$$ServiceJobMutationReturn.fromJson(
@@ -1334,7 +1505,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$ServiceJobMutationReturn
final TRes Function(
Fragment$basicMutationReturnFields$$ServiceJobMutationReturn) _then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -1382,7 +1553,7 @@ class Fragment$basicMutationReturnFields$$ServiceMutationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'ServiceMutationReturn',
});
factory Fragment$basicMutationReturnFields$$ServiceMutationReturn.fromJson(
@@ -1513,7 +1684,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$ServiceMutationReturn<
final TRes Function(Fragment$basicMutationReturnFields$$ServiceMutationReturn)
_then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -1561,7 +1732,7 @@ class Fragment$basicMutationReturnFields$$TimezoneMutationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'TimezoneMutationReturn',
});
factory Fragment$basicMutationReturnFields$$TimezoneMutationReturn.fromJson(
@@ -1693,7 +1864,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$TimezoneMutationReturn<
final TRes Function(
Fragment$basicMutationReturnFields$$TimezoneMutationReturn) _then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -1741,7 +1912,7 @@ class Fragment$basicMutationReturnFields$$UserMutationReturn
required this.code,
required this.message,
required this.success,
- required this.$__typename,
+ this.$__typename = 'UserMutationReturn',
});
factory Fragment$basicMutationReturnFields$$UserMutationReturn.fromJson(
@@ -1869,7 +2040,7 @@ class _CopyWithImpl$Fragment$basicMutationReturnFields$$UserMutationReturn
final TRes Function(Fragment$basicMutationReturnFields$$UserMutationReturn)
_then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? code = _undefined,
@@ -1913,7 +2084,7 @@ class _CopyWithStubImpl$Fragment$basicMutationReturnFields$$UserMutationReturn<
class Query$GetServerDiskVolumes {
Query$GetServerDiskVolumes({
required this.storage,
- required this.$__typename,
+ this.$__typename = 'Query',
});
factory Query$GetServerDiskVolumes.fromJson(Map json) {
@@ -2008,7 +2179,7 @@ class _CopyWithImpl$Query$GetServerDiskVolumes
final TRes Function(Query$GetServerDiskVolumes) _then;
- static const _undefined = {};
+ static const _undefined = {};
TRes call({
Object? storage = _undefined,
@@ -2232,6 +2403,10 @@ const documentNodeQueryGetServerDiskVolumes = DocumentNode(definitions: [
Query$GetServerDiskVolumes _parserFn$Query$GetServerDiskVolumes(
Map data) =>
Query$GetServerDiskVolumes.fromJson(data);
+typedef OnQueryComplete$Query$GetServerDiskVolumes = FutureOr Function(
+ Map?,
+ Query$GetServerDiskVolumes?,
+);
class Options$Query$GetServerDiskVolumes
extends graphql.QueryOptions {
@@ -2241,19 +2416,42 @@ class Options$Query$GetServerDiskVolumes
graphql.ErrorPolicy? errorPolicy,
graphql.CacheRereadPolicy? cacheRereadPolicy,
Object? optimisticResult,
+ Query$GetServerDiskVolumes? typedOptimisticResult,
Duration? pollInterval,
graphql.Context? context,
- }) : super(
+ OnQueryComplete$Query$GetServerDiskVolumes? onComplete,
+ graphql.OnQueryError? onError,
+ }) : onCompleteWithParsed = onComplete,
+ super(
operationName: operationName,
fetchPolicy: fetchPolicy,
errorPolicy: errorPolicy,
cacheRereadPolicy: cacheRereadPolicy,
- optimisticResult: optimisticResult,
+ optimisticResult: optimisticResult ?? typedOptimisticResult?.toJson(),
pollInterval: pollInterval,
context: context,
+ onComplete: onComplete == null
+ ? null
+ : (data) => onComplete(
+ data,
+ data == null
+ ? null
+ : _parserFn$Query$GetServerDiskVolumes(data),
+ ),
+ onError: onError,
document: documentNodeQueryGetServerDiskVolumes,
parserFn: _parserFn$Query$GetServerDiskVolumes,
);
+
+ final OnQueryComplete$Query$GetServerDiskVolumes? onCompleteWithParsed;
+
+ @override
+ List