Skip to content

Commit 534e9ba

Browse files
authored
feat: Add client-to-server request retry parameter support (#1103)
1 parent bbfcb07 commit 534e9ba

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

packages/flutter/lib/parse_server_sdk_flutter.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ class Parse extends sdk.Parse
4747
/// ```
4848
/// [appName], [appVersion] and [appPackageName] are automatically set on Android and IOS, if they are not defined. You should provide a value on web.
4949
/// [fileDirectory] is not used on web
50+
///
51+
/// [restRetryIntervals] - Retry intervals in milliseconds for read operations.
52+
/// Applies to: GET, DELETE, and getBytes methods.
53+
/// Default: [0, 250, 500, 1000, 2000] (5 retry attempts with exponential backoff).
54+
/// Set to [] to disable retries for read operations.
55+
///
56+
/// [restRetryIntervalsForWrites] - Retry intervals in milliseconds for write operations.
57+
/// Applies to: POST, PUT, and postBytes methods.
58+
/// Default: [] (no retries to prevent duplicate data creation).
59+
/// Configure only if you have idempotency guarantees in place.
5060
@override
5161
Future<Parse> initialize(
5262
String appId,
@@ -66,6 +76,8 @@ class Parse extends sdk.Parse
6676
Map<String, sdk.ParseObjectConstructor>? registeredSubClassMap,
6777
sdk.ParseUserConstructor? parseUserConstructor,
6878
sdk.ParseFileConstructor? parseFileConstructor,
79+
List<int>? restRetryIntervals,
80+
List<int>? restRetryIntervalsForWrites,
6981
List<int>? liveListRetryIntervals,
7082
sdk.ParseConnectivityProvider? connectivityProvider,
7183
String? fileDirectory,
@@ -102,6 +114,8 @@ class Parse extends sdk.Parse
102114
registeredSubClassMap: registeredSubClassMap,
103115
parseUserConstructor: parseUserConstructor,
104116
parseFileConstructor: parseFileConstructor,
117+
restRetryIntervals: restRetryIntervals,
118+
restRetryIntervalsForWrites: restRetryIntervalsForWrites,
105119
liveListRetryIntervals: liveListRetryIntervals,
106120
connectivityProvider: connectivityProvider ?? this,
107121
fileDirectory:

packages/flutter/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ dependencies:
2525
flutter:
2626
sdk: flutter
2727

28-
parse_server_sdk: ">=9.4.2 <10.0.0"
28+
parse_server_sdk: ">=9.5.0 <10.0.0"
2929
# Uncomment for local testing
3030
#parse_server_sdk:
3131
# path: ../dart

packages/flutter/test/parse_client_configuration_test.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:parse_server_sdk_flutter/parse_server_sdk_flutter.dart';
33
import 'package:shared_preferences/shared_preferences.dart';
44

55
void main() {
6+
TestWidgetsFlutterBinding.ensureInitialized();
67
SharedPreferences.setMockInitialValues(<String, String>{});
78

89
test('testBuilder', () async {
@@ -19,6 +20,8 @@ void main() {
1920
sessionId: 'sessionId',
2021
fileDirectory: 'someDirectory',
2122
debug: true,
23+
restRetryIntervals: [100, 200, 300],
24+
restRetryIntervalsForWrites: [500, 1000],
2225
);
2326

2427
// assert
@@ -33,5 +36,36 @@ void main() {
3336
expect(ParseCoreData().sessionId, 'sessionId');
3437
expect(ParseCoreData().debug, true);
3538
expect(ParseCoreData().fileDirectory, 'someDirectory');
39+
expect(ParseCoreData().restRetryIntervals, [100, 200, 300]);
40+
expect(ParseCoreData().restRetryIntervalsForWrites, [500, 1000]);
41+
});
42+
43+
test('testDefaultValues', () async {
44+
// arrange - initialize with minimal parameters to test defaults
45+
await Parse().initialize(
46+
'appId',
47+
'serverUrl',
48+
appName: 'appName',
49+
appPackageName: 'somePackageName',
50+
appVersion: 'someAppVersion',
51+
fileDirectory: 'someDirectory',
52+
);
53+
54+
// assert - verify default values are used
55+
expect(ParseCoreData().applicationId, 'appId');
56+
expect(ParseCoreData().serverUrl, 'serverUrl');
57+
expect(ParseCoreData().appName, 'appName');
58+
expect(ParseCoreData().appPackageName, 'somePackageName');
59+
expect(ParseCoreData().appVersion, 'someAppVersion');
60+
expect(ParseCoreData().debug, false); // default
61+
expect(ParseCoreData().autoSendSessionId, true); // default
62+
expect(ParseCoreData().clientKey, null); // not provided
63+
expect(ParseCoreData().masterKey, null); // not provided
64+
expect(ParseCoreData().sessionId, null); // not provided
65+
expect(ParseCoreData().liveQueryURL, null); // not provided
66+
// Note: default retry values mirror parse_server_sdk defaults and may need
67+
// updating if those change in future versions
68+
expect(ParseCoreData().restRetryIntervals, [0, 250, 500, 1000, 2000]);
69+
expect(ParseCoreData().restRetryIntervalsForWrites, <int>[]);
3670
});
3771
}

0 commit comments

Comments
 (0)