AI prompts
base on Flutter/Dart API for binary.com websockets API # Flutter Deriv API
Flutter Deriv API is an abstraction layer over `Binary WebSocket` (_https://github.com/binary-com/websockets_) for `Dart` and `Flutter` developers.
## Using Flutter Deriv API
### A. Creating a websocket connection
Use `APIInitializer` to prepare API instance for dependency injection, you can pass `true` to `isMock` parameter for testing purposes.
```dart
APIInitializer().initialize();
```
Establishing a connection to WebSocket needs an instance of the `ConnectionInformation` class for initializing API connection.
```dart
final BaseAPI api = Injector()<BaseAPI>();
api.connect(
ConnectionInformation(
appId: ...,
brand: ...,
endpoint: ...,
language: ...,
),
onDone: () async { ... },
onOpen: () async { ... },
printResponse: true,
);
```
### B. Calling API methods
You can invoke API calls with either using classes in the abstraction layer (`Ping, Order, Advert, ...`) or directly with API calls from the `BaseAPI` class.
#### Calling method by abstraction layer
```dart
final Ping ping = await Ping.ping();
print(ping.succeeded);
```
#### Calling method directly with `BaseAPI`
```dart
final BaseAPI api = Injector()<BaseAPI>();
final PingResponse response =
await api.call(request: const PingRequest());
print(response.ping);
```
### Request Compare Predicate
To prevent adding duplicate requests `Subscription Manager` applies some mechanism to compare and return a suitable result if a subscription request already exists.
By default, the subscription manager uses the `Equatable` package to compare the current request with the request pool. Sometimes you do not want to rely on the package, in that case you can add `Compare Predicate` to your call API, and compare your request with already existing requests in subscription manager.
You just need to define a `Compare Predicate` method to compare your request.
```dart
...
subscribeToSomeApiCall(request, comparePredicate: getComparePredicate);
...
bool getComparePredicate({
bool equatableResult,
PendingRequest<Response> pendingRequest,
Request request,
}) {
SomeRequest otherRequest = pendingRequest.request as SomeRequest;
SomeRequest currentRequest = request as SomeRequest;
return equatableResult && otherRequest.param01 == currentRequest.param01 && ...;
}
```
---
## Documentation
### API Architecture
<br/>
<p align="center">
<img src="deriv_api_architecture.png" alt="API Architecture" width="70%"/>
</p>
### API Reference
The complete API reference is [here](#).
---
## Development
### Clone repository
```
$ git clone https://github.com/regentmarkets/flutter-deriv-api.git
$ cd flutter-deriv-api
$ flutter pub get
```
### Use this package as a library
Add this to your package's `pubspec.yaml` file:
```
dependencies:
...
flutter_deriv_api:
git:
url: https://github.com/regentmarkets/flutter-deriv-api.git
ref: master
```
### Use this package as a submodule
```
$ git submodule add https://github.com/regentmarkets/flutter-deriv-api.git
```
Add this to your package's `pubspec.yaml` file:
```
dependencies:
...
flutter_deriv_api:
path: ./flutter-deriv-api/
```
### Initialize and update submodule
```
$ git submodule init
$ git submodule update --remote
$ ./setup.sh
$ dart run build_runner build --delete-conflicting-outputs
```
### Run the tests
```
$ flutter test
```
### Generate documentations
```
$ dartdoc
```
---
## Tools
### JSON Schema Parser
`JsonSchemaParser` class is a tool for extracting main and nested classes from model schema contents.
#### Using schema parser
- Call `getModels(Map<String, dynamic> schema)` method and pass decoded schema to it.
- Pass the result of `getModels` method to `getClasses(List<SchemaModel> models, String className)` as `models` parameter.
The final result is a `string` that contains the main class and all related classes of that schema file including `Model Classes, Constructors, Properties` and `toJson(), fromJson(), copyWith()` Methods.
#### Run schema parser
```
$ flutter pub run lib/tools/parser.dart <json_schema_path> <main_class_name>
```
#### Example
```
$ flutter pub run lib/tools/parser.dart active_symbols_receive.json ActiveSymbols
```
#### Notes
1. This tool is for helping developers to convert JSON Schema easier, you may require some adjustments to the result file according to your needs.
2. The resulting file will be generated in the same path as the JSON schema file.
3. Some JSON schemas are not standard and this tool may not convert them properly.
", Assign "at most 3 tags" to the expected json: {"id":"11951","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"