@@ -2,7 +2,7 @@ import 'dart:convert';
2
2
import 'dart:io' ;
3
3
import 'dart:ui' ;
4
4
5
- import 'package:http/http.dart' as http ;
5
+ import 'package:http/http.dart' ;
6
6
import 'package:in_app_purchase_android/in_app_purchase_android.dart' ;
7
7
import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart' ;
8
8
import 'package:linkfive_purchases/client/linkfive_client_interface.dart' ;
@@ -11,11 +11,15 @@ import 'package:linkfive_purchases/logic/linkfive_user_management.dart';
11
11
import 'package:linkfive_purchases/models/requests/purchase_request_google.dart' ;
12
12
import 'package:linkfive_purchases/models/requests/purchase_request_google_otp.dart' ;
13
13
import 'package:linkfive_purchases/models/requests/purchase_request_pricing_phase.dart' ;
14
+ import 'package:linkfive_purchases/src/client/http/http_client.dart' ;
15
+ import 'package:linkfive_purchases/src/client/http/retry_http_client.dart' ;
14
16
import 'package:linkfive_purchases/store/linkfive_app_data_store.dart' ;
15
17
import 'package:package_info_plus/package_info_plus.dart' ;
16
18
17
19
/// HTTP client to LinkFive
18
20
class LinkFiveClient extends LinkFiveClientInterface {
21
+ late final httpClient = RetryHttpClient (HttpClientFactory .basic ());
22
+
19
23
final String stagingUrl = "api.staging.linkfive.io" ;
20
24
final String prodUrl = "api.linkfive.io" ;
21
25
@@ -79,7 +83,7 @@ class LinkFiveClient extends LinkFiveClientInterface {
79
83
Future <LinkFiveResponseData > fetchLinkFiveResponse () async {
80
84
final uri = _makeUri ("api/v1/subscriptions" );
81
85
82
- final response = await http .get (uri, headers: await _headers);
86
+ final response = await httpClient .get (uri, headers: await _headers);
83
87
LinkFiveLogger .d ('Response status: ${response .statusCode }' );
84
88
LinkFiveLogger .d ('Response body: ${response .body }' );
85
89
final mapBody = jsonDecode (response.body);
@@ -107,18 +111,9 @@ class LinkFiveClient extends LinkFiveClientInterface {
107
111
};
108
112
109
113
LinkFiveLogger .d ("purchase. $body " );
110
- try {
111
- final response = await http.post (uri, body: jsonEncode (body), headers: await _headers);
112
-
113
- return _parseOneTimePurchaseListResponse (response);
114
- } catch (e) {
115
- LinkFiveLogger .e ("Purchase Request Error: ${e .toString ()}" );
116
- LinkFiveLogger .e ("Try Again with same request" );
114
+ final response = await httpClient.post (uri, body: body, headers: await _headers);
117
115
118
- final response = await http.post (uri, body: jsonEncode (body), headers: await _headers);
119
-
120
- return _parseOneTimePurchaseListResponse (response);
121
- }
116
+ return _parseOneTimePurchaseListResponse (response);
122
117
}
123
118
124
119
/// after a purchase on Google we call the purchases/google
@@ -151,18 +146,10 @@ class LinkFiveClient extends LinkFiveClientInterface {
151
146
152
147
LinkFiveLogger .d ("purchase: $purchaseBody " );
153
148
154
- try {
155
- final response = await http.post (uri, body: jsonEncode (purchaseBody.toJson ()), headers: await _headers);
156
-
157
- return _parseOneTimePurchaseListResponse (response);
158
- } catch (e) {
159
- LinkFiveLogger .e ("Purchase Request Error: ${e .toString ()}" );
160
- LinkFiveLogger .e ("Try Again with same request" );
161
-
162
- final response = await http.post (uri, body: jsonEncode (purchaseBody.toJson ()), headers: await _headers);
149
+ final response =
150
+ await httpClient.post (uri, body: purchaseBody.toJson (), headers: await _headers);
163
151
164
- return _parseOneTimePurchaseListResponse (response);
165
- }
152
+ return _parseOneTimePurchaseListResponse (response);
166
153
}
167
154
168
155
@override
@@ -178,18 +165,10 @@ class LinkFiveClient extends LinkFiveClientInterface {
178
165
);
179
166
180
167
LinkFiveLogger .d ("purchase: $purchaseBody " );
181
- try {
182
- final response = await http.post (uri, body: jsonEncode (purchaseBody.toJson ()), headers: await _headers);
183
-
184
- return _parseOneTimePurchaseListResponse (response);
185
- } catch (e) {
186
- LinkFiveLogger .e ("Purchase Request Error: ${e .toString ()}" );
187
- LinkFiveLogger .e ("Try Again with same request" );
168
+ final response =
169
+ await httpClient.post (uri, body: purchaseBody.toJson (), headers: await _headers);
188
170
189
- final response = await http.post (uri, body: jsonEncode (purchaseBody.toJson ()), headers: await _headers);
190
-
191
- return _parseOneTimePurchaseListResponse (response);
192
- }
171
+ return _parseOneTimePurchaseListResponse (response);
193
172
}
194
173
195
174
/// Fetches the receipts for a user
@@ -200,7 +179,7 @@ class LinkFiveClient extends LinkFiveClientInterface {
200
179
Future <LinkFiveActiveProducts > fetchUserPlanListFromLinkFive () async {
201
180
final uri = _makeUri ("api/v1/purchases/user" );
202
181
203
- final response = await http .get (uri, headers: await _headers);
182
+ final response = await httpClient .get (uri, headers: await _headers);
204
183
return _parseOneTimePurchaseListResponse (response);
205
184
}
206
185
@@ -221,7 +200,7 @@ class LinkFiveClient extends LinkFiveClientInterface {
221
200
222
201
LinkFiveLogger .d ("Restore body: $body " );
223
202
224
- final response = await http .post (uri, body: jsonEncode ( body) , headers: await _headers);
203
+ final response = await httpClient .post (uri, body: body, headers: await _headers);
225
204
return _parseOneTimePurchaseListResponse (response);
226
205
}
227
206
@@ -242,15 +221,15 @@ class LinkFiveClient extends LinkFiveClientInterface {
242
221
243
222
LinkFiveLogger .d ("Restore body: $body " );
244
223
245
- final response = await http .post (uri, body: jsonEncode ( body) , headers: await _headers);
224
+ final response = await httpClient .post (uri, body: body, headers: await _headers);
246
225
return _parseOneTimePurchaseListResponse (response);
247
226
}
248
227
249
228
@override
250
229
Future <LinkFiveActiveProducts > changeUserId (String ? userId) async {
251
230
final uri = _makeUri ("api/v1/purchases/user/customer-user-id" );
252
231
253
- final response = await http .put (uri, headers: await _headers);
232
+ final response = await httpClient .put (uri, headers: await _headers);
254
233
return _parseOneTimePurchaseListResponse (response);
255
234
}
256
235
@@ -263,7 +242,7 @@ class LinkFiveClient extends LinkFiveClientInterface {
263
242
return Uri .https (hostUrl, path, queryParams);
264
243
}
265
244
266
- LinkFiveActiveProducts _parseOneTimePurchaseListResponse (http. Response response) {
245
+ LinkFiveActiveProducts _parseOneTimePurchaseListResponse (Response response) {
267
246
LinkFiveLogger .d ("Parse with body ${response .body }" );
268
247
269
248
Map <String , dynamic > jsonResponse = jsonDecode (response.body);
0 commit comments