Skip to content

Commit f75962b

Browse files
authored
Development registrar client (#2)
* setup melos and registrar_client pkg * add models and registrar client * implemented account, farm, node and zos methods * update path + update createFarm + fix UptimeReport model
1 parent d3d9297 commit f75962b

22 files changed

+1648
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.dart_tool/
2+
.idea/

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# tfgridV4-sdk-dart
2+
3+
This repo contains the dart clients for Threefold gridV4.
4+
5+
## Packages
6+
7+
- [registrar_client](./packages/registrar_client/README.md)

melos.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
name: tfgridv4_sdk_dart
2+
3+
packages:
4+
- packages/**
5+
6+
scripts:
7+

packages/registrar_client/.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# https://dart.dev/guides/libraries/private-files
2+
# Created by `dart pub`
3+
.dart_tool/
4+
5+
# Avoid committing pubspec.lock for library packages; see
6+
# https://dart.dev/guides/libraries/private-files#pubspeclock.
7+
pubspec.lock

packages/registrar_client/README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Registrar Client
2+
3+
This package provides a client for interacting with the TFGrid v4 Node Registrar.
4+
5+
## Install Dependencies
6+
7+
```bash
8+
dart pub get
9+
```
10+
11+
## Usage
12+
13+
- Example usage:
14+
15+
```dart
16+
import 'package:registrar_client/registrar_client.dart';
17+
18+
void main() async{
19+
20+
final client = RegistrarClient(
21+
baseUrl: 'https://registrar.dev4.grid.tf/v1',
22+
privateKey: 'your_private_key');
23+
24+
final account = await client.account.create(relays: ['relay1', 'relay2'] , rmbEncKey: 'rmb_enc_key');
25+
26+
final farmIDCreated = await client.farms
27+
.create(Farm(dedicated: true, farmName: 'farm', twinID: account.twinID));
28+
}
29+
```
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import 'package:registrar_client/registrar_client.dart';
2+
3+
void main() async {
4+
final client = RegistrarClient(
5+
baseUrl: 'https://registrar.dev4.grid.tf/v1',
6+
privateKey: 'your_private_key');
7+
final account = await client.accounts.create();
8+
9+
print(account);
10+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import 'farm.dart';
2+
3+
class Account {
4+
final String createdAt;
5+
final List<Farm>? farms;
6+
final String publicKey;
7+
final List<String>? relays;
8+
final String? rmbEncKey;
9+
final int twinID;
10+
final String updatedAt;
11+
12+
Account({
13+
required this.createdAt,
14+
this.farms,
15+
required this.publicKey,
16+
this.relays,
17+
this.rmbEncKey,
18+
required this.twinID,
19+
required this.updatedAt,
20+
});
21+
22+
factory Account.fromJson(Map<String, dynamic> json) {
23+
return Account(
24+
createdAt: json['created_at'],
25+
farms: json['farms'] != null
26+
? (json['farms'] as List).map((farm) => Farm.fromJson(farm)).toList()
27+
: null,
28+
publicKey: json['public_key'],
29+
relays: json['relays'] != null ? List<String>.from(json['relays']) : null,
30+
rmbEncKey: json['rmb_enc_key'],
31+
twinID: json['twin_id'],
32+
updatedAt: json['updated_at'],
33+
);
34+
}
35+
}
36+
37+
class AccountCreationRequest {
38+
final String publicKey;
39+
final String signature;
40+
final int timestamp;
41+
final List<String>? relays;
42+
final String? rmbEncKey;
43+
44+
AccountCreationRequest({
45+
required this.publicKey,
46+
required this.signature,
47+
required this.timestamp,
48+
this.relays,
49+
this.rmbEncKey,
50+
});
51+
52+
Map<String, dynamic> toJson() {
53+
return {
54+
'public_key': publicKey,
55+
'signature': signature,
56+
'timestamp': timestamp,
57+
'relays': relays,
58+
'rmb_enc_key': rmbEncKey,
59+
};
60+
}
61+
}
62+
63+
class AccountUpdateRequest {
64+
final List<String> relays;
65+
final String rmbEncKey;
66+
67+
AccountUpdateRequest({
68+
required this.relays,
69+
required this.rmbEncKey,
70+
});
71+
72+
Map<String, dynamic> toJson() {
73+
return {
74+
'relays': relays,
75+
'rmb_enc_key': rmbEncKey,
76+
};
77+
}
78+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import 'node.dart';
2+
3+
class Farm {
4+
final String? createdAt;
5+
final bool dedicated;
6+
final int? farmID;
7+
final String farmName;
8+
final List<Node>? nodes;
9+
final int twinID;
10+
final String? updatedAt;
11+
12+
Farm({
13+
this.createdAt,
14+
required this.dedicated,
15+
this.farmID,
16+
required farmName,
17+
this.nodes,
18+
required twinID,
19+
this.updatedAt,
20+
}) : farmName = _validateFarmName(farmName),
21+
twinID = _validateTwinId(twinID);
22+
23+
factory Farm.fromJson(Map<String, dynamic> json) {
24+
return Farm(
25+
createdAt: json['created_at'],
26+
dedicated: json['dedicated'],
27+
farmID: json['farm_id'],
28+
farmName: json['farm_name'],
29+
nodes: json['nodes'] != null
30+
? (json['nodes'] as List).map((node) => Node.fromJson(node)).toList()
31+
: null,
32+
twinID: json['twin_id'],
33+
updatedAt: json['updated_at'],
34+
);
35+
}
36+
37+
Map<String, dynamic> toJson() {
38+
return {
39+
'created_at': createdAt,
40+
'dedicated': dedicated,
41+
'farm_id': farmID,
42+
'farm_name': farmName,
43+
'nodes': nodes ?? [],
44+
'twin_id': twinID,
45+
'updated_at': updatedAt,
46+
};
47+
}
48+
49+
static String _validateFarmName(String farmName) {
50+
if (farmName.isEmpty || farmName.length > 40) {
51+
throw ArgumentError(
52+
'Farm name cannot be empty and must be less than or equal to 40 characters');
53+
}
54+
return farmName;
55+
}
56+
57+
static int _validateTwinId(int twinId) {
58+
if (twinId <= 0) {
59+
throw ArgumentError('Twin ID cannot be negative');
60+
}
61+
return twinId;
62+
}
63+
}
64+
65+
class FarmFilter {
66+
final String? farmName;
67+
final int? twinID;
68+
final int? farmID;
69+
final int? page;
70+
final int? size;
71+
72+
FarmFilter({
73+
this.farmName,
74+
this.twinID,
75+
this.farmID,
76+
this.page,
77+
this.size,
78+
});
79+
80+
Map<String, dynamic> toJson() {
81+
return {
82+
'farm_name': farmName,
83+
'twin_id': twinID,
84+
'farm_id': farmID,
85+
'page': page,
86+
'size': size,
87+
};
88+
}
89+
}

0 commit comments

Comments
 (0)