-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflutter_symbols_api.dart
More file actions
98 lines (94 loc) · 2.66 KB
/
flutter_symbols_api.dart
File metadata and controls
98 lines (94 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
/// Uploads Flutter symbols files to Raygun.
Future<bool> uploadSymbols({
required String appId,
required String token,
required String path,
required String version,
}) async {
final file = File(path);
if (!file.existsSync()) {
print('$path: file not found!');
return false;
}
print('Uploading: $path');
final url = 'https://api.raygun.com/v3/applications/$appId/flutter-symbols';
final request = http.MultipartRequest('PUT', Uri.parse(url));
request.headers.addAll({
'Authorization': 'Bearer $token',
'Content-Type': 'multipart/form-data',
});
request.files.add(
http.MultipartFile(
'file',
file.readAsBytes().asStream(),
file.lengthSync(),
filename: path.split("/").last,
),
);
request.fields.addAll({
'version': version,
});
final res = await request.send();
if (res.statusCode == 200) {
print('File uploaded succesfully!');
return true;
} else {
print('Error uploading file. Response code: ${res.statusCode}');
return false;
}
}
/// Lists Flutter symbols files in Raygun.
Future<bool> listSymbols({
required String appId,
required String token,
}) async {
final url = 'https://api.raygun.com/v3/applications/$appId/flutter-symbols';
final request = http.MultipartRequest('GET', Uri.parse(url));
request.headers.addAll({
'Authorization': 'Bearer $token',
'Content-Type': 'multipart/form-data',
});
final res = await request.send();
if (res.statusCode == 200) {
final string = await res.stream.bytesToString();
final listItems = jsonDecode(string) as List<dynamic>;
print('');
print('List of symbols:');
print('');
for (final item in listItems) {
print('Symbols File: ${item['name']}');
print('Identifier: ${item['identifier']}');
print('App Version: ${item['version']}');
print('');
}
return true;
} else {
print('Error getting list. Response code: ${res.statusCode}');
return false;
}
}
/// Deletes a Flutter symbols file in Raygun.
Future<bool> deleteSymbols({
required String appId,
required String token,
required String id,
}) async {
final url =
'https://api.raygun.com/v3/applications/$appId/flutter-symbols/$id';
final request = http.MultipartRequest('DELETE', Uri.parse(url));
request.headers.addAll({
'Authorization': 'Bearer $token',
'Content-Type': 'multipart/form-data',
});
final res = await request.send();
if (res.statusCode == 204) {
print('Deleted: $id');
return true;
} else {
print('Error deleting $id. Response code: ${res.statusCode}');
return false;
}
}