chore: regenerate sdk

This commit is contained in:
root
2025-07-18 08:20:39 +00:00
parent 95df0ad81b
commit b280ed4d5a
99 changed files with 4355 additions and 4902 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ Add this to your package's `pubspec.yaml` file:
```yml
dependencies:
appwrite: ^17.1.0
appwrite: ^17.0.2
```
You can install packages from the command line:
@@ -2,7 +2,6 @@ import 'package:appwrite/appwrite.dart';
Client client = Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setAdmin('') //
.setSession('') // The user session to authenticate with
.setKey('') //
.setJWT('<YOUR_JWT>'); // Your secret JSON Web Token
@@ -1,16 +0,0 @@
import 'package:appwrite/appwrite.dart';
Client client = Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
Databases databases = Databases(client);
Document result = await databases.decrementDocumentAttribute(
databaseId: '<DATABASE_ID>',
collectionId: '<COLLECTION_ID>',
documentId: '<DOCUMENT_ID>',
attribute: '',
value: 0, // optional
min: 0, // optional
);
@@ -1,16 +0,0 @@
import 'package:appwrite/appwrite.dart';
Client client = Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
Databases databases = Databases(client);
Document result = await databases.incrementDocumentAttribute(
databaseId: '<DATABASE_ID>',
collectionId: '<COLLECTION_ID>',
documentId: '<DOCUMENT_ID>',
attribute: '',
value: 0, // optional
max: 0, // optional
);
+1 -1
View File
@@ -1,6 +1,6 @@
/// Appwrite Flutter SDK
///
/// This SDK is compatible with Appwrite server version 1.7.x.
/// This SDK is compatible with Appwrite server version 1.7.x.
/// For older versions, please check
/// [previous releases](https://github.com/appwrite/sdk-for-flutter/releases).
library appwrite;
+1 -1
View File
@@ -1 +1 @@
export 'src/client_browser.dart';
export 'src/client_browser.dart';
+1 -1
View File
@@ -1 +1 @@
export 'src/client_io.dart';
export 'src/client_io.dart';
+2 -1
View File
@@ -10,7 +10,8 @@ class ID {
final now = DateTime.now();
final sec = (now.millisecondsSinceEpoch / 1000).floor();
final usec = now.microsecondsSinceEpoch - (sec * 1000000);
return sec.toRadixString(16) + usec.toRadixString(16).padLeft(5, '0');
return sec.toRadixString(16) +
usec.toRadixString(16).padLeft(5, '0');
}
// Generate a unique ID with padding to have a longer ID
+24 -33
View File
@@ -1,5 +1,6 @@
part of 'appwrite.dart';
/// Helper class to generate query strings.
class Query {
final String method;
@@ -9,13 +10,15 @@ class Query {
Query._(this.method, [this.attribute = null, this.values = null]);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{'method': method};
final map = <String, dynamic>{
'method': method,
};
if (attribute != null) {
if(attribute != null) {
map['attribute'] = attribute;
}
if (values != null) {
if(values != null) {
map['values'] = values is List ? values : [values];
}
@@ -26,7 +29,7 @@ class Query {
String toString() => jsonEncode(toJson());
/// Filter resources where [attribute] is equal to [value].
///
///
/// [value] can be a single value or a list. If a list is used
/// the query will return resources where [attribute] is equal
/// to any of the values in the list.
@@ -58,12 +61,10 @@ class Query {
Query._('search', attribute, value).toString();
/// Filter resources where [attribute] is null.
static String isNull(String attribute) =>
Query._('isNull', attribute).toString();
static String isNull(String attribute) => Query._('isNull', attribute).toString();
/// Filter resources where [attribute] is not null.
static String isNotNull(String attribute) =>
Query._('isNotNull', attribute).toString();
static String isNotNull(String attribute) => Query._('isNotNull', attribute).toString();
/// Filter resources where [attribute] is between [start] and [end] (inclusive).
static String between(String attribute, dynamic start, dynamic end) =>
@@ -82,51 +83,41 @@ class Query {
static String contains(String attribute, dynamic value) =>
Query._('contains', attribute, value).toString();
static String or(List<String> queries) => Query._(
'or',
null,
queries.map((query) => jsonDecode(query)).toList(),
).toString();
static String or(List<String> queries) =>
Query._('or', null, queries.map((query) => jsonDecode(query)).toList()).toString();
static String and(List<String> queries) => Query._(
'and',
null,
queries.map((query) => jsonDecode(query)).toList(),
).toString();
static String and(List<String> queries) =>
Query._('and', null, queries.map((query) => jsonDecode(query)).toList()).toString();
/// Specify which attributes should be returned by the API call.
static String select(List<String> attributes) =>
Query._('select', null, attributes).toString();
/// Sort results by [attribute] ascending.
static String orderAsc(String attribute) =>
Query._('orderAsc', attribute).toString();
static String orderAsc(String attribute) => Query._('orderAsc', attribute).toString();
/// Sort results by [attribute] descending.
static String orderDesc(String attribute) =>
Query._('orderDesc', attribute).toString();
static String orderDesc(String attribute) => Query._('orderDesc', attribute).toString();
/// Return results before [id].
///
///
/// Refer to the [Cursor Based Pagination](https://appwrite.io/docs/pagination#cursor-pagination)
/// docs for more information.
static String cursorBefore(String id) =>
Query._('cursorBefore', null, id).toString();
static String cursorBefore(String id) => Query._('cursorBefore', null, id).toString();
/// Return results after [id].
///
///
/// Refer to the [Cursor Based Pagination](https://appwrite.io/docs/pagination#cursor-pagination)
/// docs for more information.
static String cursorAfter(String id) =>
Query._('cursorAfter', null, id).toString();
static String cursorAfter(String id) => Query._('cursorAfter', null, id).toString();
/// Return only [limit] results.
static String limit(int limit) => Query._('limit', null, limit).toString();
/// Return results from [offset].
///
///
/// Refer to the [Offset Pagination](https://appwrite.io/docs/pagination#offset-pagination)
/// docs for more information.
static String offset(int offset) =>
Query._('offset', null, offset).toString();
}
static String offset(int offset) => Query._('offset', null, offset).toString();
}
+1 -1
View File
@@ -1 +1 @@
export 'src/realtime_browser.dart';
export 'src/realtime_browser.dart';
+1 -1
View File
@@ -1 +1 @@
export 'src/realtime_io.dart';
export 'src/realtime_io.dart';
+55 -55
View File
@@ -2,65 +2,65 @@ part of 'appwrite.dart';
/// Helper class to generate role strings for [Permission].
class Role {
Role._();
/// Grants access to anyone.
///
/// This includes authenticated and unauthenticated users.
static String any() {
return 'any';
}
/// Grants access to a specific user by user ID.
///
/// You can optionally pass verified or unverified for
/// [status] to target specific types of users.
static String user(String id, [String status = '']) {
if (status.isEmpty) {
return 'user:$id';
Role._();
/// Grants access to anyone.
///
/// This includes authenticated and unauthenticated users.
static String any() {
return 'any';
}
return 'user:$id/$status';
}
/// Grants access to any authenticated or anonymous user.
///
/// You can optionally pass verified or unverified for
/// [status] to target specific types of users.
static String users([String status = '']) {
if (status.isEmpty) {
return 'users';
/// Grants access to a specific user by user ID.
///
/// You can optionally pass verified or unverified for
/// [status] to target specific types of users.
static String user(String id, [String status = '']) {
if(status.isEmpty) {
return 'user:$id';
}
return 'user:$id/$status';
}
return 'users/$status';
}
/// Grants access to any guest user without a session.
///
/// Authenticated users don't have access to this role.
static String guests() {
return 'guests';
}
/// Grants access to a team by team ID.
///
/// You can optionally pass a role for [role] to target
/// team members with the specified role.
static String team(String id, [String role = '']) {
if (role.isEmpty) {
return 'team:$id';
/// Grants access to any authenticated or anonymous user.
///
/// You can optionally pass verified or unverified for
/// [status] to target specific types of users.
static String users([String status = '']) {
if(status.isEmpty) {
return 'users';
}
return 'users/$status';
}
return 'team:$id/$role';
}
/// Grants access to a specific member of a team.
///
/// When the member is removed from the team, they will
/// no longer have access.
static String member(String id) {
return 'member:$id';
}
/// Grants access to any guest user without a session.
///
/// Authenticated users don't have access to this role.
static String guests() {
return 'guests';
}
/// Grants access to a user with the specified label.
static String label(String name) {
return 'label:$name';
}
}
/// Grants access to a team by team ID.
///
/// You can optionally pass a role for [role] to target
/// team members with the specified role.
static String team(String id, [String role = '']) {
if(role.isEmpty) {
return 'team:$id';
}
return 'team:$id/$role';
}
/// Grants access to a specific member of a team.
///
/// When the member is removed from the team, they will
/// no longer have access.
static String member(String id) {
return 'member:$id';
}
/// Grants access to a user with the specified label.
static String label(String name) {
return 'label:$name';
}
}
+1077 -1224
View File
File diff suppressed because it is too large Load Diff
+157 -223
View File
@@ -3,247 +3,181 @@ part of '../appwrite.dart';
/// The Avatars service aims to help you complete everyday tasks related to
/// your app image, icons, and avatars.
class Avatars extends Service {
/// Initializes a [Avatars] service
Avatars(super.client);
/// Initializes a [Avatars] service
Avatars(super.client);
/// You can use this endpoint to show different browser icons to your users.
/// The code argument receives the browser code as it appears in your user [GET
/// /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions)
/// endpoint. Use width, height and quality arguments to change the output
/// settings.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 100x100px.
Future<Uint8List> getBrowser({
required enums.Browser code,
int? width,
int? height,
int? quality,
}) async {
final String apiPath = '/avatars/browsers/{code}'.replaceAll(
'{code}',
code.value,
);
/// You can use this endpoint to show different browser icons to your users.
/// The code argument receives the browser code as it appears in your user [GET
/// /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions)
/// endpoint. Use width, height and quality arguments to change the output
/// settings.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 100x100px.
Future<Uint8List> getBrowser({required enums.Browser code, int? width, int? height, int? quality}) async {
final String apiPath = '/avatars/browsers/{code}'.replaceAll('{code}', code.value);
final Map<String, dynamic> params = {
'width': width,
'height': height,
'quality': quality,
final Map<String, dynamic> params = {
'width': width,
'height': height,
'quality': quality,
'project': client.config['project'],
};
'project': client.config['project'],
};
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
/// The credit card endpoint will return you the icon of the credit card
/// provider you need. Use width, height and quality arguments to change the
/// output settings.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 100x100px.
///
Future<Uint8List> getCreditCard({required enums.CreditCard code, int? width, int? height, int? quality}) async {
final String apiPath = '/avatars/credit-cards/{code}'.replaceAll('{code}', code.value);
/// The credit card endpoint will return you the icon of the credit card
/// provider you need. Use width, height and quality arguments to change the
/// output settings.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 100x100px.
///
Future<Uint8List> getCreditCard({
required enums.CreditCard code,
int? width,
int? height,
int? quality,
}) async {
final String apiPath = '/avatars/credit-cards/{code}'.replaceAll(
'{code}',
code.value,
);
final Map<String, dynamic> params = {
'width': width,
'height': height,
'quality': quality,
'project': client.config['project'],
};
final Map<String, dynamic> params = {
'width': width,
'height': height,
'quality': quality,
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
'project': client.config['project'],
};
/// Use this endpoint to fetch the favorite icon (AKA favicon) of any remote
/// website URL.
///
/// This endpoint does not follow HTTP redirects.
Future<Uint8List> getFavicon({required String url}) async {
const String apiPath = '/avatars/favicon';
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
final Map<String, dynamic> params = {
'url': url,
'project': client.config['project'],
};
/// Use this endpoint to fetch the favorite icon (AKA favicon) of any remote
/// website URL.
///
/// This endpoint does not follow HTTP redirects.
Future<Uint8List> getFavicon({required String url}) async {
const String apiPath = '/avatars/favicon';
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
final Map<String, dynamic> params = {
'url': url,
/// You can use this endpoint to show different country flags icons to your
/// users. The code argument receives the 2 letter country code. Use width,
/// height and quality arguments to change the output settings. Country codes
/// follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 100x100px.
///
Future<Uint8List> getFlag({required enums.Flag code, int? width, int? height, int? quality}) async {
final String apiPath = '/avatars/flags/{code}'.replaceAll('{code}', code.value);
'project': client.config['project'],
};
final Map<String, dynamic> params = {
'width': width,
'height': height,
'quality': quality,
'project': client.config['project'],
};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
/// You can use this endpoint to show different country flags icons to your
/// users. The code argument receives the 2 letter country code. Use width,
/// height and quality arguments to change the output settings. Country codes
/// follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 100x100px.
///
Future<Uint8List> getFlag({
required enums.Flag code,
int? width,
int? height,
int? quality,
}) async {
final String apiPath = '/avatars/flags/{code}'.replaceAll(
'{code}',
code.value,
);
/// Use this endpoint to fetch a remote image URL and crop it to any image size
/// you want. This endpoint is very useful if you need to crop and display
/// remote images in your app or in case you want to make sure a 3rd party
/// image is properly served using a TLS protocol.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 400x400px.
///
/// This endpoint does not follow HTTP redirects.
Future<Uint8List> getImage({required String url, int? width, int? height}) async {
const String apiPath = '/avatars/image';
final Map<String, dynamic> params = {
'width': width,
'height': height,
'quality': quality,
final Map<String, dynamic> params = {
'url': url,
'width': width,
'height': height,
'project': client.config['project'],
};
'project': client.config['project'],
};
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
/// Use this endpoint to show your user initials avatar icon on your website or
/// app. By default, this route will try to print your logged-in user name or
/// email initials. You can also overwrite the user name if you pass the 'name'
/// parameter. If no name is given and no user is logged, an empty avatar will
/// be returned.
///
/// You can use the color and background params to change the avatar colors. By
/// default, a random theme will be selected. The random theme will persist for
/// the user's initials when reloading the same theme will always return for
/// the same initials.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 100x100px.
///
Future<Uint8List> getInitials({String? name, int? width, int? height, String? background}) async {
const String apiPath = '/avatars/initials';
/// Use this endpoint to fetch a remote image URL and crop it to any image size
/// you want. This endpoint is very useful if you need to crop and display
/// remote images in your app or in case you want to make sure a 3rd party
/// image is properly served using a TLS protocol.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 400x400px.
///
/// This endpoint does not follow HTTP redirects.
Future<Uint8List> getImage({
required String url,
int? width,
int? height,
}) async {
const String apiPath = '/avatars/image';
final Map<String, dynamic> params = {
'name': name,
'width': width,
'height': height,
'background': background,
'project': client.config['project'],
};
final Map<String, dynamic> params = {
'url': url,
'width': width,
'height': height,
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
'project': client.config['project'],
};
/// Converts a given plain text to a QR code image. You can use the query
/// parameters to change the size and style of the resulting image.
///
Future<Uint8List> getQR({required String text, int? size, int? margin, bool? download}) async {
const String apiPath = '/avatars/qr';
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
final Map<String, dynamic> params = {
'text': text,
'size': size,
'margin': margin,
'download': download,
'project': client.config['project'],
};
/// Use this endpoint to show your user initials avatar icon on your website or
/// app. By default, this route will try to print your logged-in user name or
/// email initials. You can also overwrite the user name if you pass the 'name'
/// parameter. If no name is given and no user is logged, an empty avatar will
/// be returned.
///
/// You can use the color and background params to change the avatar colors. By
/// default, a random theme will be selected. The random theme will persist for
/// the user's initials when reloading the same theme will always return for
/// the same initials.
///
/// When one dimension is specified and the other is 0, the image is scaled
/// with preserved aspect ratio. If both dimensions are 0, the API provides an
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 100x100px.
///
Future<Uint8List> getInitials({
String? name,
int? width,
int? height,
String? background,
}) async {
const String apiPath = '/avatars/initials';
final Map<String, dynamic> params = {
'name': name,
'width': width,
'height': height,
'background': background,
'project': client.config['project'],
};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
/// Converts a given plain text to a QR code image. You can use the query
/// parameters to change the size and style of the resulting image.
///
Future<Uint8List> getQR({
required String text,
int? size,
int? margin,
bool? download,
}) async {
const String apiPath = '/avatars/qr';
final Map<String, dynamic> params = {
'text': text,
'size': size,
'margin': margin,
'download': download,
'project': client.config['project'],
};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
}
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
}
+89 -209
View File
@@ -3,250 +3,130 @@ part of '../appwrite.dart';
/// The Databases service allows you to create structured collections of
/// documents, query and filter lists of documents
class Databases extends Service {
/// Initializes a [Databases] service
Databases(super.client);
/// Initializes a [Databases] service
Databases(super.client);
/// Get a list of all the user's documents in a given collection. You can use
/// the query params to filter your results.
Future<models.DocumentList> listDocuments({
required String databaseId,
required String collectionId,
List<String>? queries,
}) async {
final String apiPath =
'/databases/{databaseId}/collections/{collectionId}/documents'
.replaceAll('{databaseId}', databaseId)
.replaceAll('{collectionId}', collectionId);
/// Get a list of all the user's documents in a given collection. You can use
/// the query params to filter your results.
Future<models.DocumentList> listDocuments({required String databaseId, required String collectionId, List<String>? queries}) async {
final String apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replaceAll('{databaseId}', databaseId).replaceAll('{collectionId}', collectionId);
final Map<String, dynamic> apiParams = {'queries': queries};
final Map<String, dynamic> apiParams = {
'queries': queries,
};
final Map<String, String> apiHeaders = {};
final Map<String, String> apiHeaders = {
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
};
return models.DocumentList.fromMap(res.data);
}
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
/// Create a new Document. Before using this route, you should create a new
/// collection resource using either a [server
/// integration](https://appwrite.io/docs/server/databases#databasesCreateCollection)
/// API or directly from your database console.
Future<models.Document> createDocument({
required String databaseId,
required String collectionId,
required String documentId,
required Map data,
List<String>? permissions,
}) async {
final String apiPath =
'/databases/{databaseId}/collections/{collectionId}/documents'
.replaceAll('{databaseId}', databaseId)
.replaceAll('{collectionId}', collectionId);
return models.DocumentList.fromMap(res.data);
final Map<String, dynamic> apiParams = {
'documentId': documentId,
'data': data,
'permissions': permissions,
};
}
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
/// Create a new Document. Before using this route, you should create a new
/// collection resource using either a [server
/// integration](https://appwrite.io/docs/server/databases#databasesCreateCollection)
/// API or directly from your database console.
Future<models.Document> createDocument({required String databaseId, required String collectionId, required String documentId, required Map data, List<String>? permissions}) async {
final String apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replaceAll('{databaseId}', databaseId).replaceAll('{collectionId}', collectionId);
final res = await client.call(
HttpMethod.post,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, dynamic> apiParams = {
'documentId': documentId,
'data': data,
'permissions': permissions,
};
return models.Document.fromMap(res.data);
}
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
/// Get a document by its unique ID. This endpoint response returns a JSON
/// object with the document data.
Future<models.Document> getDocument({
required String databaseId,
required String collectionId,
required String documentId,
List<String>? queries,
}) async {
final String apiPath =
'/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'
.replaceAll('{databaseId}', databaseId)
.replaceAll('{collectionId}', collectionId)
.replaceAll('{documentId}', documentId);
final res = await client.call(HttpMethod.post, path: apiPath, params: apiParams, headers: apiHeaders);
final Map<String, dynamic> apiParams = {'queries': queries};
return models.Document.fromMap(res.data);
final Map<String, String> apiHeaders = {};
}
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
/// Get a document by its unique ID. This endpoint response returns a JSON
/// object with the document data.
Future<models.Document> getDocument({required String databaseId, required String collectionId, required String documentId, List<String>? queries}) async {
final String apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replaceAll('{databaseId}', databaseId).replaceAll('{collectionId}', collectionId).replaceAll('{documentId}', documentId);
return models.Document.fromMap(res.data);
}
final Map<String, dynamic> apiParams = {
'queries': queries,
};
/// **WARNING: Experimental Feature** - This endpoint is experimental and not
/// yet officially supported. It may be subject to breaking changes or removal
/// in future versions.
///
/// Create or update a Document. Before using this route, you should create a
/// new collection resource using either a [server
/// integration](https://appwrite.io/docs/server/databases#databasesCreateCollection)
/// API or directly from your database console.
Future<models.Document> upsertDocument({
required String databaseId,
required String collectionId,
required String documentId,
required Map data,
List<String>? permissions,
}) async {
final String apiPath =
'/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'
.replaceAll('{databaseId}', databaseId)
.replaceAll('{collectionId}', collectionId)
.replaceAll('{documentId}', documentId);
final Map<String, String> apiHeaders = {
final Map<String, dynamic> apiParams = {
'data': data,
'permissions': permissions,
};
};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
final res = await client.call(
HttpMethod.put,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Document.fromMap(res.data);
return models.Document.fromMap(res.data);
}
}
/// Update a document by its unique ID. Using the patch method you can pass
/// only specific fields that will get updated.
Future<models.Document> updateDocument({
required String databaseId,
required String collectionId,
required String documentId,
Map? data,
List<String>? permissions,
}) async {
final String apiPath =
'/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'
.replaceAll('{databaseId}', databaseId)
.replaceAll('{collectionId}', collectionId)
.replaceAll('{documentId}', documentId);
/// **WARNING: Experimental Feature** - This endpoint is experimental and not
/// yet officially supported. It may be subject to breaking changes or removal
/// in future versions.
///
/// Create or update a Document. Before using this route, you should create a
/// new collection resource using either a [server
/// integration](https://appwrite.io/docs/server/databases#databasesCreateCollection)
/// API or directly from your database console.
Future<models.Document> upsertDocument({required String databaseId, required String collectionId, required String documentId, required Map data, List<String>? permissions}) async {
final String apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replaceAll('{databaseId}', databaseId).replaceAll('{collectionId}', collectionId).replaceAll('{documentId}', documentId);
final Map<String, dynamic> apiParams = {
'data': data,
'permissions': permissions,
};
final Map<String, dynamic> apiParams = {
'data': data,
'permissions': permissions,
};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(
HttpMethod.patch,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final res = await client.call(HttpMethod.put, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Document.fromMap(res.data);
}
return models.Document.fromMap(res.data);
/// Delete a document by its unique ID.
Future deleteDocument({
required String databaseId,
required String collectionId,
required String documentId,
}) async {
final String apiPath =
'/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'
.replaceAll('{databaseId}', databaseId)
.replaceAll('{collectionId}', collectionId)
.replaceAll('{documentId}', documentId);
}
final Map<String, dynamic> apiParams = {};
/// Update a document by its unique ID. Using the patch method you can pass
/// only specific fields that will get updated.
Future<models.Document> updateDocument({required String databaseId, required String collectionId, required String documentId, Map? data, List<String>? permissions}) async {
final String apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replaceAll('{databaseId}', databaseId).replaceAll('{collectionId}', collectionId).replaceAll('{documentId}', documentId);
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final Map<String, dynamic> apiParams = {
'data': data,
'permissions': permissions,
};
final res = await client.call(
HttpMethod.delete,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
return res.data;
}
final res = await client.call(HttpMethod.patch, path: apiPath, params: apiParams, headers: apiHeaders);
/// Decrement a specific attribute of a document by a given value.
Future<models.Document> decrementDocumentAttribute({
required String databaseId,
required String collectionId,
required String documentId,
required String attribute,
double? value,
double? min,
}) async {
final String apiPath =
'/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/decrement'
.replaceAll('{databaseId}', databaseId)
.replaceAll('{collectionId}', collectionId)
.replaceAll('{documentId}', documentId)
.replaceAll('{attribute}', attribute);
return models.Document.fromMap(res.data);
final Map<String, dynamic> apiParams = {'value': value, 'min': min};
}
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
/// Delete a document by its unique ID.
Future deleteDocument({required String databaseId, required String collectionId, required String documentId}) async {
final String apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replaceAll('{databaseId}', databaseId).replaceAll('{collectionId}', collectionId).replaceAll('{documentId}', documentId);
final res = await client.call(
HttpMethod.patch,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, dynamic> apiParams = {
};
return models.Document.fromMap(res.data);
}
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
/// Increment a specific attribute of a document by a given value.
Future<models.Document> incrementDocumentAttribute({
required String databaseId,
required String collectionId,
required String documentId,
required String attribute,
double? value,
double? max,
}) async {
final String apiPath =
'/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/increment'
.replaceAll('{databaseId}', databaseId)
.replaceAll('{collectionId}', collectionId)
.replaceAll('{documentId}', documentId)
.replaceAll('{attribute}', attribute);
final res = await client.call(HttpMethod.delete, path: apiPath, params: apiParams, headers: apiHeaders);
final Map<String, dynamic> apiParams = {'value': value, 'max': max};
return res.data;
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.patch,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Document.fromMap(res.data);
}
}
}
}
+50 -75
View File
@@ -3,93 +3,68 @@ part of '../appwrite.dart';
/// The Functions Service allows you view, create and manage your Cloud
/// Functions.
class Functions extends Service {
/// Initializes a [Functions] service
Functions(super.client);
/// Initializes a [Functions] service
Functions(super.client);
/// Get a list of all the current user function execution logs. You can use the
/// query params to filter your results.
Future<models.ExecutionList> listExecutions({
required String functionId,
List<String>? queries,
}) async {
final String apiPath = '/functions/{functionId}/executions'.replaceAll(
'{functionId}',
functionId,
);
/// Get a list of all the current user function execution logs. You can use the
/// query params to filter your results.
Future<models.ExecutionList> listExecutions({required String functionId, List<String>? queries}) async {
final String apiPath = '/functions/{functionId}/executions'.replaceAll('{functionId}', functionId);
final Map<String, dynamic> apiParams = {'queries': queries};
final Map<String, dynamic> apiParams = {
'queries': queries,
};
final Map<String, String> apiHeaders = {};
final Map<String, String> apiHeaders = {
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
};
return models.ExecutionList.fromMap(res.data);
}
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
/// Trigger a function execution. The returned object will return you the
/// current execution status. You can ping the `Get Execution` endpoint to get
/// updates on the current execution status. Once this endpoint is called, your
/// function execution process will start asynchronously.
Future<models.Execution> createExecution({
required String functionId,
String? body,
bool? xasync,
String? path,
enums.ExecutionMethod? method,
Map? headers,
String? scheduledAt,
}) async {
final String apiPath = '/functions/{functionId}/executions'.replaceAll(
'{functionId}',
functionId,
);
return models.ExecutionList.fromMap(res.data);
final Map<String, dynamic> apiParams = {
'body': body,
'async': xasync,
'path': path,
'method': method?.value,
'headers': headers,
'scheduledAt': scheduledAt,
};
}
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
/// Trigger a function execution. The returned object will return you the
/// current execution status. You can ping the `Get Execution` endpoint to get
/// updates on the current execution status. Once this endpoint is called, your
/// function execution process will start asynchronously.
Future<models.Execution> createExecution({required String functionId, String? body, bool? xasync, String? path, enums.ExecutionMethod? method, Map? headers, String? scheduledAt}) async {
final String apiPath = '/functions/{functionId}/executions'.replaceAll('{functionId}', functionId);
final res = await client.call(
HttpMethod.post,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, dynamic> apiParams = {
'body': body,
'async': xasync,
'path': path,
'method': method?.value,
'headers': headers,
'scheduledAt': scheduledAt,
};
return models.Execution.fromMap(res.data);
}
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
/// Get a function execution log by its unique ID.
Future<models.Execution> getExecution({
required String functionId,
required String executionId,
}) async {
final String apiPath = '/functions/{functionId}/executions/{executionId}'
.replaceAll('{functionId}', functionId)
.replaceAll('{executionId}', executionId);
final res = await client.call(HttpMethod.post, path: apiPath, params: apiParams, headers: apiHeaders);
final Map<String, dynamic> apiParams = {};
return models.Execution.fromMap(res.data);
final Map<String, String> apiHeaders = {};
}
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
/// Get a function execution log by its unique ID.
Future<models.Execution> getExecution({required String functionId, required String executionId}) async {
final String apiPath = '/functions/{functionId}/executions/{executionId}'.replaceAll('{functionId}', functionId).replaceAll('{executionId}', executionId);
return models.Execution.fromMap(res.data);
}
}
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {
};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Execution.fromMap(res.data);
}
}
+29 -35
View File
@@ -3,48 +3,42 @@ part of '../appwrite.dart';
/// The GraphQL API allows you to query and mutate your Appwrite server using
/// GraphQL.
class Graphql extends Service {
/// Initializes a [Graphql] service
Graphql(super.client);
/// Initializes a [Graphql] service
Graphql(super.client);
/// Execute a GraphQL mutation.
Future query({required Map query}) async {
const String apiPath = '/graphql';
/// Execute a GraphQL mutation.
Future query({required Map query}) async {
const String apiPath = '/graphql';
final Map<String, dynamic> apiParams = {'query': query};
final Map<String, dynamic> apiParams = {
'query': query,
};
final Map<String, String> apiHeaders = {
'x-sdk-graphql': 'true',
'content-type': 'application/json',
};
final Map<String, String> apiHeaders = {
'x-sdk-graphql': 'true', 'content-type': 'application/json',
};
final res = await client.call(
HttpMethod.post,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final res = await client.call(HttpMethod.post, path: apiPath, params: apiParams, headers: apiHeaders);
return res.data;
}
return res.data;
/// Execute a GraphQL mutation.
Future mutation({required Map query}) async {
const String apiPath = '/graphql/mutation';
}
final Map<String, dynamic> apiParams = {'query': query};
/// Execute a GraphQL mutation.
Future mutation({required Map query}) async {
const String apiPath = '/graphql/mutation';
final Map<String, String> apiHeaders = {
'x-sdk-graphql': 'true',
'content-type': 'application/json',
};
final Map<String, dynamic> apiParams = {
'query': query,
};
final res = await client.call(
HttpMethod.post,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, String> apiHeaders = {
'x-sdk-graphql': 'true', 'content-type': 'application/json',
};
return res.data;
}
}
final res = await client.call(HttpMethod.post, path: apiPath, params: apiParams, headers: apiHeaders);
return res.data;
}
}
+112 -120
View File
@@ -3,163 +3,155 @@ part of '../appwrite.dart';
/// The Locale service allows you to customize your app based on your users&#039;
/// location.
class Locale extends Service {
/// Initializes a [Locale] service
Locale(super.client);
/// Initializes a [Locale] service
Locale(super.client);
/// Get the current user location based on IP. Returns an object with user
/// country code, country name, continent name, continent code, ip address and
/// suggested currency. You can use the locale header to get the data in a
/// supported language.
///
/// ([IP Geolocation by DB-IP](https://db-ip.com))
Future<models.Locale> get() async {
const String apiPath = '/locale';
/// Get the current user location based on IP. Returns an object with user
/// country code, country name, continent name, continent code, ip address and
/// suggested currency. You can use the locale header to get the data in a
/// supported language.
///
/// ([IP Geolocation by DB-IP](https://db-ip.com))
Future<models.Locale> get() async {
const String apiPath = '/locale';
final Map<String, dynamic> apiParams = {};
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {};
final Map<String, String> apiHeaders = {
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
};
return models.Locale.fromMap(res.data);
}
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
/// List of all locale codes in [ISO
/// 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).
Future<models.LocaleCodeList> listCodes() async {
const String apiPath = '/locale/codes';
return models.Locale.fromMap(res.data);
final Map<String, dynamic> apiParams = {};
}
final Map<String, String> apiHeaders = {};
/// List of all locale codes in [ISO
/// 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).
Future<models.LocaleCodeList> listCodes() async {
const String apiPath = '/locale/codes';
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, dynamic> apiParams = {
};
return models.LocaleCodeList.fromMap(res.data);
}
final Map<String, String> apiHeaders = {
/// List of all continents. You can use the locale header to get the data in a
/// supported language.
Future<models.ContinentList> listContinents() async {
const String apiPath = '/locale/continents';
};
final Map<String, dynamic> apiParams = {};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
final Map<String, String> apiHeaders = {};
return models.LocaleCodeList.fromMap(res.data);
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
}
return models.ContinentList.fromMap(res.data);
}
/// List of all continents. You can use the locale header to get the data in a
/// supported language.
Future<models.ContinentList> listContinents() async {
const String apiPath = '/locale/continents';
/// List of all countries. You can use the locale header to get the data in a
/// supported language.
Future<models.CountryList> listCountries() async {
const String apiPath = '/locale/countries';
final Map<String, dynamic> apiParams = {
};
final Map<String, dynamic> apiParams = {};
final Map<String, String> apiHeaders = {
final Map<String, String> apiHeaders = {};
};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.CountryList.fromMap(res.data);
}
return models.ContinentList.fromMap(res.data);
/// List of all countries that are currently members of the EU. You can use the
/// locale header to get the data in a supported language.
Future<models.CountryList> listCountriesEU() async {
const String apiPath = '/locale/countries/eu';
}
final Map<String, dynamic> apiParams = {};
/// List of all countries. You can use the locale header to get the data in a
/// supported language.
Future<models.CountryList> listCountries() async {
const String apiPath = '/locale/countries';
final Map<String, String> apiHeaders = {};
final Map<String, dynamic> apiParams = {
};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, String> apiHeaders = {
return models.CountryList.fromMap(res.data);
}
};
/// List of all countries phone codes. You can use the locale header to get the
/// data in a supported language.
Future<models.PhoneList> listCountriesPhones() async {
const String apiPath = '/locale/countries/phones';
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
final Map<String, dynamic> apiParams = {};
return models.CountryList.fromMap(res.data);
final Map<String, String> apiHeaders = {};
}
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
/// List of all countries that are currently members of the EU. You can use the
/// locale header to get the data in a supported language.
Future<models.CountryList> listCountriesEU() async {
const String apiPath = '/locale/countries/eu';
return models.PhoneList.fromMap(res.data);
}
final Map<String, dynamic> apiParams = {
};
/// List of all currencies, including currency symbol, name, plural, and
/// decimal digits for all major and minor currencies. You can use the locale
/// header to get the data in a supported language.
Future<models.CurrencyList> listCurrencies() async {
const String apiPath = '/locale/currencies';
final Map<String, String> apiHeaders = {
final Map<String, dynamic> apiParams = {};
};
final Map<String, String> apiHeaders = {};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.CountryList.fromMap(res.data);
return models.CurrencyList.fromMap(res.data);
}
}
/// List of all languages classified by ISO 639-1 including 2-letter code, name
/// in English, and name in the respective language.
Future<models.LanguageList> listLanguages() async {
const String apiPath = '/locale/languages';
/// List of all countries phone codes. You can use the locale header to get the
/// data in a supported language.
Future<models.PhoneList> listCountriesPhones() async {
const String apiPath = '/locale/countries/phones';
final Map<String, dynamic> apiParams = {};
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {};
final Map<String, String> apiHeaders = {
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
};
return models.LanguageList.fromMap(res.data);
}
}
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.PhoneList.fromMap(res.data);
}
/// List of all currencies, including currency symbol, name, plural, and
/// decimal digits for all major and minor currencies. You can use the locale
/// header to get the data in a supported language.
Future<models.CurrencyList> listCurrencies() async {
const String apiPath = '/locale/currencies';
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {
};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.CurrencyList.fromMap(res.data);
}
/// List of all languages classified by ISO 639-1 including 2-letter code, name
/// in English, and name in the respective language.
Future<models.LanguageList> listLanguages() async {
const String apiPath = '/locale/languages';
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {
};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.LanguageList.fromMap(res.data);
}
}
+29 -45
View File
@@ -3,58 +3,42 @@ part of '../appwrite.dart';
/// The Messaging service allows you to send messages to any provider type
/// (SMTP, push notification, SMS, etc.).
class Messaging extends Service {
/// Initializes a [Messaging] service
Messaging(super.client);
/// Initializes a [Messaging] service
Messaging(super.client);
/// Create a new subscriber.
Future<models.Subscriber> createSubscriber({
required String topicId,
required String subscriberId,
required String targetId,
}) async {
final String apiPath = '/messaging/topics/{topicId}/subscribers'.replaceAll(
'{topicId}',
topicId,
);
/// Create a new subscriber.
Future<models.Subscriber> createSubscriber({required String topicId, required String subscriberId, required String targetId}) async {
final String apiPath = '/messaging/topics/{topicId}/subscribers'.replaceAll('{topicId}', topicId);
final Map<String, dynamic> apiParams = {
'subscriberId': subscriberId,
'targetId': targetId,
};
final Map<String, dynamic> apiParams = {
'subscriberId': subscriberId,
'targetId': targetId,
};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(
HttpMethod.post,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final res = await client.call(HttpMethod.post, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Subscriber.fromMap(res.data);
}
return models.Subscriber.fromMap(res.data);
/// Delete a subscriber by its unique ID.
Future deleteSubscriber({
required String topicId,
required String subscriberId,
}) async {
final String apiPath =
'/messaging/topics/{topicId}/subscribers/{subscriberId}'
.replaceAll('{topicId}', topicId)
.replaceAll('{subscriberId}', subscriberId);
}
final Map<String, dynamic> apiParams = {};
/// Delete a subscriber by its unique ID.
Future deleteSubscriber({required String topicId, required String subscriberId}) async {
final String apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replaceAll('{topicId}', topicId).replaceAll('{subscriberId}', subscriberId);
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final Map<String, dynamic> apiParams = {
};
final res = await client.call(
HttpMethod.delete,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
return res.data;
}
}
final res = await client.call(HttpMethod.delete, path: apiPath, params: apiParams, headers: apiHeaders);
return res.data;
}
}
+155 -229
View File
@@ -2,269 +2,195 @@ part of '../appwrite.dart';
/// The Storage service allows you to manage your project files.
class Storage extends Service {
/// Initializes a [Storage] service
Storage(super.client);
/// Initializes a [Storage] service
Storage(super.client);
/// Get a list of all the user files. You can use the query params to filter
/// your results.
Future<models.FileList> listFiles({
required String bucketId,
List<String>? queries,
String? search,
}) async {
final String apiPath = '/storage/buckets/{bucketId}/files'.replaceAll(
'{bucketId}',
bucketId,
);
/// Get a list of all the user files. You can use the query params to filter
/// your results.
Future<models.FileList> listFiles({required String bucketId, List<String>? queries, String? search}) async {
final String apiPath = '/storage/buckets/{bucketId}/files'.replaceAll('{bucketId}', bucketId);
final Map<String, dynamic> apiParams = {
'queries': queries,
'search': search,
};
final Map<String, dynamic> apiParams = {
'queries': queries,
'search': search,
};
final Map<String, String> apiHeaders = {};
final Map<String, String> apiHeaders = {
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
};
return models.FileList.fromMap(res.data);
}
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
/// Create a new file. Before using this route, you should create a new bucket
/// resource using either a [server
/// integration](https://appwrite.io/docs/server/storage#storageCreateBucket)
/// API or directly from your Appwrite console.
///
/// Larger files should be uploaded using multiple requests with the
/// [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range)
/// header to send a partial request with a maximum supported chunk of `5MB`.
/// The `content-range` header values should always be in bytes.
///
/// When the first request is sent, the server will return the **File** object,
/// and the subsequent part request must include the file's **id** in
/// `x-appwrite-id` header to allow the server to know that the partial upload
/// is for the existing file and not for a new one.
///
/// If you're creating a new file using one of the Appwrite SDKs, all the
/// chunking logic will be managed by the SDK internally.
///
Future<models.File> createFile({
required String bucketId,
required String fileId,
required InputFile file,
List<String>? permissions,
Function(UploadProgress)? onProgress,
}) async {
final String apiPath = '/storage/buckets/{bucketId}/files'.replaceAll(
'{bucketId}',
bucketId,
);
return models.FileList.fromMap(res.data);
final Map<String, dynamic> apiParams = {
'fileId': fileId,
'file': file,
'permissions': permissions,
};
}
final Map<String, String> apiHeaders = {
'content-type': 'multipart/form-data',
};
/// Create a new file. Before using this route, you should create a new bucket
/// resource using either a [server
/// integration](https://appwrite.io/docs/server/storage#storageCreateBucket)
/// API or directly from your Appwrite console.
///
/// Larger files should be uploaded using multiple requests with the
/// [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range)
/// header to send a partial request with a maximum supported chunk of `5MB`.
/// The `content-range` header values should always be in bytes.
///
/// When the first request is sent, the server will return the **File** object,
/// and the subsequent part request must include the file's **id** in
/// `x-appwrite-id` header to allow the server to know that the partial upload
/// is for the existing file and not for a new one.
///
/// If you're creating a new file using one of the Appwrite SDKs, all the
/// chunking logic will be managed by the SDK internally.
///
Future<models.File> createFile({required String bucketId, required String fileId, required InputFile file, List<String>? permissions, Function(UploadProgress)? onProgress}) async {
final String apiPath = '/storage/buckets/{bucketId}/files'.replaceAll('{bucketId}', bucketId);
String idParamName = '';
idParamName = 'fileId';
final paramName = 'file';
final res = await client.chunkedUpload(
path: apiPath,
params: apiParams,
paramName: paramName,
idParamName: idParamName,
headers: apiHeaders,
onProgress: onProgress,
);
final Map<String, dynamic> apiParams = {
return models.File.fromMap(res.data);
}
/// Get a file by its unique ID. This endpoint response returns a JSON object
/// with the file metadata.
Future<models.File> getFile({
required String bucketId,
required String fileId,
}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}'
.replaceAll('{bucketId}', bucketId)
.replaceAll('{fileId}', fileId);
'fileId': fileId,
'file': file,
'permissions': permissions,
};
final Map<String, dynamic> apiParams = {};
final Map<String, String> apiHeaders = {
'content-type': 'multipart/form-data',
};
final Map<String, String> apiHeaders = {};
String idParamName = '';
idParamName = 'fileId';
final paramName = 'file';
final res = await client.chunkedUpload(
path: apiPath,
params: apiParams,
paramName: paramName,
idParamName: idParamName,
headers: apiHeaders,
onProgress: onProgress,
);
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.File.fromMap(res.data);
return models.File.fromMap(res.data);
}
}
/// Update a file by its unique ID. Only users with write permissions have
/// access to update this resource.
Future<models.File> updateFile({
required String bucketId,
required String fileId,
String? name,
List<String>? permissions,
}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}'
.replaceAll('{bucketId}', bucketId)
.replaceAll('{fileId}', fileId);
/// Get a file by its unique ID. This endpoint response returns a JSON object
/// with the file metadata.
Future<models.File> getFile({required String bucketId, required String fileId}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replaceAll('{bucketId}', bucketId).replaceAll('{fileId}', fileId);
final Map<String, dynamic> apiParams = {
'name': name,
'permissions': permissions,
};
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final Map<String, String> apiHeaders = {
final res = await client.call(
HttpMethod.put,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
};
return models.File.fromMap(res.data);
}
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
/// Delete a file by its unique ID. Only users with write permissions have
/// access to delete this resource.
Future deleteFile({required String bucketId, required String fileId}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}'
.replaceAll('{bucketId}', bucketId)
.replaceAll('{fileId}', fileId);
return models.File.fromMap(res.data);
final Map<String, dynamic> apiParams = {};
}
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
/// Update a file by its unique ID. Only users with write permissions have
/// access to update this resource.
Future<models.File> updateFile({required String bucketId, required String fileId, String? name, List<String>? permissions}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replaceAll('{bucketId}', bucketId).replaceAll('{fileId}', fileId);
final res = await client.call(
HttpMethod.delete,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
final Map<String, dynamic> apiParams = {
'name': name,
'permissions': permissions,
};
return res.data;
}
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
/// Get a file content by its unique ID. The endpoint response return with a
/// 'Content-Disposition: attachment' header that tells the browser to start
/// downloading the file to user downloads directory.
Future<Uint8List> getFileDownload({
required String bucketId,
required String fileId,
String? token,
}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download'
.replaceAll('{bucketId}', bucketId)
.replaceAll('{fileId}', fileId);
final res = await client.call(HttpMethod.put, path: apiPath, params: apiParams, headers: apiHeaders);
final Map<String, dynamic> params = {
'token': token,
return models.File.fromMap(res.data);
'project': client.config['project'],
};
}
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
/// Delete a file by its unique ID. Only users with write permissions have
/// access to delete this resource.
Future deleteFile({required String bucketId, required String fileId}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replaceAll('{bucketId}', bucketId).replaceAll('{fileId}', fileId);
/// Get a file preview image. Currently, this method supports preview for image
/// files (jpg, png, and gif), other supported formats, like pdf, docs, slides,
/// and spreadsheets, will return the file icon image. You can also pass query
/// string arguments for cutting and resizing your preview image. Preview is
/// supported only for image files smaller than 10MB.
Future<Uint8List> getFilePreview({
required String bucketId,
required String fileId,
int? width,
int? height,
enums.ImageGravity? gravity,
int? quality,
int? borderWidth,
String? borderColor,
int? borderRadius,
double? opacity,
int? rotation,
String? background,
enums.ImageFormat? output,
String? token,
}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview'
.replaceAll('{bucketId}', bucketId)
.replaceAll('{fileId}', fileId);
final Map<String, dynamic> apiParams = {
};
final Map<String, dynamic> params = {
'width': width,
'height': height,
'gravity': gravity?.value,
'quality': quality,
'borderWidth': borderWidth,
'borderColor': borderColor,
'borderRadius': borderRadius,
'opacity': opacity,
'rotation': rotation,
'background': background,
'output': output?.value,
'token': token,
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
'project': client.config['project'],
};
final res = await client.call(HttpMethod.delete, path: apiPath, params: apiParams, headers: apiHeaders);
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
return res.data;
/// Get a file content by its unique ID. This endpoint is similar to the
/// download method but returns with no 'Content-Disposition: attachment'
/// header.
Future<Uint8List> getFileView({
required String bucketId,
required String fileId,
String? token,
}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view'
.replaceAll('{bucketId}', bucketId)
.replaceAll('{fileId}', fileId);
}
final Map<String, dynamic> params = {
'token': token,
/// Get a file content by its unique ID. The endpoint response return with a
/// 'Content-Disposition: attachment' header that tells the browser to start
/// downloading the file to user downloads directory.
Future<Uint8List> getFileDownload({required String bucketId, required String fileId, String? token}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download'.replaceAll('{bucketId}', bucketId).replaceAll('{fileId}', fileId);
'project': client.config['project'],
};
final Map<String, dynamic> params = {
'token': token,
'project': client.config['project'],
};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: params,
responseType: ResponseType.bytes,
);
return res.data;
}
}
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
/// Get a file preview image. Currently, this method supports preview for image
/// files (jpg, png, and gif), other supported formats, like pdf, docs, slides,
/// and spreadsheets, will return the file icon image. You can also pass query
/// string arguments for cutting and resizing your preview image. Preview is
/// supported only for image files smaller than 10MB.
Future<Uint8List> getFilePreview({required String bucketId, required String fileId, int? width, int? height, enums.ImageGravity? gravity, int? quality, int? borderWidth, String? borderColor, int? borderRadius, double? opacity, int? rotation, String? background, enums.ImageFormat? output, String? token}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview'.replaceAll('{bucketId}', bucketId).replaceAll('{fileId}', fileId);
final Map<String, dynamic> params = {
'width': width,
'height': height,
'gravity': gravity?.value,
'quality': quality,
'borderWidth': borderWidth,
'borderColor': borderColor,
'borderRadius': borderRadius,
'opacity': opacity,
'rotation': rotation,
'background': background,
'output': output?.value,
'token': token,
'project': client.config['project'],
};
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
/// Get a file content by its unique ID. This endpoint is similar to the
/// download method but returns with no 'Content-Disposition: attachment'
/// header.
Future<Uint8List> getFileView({required String bucketId, required String fileId, String? token}) async {
final String apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view'.replaceAll('{bucketId}', bucketId).replaceAll('{fileId}', fileId);
final Map<String, dynamic> params = {
'token': token,
'project': client.config['project'],
};
final res = await client.call(HttpMethod.get, path: apiPath, params: params, responseType: ResponseType.bytes);
return res.data;
}
}
+285 -354
View File
@@ -3,357 +3,288 @@ part of '../appwrite.dart';
/// The Teams service allows you to group users of your project and to enable
/// them to share read and write access to your project resources
class Teams extends Service {
/// Initializes a [Teams] service
Teams(super.client);
/// Get a list of all the teams in which the current user is a member. You can
/// use the parameters to filter your results.
Future<models.TeamList> list({List<String>? queries, String? search}) async {
const String apiPath = '/teams';
final Map<String, dynamic> apiParams = {
'queries': queries,
'search': search,
};
final Map<String, String> apiHeaders = {};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.TeamList.fromMap(res.data);
}
/// Create a new team. The user who creates the team will automatically be
/// assigned as the owner of the team. Only the users with the owner role can
/// invite new members, add new owners and delete or update the team.
Future<models.Team> create({
required String teamId,
required String name,
List<String>? roles,
}) async {
const String apiPath = '/teams';
final Map<String, dynamic> apiParams = {
'teamId': teamId,
'name': name,
'roles': roles,
};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.post,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Team.fromMap(res.data);
}
/// Get a team by its ID. All team members have read access for this resource.
Future<models.Team> get({required String teamId}) async {
final String apiPath = '/teams/{teamId}'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {};
final Map<String, String> apiHeaders = {};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Team.fromMap(res.data);
}
/// Update the team's name by its unique ID.
Future<models.Team> updateName({
required String teamId,
required String name,
}) async {
final String apiPath = '/teams/{teamId}'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {'name': name};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.put,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Team.fromMap(res.data);
}
/// Delete a team using its ID. Only team members with the owner role can
/// delete the team.
Future delete({required String teamId}) async {
final String apiPath = '/teams/{teamId}'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.delete,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return res.data;
}
/// Use this endpoint to list a team's members using the team's ID. All team
/// members have read access to this endpoint. Hide sensitive attributes from
/// the response by toggling membership privacy in the Console.
Future<models.MembershipList> listMemberships({
required String teamId,
List<String>? queries,
String? search,
}) async {
final String apiPath = '/teams/{teamId}/memberships'.replaceAll(
'{teamId}',
teamId,
);
final Map<String, dynamic> apiParams = {
'queries': queries,
'search': search,
};
final Map<String, String> apiHeaders = {};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.MembershipList.fromMap(res.data);
}
/// Invite a new member to join your team. Provide an ID for existing users, or
/// invite unregistered users using an email or phone number. If initiated from
/// a Client SDK, Appwrite will send an email or sms with a link to join the
/// team to the invited user, and an account will be created for them if one
/// doesn't exist. If initiated from a Server SDK, the new member will be added
/// automatically to the team.
///
/// You only need to provide one of a user ID, email, or phone number. Appwrite
/// will prioritize accepting the user ID > email > phone number if you provide
/// more than one of these parameters.
///
/// Use the `url` parameter to redirect the user from the invitation email to
/// your app. After the user is redirected, use the [Update Team Membership
/// Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus)
/// endpoint to allow the user to accept the invitation to the team.
///
/// Please note that to avoid a [Redirect
/// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md)
/// Appwrite will accept the only redirect URLs under the domains you have
/// added as a platform on the Appwrite Console.
///
Future<models.Membership> createMembership({
required String teamId,
required List<String> roles,
String? email,
String? userId,
String? phone,
String? url,
String? name,
}) async {
final String apiPath = '/teams/{teamId}/memberships'.replaceAll(
'{teamId}',
teamId,
);
final Map<String, dynamic> apiParams = {
'email': email,
'userId': userId,
'phone': phone,
'roles': roles,
'url': url,
'name': name,
};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.post,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Membership.fromMap(res.data);
}
/// Get a team member by the membership unique id. All team members have read
/// access for this resource. Hide sensitive attributes from the response by
/// toggling membership privacy in the Console.
Future<models.Membership> getMembership({
required String teamId,
required String membershipId,
}) async {
final String apiPath = '/teams/{teamId}/memberships/{membershipId}'
.replaceAll('{teamId}', teamId)
.replaceAll('{membershipId}', membershipId);
final Map<String, dynamic> apiParams = {};
final Map<String, String> apiHeaders = {};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Membership.fromMap(res.data);
}
/// Modify the roles of a team member. Only team members with the owner role
/// have access to this endpoint. Learn more about [roles and
/// permissions](https://appwrite.io/docs/permissions).
///
Future<models.Membership> updateMembership({
required String teamId,
required String membershipId,
required List<String> roles,
}) async {
final String apiPath = '/teams/{teamId}/memberships/{membershipId}'
.replaceAll('{teamId}', teamId)
.replaceAll('{membershipId}', membershipId);
final Map<String, dynamic> apiParams = {'roles': roles};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.patch,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Membership.fromMap(res.data);
}
/// This endpoint allows a user to leave a team or for a team owner to delete
/// the membership of any other team member. You can also use this endpoint to
/// delete a user membership even if it is not accepted.
Future deleteMembership({
required String teamId,
required String membershipId,
}) async {
final String apiPath = '/teams/{teamId}/memberships/{membershipId}'
.replaceAll('{teamId}', teamId)
.replaceAll('{membershipId}', membershipId);
final Map<String, dynamic> apiParams = {};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.delete,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return res.data;
}
/// Use this endpoint to allow a user to accept an invitation to join a team
/// after being redirected back to your app from the invitation email received
/// by the user.
///
/// If the request is successful, a session for the user is automatically
/// created.
///
Future<models.Membership> updateMembershipStatus({
required String teamId,
required String membershipId,
required String userId,
required String secret,
}) async {
final String apiPath = '/teams/{teamId}/memberships/{membershipId}/status'
.replaceAll('{teamId}', teamId)
.replaceAll('{membershipId}', membershipId);
final Map<String, dynamic> apiParams = {'userId': userId, 'secret': secret};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.patch,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Membership.fromMap(res.data);
}
/// Get the team's shared preferences by its unique ID. If a preference doesn't
/// need to be shared by all team members, prefer storing them in [user
/// preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs).
Future<models.Preferences> getPrefs({required String teamId}) async {
final String apiPath = '/teams/{teamId}/prefs'.replaceAll(
'{teamId}',
teamId,
);
final Map<String, dynamic> apiParams = {};
final Map<String, String> apiHeaders = {};
final res = await client.call(
HttpMethod.get,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Preferences.fromMap(res.data);
}
/// Update the team's preferences by its unique ID. The object you pass is
/// stored as is and replaces any previous value. The maximum allowed prefs
/// size is 64kB and throws an error if exceeded.
Future<models.Preferences> updatePrefs({
required String teamId,
required Map prefs,
}) async {
final String apiPath = '/teams/{teamId}/prefs'.replaceAll(
'{teamId}',
teamId,
);
final Map<String, dynamic> apiParams = {'prefs': prefs};
final Map<String, String> apiHeaders = {'content-type': 'application/json'};
final res = await client.call(
HttpMethod.put,
path: apiPath,
params: apiParams,
headers: apiHeaders,
);
return models.Preferences.fromMap(res.data);
}
}
/// Initializes a [Teams] service
Teams(super.client);
/// Get a list of all the teams in which the current user is a member. You can
/// use the parameters to filter your results.
Future<models.TeamList> list({List<String>? queries, String? search}) async {
const String apiPath = '/teams';
final Map<String, dynamic> apiParams = {
'queries': queries,
'search': search,
};
final Map<String, String> apiHeaders = {
};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.TeamList.fromMap(res.data);
}
/// Create a new team. The user who creates the team will automatically be
/// assigned as the owner of the team. Only the users with the owner role can
/// invite new members, add new owners and delete or update the team.
Future<models.Team> create({required String teamId, required String name, List<String>? roles}) async {
const String apiPath = '/teams';
final Map<String, dynamic> apiParams = {
'teamId': teamId,
'name': name,
'roles': roles,
};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(HttpMethod.post, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Team.fromMap(res.data);
}
/// Get a team by its ID. All team members have read access for this resource.
Future<models.Team> get({required String teamId}) async {
final String apiPath = '/teams/{teamId}'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {
};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Team.fromMap(res.data);
}
/// Update the team's name by its unique ID.
Future<models.Team> updateName({required String teamId, required String name}) async {
final String apiPath = '/teams/{teamId}'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {
'name': name,
};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(HttpMethod.put, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Team.fromMap(res.data);
}
/// Delete a team using its ID. Only team members with the owner role can
/// delete the team.
Future delete({required String teamId}) async {
final String apiPath = '/teams/{teamId}'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(HttpMethod.delete, path: apiPath, params: apiParams, headers: apiHeaders);
return res.data;
}
/// Use this endpoint to list a team's members using the team's ID. All team
/// members have read access to this endpoint. Hide sensitive attributes from
/// the response by toggling membership privacy in the Console.
Future<models.MembershipList> listMemberships({required String teamId, List<String>? queries, String? search}) async {
final String apiPath = '/teams/{teamId}/memberships'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {
'queries': queries,
'search': search,
};
final Map<String, String> apiHeaders = {
};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.MembershipList.fromMap(res.data);
}
/// Invite a new member to join your team. Provide an ID for existing users, or
/// invite unregistered users using an email or phone number. If initiated from
/// a Client SDK, Appwrite will send an email or sms with a link to join the
/// team to the invited user, and an account will be created for them if one
/// doesn't exist. If initiated from a Server SDK, the new member will be added
/// automatically to the team.
///
/// You only need to provide one of a user ID, email, or phone number. Appwrite
/// will prioritize accepting the user ID > email > phone number if you provide
/// more than one of these parameters.
///
/// Use the `url` parameter to redirect the user from the invitation email to
/// your app. After the user is redirected, use the [Update Team Membership
/// Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus)
/// endpoint to allow the user to accept the invitation to the team.
///
/// Please note that to avoid a [Redirect
/// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md)
/// Appwrite will accept the only redirect URLs under the domains you have
/// added as a platform on the Appwrite Console.
///
Future<models.Membership> createMembership({required String teamId, required List<String> roles, String? email, String? userId, String? phone, String? url, String? name}) async {
final String apiPath = '/teams/{teamId}/memberships'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {
'email': email,
'userId': userId,
'phone': phone,
'roles': roles,
'url': url,
'name': name,
};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(HttpMethod.post, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Membership.fromMap(res.data);
}
/// Get a team member by the membership unique id. All team members have read
/// access for this resource. Hide sensitive attributes from the response by
/// toggling membership privacy in the Console.
Future<models.Membership> getMembership({required String teamId, required String membershipId}) async {
final String apiPath = '/teams/{teamId}/memberships/{membershipId}'.replaceAll('{teamId}', teamId).replaceAll('{membershipId}', membershipId);
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {
};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Membership.fromMap(res.data);
}
/// Modify the roles of a team member. Only team members with the owner role
/// have access to this endpoint. Learn more about [roles and
/// permissions](https://appwrite.io/docs/permissions).
///
Future<models.Membership> updateMembership({required String teamId, required String membershipId, required List<String> roles}) async {
final String apiPath = '/teams/{teamId}/memberships/{membershipId}'.replaceAll('{teamId}', teamId).replaceAll('{membershipId}', membershipId);
final Map<String, dynamic> apiParams = {
'roles': roles,
};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(HttpMethod.patch, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Membership.fromMap(res.data);
}
/// This endpoint allows a user to leave a team or for a team owner to delete
/// the membership of any other team member. You can also use this endpoint to
/// delete a user membership even if it is not accepted.
Future deleteMembership({required String teamId, required String membershipId}) async {
final String apiPath = '/teams/{teamId}/memberships/{membershipId}'.replaceAll('{teamId}', teamId).replaceAll('{membershipId}', membershipId);
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(HttpMethod.delete, path: apiPath, params: apiParams, headers: apiHeaders);
return res.data;
}
/// Use this endpoint to allow a user to accept an invitation to join a team
/// after being redirected back to your app from the invitation email received
/// by the user.
///
/// If the request is successful, a session for the user is automatically
/// created.
///
Future<models.Membership> updateMembershipStatus({required String teamId, required String membershipId, required String userId, required String secret}) async {
final String apiPath = '/teams/{teamId}/memberships/{membershipId}/status'.replaceAll('{teamId}', teamId).replaceAll('{membershipId}', membershipId);
final Map<String, dynamic> apiParams = {
'userId': userId,
'secret': secret,
};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(HttpMethod.patch, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Membership.fromMap(res.data);
}
/// Get the team's shared preferences by its unique ID. If a preference doesn't
/// need to be shared by all team members, prefer storing them in [user
/// preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs).
Future<models.Preferences> getPrefs({required String teamId}) async {
final String apiPath = '/teams/{teamId}/prefs'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {
};
final Map<String, String> apiHeaders = {
};
final res = await client.call(HttpMethod.get, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Preferences.fromMap(res.data);
}
/// Update the team's preferences by its unique ID. The object you pass is
/// stored as is and replaces any previous value. The maximum allowed prefs
/// size is 64kB and throws an error if exceeded.
Future<models.Preferences> updatePrefs({required String teamId, required Map prefs}) async {
final String apiPath = '/teams/{teamId}/prefs'.replaceAll('{teamId}', teamId);
final Map<String, dynamic> apiParams = {
'prefs': prefs,
};
final Map<String, String> apiHeaders = {
'content-type': 'application/json',
};
final res = await client.call(HttpMethod.put, path: apiPath, params: apiParams, headers: apiHeaders);
return models.Preferences.fromMap(res.data);
}
}
+7 -10
View File
@@ -10,8 +10,7 @@ import 'upload_progress.dart';
/// The [Client] is also responsible for managing user's sessions.
abstract class Client {
/// The size for cunked uploads in bytes.
static const int CHUNK_SIZE = 5 * 1024 * 1024;
static const int CHUNK_SIZE = 5*1024*1024;
/// Holds configuration such as project.
late Map<String, String> config;
late String _endPoint;
@@ -19,15 +18,14 @@ abstract class Client {
/// Appwrite endpoint.
String get endPoint => _endPoint;
/// Appwrite realtime endpoint.
String? get endPointRealtime => _endPointRealtime;
/// Initializes a [Client].
factory Client({
String endPoint = 'https://cloud.appwrite.io/v1',
bool selfSigned = false,
}) => createClient(endPoint: endPoint, selfSigned: selfSigned);
factory Client(
{String endPoint = 'https://cloud.appwrite.io/v1',
bool selfSigned = false}) =>
createClient(endPoint: endPoint, selfSigned: selfSigned);
/// Handle OAuth2 session creation.
Future webAuth(Uri url, {String? callbackUrlScheme});
@@ -43,7 +41,7 @@ abstract class Client {
});
/// Set self signed to [status].
///
///
/// If self signed is true, [Client] will ignore invalid certificates.
/// This is helpful in environments where your Appwrite
/// instance does not have a valid SSL certificate.
@@ -85,8 +83,7 @@ abstract class Client {
Future<String> ping();
/// Send the API request.
Future<Response> call(
HttpMethod method, {
Future<Response> call(HttpMethod method, {
String path = '',
Map<String, String> headers = const {},
Map<String, dynamic> params = const {},
+1 -4
View File
@@ -2,21 +2,18 @@ import 'response.dart';
import 'client.dart';
import 'enums.dart';
abstract class ClientBase implements Client {
abstract class ClientBase implements Client {
/// Your project ID
@override
ClientBase setProject(value);
/// Your secret JSON Web Token
@override
ClientBase setJWT(value);
@override
ClientBase setLocale(value);
/// The user session to authenticate with
@override
ClientBase setSession(value);
/// Your secret dev API key
@override
ClientBase setDevKey(value);
+16 -31
View File
@@ -12,11 +12,14 @@ import 'input_file.dart';
import 'upload_progress.dart';
import 'response.dart';
ClientBase createClient({required String endPoint, required bool selfSigned}) =>
ClientBase createClient({
required String endPoint,
required bool selfSigned,
}) =>
ClientBrowser(endPoint: endPoint, selfSigned: selfSigned);
class ClientBrowser extends ClientBase with ClientMixin {
static const int CHUNK_SIZE = 5 * 1024 * 1024;
static const int CHUNK_SIZE = 5*1024*1024;
String _endPoint;
Map<String, String>? _headers;
@override
@@ -40,16 +43,14 @@ class ClientBrowser extends ClientBase with ClientMixin {
'x-sdk-name': 'Flutter',
'x-sdk-platform': 'client',
'x-sdk-language': 'flutter',
'x-sdk-version': '17.1.0',
'x-sdk-version': '17.0.2',
'X-Appwrite-Response-Format': '1.7.0',
};
config = {};
assert(
_endPoint.startsWith(RegExp("http://|https://")),
"endPoint $_endPoint must start with 'http'",
);
assert(_endPoint.startsWith(RegExp("http://|https://")),
"endPoint $_endPoint must start with 'http'");
init();
}
@@ -63,7 +64,6 @@ class ClientBrowser extends ClientBase with ClientMixin {
addHeader('X-Appwrite-Project', value);
return this;
}
/// Your secret JSON Web Token
@override
ClientBrowser setJWT(value) {
@@ -71,14 +71,12 @@ class ClientBrowser extends ClientBase with ClientMixin {
addHeader('X-Appwrite-JWT', value);
return this;
}
@override
ClientBrowser setLocale(value) {
config['locale'] = value;
addHeader('X-Appwrite-Locale', value);
return this;
}
/// The user session to authenticate with
@override
ClientBrowser setSession(value) {
@@ -86,7 +84,6 @@ class ClientBrowser extends ClientBase with ClientMixin {
addHeader('X-Appwrite-Session', value);
return this;
}
/// Your secret dev API key
@override
ClientBrowser setDevKey(value) {
@@ -156,11 +153,7 @@ class ClientBrowser extends ClientBase with ClientMixin {
late Response res;
if (size <= CHUNK_SIZE) {
params[paramName] = http.MultipartFile.fromBytes(
paramName,
file.bytes!,
filename: file.filename,
);
params[paramName] = http.MultipartFile.fromBytes(paramName, file.bytes!, filename: file.filename);
return call(
HttpMethod.post,
path: path,
@@ -187,19 +180,12 @@ class ClientBrowser extends ClientBase with ClientMixin {
List<int> chunk = [];
final end = min(offset + CHUNK_SIZE, size);
chunk = file.bytes!.getRange(offset, end).toList();
params[paramName] = http.MultipartFile.fromBytes(
paramName,
chunk,
filename: file.filename,
);
params[paramName] =
http.MultipartFile.fromBytes(paramName, chunk, filename: file.filename);
headers['content-range'] =
'bytes $offset-${min<int>((offset + CHUNK_SIZE - 1), size - 1)}/$size';
res = await call(
HttpMethod.post,
path: path,
headers: headers,
params: params,
);
res = await call(HttpMethod.post,
path: path, headers: headers, params: params);
offset += CHUNK_SIZE;
if (offset < size) {
headers['x-appwrite-id'] = res.data['\$id'];
@@ -228,7 +214,7 @@ class ClientBrowser extends ClientBase with ClientMixin {
// Combine headers to check for dev key
final combinedHeaders = {..._headers!, ...headers};
// Only include credentials when dev key is not set
if (combinedHeaders['X-Appwrite-Dev-Key'] == null) {
_httpClient.withCredentials = true;
@@ -250,8 +236,7 @@ class ClientBrowser extends ClientBase with ClientMixin {
final cookieFallback = res.headers['x-fallback-cookies'];
if (cookieFallback != null) {
debugPrint(
'Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.',
);
'Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.');
addHeader('X-Fallback-Cookies', cookieFallback);
web.window.localStorage['cookieFallback'] = cookieFallback;
}
@@ -266,7 +251,7 @@ class ClientBrowser extends ClientBase with ClientMixin {
@override
Future webAuth(Uri url, {String? callbackUrlScheme}) {
return FlutterWebAuth2.authenticate(
return FlutterWebAuth2.authenticate(
url: url.toString(),
callbackUrlScheme: "appwrite-callback-" + config['project']!,
options: const FlutterWebAuth2Options(useWebview: false),
+66 -80
View File
@@ -18,11 +18,17 @@ import 'package:flutter/foundation.dart';
import 'input_file.dart';
import 'upload_progress.dart';
ClientBase createClient({required String endPoint, required bool selfSigned}) =>
ClientIO(endPoint: endPoint, selfSigned: selfSigned);
ClientBase createClient({
required String endPoint,
required bool selfSigned,
}) =>
ClientIO(
endPoint: endPoint,
selfSigned: selfSigned,
);
class ClientIO extends ClientBase with ClientMixin {
static const int CHUNK_SIZE = 5 * 1024 * 1024;
static const int CHUNK_SIZE = 5*1024*1024;
String _endPoint;
Map<String, String>? _headers;
@override
@@ -58,16 +64,14 @@ class ClientIO extends ClientBase with ClientMixin {
'x-sdk-name': 'Flutter',
'x-sdk-platform': 'client',
'x-sdk-language': 'flutter',
'x-sdk-version': '17.1.0',
'X-Appwrite-Response-Format': '1.7.0',
'x-sdk-version': '17.0.2',
'X-Appwrite-Response-Format' : '1.7.0',
};
config = {};
assert(
_endPoint.startsWith(RegExp("http://|https://")),
"endPoint $_endPoint must start with 'http'",
);
assert(_endPoint.startsWith(RegExp("http://|https://")),
"endPoint $_endPoint must start with 'http'");
init();
}
@@ -82,44 +86,40 @@ class ClientIO extends ClientBase with ClientMixin {
return dir;
}
/// Your project ID
@override
ClientIO setProject(value) {
config['project'] = value;
addHeader('X-Appwrite-Project', value);
return this;
}
/// Your secret JSON Web Token
@override
ClientIO setJWT(value) {
config['jWT'] = value;
addHeader('X-Appwrite-JWT', value);
return this;
}
@override
ClientIO setLocale(value) {
config['locale'] = value;
addHeader('X-Appwrite-Locale', value);
return this;
}
/// The user session to authenticate with
@override
ClientIO setSession(value) {
config['session'] = value;
addHeader('X-Appwrite-Session', value);
return this;
}
/// Your secret dev API key
@override
ClientIO setDevKey(value) {
config['devKey'] = value;
addHeader('X-Appwrite-Dev-Key', value);
return this;
}
/// Your project ID
@override
ClientIO setProject(value) {
config['project'] = value;
addHeader('X-Appwrite-Project', value);
return this;
}
/// Your secret JSON Web Token
@override
ClientIO setJWT(value) {
config['jWT'] = value;
addHeader('X-Appwrite-JWT', value);
return this;
}
@override
ClientIO setLocale(value) {
config['locale'] = value;
addHeader('X-Appwrite-Locale', value);
return this;
}
/// The user session to authenticate with
@override
ClientIO setSession(value) {
config['session'] = value;
addHeader('X-Appwrite-Session', value);
return this;
}
/// Your secret dev API key
@override
ClientIO setDevKey(value) {
config['devKey'] = value;
addHeader('X-Appwrite-Dev-Key', value);
return this;
}
@override
ClientIO setSelfSigned({bool status = true}) {
@@ -161,7 +161,7 @@ class ClientIO extends ClientBase with ClientMixin {
}
Future init() async {
if (_initProgress) return;
if(_initProgress) return;
_initProgress = true;
final Directory cookieDir = await _getCookiePath();
_cookieJar = PersistCookieJar(storage: FileStorage(cookieDir.path));
@@ -170,10 +170,8 @@ class ClientIO extends ClientBase with ClientMixin {
var device = '';
try {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
addHeader(
'Origin',
'appwrite-${Platform.operatingSystem}://${packageInfo.packageName}',
);
addHeader('Origin',
'appwrite-${Platform.operatingSystem}://${packageInfo.packageName}');
//creating custom user agent
DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
@@ -200,13 +198,12 @@ class ClientIO extends ClientBase with ClientMixin {
device = '(Macintosh; ${macinfo.model})';
}
addHeader(
'user-agent',
'${packageInfo.packageName}/${packageInfo.version} $device',
);
'user-agent', '${packageInfo.packageName}/${packageInfo.version} $device');
} catch (e) {
debugPrint('Error getting device info: $e');
device = Platform.operatingSystem;
addHeader('user-agent', '$device');
addHeader(
'user-agent', '$device');
}
_initialized = true;
@@ -272,16 +269,11 @@ class ClientIO extends ClientBase with ClientMixin {
if (size <= CHUNK_SIZE) {
if (file.path != null) {
params[paramName] = await http.MultipartFile.fromPath(
paramName,
file.path!,
filename: file.filename,
);
paramName, file.path!,
filename: file.filename);
} else {
params[paramName] = http.MultipartFile.fromBytes(
paramName,
file.bytes!,
filename: file.filename,
);
params[paramName] = http.MultipartFile.fromBytes(paramName, file.bytes!,
filename: file.filename);
}
return call(
HttpMethod.post,
@@ -320,19 +312,12 @@ class ClientIO extends ClientBase with ClientMixin {
raf!.setPositionSync(offset);
chunk = raf.readSync(CHUNK_SIZE);
}
params[paramName] = http.MultipartFile.fromBytes(
paramName,
chunk,
filename: file.filename,
);
params[paramName] =
http.MultipartFile.fromBytes(paramName, chunk, filename: file.filename);
headers['content-range'] =
'bytes $offset-${min<int>((offset + CHUNK_SIZE - 1), size - 1)}/$size';
res = await call(
HttpMethod.post,
path: path,
headers: headers,
params: params,
);
res = await call(HttpMethod.post,
path: path, headers: headers, params: params);
offset += CHUNK_SIZE;
if (offset < size) {
headers['x-appwrite-id'] = res.data['\$id'];
@@ -369,9 +354,7 @@ class ClientIO extends ClientBase with ClientMixin {
final secret = url.queryParameters['secret'];
if (key == null || secret == null) {
throw AppwriteException(
"Invalid OAuth2 Response. Key and Secret not available.",
500,
);
"Invalid OAuth2 Response. Key and Secret not available.", 500);
}
Cookie cookie = Cookie(key, secret);
cookie.domain = Uri.parse(_endPoint).host;
@@ -412,7 +395,10 @@ class ClientIO extends ClientBase with ClientMixin {
res = await toResponse(streamedResponse);
res = await _interceptResponse(res);
return prepareResponse(res, responseType: responseType);
return prepareResponse(
res,
responseType: responseType,
);
} catch (e) {
if (e is AppwriteException) {
rethrow;
+27 -37
View File
@@ -26,21 +26,21 @@ mixin ClientMixin {
} else {
if (value is List) {
value.asMap().forEach((i, v) {
(request as http.MultipartRequest).fields.addAll({
"$key[$i]": v.toString(),
});
(request as http.MultipartRequest)
.fields
.addAll({"$key[$i]": v.toString()});
});
} else {
(request as http.MultipartRequest).fields.addAll({
key: value.toString(),
});
(request as http.MultipartRequest)
.fields
.addAll({key: value.toString()});
}
}
});
}
} else if (method == HttpMethod.get) {
if (params.isNotEmpty) {
params = params.map((key, value) {
params = params.map((key, value){
if (value is int || value is double) {
return MapEntry(key, value.toString());
}
@@ -51,13 +51,12 @@ mixin ClientMixin {
});
}
uri = Uri(
fragment: uri.fragment,
path: uri.path,
host: uri.host,
scheme: uri.scheme,
queryParameters: params,
port: uri.port,
);
fragment: uri.fragment,
path: uri.path,
host: uri.host,
scheme: uri.scheme,
queryParameters: params,
port: uri.port);
request = http.Request(method.name(), uri);
} else {
(request as http.Request).body = jsonEncode(params);
@@ -67,9 +66,7 @@ mixin ClientMixin {
headers['User-Agent'] = Uri.encodeFull(headers['User-Agent']!);
}
if (headers['X-Forwarded-User-Agent'] != null) {
headers['X-Forwarded-User-Agent'] = Uri.encodeFull(
headers['X-Forwarded-User-Agent']!,
);
headers['X-Forwarded-User-Agent'] = Uri.encodeFull(headers['X-Forwarded-User-Agent']!);
}
request.headers.addAll(headers);
@@ -116,25 +113,18 @@ mixin ClientMixin {
return Response(data: data);
}
Future<http.Response> toResponse(
http.StreamedResponse streamedResponse,
) async {
if (streamedResponse.statusCode == 204) {
return http.Response(
'',
streamedResponse.statusCode,
headers: streamedResponse.headers.map(
(k, v) => k.toLowerCase() == 'content-type'
? MapEntry(k, 'text/plain')
: MapEntry(k, v),
),
request: streamedResponse.request,
isRedirect: streamedResponse.isRedirect,
persistentConnection: streamedResponse.persistentConnection,
reasonPhrase: streamedResponse.reasonPhrase,
);
} else {
return await http.Response.fromStream(streamedResponse);
}
Future<http.Response> toResponse(http.StreamedResponse streamedResponse) async {
if(streamedResponse.statusCode == 204) {
return http.Response('',
streamedResponse.statusCode,
headers: streamedResponse.headers.map((k,v) => k.toLowerCase()=='content-type' ? MapEntry(k, 'text/plain') : MapEntry(k,v)),
request: streamedResponse.request,
isRedirect: streamedResponse.isRedirect,
persistentConnection: streamedResponse.persistentConnection,
reasonPhrase: streamedResponse.reasonPhrase,
);
} else {
return await http.Response.fromStream(streamedResponse);
}
}
}
+1 -2
View File
@@ -3,5 +3,4 @@ import 'client_base.dart';
/// Implemented in `client_browser.dart` and `client_io.dart`.
ClientBase createClient({required String endPoint, required bool selfSigned}) =>
throw UnsupportedError(
'Cannot create a client without dart:html or dart:io.',
);
'Cannot create a client without dart:html or dart:io.');
+13 -13
View File
@@ -11,19 +11,20 @@ class CookieManager extends Interceptor {
CookieManager(this.cookieJar);
@override
FutureOr<http.BaseRequest> onRequest(http.BaseRequest request) async {
FutureOr<http.BaseRequest> onRequest(
http.BaseRequest request,
) async {
await cookieJar
.loadForRequest(Uri(scheme: request.url.scheme, host: request.url.host))
.then((cookies) {
var cookie = getCookies(cookies);
if (cookie.isNotEmpty) {
request.headers.addAll({HttpHeaders.cookieHeader: cookie});
}
return request;
})
.catchError((e, stackTrace) {
return request;
});
var cookie = getCookies(cookies);
if (cookie.isNotEmpty) {
request.headers.addAll({HttpHeaders.cookieHeader: cookie});
}
return request;
}).catchError((e, stackTrace) {
return request;
});
return request;
}
@@ -42,9 +43,8 @@ class CookieManager extends Interceptor {
var cookies = cookie.split(exp);
await cookieJar.saveFromResponse(
Uri(
scheme: response.request!.url.scheme,
host: response.request!.url.host,
),
scheme: response.request!.url.scheme,
host: response.request!.url.host),
cookies.map((str) => Cookie.fromSetCookieValue(str)).toList(),
);
}
+1 -1
View File
@@ -17,5 +17,5 @@ enum ResponseType {
plain,
/// Get original bytes, the type of response will be List<int>
bytes,
bytes
}
+10 -8
View File
@@ -1,14 +1,16 @@
part of '../../enums.dart';
enum AuthenticationFactor {
email(value: 'email'),
phone(value: 'phone'),
totp(value: 'totp'),
recoverycode(value: 'recoverycode');
email(value: 'email'),
phone(value: 'phone'),
totp(value: 'totp'),
recoverycode(value: 'recoverycode');
const AuthenticationFactor({required this.value});
const AuthenticationFactor({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+7 -5
View File
@@ -1,11 +1,13 @@
part of '../../enums.dart';
enum AuthenticatorType {
totp(value: 'totp');
totp(value: 'totp');
const AuthenticatorType({required this.value});
const AuthenticatorType({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+20 -18
View File
@@ -1,24 +1,26 @@
part of '../../enums.dart';
enum Browser {
avantBrowser(value: 'aa'),
androidWebViewBeta(value: 'an'),
googleChrome(value: 'ch'),
googleChromeIOS(value: 'ci'),
googleChromeMobile(value: 'cm'),
chromium(value: 'cr'),
mozillaFirefox(value: 'ff'),
safari(value: 'sf'),
mobileSafari(value: 'mf'),
microsoftEdge(value: 'ps'),
microsoftEdgeIOS(value: 'oi'),
operaMini(value: 'om'),
opera(value: 'op'),
operaNext(value: 'on');
avantBrowser(value: 'aa'),
androidWebViewBeta(value: 'an'),
googleChrome(value: 'ch'),
googleChromeIOS(value: 'ci'),
googleChromeMobile(value: 'cm'),
chromium(value: 'cr'),
mozillaFirefox(value: 'ff'),
safari(value: 'sf'),
mobileSafari(value: 'mf'),
microsoftEdge(value: 'ps'),
microsoftEdgeIOS(value: 'oi'),
operaMini(value: 'om'),
opera(value: 'op'),
operaNext(value: 'on');
const Browser({required this.value});
const Browser({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+23 -21
View File
@@ -1,27 +1,29 @@
part of '../../enums.dart';
enum CreditCard {
americanExpress(value: 'amex'),
argencard(value: 'argencard'),
cabal(value: 'cabal'),
cencosud(value: 'cencosud'),
dinersClub(value: 'diners'),
discover(value: 'discover'),
elo(value: 'elo'),
hipercard(value: 'hipercard'),
jCB(value: 'jcb'),
mastercard(value: 'mastercard'),
naranja(value: 'naranja'),
tarjetaShopping(value: 'targeta-shopping'),
unionChinaPay(value: 'union-china-pay'),
visa(value: 'visa'),
mIR(value: 'mir'),
maestro(value: 'maestro'),
rupay(value: 'rupay');
americanExpress(value: 'amex'),
argencard(value: 'argencard'),
cabal(value: 'cabal'),
cencosud(value: 'cencosud'),
dinersClub(value: 'diners'),
discover(value: 'discover'),
elo(value: 'elo'),
hipercard(value: 'hipercard'),
jCB(value: 'jcb'),
mastercard(value: 'mastercard'),
naranja(value: 'naranja'),
tarjetaShopping(value: 'targeta-shopping'),
unionChinaPay(value: 'union-china-pay'),
visa(value: 'visa'),
mIR(value: 'mir'),
maestro(value: 'maestro'),
rupay(value: 'rupay');
const CreditCard({required this.value});
const CreditCard({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+12 -10
View File
@@ -1,16 +1,18 @@
part of '../../enums.dart';
enum ExecutionMethod {
gET(value: 'GET'),
pOST(value: 'POST'),
pUT(value: 'PUT'),
pATCH(value: 'PATCH'),
dELETE(value: 'DELETE'),
oPTIONS(value: 'OPTIONS');
gET(value: 'GET'),
pOST(value: 'POST'),
pUT(value: 'PUT'),
pATCH(value: 'PATCH'),
dELETE(value: 'DELETE'),
oPTIONS(value: 'OPTIONS');
const ExecutionMethod({required this.value});
const ExecutionMethod({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+201 -199
View File
@@ -1,205 +1,207 @@
part of '../../enums.dart';
enum Flag {
afghanistan(value: 'af'),
angola(value: 'ao'),
albania(value: 'al'),
andorra(value: 'ad'),
unitedArabEmirates(value: 'ae'),
argentina(value: 'ar'),
armenia(value: 'am'),
antiguaAndBarbuda(value: 'ag'),
australia(value: 'au'),
austria(value: 'at'),
azerbaijan(value: 'az'),
burundi(value: 'bi'),
belgium(value: 'be'),
benin(value: 'bj'),
burkinaFaso(value: 'bf'),
bangladesh(value: 'bd'),
bulgaria(value: 'bg'),
bahrain(value: 'bh'),
bahamas(value: 'bs'),
bosniaAndHerzegovina(value: 'ba'),
belarus(value: 'by'),
belize(value: 'bz'),
bolivia(value: 'bo'),
brazil(value: 'br'),
barbados(value: 'bb'),
bruneiDarussalam(value: 'bn'),
bhutan(value: 'bt'),
botswana(value: 'bw'),
centralAfricanRepublic(value: 'cf'),
canada(value: 'ca'),
switzerland(value: 'ch'),
chile(value: 'cl'),
china(value: 'cn'),
coteDIvoire(value: 'ci'),
cameroon(value: 'cm'),
democraticRepublicOfTheCongo(value: 'cd'),
republicOfTheCongo(value: 'cg'),
colombia(value: 'co'),
comoros(value: 'km'),
capeVerde(value: 'cv'),
costaRica(value: 'cr'),
cuba(value: 'cu'),
cyprus(value: 'cy'),
czechRepublic(value: 'cz'),
germany(value: 'de'),
djibouti(value: 'dj'),
dominica(value: 'dm'),
denmark(value: 'dk'),
dominicanRepublic(value: 'do'),
algeria(value: 'dz'),
ecuador(value: 'ec'),
egypt(value: 'eg'),
eritrea(value: 'er'),
spain(value: 'es'),
estonia(value: 'ee'),
ethiopia(value: 'et'),
finland(value: 'fi'),
fiji(value: 'fj'),
france(value: 'fr'),
micronesiaFederatedStatesOf(value: 'fm'),
gabon(value: 'ga'),
unitedKingdom(value: 'gb'),
georgia(value: 'ge'),
ghana(value: 'gh'),
guinea(value: 'gn'),
gambia(value: 'gm'),
guineaBissau(value: 'gw'),
equatorialGuinea(value: 'gq'),
greece(value: 'gr'),
grenada(value: 'gd'),
guatemala(value: 'gt'),
guyana(value: 'gy'),
honduras(value: 'hn'),
croatia(value: 'hr'),
haiti(value: 'ht'),
hungary(value: 'hu'),
indonesia(value: 'id'),
india(value: 'in'),
ireland(value: 'ie'),
iranIslamicRepublicOf(value: 'ir'),
iraq(value: 'iq'),
iceland(value: 'is'),
israel(value: 'il'),
italy(value: 'it'),
jamaica(value: 'jm'),
jordan(value: 'jo'),
japan(value: 'jp'),
kazakhstan(value: 'kz'),
kenya(value: 'ke'),
kyrgyzstan(value: 'kg'),
cambodia(value: 'kh'),
kiribati(value: 'ki'),
saintKittsAndNevis(value: 'kn'),
southKorea(value: 'kr'),
kuwait(value: 'kw'),
laoPeopleSDemocraticRepublic(value: 'la'),
lebanon(value: 'lb'),
liberia(value: 'lr'),
libya(value: 'ly'),
saintLucia(value: 'lc'),
liechtenstein(value: 'li'),
sriLanka(value: 'lk'),
lesotho(value: 'ls'),
lithuania(value: 'lt'),
luxembourg(value: 'lu'),
latvia(value: 'lv'),
morocco(value: 'ma'),
monaco(value: 'mc'),
moldova(value: 'md'),
madagascar(value: 'mg'),
maldives(value: 'mv'),
mexico(value: 'mx'),
marshallIslands(value: 'mh'),
northMacedonia(value: 'mk'),
mali(value: 'ml'),
malta(value: 'mt'),
myanmar(value: 'mm'),
montenegro(value: 'me'),
mongolia(value: 'mn'),
mozambique(value: 'mz'),
mauritania(value: 'mr'),
mauritius(value: 'mu'),
malawi(value: 'mw'),
malaysia(value: 'my'),
namibia(value: 'na'),
niger(value: 'ne'),
nigeria(value: 'ng'),
nicaragua(value: 'ni'),
netherlands(value: 'nl'),
norway(value: 'no'),
nepal(value: 'np'),
nauru(value: 'nr'),
newZealand(value: 'nz'),
oman(value: 'om'),
pakistan(value: 'pk'),
panama(value: 'pa'),
peru(value: 'pe'),
philippines(value: 'ph'),
palau(value: 'pw'),
papuaNewGuinea(value: 'pg'),
poland(value: 'pl'),
frenchPolynesia(value: 'pf'),
northKorea(value: 'kp'),
portugal(value: 'pt'),
paraguay(value: 'py'),
qatar(value: 'qa'),
romania(value: 'ro'),
russia(value: 'ru'),
rwanda(value: 'rw'),
saudiArabia(value: 'sa'),
sudan(value: 'sd'),
senegal(value: 'sn'),
singapore(value: 'sg'),
solomonIslands(value: 'sb'),
sierraLeone(value: 'sl'),
elSalvador(value: 'sv'),
sanMarino(value: 'sm'),
somalia(value: 'so'),
serbia(value: 'rs'),
southSudan(value: 'ss'),
saoTomeAndPrincipe(value: 'st'),
suriname(value: 'sr'),
slovakia(value: 'sk'),
slovenia(value: 'si'),
sweden(value: 'se'),
eswatini(value: 'sz'),
seychelles(value: 'sc'),
syria(value: 'sy'),
chad(value: 'td'),
togo(value: 'tg'),
thailand(value: 'th'),
tajikistan(value: 'tj'),
turkmenistan(value: 'tm'),
timorLeste(value: 'tl'),
tonga(value: 'to'),
trinidadAndTobago(value: 'tt'),
tunisia(value: 'tn'),
turkey(value: 'tr'),
tuvalu(value: 'tv'),
tanzania(value: 'tz'),
uganda(value: 'ug'),
ukraine(value: 'ua'),
uruguay(value: 'uy'),
unitedStates(value: 'us'),
uzbekistan(value: 'uz'),
vaticanCity(value: 'va'),
saintVincentAndTheGrenadines(value: 'vc'),
venezuela(value: 've'),
vietnam(value: 'vn'),
vanuatu(value: 'vu'),
samoa(value: 'ws'),
yemen(value: 'ye'),
southAfrica(value: 'za'),
zambia(value: 'zm'),
zimbabwe(value: 'zw');
afghanistan(value: 'af'),
angola(value: 'ao'),
albania(value: 'al'),
andorra(value: 'ad'),
unitedArabEmirates(value: 'ae'),
argentina(value: 'ar'),
armenia(value: 'am'),
antiguaAndBarbuda(value: 'ag'),
australia(value: 'au'),
austria(value: 'at'),
azerbaijan(value: 'az'),
burundi(value: 'bi'),
belgium(value: 'be'),
benin(value: 'bj'),
burkinaFaso(value: 'bf'),
bangladesh(value: 'bd'),
bulgaria(value: 'bg'),
bahrain(value: 'bh'),
bahamas(value: 'bs'),
bosniaAndHerzegovina(value: 'ba'),
belarus(value: 'by'),
belize(value: 'bz'),
bolivia(value: 'bo'),
brazil(value: 'br'),
barbados(value: 'bb'),
bruneiDarussalam(value: 'bn'),
bhutan(value: 'bt'),
botswana(value: 'bw'),
centralAfricanRepublic(value: 'cf'),
canada(value: 'ca'),
switzerland(value: 'ch'),
chile(value: 'cl'),
china(value: 'cn'),
coteDIvoire(value: 'ci'),
cameroon(value: 'cm'),
democraticRepublicOfTheCongo(value: 'cd'),
republicOfTheCongo(value: 'cg'),
colombia(value: 'co'),
comoros(value: 'km'),
capeVerde(value: 'cv'),
costaRica(value: 'cr'),
cuba(value: 'cu'),
cyprus(value: 'cy'),
czechRepublic(value: 'cz'),
germany(value: 'de'),
djibouti(value: 'dj'),
dominica(value: 'dm'),
denmark(value: 'dk'),
dominicanRepublic(value: 'do'),
algeria(value: 'dz'),
ecuador(value: 'ec'),
egypt(value: 'eg'),
eritrea(value: 'er'),
spain(value: 'es'),
estonia(value: 'ee'),
ethiopia(value: 'et'),
finland(value: 'fi'),
fiji(value: 'fj'),
france(value: 'fr'),
micronesiaFederatedStatesOf(value: 'fm'),
gabon(value: 'ga'),
unitedKingdom(value: 'gb'),
georgia(value: 'ge'),
ghana(value: 'gh'),
guinea(value: 'gn'),
gambia(value: 'gm'),
guineaBissau(value: 'gw'),
equatorialGuinea(value: 'gq'),
greece(value: 'gr'),
grenada(value: 'gd'),
guatemala(value: 'gt'),
guyana(value: 'gy'),
honduras(value: 'hn'),
croatia(value: 'hr'),
haiti(value: 'ht'),
hungary(value: 'hu'),
indonesia(value: 'id'),
india(value: 'in'),
ireland(value: 'ie'),
iranIslamicRepublicOf(value: 'ir'),
iraq(value: 'iq'),
iceland(value: 'is'),
israel(value: 'il'),
italy(value: 'it'),
jamaica(value: 'jm'),
jordan(value: 'jo'),
japan(value: 'jp'),
kazakhstan(value: 'kz'),
kenya(value: 'ke'),
kyrgyzstan(value: 'kg'),
cambodia(value: 'kh'),
kiribati(value: 'ki'),
saintKittsAndNevis(value: 'kn'),
southKorea(value: 'kr'),
kuwait(value: 'kw'),
laoPeopleSDemocraticRepublic(value: 'la'),
lebanon(value: 'lb'),
liberia(value: 'lr'),
libya(value: 'ly'),
saintLucia(value: 'lc'),
liechtenstein(value: 'li'),
sriLanka(value: 'lk'),
lesotho(value: 'ls'),
lithuania(value: 'lt'),
luxembourg(value: 'lu'),
latvia(value: 'lv'),
morocco(value: 'ma'),
monaco(value: 'mc'),
moldova(value: 'md'),
madagascar(value: 'mg'),
maldives(value: 'mv'),
mexico(value: 'mx'),
marshallIslands(value: 'mh'),
northMacedonia(value: 'mk'),
mali(value: 'ml'),
malta(value: 'mt'),
myanmar(value: 'mm'),
montenegro(value: 'me'),
mongolia(value: 'mn'),
mozambique(value: 'mz'),
mauritania(value: 'mr'),
mauritius(value: 'mu'),
malawi(value: 'mw'),
malaysia(value: 'my'),
namibia(value: 'na'),
niger(value: 'ne'),
nigeria(value: 'ng'),
nicaragua(value: 'ni'),
netherlands(value: 'nl'),
norway(value: 'no'),
nepal(value: 'np'),
nauru(value: 'nr'),
newZealand(value: 'nz'),
oman(value: 'om'),
pakistan(value: 'pk'),
panama(value: 'pa'),
peru(value: 'pe'),
philippines(value: 'ph'),
palau(value: 'pw'),
papuaNewGuinea(value: 'pg'),
poland(value: 'pl'),
frenchPolynesia(value: 'pf'),
northKorea(value: 'kp'),
portugal(value: 'pt'),
paraguay(value: 'py'),
qatar(value: 'qa'),
romania(value: 'ro'),
russia(value: 'ru'),
rwanda(value: 'rw'),
saudiArabia(value: 'sa'),
sudan(value: 'sd'),
senegal(value: 'sn'),
singapore(value: 'sg'),
solomonIslands(value: 'sb'),
sierraLeone(value: 'sl'),
elSalvador(value: 'sv'),
sanMarino(value: 'sm'),
somalia(value: 'so'),
serbia(value: 'rs'),
southSudan(value: 'ss'),
saoTomeAndPrincipe(value: 'st'),
suriname(value: 'sr'),
slovakia(value: 'sk'),
slovenia(value: 'si'),
sweden(value: 'se'),
eswatini(value: 'sz'),
seychelles(value: 'sc'),
syria(value: 'sy'),
chad(value: 'td'),
togo(value: 'tg'),
thailand(value: 'th'),
tajikistan(value: 'tj'),
turkmenistan(value: 'tm'),
timorLeste(value: 'tl'),
tonga(value: 'to'),
trinidadAndTobago(value: 'tt'),
tunisia(value: 'tn'),
turkey(value: 'tr'),
tuvalu(value: 'tv'),
tanzania(value: 'tz'),
uganda(value: 'ug'),
ukraine(value: 'ua'),
uruguay(value: 'uy'),
unitedStates(value: 'us'),
uzbekistan(value: 'uz'),
vaticanCity(value: 'va'),
saintVincentAndTheGrenadines(value: 'vc'),
venezuela(value: 've'),
vietnam(value: 'vn'),
vanuatu(value: 'vu'),
samoa(value: 'ws'),
yemen(value: 'ye'),
southAfrica(value: 'za'),
zambia(value: 'zm'),
zimbabwe(value: 'zw');
const Flag({required this.value});
const Flag({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+13 -11
View File
@@ -1,17 +1,19 @@
part of '../../enums.dart';
enum ImageFormat {
jpg(value: 'jpg'),
jpeg(value: 'jpeg'),
png(value: 'png'),
webp(value: 'webp'),
heic(value: 'heic'),
avif(value: 'avif'),
gif(value: 'gif');
jpg(value: 'jpg'),
jpeg(value: 'jpeg'),
png(value: 'png'),
webp(value: 'webp'),
heic(value: 'heic'),
avif(value: 'avif'),
gif(value: 'gif');
const ImageFormat({required this.value});
const ImageFormat({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+15 -13
View File
@@ -1,19 +1,21 @@
part of '../../enums.dart';
enum ImageGravity {
center(value: 'center'),
topLeft(value: 'top-left'),
top(value: 'top'),
topRight(value: 'top-right'),
left(value: 'left'),
right(value: 'right'),
bottomLeft(value: 'bottom-left'),
bottom(value: 'bottom'),
bottomRight(value: 'bottom-right');
center(value: 'center'),
topLeft(value: 'top-left'),
top(value: 'top'),
topRight(value: 'top-right'),
left(value: 'left'),
right(value: 'right'),
bottomLeft(value: 'bottom-left'),
bottom(value: 'bottom'),
bottomRight(value: 'bottom-right');
const ImageGravity({required this.value});
const ImageGravity({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+46 -44
View File
@@ -1,50 +1,52 @@
part of '../../enums.dart';
enum OAuthProvider {
amazon(value: 'amazon'),
apple(value: 'apple'),
auth0(value: 'auth0'),
authentik(value: 'authentik'),
autodesk(value: 'autodesk'),
bitbucket(value: 'bitbucket'),
bitly(value: 'bitly'),
box(value: 'box'),
dailymotion(value: 'dailymotion'),
discord(value: 'discord'),
disqus(value: 'disqus'),
dropbox(value: 'dropbox'),
etsy(value: 'etsy'),
facebook(value: 'facebook'),
figma(value: 'figma'),
github(value: 'github'),
gitlab(value: 'gitlab'),
google(value: 'google'),
linkedin(value: 'linkedin'),
microsoft(value: 'microsoft'),
notion(value: 'notion'),
oidc(value: 'oidc'),
okta(value: 'okta'),
paypal(value: 'paypal'),
paypalSandbox(value: 'paypalSandbox'),
podio(value: 'podio'),
salesforce(value: 'salesforce'),
slack(value: 'slack'),
spotify(value: 'spotify'),
stripe(value: 'stripe'),
tradeshift(value: 'tradeshift'),
tradeshiftBox(value: 'tradeshiftBox'),
twitch(value: 'twitch'),
wordpress(value: 'wordpress'),
yahoo(value: 'yahoo'),
yammer(value: 'yammer'),
yandex(value: 'yandex'),
zoho(value: 'zoho'),
zoom(value: 'zoom'),
mock(value: 'mock');
amazon(value: 'amazon'),
apple(value: 'apple'),
auth0(value: 'auth0'),
authentik(value: 'authentik'),
autodesk(value: 'autodesk'),
bitbucket(value: 'bitbucket'),
bitly(value: 'bitly'),
box(value: 'box'),
dailymotion(value: 'dailymotion'),
discord(value: 'discord'),
disqus(value: 'disqus'),
dropbox(value: 'dropbox'),
etsy(value: 'etsy'),
facebook(value: 'facebook'),
figma(value: 'figma'),
github(value: 'github'),
gitlab(value: 'gitlab'),
google(value: 'google'),
linkedin(value: 'linkedin'),
microsoft(value: 'microsoft'),
notion(value: 'notion'),
oidc(value: 'oidc'),
okta(value: 'okta'),
paypal(value: 'paypal'),
paypalSandbox(value: 'paypalSandbox'),
podio(value: 'podio'),
salesforce(value: 'salesforce'),
slack(value: 'slack'),
spotify(value: 'spotify'),
stripe(value: 'stripe'),
tradeshift(value: 'tradeshift'),
tradeshiftBox(value: 'tradeshiftBox'),
twitch(value: 'twitch'),
wordpress(value: 'wordpress'),
yahoo(value: 'yahoo'),
yammer(value: 'yammer'),
yandex(value: 'yandex'),
zoho(value: 'zoho'),
zoom(value: 'zoom'),
mock(value: 'mock');
const OAuthProvider({required this.value});
const OAuthProvider({
required this.value
});
final String value;
final String value;
String toJson() => value;
}
String toJson() => value;
}
+1 -1
View File
@@ -13,7 +13,7 @@ class AppwriteException implements Exception {
/// Initializes an Appwrite Exception.
AppwriteException([this.message = "", this.code, this.type, this.response]);
/// Returns the error type, message, and code.
@override
String toString() {
+30 -30
View File
@@ -2,40 +2,40 @@ part of '../../models.dart';
/// AlgoArgon2
class AlgoArgon2 implements Model {
/// Algo type.
final String type;
/// Algo type.
final String type;
/// Memory used to compute hash.
final int memoryCost;
/// Memory used to compute hash.
final int memoryCost;
/// Amount of time consumed to compute hash
final int timeCost;
/// Amount of time consumed to compute hash
final int timeCost;
/// Number of threads used to compute hash.
final int threads;
/// Number of threads used to compute hash.
final int threads;
AlgoArgon2({
required this.type,
required this.memoryCost,
required this.timeCost,
required this.threads,
});
AlgoArgon2({
required this.type,
required this.memoryCost,
required this.timeCost,
required this.threads,
});
factory AlgoArgon2.fromMap(Map<String, dynamic> map) {
return AlgoArgon2(
type: map['type'].toString(),
memoryCost: map['memoryCost'],
timeCost: map['timeCost'],
threads: map['threads'],
);
}
factory AlgoArgon2.fromMap(Map<String, dynamic> map) {
return AlgoArgon2(
type: map['type'].toString(),
memoryCost: map['memoryCost'],
timeCost: map['timeCost'],
threads: map['threads'],
);
}
Map<String, dynamic> toMap() {
return {
"type": type,
"memoryCost": memoryCost,
"timeCost": timeCost,
"threads": threads,
};
}
Map<String, dynamic> toMap() {
return {
"type": type,
"memoryCost": memoryCost,
"timeCost": timeCost,
"threads": threads,
};
}
}
+15 -9
View File
@@ -2,16 +2,22 @@ part of '../../models.dart';
/// AlgoBcrypt
class AlgoBcrypt implements Model {
/// Algo type.
final String type;
/// Algo type.
final String type;
AlgoBcrypt({required this.type});
AlgoBcrypt({
required this.type,
});
factory AlgoBcrypt.fromMap(Map<String, dynamic> map) {
return AlgoBcrypt(type: map['type'].toString());
}
factory AlgoBcrypt.fromMap(Map<String, dynamic> map) {
return AlgoBcrypt(
type: map['type'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"type": type};
}
Map<String, dynamic> toMap() {
return {
"type": type,
};
}
}
+15 -9
View File
@@ -2,16 +2,22 @@ part of '../../models.dart';
/// AlgoMD5
class AlgoMd5 implements Model {
/// Algo type.
final String type;
/// Algo type.
final String type;
AlgoMd5({required this.type});
AlgoMd5({
required this.type,
});
factory AlgoMd5.fromMap(Map<String, dynamic> map) {
return AlgoMd5(type: map['type'].toString());
}
factory AlgoMd5.fromMap(Map<String, dynamic> map) {
return AlgoMd5(
type: map['type'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"type": type};
}
Map<String, dynamic> toMap() {
return {
"type": type,
};
}
}
+15 -9
View File
@@ -2,16 +2,22 @@ part of '../../models.dart';
/// AlgoPHPass
class AlgoPhpass implements Model {
/// Algo type.
final String type;
/// Algo type.
final String type;
AlgoPhpass({required this.type});
AlgoPhpass({
required this.type,
});
factory AlgoPhpass.fromMap(Map<String, dynamic> map) {
return AlgoPhpass(type: map['type'].toString());
}
factory AlgoPhpass.fromMap(Map<String, dynamic> map) {
return AlgoPhpass(
type: map['type'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"type": type};
}
Map<String, dynamic> toMap() {
return {
"type": type,
};
}
}
+35 -35
View File
@@ -2,46 +2,46 @@ part of '../../models.dart';
/// AlgoScrypt
class AlgoScrypt implements Model {
/// Algo type.
final String type;
/// Algo type.
final String type;
/// CPU complexity of computed hash.
final int costCpu;
/// CPU complexity of computed hash.
final int costCpu;
/// Memory complexity of computed hash.
final int costMemory;
/// Memory complexity of computed hash.
final int costMemory;
/// Parallelization of computed hash.
final int costParallel;
/// Parallelization of computed hash.
final int costParallel;
/// Length used to compute hash.
final int length;
/// Length used to compute hash.
final int length;
AlgoScrypt({
required this.type,
required this.costCpu,
required this.costMemory,
required this.costParallel,
required this.length,
});
AlgoScrypt({
required this.type,
required this.costCpu,
required this.costMemory,
required this.costParallel,
required this.length,
});
factory AlgoScrypt.fromMap(Map<String, dynamic> map) {
return AlgoScrypt(
type: map['type'].toString(),
costCpu: map['costCpu'],
costMemory: map['costMemory'],
costParallel: map['costParallel'],
length: map['length'],
);
}
factory AlgoScrypt.fromMap(Map<String, dynamic> map) {
return AlgoScrypt(
type: map['type'].toString(),
costCpu: map['costCpu'],
costMemory: map['costMemory'],
costParallel: map['costParallel'],
length: map['length'],
);
}
Map<String, dynamic> toMap() {
return {
"type": type,
"costCpu": costCpu,
"costMemory": costMemory,
"costParallel": costParallel,
"length": length,
};
}
Map<String, dynamic> toMap() {
return {
"type": type,
"costCpu": costCpu,
"costMemory": costMemory,
"costParallel": costParallel,
"length": length,
};
}
}
+30 -30
View File
@@ -2,40 +2,40 @@ part of '../../models.dart';
/// AlgoScryptModified
class AlgoScryptModified implements Model {
/// Algo type.
final String type;
/// Algo type.
final String type;
/// Salt used to compute hash.
final String salt;
/// Salt used to compute hash.
final String salt;
/// Separator used to compute hash.
final String saltSeparator;
/// Separator used to compute hash.
final String saltSeparator;
/// Key used to compute hash.
final String signerKey;
/// Key used to compute hash.
final String signerKey;
AlgoScryptModified({
required this.type,
required this.salt,
required this.saltSeparator,
required this.signerKey,
});
AlgoScryptModified({
required this.type,
required this.salt,
required this.saltSeparator,
required this.signerKey,
});
factory AlgoScryptModified.fromMap(Map<String, dynamic> map) {
return AlgoScryptModified(
type: map['type'].toString(),
salt: map['salt'].toString(),
saltSeparator: map['saltSeparator'].toString(),
signerKey: map['signerKey'].toString(),
);
}
factory AlgoScryptModified.fromMap(Map<String, dynamic> map) {
return AlgoScryptModified(
type: map['type'].toString(),
salt: map['salt'].toString(),
saltSeparator: map['saltSeparator'].toString(),
signerKey: map['signerKey'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"type": type,
"salt": salt,
"saltSeparator": saltSeparator,
"signerKey": signerKey,
};
}
Map<String, dynamic> toMap() {
return {
"type": type,
"salt": salt,
"saltSeparator": saltSeparator,
"signerKey": signerKey,
};
}
}
+15 -9
View File
@@ -2,16 +2,22 @@ part of '../../models.dart';
/// AlgoSHA
class AlgoSha implements Model {
/// Algo type.
final String type;
/// Algo type.
final String type;
AlgoSha({required this.type});
AlgoSha({
required this.type,
});
factory AlgoSha.fromMap(Map<String, dynamic> map) {
return AlgoSha(type: map['type'].toString());
}
factory AlgoSha.fromMap(Map<String, dynamic> map) {
return AlgoSha(
type: map['type'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"type": type};
}
Map<String, dynamic> toMap() {
return {
"type": type,
};
}
}
+20 -14
View File
@@ -2,22 +2,28 @@ part of '../../models.dart';
/// Continent
class Continent implements Model {
/// Continent name.
final String name;
/// Continent name.
final String name;
/// Continent two letter code.
final String code;
/// Continent two letter code.
final String code;
Continent({required this.name, required this.code});
Continent({
required this.name,
required this.code,
});
factory Continent.fromMap(Map<String, dynamic> map) {
return Continent(
name: map['name'].toString(),
code: map['code'].toString(),
);
}
factory Continent.fromMap(Map<String, dynamic> map) {
return Continent(
name: map['name'].toString(),
code: map['code'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"name": name, "code": code};
}
Map<String, dynamic> toMap() {
return {
"name": name,
"code": code,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Continents List
class ContinentList implements Model {
/// Total number of continents documents that matched your query.
final int total;
/// Total number of continents documents that matched your query.
final int total;
/// List of continents.
final List<Continent> continents;
/// List of continents.
final List<Continent> continents;
ContinentList({required this.total, required this.continents});
ContinentList({
required this.total,
required this.continents,
});
factory ContinentList.fromMap(Map<String, dynamic> map) {
return ContinentList(
total: map['total'],
continents: List<Continent>.from(
map['continents'].map((p) => Continent.fromMap(p)),
),
);
}
factory ContinentList.fromMap(Map<String, dynamic> map) {
return ContinentList(
total: map['total'],
continents: List<Continent>.from(map['continents'].map((p) => Continent.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"continents": continents.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"continents": continents.map((p) => p.toMap()).toList(),
};
}
}
+20 -11
View File
@@ -2,19 +2,28 @@ part of '../../models.dart';
/// Country
class Country implements Model {
/// Country name.
final String name;
/// Country name.
final String name;
/// Country two-character ISO 3166-1 alpha code.
final String code;
/// Country two-character ISO 3166-1 alpha code.
final String code;
Country({required this.name, required this.code});
Country({
required this.name,
required this.code,
});
factory Country.fromMap(Map<String, dynamic> map) {
return Country(name: map['name'].toString(), code: map['code'].toString());
}
factory Country.fromMap(Map<String, dynamic> map) {
return Country(
name: map['name'].toString(),
code: map['code'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"name": name, "code": code};
}
Map<String, dynamic> toMap() {
return {
"name": name,
"code": code,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Countries List
class CountryList implements Model {
/// Total number of countries documents that matched your query.
final int total;
/// Total number of countries documents that matched your query.
final int total;
/// List of countries.
final List<Country> countries;
/// List of countries.
final List<Country> countries;
CountryList({required this.total, required this.countries});
CountryList({
required this.total,
required this.countries,
});
factory CountryList.fromMap(Map<String, dynamic> map) {
return CountryList(
total: map['total'],
countries: List<Country>.from(
map['countries'].map((p) => Country.fromMap(p)),
),
);
}
factory CountryList.fromMap(Map<String, dynamic> map) {
return CountryList(
total: map['total'],
countries: List<Country>.from(map['countries'].map((p) => Country.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"countries": countries.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"countries": countries.map((p) => p.toMap()).toList(),
};
}
}
+45 -45
View File
@@ -2,58 +2,58 @@ part of '../../models.dart';
/// Currency
class Currency implements Model {
/// Currency symbol.
final String symbol;
/// Currency symbol.
final String symbol;
/// Currency name.
final String name;
/// Currency name.
final String name;
/// Currency native symbol.
final String symbolNative;
/// Currency native symbol.
final String symbolNative;
/// Number of decimal digits.
final int decimalDigits;
/// Number of decimal digits.
final int decimalDigits;
/// Currency digit rounding.
final double rounding;
/// Currency digit rounding.
final double rounding;
/// Currency code in [ISO 4217-1](http://en.wikipedia.org/wiki/ISO_4217) three-character format.
final String code;
/// Currency code in [ISO 4217-1](http://en.wikipedia.org/wiki/ISO_4217) three-character format.
final String code;
/// Currency plural name
final String namePlural;
/// Currency plural name
final String namePlural;
Currency({
required this.symbol,
required this.name,
required this.symbolNative,
required this.decimalDigits,
required this.rounding,
required this.code,
required this.namePlural,
});
Currency({
required this.symbol,
required this.name,
required this.symbolNative,
required this.decimalDigits,
required this.rounding,
required this.code,
required this.namePlural,
});
factory Currency.fromMap(Map<String, dynamic> map) {
return Currency(
symbol: map['symbol'].toString(),
name: map['name'].toString(),
symbolNative: map['symbolNative'].toString(),
decimalDigits: map['decimalDigits'],
rounding: map['rounding'].toDouble(),
code: map['code'].toString(),
namePlural: map['namePlural'].toString(),
);
}
factory Currency.fromMap(Map<String, dynamic> map) {
return Currency(
symbol: map['symbol'].toString(),
name: map['name'].toString(),
symbolNative: map['symbolNative'].toString(),
decimalDigits: map['decimalDigits'],
rounding: map['rounding'].toDouble(),
code: map['code'].toString(),
namePlural: map['namePlural'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"symbol": symbol,
"name": name,
"symbolNative": symbolNative,
"decimalDigits": decimalDigits,
"rounding": rounding,
"code": code,
"namePlural": namePlural,
};
}
Map<String, dynamic> toMap() {
return {
"symbol": symbol,
"name": name,
"symbolNative": symbolNative,
"decimalDigits": decimalDigits,
"rounding": rounding,
"code": code,
"namePlural": namePlural,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Currencies List
class CurrencyList implements Model {
/// Total number of currencies documents that matched your query.
final int total;
/// Total number of currencies documents that matched your query.
final int total;
/// List of currencies.
final List<Currency> currencies;
/// List of currencies.
final List<Currency> currencies;
CurrencyList({required this.total, required this.currencies});
CurrencyList({
required this.total,
required this.currencies,
});
factory CurrencyList.fromMap(Map<String, dynamic> map) {
return CurrencyList(
total: map['total'],
currencies: List<Currency>.from(
map['currencies'].map((p) => Currency.fromMap(p)),
),
);
}
factory CurrencyList.fromMap(Map<String, dynamic> map) {
return CurrencyList(
total: map['total'],
currencies: List<Currency>.from(map['currencies'].map((p) => Currency.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"currencies": currencies.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"currencies": currencies.map((p) => p.toMap()).toList(),
};
}
}
+45 -51
View File
@@ -2,65 +2,59 @@ part of '../../models.dart';
/// Document
class Document implements Model {
/// Document ID.
final String $id;
/// Document ID.
final String $id;
/// Document automatically incrementing ID.
final int $sequence;
/// Collection ID.
final String $collectionId;
/// Collection ID.
final String $collectionId;
/// Database ID.
final String $databaseId;
/// Database ID.
final String $databaseId;
/// Document creation date in ISO 8601 format.
final String $createdAt;
/// Document creation date in ISO 8601 format.
final String $createdAt;
/// Document update date in ISO 8601 format.
final String $updatedAt;
/// Document update date in ISO 8601 format.
final String $updatedAt;
/// Document permissions. [Learn more about permissions](https://appwrite.io/docs/permissions).
final List<String> $permissions;
/// Document permissions. [Learn more about permissions](https://appwrite.io/docs/permissions).
final List<String> $permissions;
final Map<String, dynamic> data;
final Map<String, dynamic> data;
Document({
required this.$id,
required this.$collectionId,
required this.$databaseId,
required this.$createdAt,
required this.$updatedAt,
required this.$permissions,
required this.data,
});
Document({
required this.$id,
required this.$sequence,
required this.$collectionId,
required this.$databaseId,
required this.$createdAt,
required this.$updatedAt,
required this.$permissions,
required this.data,
});
factory Document.fromMap(Map<String, dynamic> map) {
return Document(
$id: map['\$id'].toString(),
$collectionId: map['\$collectionId'].toString(),
$databaseId: map['\$databaseId'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
$permissions: List.from(map['\$permissions'] ?? []),
data: map,
);
}
factory Document.fromMap(Map<String, dynamic> map) {
return Document(
$id: map['\$id'].toString(),
$sequence: map['\$sequence'],
$collectionId: map['\$collectionId'].toString(),
$databaseId: map['\$databaseId'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
$permissions: List.from(map['\$permissions'] ?? []),
data: map,
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$collectionId": $collectionId,
"\$databaseId": $databaseId,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"\$permissions": $permissions,
"data": data,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$sequence": $sequence,
"\$collectionId": $collectionId,
"\$databaseId": $databaseId,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"\$permissions": $permissions,
"data": data,
};
}
T convertTo<T>(T Function(Map) fromJson) => fromJson(data);
T convertTo<T>(T Function(Map<String, dynamic>) fromJson) => fromJson(data);
}
+22 -21
View File
@@ -2,30 +2,31 @@ part of '../../models.dart';
/// Documents List
class DocumentList implements Model {
/// Total number of documents documents that matched your query.
final int total;
/// Total number of documents documents that matched your query.
final int total;
/// List of documents.
final List<Document> documents;
/// List of documents.
final List<Document> documents;
DocumentList({required this.total, required this.documents});
DocumentList({
required this.total,
required this.documents,
});
factory DocumentList.fromMap(Map<String, dynamic> map) {
return DocumentList(
total: map['total'],
documents: List<Document>.from(
map['documents'].map((p) => Document.fromMap(p)),
),
);
}
factory DocumentList.fromMap(Map<String, dynamic> map) {
return DocumentList(
total: map['total'],
documents: List<Document>.from(map['documents'].map((p) => Document.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"documents": documents.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"documents": documents.map((p) => p.toMap()).toList(),
};
}
List<T> convertTo<T>(T Function(Map) fromJson) =>
documents.map((d) => d.convertTo<T>(fromJson)).toList();
List<T> convertTo<T>(T Function(Map) fromJson) =>
documents.map((d) => d.convertTo<T>(fromJson)).toList();
}
+95 -99
View File
@@ -2,122 +2,118 @@ part of '../../models.dart';
/// Execution
class Execution implements Model {
/// Execution ID.
final String $id;
/// Execution ID.
final String $id;
/// Execution creation date in ISO 8601 format.
final String $createdAt;
/// Execution creation date in ISO 8601 format.
final String $createdAt;
/// Execution upate date in ISO 8601 format.
final String $updatedAt;
/// Execution upate date in ISO 8601 format.
final String $updatedAt;
/// Execution roles.
final List<String> $permissions;
/// Execution roles.
final List<String> $permissions;
/// Function ID.
final String functionId;
/// Function ID.
final String functionId;
/// The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.
final String trigger;
/// The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.
final String trigger;
/// The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.
final String status;
/// The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.
final String status;
/// HTTP request method type.
final String requestMethod;
/// HTTP request method type.
final String requestMethod;
/// HTTP request path and query.
final String requestPath;
/// HTTP request path and query.
final String requestPath;
/// HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.
final List<Headers> requestHeaders;
/// HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.
final List<Headers> requestHeaders;
/// HTTP response status code.
final int responseStatusCode;
/// HTTP response status code.
final int responseStatusCode;
/// HTTP response body. This will return empty unless execution is created as synchronous.
final String responseBody;
/// HTTP response body. This will return empty unless execution is created as synchronous.
final String responseBody;
/// HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.
final List<Headers> responseHeaders;
/// HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.
final List<Headers> responseHeaders;
/// Function logs. Includes the last 4,000 characters. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.
final String logs;
/// Function logs. Includes the last 4,000 characters. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.
final String logs;
/// Function errors. Includes the last 4,000 characters. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.
final String errors;
/// Function errors. Includes the last 4,000 characters. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.
final String errors;
/// Resource(function/site) execution duration in seconds.
final double duration;
/// Resource(function/site) execution duration in seconds.
final double duration;
/// The scheduled time for execution. If left empty, execution will be queued immediately.
final String? scheduledAt;
/// The scheduled time for execution. If left empty, execution will be queued immediately.
final String? scheduledAt;
Execution({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.$permissions,
required this.functionId,
required this.trigger,
required this.status,
required this.requestMethod,
required this.requestPath,
required this.requestHeaders,
required this.responseStatusCode,
required this.responseBody,
required this.responseHeaders,
required this.logs,
required this.errors,
required this.duration,
this.scheduledAt,
});
Execution({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.$permissions,
required this.functionId,
required this.trigger,
required this.status,
required this.requestMethod,
required this.requestPath,
required this.requestHeaders,
required this.responseStatusCode,
required this.responseBody,
required this.responseHeaders,
required this.logs,
required this.errors,
required this.duration,
this.scheduledAt,
});
factory Execution.fromMap(Map<String, dynamic> map) {
return Execution(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
$permissions: List.from(map['\$permissions'] ?? []),
functionId: map['functionId'].toString(),
trigger: map['trigger'].toString(),
status: map['status'].toString(),
requestMethod: map['requestMethod'].toString(),
requestPath: map['requestPath'].toString(),
requestHeaders: List<Headers>.from(
map['requestHeaders'].map((p) => Headers.fromMap(p)),
),
responseStatusCode: map['responseStatusCode'],
responseBody: map['responseBody'].toString(),
responseHeaders: List<Headers>.from(
map['responseHeaders'].map((p) => Headers.fromMap(p)),
),
logs: map['logs'].toString(),
errors: map['errors'].toString(),
duration: map['duration'].toDouble(),
scheduledAt: map['scheduledAt']?.toString(),
);
}
factory Execution.fromMap(Map<String, dynamic> map) {
return Execution(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
$permissions: List.from(map['\$permissions'] ?? []),
functionId: map['functionId'].toString(),
trigger: map['trigger'].toString(),
status: map['status'].toString(),
requestMethod: map['requestMethod'].toString(),
requestPath: map['requestPath'].toString(),
requestHeaders: List<Headers>.from(map['requestHeaders'].map((p) => Headers.fromMap(p))),
responseStatusCode: map['responseStatusCode'],
responseBody: map['responseBody'].toString(),
responseHeaders: List<Headers>.from(map['responseHeaders'].map((p) => Headers.fromMap(p))),
logs: map['logs'].toString(),
errors: map['errors'].toString(),
duration: map['duration'].toDouble(),
scheduledAt: map['scheduledAt']?.toString(),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"\$permissions": $permissions,
"functionId": functionId,
"trigger": trigger,
"status": status,
"requestMethod": requestMethod,
"requestPath": requestPath,
"requestHeaders": requestHeaders.map((p) => p.toMap()).toList(),
"responseStatusCode": responseStatusCode,
"responseBody": responseBody,
"responseHeaders": responseHeaders.map((p) => p.toMap()).toList(),
"logs": logs,
"errors": errors,
"duration": duration,
"scheduledAt": scheduledAt,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"\$permissions": $permissions,
"functionId": functionId,
"trigger": trigger,
"status": status,
"requestMethod": requestMethod,
"requestPath": requestPath,
"requestHeaders": requestHeaders.map((p) => p.toMap()).toList(),
"responseStatusCode": responseStatusCode,
"responseBody": responseBody,
"responseHeaders": responseHeaders.map((p) => p.toMap()).toList(),
"logs": logs,
"errors": errors,
"duration": duration,
"scheduledAt": scheduledAt,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Executions List
class ExecutionList implements Model {
/// Total number of executions documents that matched your query.
final int total;
/// Total number of executions documents that matched your query.
final int total;
/// List of executions.
final List<Execution> executions;
/// List of executions.
final List<Execution> executions;
ExecutionList({required this.total, required this.executions});
ExecutionList({
required this.total,
required this.executions,
});
factory ExecutionList.fromMap(Map<String, dynamic> map) {
return ExecutionList(
total: map['total'],
executions: List<Execution>.from(
map['executions'].map((p) => Execution.fromMap(p)),
),
);
}
factory ExecutionList.fromMap(Map<String, dynamic> map) {
return ExecutionList(
total: map['total'],
executions: List<Execution>.from(map['executions'].map((p) => Execution.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"executions": executions.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"executions": executions.map((p) => p.toMap()).toList(),
};
}
}
+65 -65
View File
@@ -2,82 +2,82 @@ part of '../../models.dart';
/// File
class File implements Model {
/// File ID.
final String $id;
/// File ID.
final String $id;
/// Bucket ID.
final String bucketId;
/// Bucket ID.
final String bucketId;
/// File creation date in ISO 8601 format.
final String $createdAt;
/// File creation date in ISO 8601 format.
final String $createdAt;
/// File update date in ISO 8601 format.
final String $updatedAt;
/// File update date in ISO 8601 format.
final String $updatedAt;
/// File permissions. [Learn more about permissions](https://appwrite.io/docs/permissions).
final List<String> $permissions;
/// File permissions. [Learn more about permissions](https://appwrite.io/docs/permissions).
final List<String> $permissions;
/// File name.
final String name;
/// File name.
final String name;
/// File MD5 signature.
final String signature;
/// File MD5 signature.
final String signature;
/// File mime type.
final String mimeType;
/// File mime type.
final String mimeType;
/// File original size in bytes.
final int sizeOriginal;
/// File original size in bytes.
final int sizeOriginal;
/// Total number of chunks available
final int chunksTotal;
/// Total number of chunks available
final int chunksTotal;
/// Total number of chunks uploaded
final int chunksUploaded;
/// Total number of chunks uploaded
final int chunksUploaded;
File({
required this.$id,
required this.bucketId,
required this.$createdAt,
required this.$updatedAt,
required this.$permissions,
required this.name,
required this.signature,
required this.mimeType,
required this.sizeOriginal,
required this.chunksTotal,
required this.chunksUploaded,
});
File({
required this.$id,
required this.bucketId,
required this.$createdAt,
required this.$updatedAt,
required this.$permissions,
required this.name,
required this.signature,
required this.mimeType,
required this.sizeOriginal,
required this.chunksTotal,
required this.chunksUploaded,
});
factory File.fromMap(Map<String, dynamic> map) {
return File(
$id: map['\$id'].toString(),
bucketId: map['bucketId'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
$permissions: List.from(map['\$permissions'] ?? []),
name: map['name'].toString(),
signature: map['signature'].toString(),
mimeType: map['mimeType'].toString(),
sizeOriginal: map['sizeOriginal'],
chunksTotal: map['chunksTotal'],
chunksUploaded: map['chunksUploaded'],
);
}
factory File.fromMap(Map<String, dynamic> map) {
return File(
$id: map['\$id'].toString(),
bucketId: map['bucketId'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
$permissions: List.from(map['\$permissions'] ?? []),
name: map['name'].toString(),
signature: map['signature'].toString(),
mimeType: map['mimeType'].toString(),
sizeOriginal: map['sizeOriginal'],
chunksTotal: map['chunksTotal'],
chunksUploaded: map['chunksUploaded'],
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"bucketId": bucketId,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"\$permissions": $permissions,
"name": name,
"signature": signature,
"mimeType": mimeType,
"sizeOriginal": sizeOriginal,
"chunksTotal": chunksTotal,
"chunksUploaded": chunksUploaded,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"bucketId": bucketId,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"\$permissions": $permissions,
"name": name,
"signature": signature,
"mimeType": mimeType,
"sizeOriginal": sizeOriginal,
"chunksTotal": chunksTotal,
"chunksUploaded": chunksUploaded,
};
}
}
+20 -14
View File
@@ -2,22 +2,28 @@ part of '../../models.dart';
/// Files List
class FileList implements Model {
/// Total number of files documents that matched your query.
final int total;
/// Total number of files documents that matched your query.
final int total;
/// List of files.
final List<File> files;
/// List of files.
final List<File> files;
FileList({required this.total, required this.files});
FileList({
required this.total,
required this.files,
});
factory FileList.fromMap(Map<String, dynamic> map) {
return FileList(
total: map['total'],
files: List<File>.from(map['files'].map((p) => File.fromMap(p))),
);
}
factory FileList.fromMap(Map<String, dynamic> map) {
return FileList(
total: map['total'],
files: List<File>.from(map['files'].map((p) => File.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {"total": total, "files": files.map((p) => p.toMap()).toList()};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"files": files.map((p) => p.toMap()).toList(),
};
}
}
+20 -14
View File
@@ -2,22 +2,28 @@ part of '../../models.dart';
/// Headers
class Headers implements Model {
/// Header name.
final String name;
/// Header name.
final String name;
/// Header value.
final String value;
/// Header value.
final String value;
Headers({required this.name, required this.value});
Headers({
required this.name,
required this.value,
});
factory Headers.fromMap(Map<String, dynamic> map) {
return Headers(
name: map['name'].toString(),
value: map['value'].toString(),
);
}
factory Headers.fromMap(Map<String, dynamic> map) {
return Headers(
name: map['name'].toString(),
value: map['value'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"name": name, "value": value};
}
Map<String, dynamic> toMap() {
return {
"name": name,
"value": value,
};
}
}
+60 -60
View File
@@ -2,76 +2,76 @@ part of '../../models.dart';
/// Identity
class Identity implements Model {
/// Identity ID.
final String $id;
/// Identity ID.
final String $id;
/// Identity creation date in ISO 8601 format.
final String $createdAt;
/// Identity creation date in ISO 8601 format.
final String $createdAt;
/// Identity update date in ISO 8601 format.
final String $updatedAt;
/// Identity update date in ISO 8601 format.
final String $updatedAt;
/// User ID.
final String userId;
/// User ID.
final String userId;
/// Identity Provider.
final String provider;
/// Identity Provider.
final String provider;
/// ID of the User in the Identity Provider.
final String providerUid;
/// ID of the User in the Identity Provider.
final String providerUid;
/// Email of the User in the Identity Provider.
final String providerEmail;
/// Email of the User in the Identity Provider.
final String providerEmail;
/// Identity Provider Access Token.
final String providerAccessToken;
/// Identity Provider Access Token.
final String providerAccessToken;
/// The date of when the access token expires in ISO 8601 format.
final String providerAccessTokenExpiry;
/// The date of when the access token expires in ISO 8601 format.
final String providerAccessTokenExpiry;
/// Identity Provider Refresh Token.
final String providerRefreshToken;
/// Identity Provider Refresh Token.
final String providerRefreshToken;
Identity({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.userId,
required this.provider,
required this.providerUid,
required this.providerEmail,
required this.providerAccessToken,
required this.providerAccessTokenExpiry,
required this.providerRefreshToken,
});
Identity({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.userId,
required this.provider,
required this.providerUid,
required this.providerEmail,
required this.providerAccessToken,
required this.providerAccessTokenExpiry,
required this.providerRefreshToken,
});
factory Identity.fromMap(Map<String, dynamic> map) {
return Identity(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
userId: map['userId'].toString(),
provider: map['provider'].toString(),
providerUid: map['providerUid'].toString(),
providerEmail: map['providerEmail'].toString(),
providerAccessToken: map['providerAccessToken'].toString(),
providerAccessTokenExpiry: map['providerAccessTokenExpiry'].toString(),
providerRefreshToken: map['providerRefreshToken'].toString(),
);
}
factory Identity.fromMap(Map<String, dynamic> map) {
return Identity(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
userId: map['userId'].toString(),
provider: map['provider'].toString(),
providerUid: map['providerUid'].toString(),
providerEmail: map['providerEmail'].toString(),
providerAccessToken: map['providerAccessToken'].toString(),
providerAccessTokenExpiry: map['providerAccessTokenExpiry'].toString(),
providerRefreshToken: map['providerRefreshToken'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"userId": userId,
"provider": provider,
"providerUid": providerUid,
"providerEmail": providerEmail,
"providerAccessToken": providerAccessToken,
"providerAccessTokenExpiry": providerAccessTokenExpiry,
"providerRefreshToken": providerRefreshToken,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"userId": userId,
"provider": provider,
"providerUid": providerUid,
"providerEmail": providerEmail,
"providerAccessToken": providerAccessToken,
"providerAccessTokenExpiry": providerAccessTokenExpiry,
"providerRefreshToken": providerRefreshToken,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Identities List
class IdentityList implements Model {
/// Total number of identities documents that matched your query.
final int total;
/// Total number of identities documents that matched your query.
final int total;
/// List of identities.
final List<Identity> identities;
/// List of identities.
final List<Identity> identities;
IdentityList({required this.total, required this.identities});
IdentityList({
required this.total,
required this.identities,
});
factory IdentityList.fromMap(Map<String, dynamic> map) {
return IdentityList(
total: map['total'],
identities: List<Identity>.from(
map['identities'].map((p) => Identity.fromMap(p)),
),
);
}
factory IdentityList.fromMap(Map<String, dynamic> map) {
return IdentityList(
total: map['total'],
identities: List<Identity>.from(map['identities'].map((p) => Identity.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"identities": identities.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"identities": identities.map((p) => p.toMap()).toList(),
};
}
}
+15 -9
View File
@@ -2,16 +2,22 @@ part of '../../models.dart';
/// JWT
class Jwt implements Model {
/// JWT encoded string.
final String jwt;
/// JWT encoded string.
final String jwt;
Jwt({required this.jwt});
Jwt({
required this.jwt,
});
factory Jwt.fromMap(Map<String, dynamic> map) {
return Jwt(jwt: map['jwt'].toString());
}
factory Jwt.fromMap(Map<String, dynamic> map) {
return Jwt(
jwt: map['jwt'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"jwt": jwt};
}
Map<String, dynamic> toMap() {
return {
"jwt": jwt,
};
}
}
+25 -17
View File
@@ -2,26 +2,34 @@ part of '../../models.dart';
/// Language
class Language implements Model {
/// Language name.
final String name;
/// Language name.
final String name;
/// Language two-character ISO 639-1 codes.
final String code;
/// Language two-character ISO 639-1 codes.
final String code;
/// Language native name.
final String nativeName;
/// Language native name.
final String nativeName;
Language({required this.name, required this.code, required this.nativeName});
Language({
required this.name,
required this.code,
required this.nativeName,
});
factory Language.fromMap(Map<String, dynamic> map) {
return Language(
name: map['name'].toString(),
code: map['code'].toString(),
nativeName: map['nativeName'].toString(),
);
}
factory Language.fromMap(Map<String, dynamic> map) {
return Language(
name: map['name'].toString(),
code: map['code'].toString(),
nativeName: map['nativeName'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"name": name, "code": code, "nativeName": nativeName};
}
Map<String, dynamic> toMap() {
return {
"name": name,
"code": code,
"nativeName": nativeName,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Languages List
class LanguageList implements Model {
/// Total number of languages documents that matched your query.
final int total;
/// Total number of languages documents that matched your query.
final int total;
/// List of languages.
final List<Language> languages;
/// List of languages.
final List<Language> languages;
LanguageList({required this.total, required this.languages});
LanguageList({
required this.total,
required this.languages,
});
factory LanguageList.fromMap(Map<String, dynamic> map) {
return LanguageList(
total: map['total'],
languages: List<Language>.from(
map['languages'].map((p) => Language.fromMap(p)),
),
);
}
factory LanguageList.fromMap(Map<String, dynamic> map) {
return LanguageList(
total: map['total'],
languages: List<Language>.from(map['languages'].map((p) => Language.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"languages": languages.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"languages": languages.map((p) => p.toMap()).toList(),
};
}
}
+45 -45
View File
@@ -2,58 +2,58 @@ part of '../../models.dart';
/// Locale
class Locale implements Model {
/// User IP address.
final String ip;
/// User IP address.
final String ip;
/// Country code in [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1) two-character format
final String countryCode;
/// Country code in [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1) two-character format
final String countryCode;
/// Country name. This field support localization.
final String country;
/// Country name. This field support localization.
final String country;
/// Continent code. A two character continent code &quot;AF&quot; for Africa, &quot;AN&quot; for Antarctica, &quot;AS&quot; for Asia, &quot;EU&quot; for Europe, &quot;NA&quot; for North America, &quot;OC&quot; for Oceania, and &quot;SA&quot; for South America.
final String continentCode;
/// Continent code. A two character continent code &quot;AF&quot; for Africa, &quot;AN&quot; for Antarctica, &quot;AS&quot; for Asia, &quot;EU&quot; for Europe, &quot;NA&quot; for North America, &quot;OC&quot; for Oceania, and &quot;SA&quot; for South America.
final String continentCode;
/// Continent name. This field support localization.
final String continent;
/// Continent name. This field support localization.
final String continent;
/// True if country is part of the European Union.
final bool eu;
/// True if country is part of the European Union.
final bool eu;
/// Currency code in [ISO 4217-1](http://en.wikipedia.org/wiki/ISO_4217) three-character format
final String currency;
/// Currency code in [ISO 4217-1](http://en.wikipedia.org/wiki/ISO_4217) three-character format
final String currency;
Locale({
required this.ip,
required this.countryCode,
required this.country,
required this.continentCode,
required this.continent,
required this.eu,
required this.currency,
});
Locale({
required this.ip,
required this.countryCode,
required this.country,
required this.continentCode,
required this.continent,
required this.eu,
required this.currency,
});
factory Locale.fromMap(Map<String, dynamic> map) {
return Locale(
ip: map['ip'].toString(),
countryCode: map['countryCode'].toString(),
country: map['country'].toString(),
continentCode: map['continentCode'].toString(),
continent: map['continent'].toString(),
eu: map['eu'],
currency: map['currency'].toString(),
);
}
factory Locale.fromMap(Map<String, dynamic> map) {
return Locale(
ip: map['ip'].toString(),
countryCode: map['countryCode'].toString(),
country: map['country'].toString(),
continentCode: map['continentCode'].toString(),
continent: map['continent'].toString(),
eu: map['eu'],
currency: map['currency'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"ip": ip,
"countryCode": countryCode,
"country": country,
"continentCode": continentCode,
"continent": continent,
"eu": eu,
"currency": currency,
};
}
Map<String, dynamic> toMap() {
return {
"ip": ip,
"countryCode": countryCode,
"country": country,
"continentCode": continentCode,
"continent": continent,
"eu": eu,
"currency": currency,
};
}
}
+20 -14
View File
@@ -2,22 +2,28 @@ part of '../../models.dart';
/// LocaleCode
class LocaleCode implements Model {
/// Locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
final String code;
/// Locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
final String code;
/// Locale name
final String name;
/// Locale name
final String name;
LocaleCode({required this.code, required this.name});
LocaleCode({
required this.code,
required this.name,
});
factory LocaleCode.fromMap(Map<String, dynamic> map) {
return LocaleCode(
code: map['code'].toString(),
name: map['name'].toString(),
);
}
factory LocaleCode.fromMap(Map<String, dynamic> map) {
return LocaleCode(
code: map['code'].toString(),
name: map['name'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"code": code, "name": name};
}
Map<String, dynamic> toMap() {
return {
"code": code,
"name": name,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Locale codes list
class LocaleCodeList implements Model {
/// Total number of localeCodes documents that matched your query.
final int total;
/// Total number of localeCodes documents that matched your query.
final int total;
/// List of localeCodes.
final List<LocaleCode> localeCodes;
/// List of localeCodes.
final List<LocaleCode> localeCodes;
LocaleCodeList({required this.total, required this.localeCodes});
LocaleCodeList({
required this.total,
required this.localeCodes,
});
factory LocaleCodeList.fromMap(Map<String, dynamic> map) {
return LocaleCodeList(
total: map['total'],
localeCodes: List<LocaleCode>.from(
map['localeCodes'].map((p) => LocaleCode.fromMap(p)),
),
);
}
factory LocaleCodeList.fromMap(Map<String, dynamic> map) {
return LocaleCodeList(
total: map['total'],
localeCodes: List<LocaleCode>.from(map['localeCodes'].map((p) => LocaleCode.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"localeCodes": localeCodes.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"localeCodes": localeCodes.map((p) => p.toMap()).toList(),
};
}
}
+115 -115
View File
@@ -2,142 +2,142 @@ part of '../../models.dart';
/// Log
class Log implements Model {
/// Event name.
final String event;
/// Event name.
final String event;
/// User ID.
final String userId;
/// User ID.
final String userId;
/// User Email.
final String userEmail;
/// User Email.
final String userEmail;
/// User Name.
final String userName;
/// User Name.
final String userName;
/// API mode when event triggered.
final String mode;
/// API mode when event triggered.
final String mode;
/// IP session in use when the session was created.
final String ip;
/// IP session in use when the session was created.
final String ip;
/// Log creation date in ISO 8601 format.
final String time;
/// Log creation date in ISO 8601 format.
final String time;
/// Operating system code name. View list of [available options](https://github.com/appwrite/appwrite/blob/master/docs/lists/os.json).
final String osCode;
/// Operating system code name. View list of [available options](https://github.com/appwrite/appwrite/blob/master/docs/lists/os.json).
final String osCode;
/// Operating system name.
final String osName;
/// Operating system name.
final String osName;
/// Operating system version.
final String osVersion;
/// Operating system version.
final String osVersion;
/// Client type.
final String clientType;
/// Client type.
final String clientType;
/// Client code name. View list of [available options](https://github.com/appwrite/appwrite/blob/master/docs/lists/clients.json).
final String clientCode;
/// Client code name. View list of [available options](https://github.com/appwrite/appwrite/blob/master/docs/lists/clients.json).
final String clientCode;
/// Client name.
final String clientName;
/// Client name.
final String clientName;
/// Client version.
final String clientVersion;
/// Client version.
final String clientVersion;
/// Client engine name.
final String clientEngine;
/// Client engine name.
final String clientEngine;
/// Client engine name.
final String clientEngineVersion;
/// Client engine name.
final String clientEngineVersion;
/// Device name.
final String deviceName;
/// Device name.
final String deviceName;
/// Device brand name.
final String deviceBrand;
/// Device brand name.
final String deviceBrand;
/// Device model name.
final String deviceModel;
/// Device model name.
final String deviceModel;
/// Country two-character ISO 3166-1 alpha code.
final String countryCode;
/// Country two-character ISO 3166-1 alpha code.
final String countryCode;
/// Country name.
final String countryName;
/// Country name.
final String countryName;
Log({
required this.event,
required this.userId,
required this.userEmail,
required this.userName,
required this.mode,
required this.ip,
required this.time,
required this.osCode,
required this.osName,
required this.osVersion,
required this.clientType,
required this.clientCode,
required this.clientName,
required this.clientVersion,
required this.clientEngine,
required this.clientEngineVersion,
required this.deviceName,
required this.deviceBrand,
required this.deviceModel,
required this.countryCode,
required this.countryName,
});
Log({
required this.event,
required this.userId,
required this.userEmail,
required this.userName,
required this.mode,
required this.ip,
required this.time,
required this.osCode,
required this.osName,
required this.osVersion,
required this.clientType,
required this.clientCode,
required this.clientName,
required this.clientVersion,
required this.clientEngine,
required this.clientEngineVersion,
required this.deviceName,
required this.deviceBrand,
required this.deviceModel,
required this.countryCode,
required this.countryName,
});
factory Log.fromMap(Map<String, dynamic> map) {
return Log(
event: map['event'].toString(),
userId: map['userId'].toString(),
userEmail: map['userEmail'].toString(),
userName: map['userName'].toString(),
mode: map['mode'].toString(),
ip: map['ip'].toString(),
time: map['time'].toString(),
osCode: map['osCode'].toString(),
osName: map['osName'].toString(),
osVersion: map['osVersion'].toString(),
clientType: map['clientType'].toString(),
clientCode: map['clientCode'].toString(),
clientName: map['clientName'].toString(),
clientVersion: map['clientVersion'].toString(),
clientEngine: map['clientEngine'].toString(),
clientEngineVersion: map['clientEngineVersion'].toString(),
deviceName: map['deviceName'].toString(),
deviceBrand: map['deviceBrand'].toString(),
deviceModel: map['deviceModel'].toString(),
countryCode: map['countryCode'].toString(),
countryName: map['countryName'].toString(),
);
}
factory Log.fromMap(Map<String, dynamic> map) {
return Log(
event: map['event'].toString(),
userId: map['userId'].toString(),
userEmail: map['userEmail'].toString(),
userName: map['userName'].toString(),
mode: map['mode'].toString(),
ip: map['ip'].toString(),
time: map['time'].toString(),
osCode: map['osCode'].toString(),
osName: map['osName'].toString(),
osVersion: map['osVersion'].toString(),
clientType: map['clientType'].toString(),
clientCode: map['clientCode'].toString(),
clientName: map['clientName'].toString(),
clientVersion: map['clientVersion'].toString(),
clientEngine: map['clientEngine'].toString(),
clientEngineVersion: map['clientEngineVersion'].toString(),
deviceName: map['deviceName'].toString(),
deviceBrand: map['deviceBrand'].toString(),
deviceModel: map['deviceModel'].toString(),
countryCode: map['countryCode'].toString(),
countryName: map['countryName'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"event": event,
"userId": userId,
"userEmail": userEmail,
"userName": userName,
"mode": mode,
"ip": ip,
"time": time,
"osCode": osCode,
"osName": osName,
"osVersion": osVersion,
"clientType": clientType,
"clientCode": clientCode,
"clientName": clientName,
"clientVersion": clientVersion,
"clientEngine": clientEngine,
"clientEngineVersion": clientEngineVersion,
"deviceName": deviceName,
"deviceBrand": deviceBrand,
"deviceModel": deviceModel,
"countryCode": countryCode,
"countryName": countryName,
};
}
Map<String, dynamic> toMap() {
return {
"event": event,
"userId": userId,
"userEmail": userEmail,
"userName": userName,
"mode": mode,
"ip": ip,
"time": time,
"osCode": osCode,
"osName": osName,
"osVersion": osVersion,
"clientType": clientType,
"clientCode": clientCode,
"clientName": clientName,
"clientVersion": clientVersion,
"clientEngine": clientEngine,
"clientEngineVersion": clientEngineVersion,
"deviceName": deviceName,
"deviceBrand": deviceBrand,
"deviceModel": deviceModel,
"countryCode": countryCode,
"countryName": countryName,
};
}
}
+20 -14
View File
@@ -2,22 +2,28 @@ part of '../../models.dart';
/// Logs List
class LogList implements Model {
/// Total number of logs documents that matched your query.
final int total;
/// Total number of logs documents that matched your query.
final int total;
/// List of logs.
final List<Log> logs;
/// List of logs.
final List<Log> logs;
LogList({required this.total, required this.logs});
LogList({
required this.total,
required this.logs,
});
factory LogList.fromMap(Map<String, dynamic> map) {
return LogList(
total: map['total'],
logs: List<Log>.from(map['logs'].map((p) => Log.fromMap(p))),
);
}
factory LogList.fromMap(Map<String, dynamic> map) {
return LogList(
total: map['total'],
logs: List<Log>.from(map['logs'].map((p) => Log.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {"total": total, "logs": logs.map((p) => p.toMap()).toList()};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"logs": logs.map((p) => p.toMap()).toList(),
};
}
}
+75 -75
View File
@@ -2,94 +2,94 @@ part of '../../models.dart';
/// Membership
class Membership implements Model {
/// Membership ID.
final String $id;
/// Membership ID.
final String $id;
/// Membership creation date in ISO 8601 format.
final String $createdAt;
/// Membership creation date in ISO 8601 format.
final String $createdAt;
/// Membership update date in ISO 8601 format.
final String $updatedAt;
/// Membership update date in ISO 8601 format.
final String $updatedAt;
/// User ID.
final String userId;
/// User ID.
final String userId;
/// User name. Hide this attribute by toggling membership privacy in the Console.
final String userName;
/// User name. Hide this attribute by toggling membership privacy in the Console.
final String userName;
/// User email address. Hide this attribute by toggling membership privacy in the Console.
final String userEmail;
/// User email address. Hide this attribute by toggling membership privacy in the Console.
final String userEmail;
/// Team ID.
final String teamId;
/// Team ID.
final String teamId;
/// Team name.
final String teamName;
/// Team name.
final String teamName;
/// Date, the user has been invited to join the team in ISO 8601 format.
final String invited;
/// Date, the user has been invited to join the team in ISO 8601 format.
final String invited;
/// Date, the user has accepted the invitation to join the team in ISO 8601 format.
final String joined;
/// Date, the user has accepted the invitation to join the team in ISO 8601 format.
final String joined;
/// User confirmation status, true if the user has joined the team or false otherwise.
final bool confirm;
/// User confirmation status, true if the user has joined the team or false otherwise.
final bool confirm;
/// Multi factor authentication status, true if the user has MFA enabled or false otherwise. Hide this attribute by toggling membership privacy in the Console.
final bool mfa;
/// Multi factor authentication status, true if the user has MFA enabled or false otherwise. Hide this attribute by toggling membership privacy in the Console.
final bool mfa;
/// User list of roles
final List<String> roles;
/// User list of roles
final List<String> roles;
Membership({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.userId,
required this.userName,
required this.userEmail,
required this.teamId,
required this.teamName,
required this.invited,
required this.joined,
required this.confirm,
required this.mfa,
required this.roles,
});
Membership({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.userId,
required this.userName,
required this.userEmail,
required this.teamId,
required this.teamName,
required this.invited,
required this.joined,
required this.confirm,
required this.mfa,
required this.roles,
});
factory Membership.fromMap(Map<String, dynamic> map) {
return Membership(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
userId: map['userId'].toString(),
userName: map['userName'].toString(),
userEmail: map['userEmail'].toString(),
teamId: map['teamId'].toString(),
teamName: map['teamName'].toString(),
invited: map['invited'].toString(),
joined: map['joined'].toString(),
confirm: map['confirm'],
mfa: map['mfa'],
roles: List.from(map['roles'] ?? []),
);
}
factory Membership.fromMap(Map<String, dynamic> map) {
return Membership(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
userId: map['userId'].toString(),
userName: map['userName'].toString(),
userEmail: map['userEmail'].toString(),
teamId: map['teamId'].toString(),
teamName: map['teamName'].toString(),
invited: map['invited'].toString(),
joined: map['joined'].toString(),
confirm: map['confirm'],
mfa: map['mfa'],
roles: List.from(map['roles'] ?? []),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"userId": userId,
"userName": userName,
"userEmail": userEmail,
"teamId": teamId,
"teamName": teamName,
"invited": invited,
"joined": joined,
"confirm": confirm,
"mfa": mfa,
"roles": roles,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"userId": userId,
"userName": userName,
"userEmail": userEmail,
"teamId": teamId,
"teamName": teamName,
"invited": invited,
"joined": joined,
"confirm": confirm,
"mfa": mfa,
"roles": roles,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Memberships List
class MembershipList implements Model {
/// Total number of memberships documents that matched your query.
final int total;
/// Total number of memberships documents that matched your query.
final int total;
/// List of memberships.
final List<Membership> memberships;
/// List of memberships.
final List<Membership> memberships;
MembershipList({required this.total, required this.memberships});
MembershipList({
required this.total,
required this.memberships,
});
factory MembershipList.fromMap(Map<String, dynamic> map) {
return MembershipList(
total: map['total'],
memberships: List<Membership>.from(
map['memberships'].map((p) => Membership.fromMap(p)),
),
);
}
factory MembershipList.fromMap(Map<String, dynamic> map) {
return MembershipList(
total: map['total'],
memberships: List<Membership>.from(map['memberships'].map((p) => Membership.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"memberships": memberships.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"memberships": memberships.map((p) => p.toMap()).toList(),
};
}
}
+30 -30
View File
@@ -2,40 +2,40 @@ part of '../../models.dart';
/// MFA Challenge
class MfaChallenge implements Model {
/// Token ID.
final String $id;
/// Token ID.
final String $id;
/// Token creation date in ISO 8601 format.
final String $createdAt;
/// Token creation date in ISO 8601 format.
final String $createdAt;
/// User ID.
final String userId;
/// User ID.
final String userId;
/// Token expiration date in ISO 8601 format.
final String expire;
/// Token expiration date in ISO 8601 format.
final String expire;
MfaChallenge({
required this.$id,
required this.$createdAt,
required this.userId,
required this.expire,
});
MfaChallenge({
required this.$id,
required this.$createdAt,
required this.userId,
required this.expire,
});
factory MfaChallenge.fromMap(Map<String, dynamic> map) {
return MfaChallenge(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
userId: map['userId'].toString(),
expire: map['expire'].toString(),
);
}
factory MfaChallenge.fromMap(Map<String, dynamic> map) {
return MfaChallenge(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
userId: map['userId'].toString(),
expire: map['expire'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"userId": userId,
"expire": expire,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"userId": userId,
"expire": expire,
};
}
}
+30 -30
View File
@@ -2,40 +2,40 @@ part of '../../models.dart';
/// MFAFactors
class MfaFactors implements Model {
/// Can TOTP be used for MFA challenge for this account.
final bool totp;
/// Can TOTP be used for MFA challenge for this account.
final bool totp;
/// Can phone (SMS) be used for MFA challenge for this account.
final bool phone;
/// Can phone (SMS) be used for MFA challenge for this account.
final bool phone;
/// Can email be used for MFA challenge for this account.
final bool email;
/// Can email be used for MFA challenge for this account.
final bool email;
/// Can recovery code be used for MFA challenge for this account.
final bool recoveryCode;
/// Can recovery code be used for MFA challenge for this account.
final bool recoveryCode;
MfaFactors({
required this.totp,
required this.phone,
required this.email,
required this.recoveryCode,
});
MfaFactors({
required this.totp,
required this.phone,
required this.email,
required this.recoveryCode,
});
factory MfaFactors.fromMap(Map<String, dynamic> map) {
return MfaFactors(
totp: map['totp'],
phone: map['phone'],
email: map['email'],
recoveryCode: map['recoveryCode'],
);
}
factory MfaFactors.fromMap(Map<String, dynamic> map) {
return MfaFactors(
totp: map['totp'],
phone: map['phone'],
email: map['email'],
recoveryCode: map['recoveryCode'],
);
}
Map<String, dynamic> toMap() {
return {
"totp": totp,
"phone": phone,
"email": email,
"recoveryCode": recoveryCode,
};
}
Map<String, dynamic> toMap() {
return {
"totp": totp,
"phone": phone,
"email": email,
"recoveryCode": recoveryCode,
};
}
}
+15 -11
View File
@@ -2,18 +2,22 @@ part of '../../models.dart';
/// MFA Recovery Codes
class MfaRecoveryCodes implements Model {
/// Recovery codes.
final List<String> recoveryCodes;
/// Recovery codes.
final List<String> recoveryCodes;
MfaRecoveryCodes({required this.recoveryCodes});
MfaRecoveryCodes({
required this.recoveryCodes,
});
factory MfaRecoveryCodes.fromMap(Map<String, dynamic> map) {
return MfaRecoveryCodes(
recoveryCodes: List.from(map['recoveryCodes'] ?? []),
);
}
factory MfaRecoveryCodes.fromMap(Map<String, dynamic> map) {
return MfaRecoveryCodes(
recoveryCodes: List.from(map['recoveryCodes'] ?? []),
);
}
Map<String, dynamic> toMap() {
return {"recoveryCodes": recoveryCodes};
}
Map<String, dynamic> toMap() {
return {
"recoveryCodes": recoveryCodes,
};
}
}
+20 -14
View File
@@ -2,22 +2,28 @@ part of '../../models.dart';
/// MFAType
class MfaType implements Model {
/// Secret token used for TOTP factor.
final String secret;
/// Secret token used for TOTP factor.
final String secret;
/// URI for authenticator apps.
final String uri;
/// URI for authenticator apps.
final String uri;
MfaType({required this.secret, required this.uri});
MfaType({
required this.secret,
required this.uri,
});
factory MfaType.fromMap(Map<String, dynamic> map) {
return MfaType(
secret: map['secret'].toString(),
uri: map['uri'].toString(),
);
}
factory MfaType.fromMap(Map<String, dynamic> map) {
return MfaType(
secret: map['secret'].toString(),
uri: map['uri'].toString(),
);
}
Map<String, dynamic> toMap() {
return {"secret": secret, "uri": uri};
}
Map<String, dynamic> toMap() {
return {
"secret": secret,
"uri": uri,
};
}
}
+1 -1
View File
@@ -2,4 +2,4 @@ part of '../../models.dart';
abstract class Model {
Map<String, dynamic> toMap();
}
}
+25 -25
View File
@@ -2,34 +2,34 @@ part of '../../models.dart';
/// Phone
class Phone implements Model {
/// Phone code.
final String code;
/// Phone code.
final String code;
/// Country two-character ISO 3166-1 alpha code.
final String countryCode;
/// Country two-character ISO 3166-1 alpha code.
final String countryCode;
/// Country name.
final String countryName;
/// Country name.
final String countryName;
Phone({
required this.code,
required this.countryCode,
required this.countryName,
});
Phone({
required this.code,
required this.countryCode,
required this.countryName,
});
factory Phone.fromMap(Map<String, dynamic> map) {
return Phone(
code: map['code'].toString(),
countryCode: map['countryCode'].toString(),
countryName: map['countryName'].toString(),
);
}
factory Phone.fromMap(Map<String, dynamic> map) {
return Phone(
code: map['code'].toString(),
countryCode: map['countryCode'].toString(),
countryName: map['countryName'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"code": code,
"countryCode": countryCode,
"countryName": countryName,
};
}
Map<String, dynamic> toMap() {
return {
"code": code,
"countryCode": countryCode,
"countryName": countryName,
};
}
}
+20 -14
View File
@@ -2,22 +2,28 @@ part of '../../models.dart';
/// Phones List
class PhoneList implements Model {
/// Total number of phones documents that matched your query.
final int total;
/// Total number of phones documents that matched your query.
final int total;
/// List of phones.
final List<Phone> phones;
/// List of phones.
final List<Phone> phones;
PhoneList({required this.total, required this.phones});
PhoneList({
required this.total,
required this.phones,
});
factory PhoneList.fromMap(Map<String, dynamic> map) {
return PhoneList(
total: map['total'],
phones: List<Phone>.from(map['phones'].map((p) => Phone.fromMap(p))),
);
}
factory PhoneList.fromMap(Map<String, dynamic> map) {
return PhoneList(
total: map['total'],
phones: List<Phone>.from(map['phones'].map((p) => Phone.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {"total": total, "phones": phones.map((p) => p.toMap()).toList()};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"phones": phones.map((p) => p.toMap()).toList(),
};
}
}
+15 -9
View File
@@ -2,17 +2,23 @@ part of '../../models.dart';
/// Preferences
class Preferences implements Model {
final Map<String, dynamic> data;
final Map<String, dynamic> data;
Preferences({required this.data});
Preferences({
required this.data,
});
factory Preferences.fromMap(Map<String, dynamic> map) {
return Preferences(data: map);
}
factory Preferences.fromMap(Map<String, dynamic> map) {
return Preferences(
data: map,
);
}
Map<String, dynamic> toMap() {
return {"data": data};
}
Map<String, dynamic> toMap() {
return {
"data": data,
};
}
T convertTo<T>(T Function(Map) fromJson) => fromJson(data);
T convertTo<T>(T Function(Map<String, dynamic>) fromJson) => fromJson(data);
}
+155 -155
View File
@@ -2,190 +2,190 @@ part of '../../models.dart';
/// Session
class Session implements Model {
/// Session ID.
final String $id;
/// Session ID.
final String $id;
/// Session creation date in ISO 8601 format.
final String $createdAt;
/// Session creation date in ISO 8601 format.
final String $createdAt;
/// Session update date in ISO 8601 format.
final String $updatedAt;
/// Session update date in ISO 8601 format.
final String $updatedAt;
/// User ID.
final String userId;
/// User ID.
final String userId;
/// Session expiration date in ISO 8601 format.
final String expire;
/// Session expiration date in ISO 8601 format.
final String expire;
/// Session Provider.
final String provider;
/// Session Provider.
final String provider;
/// Session Provider User ID.
final String providerUid;
/// Session Provider User ID.
final String providerUid;
/// Session Provider Access Token.
final String providerAccessToken;
/// Session Provider Access Token.
final String providerAccessToken;
/// The date of when the access token expires in ISO 8601 format.
final String providerAccessTokenExpiry;
/// The date of when the access token expires in ISO 8601 format.
final String providerAccessTokenExpiry;
/// Session Provider Refresh Token.
final String providerRefreshToken;
/// Session Provider Refresh Token.
final String providerRefreshToken;
/// IP in use when the session was created.
final String ip;
/// IP in use when the session was created.
final String ip;
/// Operating system code name. View list of [available options](https://github.com/appwrite/appwrite/blob/master/docs/lists/os.json).
final String osCode;
/// Operating system code name. View list of [available options](https://github.com/appwrite/appwrite/blob/master/docs/lists/os.json).
final String osCode;
/// Operating system name.
final String osName;
/// Operating system name.
final String osName;
/// Operating system version.
final String osVersion;
/// Operating system version.
final String osVersion;
/// Client type.
final String clientType;
/// Client type.
final String clientType;
/// Client code name. View list of [available options](https://github.com/appwrite/appwrite/blob/master/docs/lists/clients.json).
final String clientCode;
/// Client code name. View list of [available options](https://github.com/appwrite/appwrite/blob/master/docs/lists/clients.json).
final String clientCode;
/// Client name.
final String clientName;
/// Client name.
final String clientName;
/// Client version.
final String clientVersion;
/// Client version.
final String clientVersion;
/// Client engine name.
final String clientEngine;
/// Client engine name.
final String clientEngine;
/// Client engine name.
final String clientEngineVersion;
/// Client engine name.
final String clientEngineVersion;
/// Device name.
final String deviceName;
/// Device name.
final String deviceName;
/// Device brand name.
final String deviceBrand;
/// Device brand name.
final String deviceBrand;
/// Device model name.
final String deviceModel;
/// Device model name.
final String deviceModel;
/// Country two-character ISO 3166-1 alpha code.
final String countryCode;
/// Country two-character ISO 3166-1 alpha code.
final String countryCode;
/// Country name.
final String countryName;
/// Country name.
final String countryName;
/// Returns true if this the current user session.
final bool current;
/// Returns true if this the current user session.
final bool current;
/// Returns a list of active session factors.
final List<String> factors;
/// Returns a list of active session factors.
final List<String> factors;
/// Secret used to authenticate the user. Only included if the request was made with an API key
final String secret;
/// Secret used to authenticate the user. Only included if the request was made with an API key
final String secret;
/// Most recent date in ISO 8601 format when the session successfully passed MFA challenge.
final String mfaUpdatedAt;
/// Most recent date in ISO 8601 format when the session successfully passed MFA challenge.
final String mfaUpdatedAt;
Session({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.userId,
required this.expire,
required this.provider,
required this.providerUid,
required this.providerAccessToken,
required this.providerAccessTokenExpiry,
required this.providerRefreshToken,
required this.ip,
required this.osCode,
required this.osName,
required this.osVersion,
required this.clientType,
required this.clientCode,
required this.clientName,
required this.clientVersion,
required this.clientEngine,
required this.clientEngineVersion,
required this.deviceName,
required this.deviceBrand,
required this.deviceModel,
required this.countryCode,
required this.countryName,
required this.current,
required this.factors,
required this.secret,
required this.mfaUpdatedAt,
});
Session({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.userId,
required this.expire,
required this.provider,
required this.providerUid,
required this.providerAccessToken,
required this.providerAccessTokenExpiry,
required this.providerRefreshToken,
required this.ip,
required this.osCode,
required this.osName,
required this.osVersion,
required this.clientType,
required this.clientCode,
required this.clientName,
required this.clientVersion,
required this.clientEngine,
required this.clientEngineVersion,
required this.deviceName,
required this.deviceBrand,
required this.deviceModel,
required this.countryCode,
required this.countryName,
required this.current,
required this.factors,
required this.secret,
required this.mfaUpdatedAt,
});
factory Session.fromMap(Map<String, dynamic> map) {
return Session(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
userId: map['userId'].toString(),
expire: map['expire'].toString(),
provider: map['provider'].toString(),
providerUid: map['providerUid'].toString(),
providerAccessToken: map['providerAccessToken'].toString(),
providerAccessTokenExpiry: map['providerAccessTokenExpiry'].toString(),
providerRefreshToken: map['providerRefreshToken'].toString(),
ip: map['ip'].toString(),
osCode: map['osCode'].toString(),
osName: map['osName'].toString(),
osVersion: map['osVersion'].toString(),
clientType: map['clientType'].toString(),
clientCode: map['clientCode'].toString(),
clientName: map['clientName'].toString(),
clientVersion: map['clientVersion'].toString(),
clientEngine: map['clientEngine'].toString(),
clientEngineVersion: map['clientEngineVersion'].toString(),
deviceName: map['deviceName'].toString(),
deviceBrand: map['deviceBrand'].toString(),
deviceModel: map['deviceModel'].toString(),
countryCode: map['countryCode'].toString(),
countryName: map['countryName'].toString(),
current: map['current'],
factors: List.from(map['factors'] ?? []),
secret: map['secret'].toString(),
mfaUpdatedAt: map['mfaUpdatedAt'].toString(),
);
}
factory Session.fromMap(Map<String, dynamic> map) {
return Session(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
userId: map['userId'].toString(),
expire: map['expire'].toString(),
provider: map['provider'].toString(),
providerUid: map['providerUid'].toString(),
providerAccessToken: map['providerAccessToken'].toString(),
providerAccessTokenExpiry: map['providerAccessTokenExpiry'].toString(),
providerRefreshToken: map['providerRefreshToken'].toString(),
ip: map['ip'].toString(),
osCode: map['osCode'].toString(),
osName: map['osName'].toString(),
osVersion: map['osVersion'].toString(),
clientType: map['clientType'].toString(),
clientCode: map['clientCode'].toString(),
clientName: map['clientName'].toString(),
clientVersion: map['clientVersion'].toString(),
clientEngine: map['clientEngine'].toString(),
clientEngineVersion: map['clientEngineVersion'].toString(),
deviceName: map['deviceName'].toString(),
deviceBrand: map['deviceBrand'].toString(),
deviceModel: map['deviceModel'].toString(),
countryCode: map['countryCode'].toString(),
countryName: map['countryName'].toString(),
current: map['current'],
factors: List.from(map['factors'] ?? []),
secret: map['secret'].toString(),
mfaUpdatedAt: map['mfaUpdatedAt'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"userId": userId,
"expire": expire,
"provider": provider,
"providerUid": providerUid,
"providerAccessToken": providerAccessToken,
"providerAccessTokenExpiry": providerAccessTokenExpiry,
"providerRefreshToken": providerRefreshToken,
"ip": ip,
"osCode": osCode,
"osName": osName,
"osVersion": osVersion,
"clientType": clientType,
"clientCode": clientCode,
"clientName": clientName,
"clientVersion": clientVersion,
"clientEngine": clientEngine,
"clientEngineVersion": clientEngineVersion,
"deviceName": deviceName,
"deviceBrand": deviceBrand,
"deviceModel": deviceModel,
"countryCode": countryCode,
"countryName": countryName,
"current": current,
"factors": factors,
"secret": secret,
"mfaUpdatedAt": mfaUpdatedAt,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"userId": userId,
"expire": expire,
"provider": provider,
"providerUid": providerUid,
"providerAccessToken": providerAccessToken,
"providerAccessTokenExpiry": providerAccessTokenExpiry,
"providerRefreshToken": providerRefreshToken,
"ip": ip,
"osCode": osCode,
"osName": osName,
"osVersion": osVersion,
"clientType": clientType,
"clientCode": clientCode,
"clientName": clientName,
"clientVersion": clientVersion,
"clientEngine": clientEngine,
"clientEngineVersion": clientEngineVersion,
"deviceName": deviceName,
"deviceBrand": deviceBrand,
"deviceModel": deviceModel,
"countryCode": countryCode,
"countryName": countryName,
"current": current,
"factors": factors,
"secret": secret,
"mfaUpdatedAt": mfaUpdatedAt,
};
}
}
+20 -19
View File
@@ -2,27 +2,28 @@ part of '../../models.dart';
/// Sessions List
class SessionList implements Model {
/// Total number of sessions documents that matched your query.
final int total;
/// Total number of sessions documents that matched your query.
final int total;
/// List of sessions.
final List<Session> sessions;
/// List of sessions.
final List<Session> sessions;
SessionList({required this.total, required this.sessions});
SessionList({
required this.total,
required this.sessions,
});
factory SessionList.fromMap(Map<String, dynamic> map) {
return SessionList(
total: map['total'],
sessions: List<Session>.from(
map['sessions'].map((p) => Session.fromMap(p)),
),
);
}
factory SessionList.fromMap(Map<String, dynamic> map) {
return SessionList(
total: map['total'],
sessions: List<Session>.from(map['sessions'].map((p) => Session.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {
"total": total,
"sessions": sessions.map((p) => p.toMap()).toList(),
};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"sessions": sessions.map((p) => p.toMap()).toList(),
};
}
}
+55 -55
View File
@@ -2,70 +2,70 @@ part of '../../models.dart';
/// Subscriber
class Subscriber implements Model {
/// Subscriber ID.
final String $id;
/// Subscriber ID.
final String $id;
/// Subscriber creation time in ISO 8601 format.
final String $createdAt;
/// Subscriber creation time in ISO 8601 format.
final String $createdAt;
/// Subscriber update date in ISO 8601 format.
final String $updatedAt;
/// Subscriber update date in ISO 8601 format.
final String $updatedAt;
/// Target ID.
final String targetId;
/// Target ID.
final String targetId;
/// Target.
final Target target;
/// Target.
final Target target;
/// Topic ID.
final String userId;
/// Topic ID.
final String userId;
/// User Name.
final String userName;
/// User Name.
final String userName;
/// Topic ID.
final String topicId;
/// Topic ID.
final String topicId;
/// The target provider type. Can be one of the following: `email`, `sms` or `push`.
final String providerType;
/// The target provider type. Can be one of the following: `email`, `sms` or `push`.
final String providerType;
Subscriber({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.targetId,
required this.target,
required this.userId,
required this.userName,
required this.topicId,
required this.providerType,
});
Subscriber({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.targetId,
required this.target,
required this.userId,
required this.userName,
required this.topicId,
required this.providerType,
});
factory Subscriber.fromMap(Map<String, dynamic> map) {
return Subscriber(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
targetId: map['targetId'].toString(),
target: Target.fromMap(map['target']),
userId: map['userId'].toString(),
userName: map['userName'].toString(),
topicId: map['topicId'].toString(),
providerType: map['providerType'].toString(),
);
}
factory Subscriber.fromMap(Map<String, dynamic> map) {
return Subscriber(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
targetId: map['targetId'].toString(),
target: Target.fromMap(map['target']),
userId: map['userId'].toString(),
userName: map['userName'].toString(),
topicId: map['topicId'].toString(),
providerType: map['providerType'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"targetId": targetId,
"target": target.toMap(),
"userId": userId,
"userName": userName,
"topicId": topicId,
"providerType": providerType,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"targetId": targetId,
"target": target.toMap(),
"userId": userId,
"userName": userName,
"topicId": topicId,
"providerType": providerType,
};
}
}
+55 -55
View File
@@ -2,70 +2,70 @@ part of '../../models.dart';
/// Target
class Target implements Model {
/// Target ID.
final String $id;
/// Target ID.
final String $id;
/// Target creation time in ISO 8601 format.
final String $createdAt;
/// Target creation time in ISO 8601 format.
final String $createdAt;
/// Target update date in ISO 8601 format.
final String $updatedAt;
/// Target update date in ISO 8601 format.
final String $updatedAt;
/// Target Name.
final String name;
/// Target Name.
final String name;
/// User ID.
final String userId;
/// User ID.
final String userId;
/// Provider ID.
final String? providerId;
/// Provider ID.
final String? providerId;
/// The target provider type. Can be one of the following: `email`, `sms` or `push`.
final String providerType;
/// The target provider type. Can be one of the following: `email`, `sms` or `push`.
final String providerType;
/// The target identifier.
final String identifier;
/// The target identifier.
final String identifier;
/// Is the target expired.
final bool expired;
/// Is the target expired.
final bool expired;
Target({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.name,
required this.userId,
this.providerId,
required this.providerType,
required this.identifier,
required this.expired,
});
Target({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.name,
required this.userId,
this.providerId,
required this.providerType,
required this.identifier,
required this.expired,
});
factory Target.fromMap(Map<String, dynamic> map) {
return Target(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
name: map['name'].toString(),
userId: map['userId'].toString(),
providerId: map['providerId']?.toString(),
providerType: map['providerType'].toString(),
identifier: map['identifier'].toString(),
expired: map['expired'],
);
}
factory Target.fromMap(Map<String, dynamic> map) {
return Target(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
name: map['name'].toString(),
userId: map['userId'].toString(),
providerId: map['providerId']?.toString(),
providerType: map['providerType'].toString(),
identifier: map['identifier'].toString(),
expired: map['expired'],
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"name": name,
"userId": userId,
"providerId": providerId,
"providerType": providerType,
"identifier": identifier,
"expired": expired,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"name": name,
"userId": userId,
"providerId": providerId,
"providerType": providerType,
"identifier": identifier,
"expired": expired,
};
}
}
+40 -40
View File
@@ -2,52 +2,52 @@ part of '../../models.dart';
/// Team
class Team implements Model {
/// Team ID.
final String $id;
/// Team ID.
final String $id;
/// Team creation date in ISO 8601 format.
final String $createdAt;
/// Team creation date in ISO 8601 format.
final String $createdAt;
/// Team update date in ISO 8601 format.
final String $updatedAt;
/// Team update date in ISO 8601 format.
final String $updatedAt;
/// Team name.
final String name;
/// Team name.
final String name;
/// Total number of team members.
final int total;
/// Total number of team members.
final int total;
/// Team preferences as a key-value object
final Preferences prefs;
/// Team preferences as a key-value object
final Preferences prefs;
Team({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.name,
required this.total,
required this.prefs,
});
Team({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.name,
required this.total,
required this.prefs,
});
factory Team.fromMap(Map<String, dynamic> map) {
return Team(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
name: map['name'].toString(),
total: map['total'],
prefs: Preferences.fromMap(map['prefs']),
);
}
factory Team.fromMap(Map<String, dynamic> map) {
return Team(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
name: map['name'].toString(),
total: map['total'],
prefs: Preferences.fromMap(map['prefs']),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"name": name,
"total": total,
"prefs": prefs.toMap(),
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"name": name,
"total": total,
"prefs": prefs.toMap(),
};
}
}
+20 -14
View File
@@ -2,22 +2,28 @@ part of '../../models.dart';
/// Teams List
class TeamList implements Model {
/// Total number of teams documents that matched your query.
final int total;
/// Total number of teams documents that matched your query.
final int total;
/// List of teams.
final List<Team> teams;
/// List of teams.
final List<Team> teams;
TeamList({required this.total, required this.teams});
TeamList({
required this.total,
required this.teams,
});
factory TeamList.fromMap(Map<String, dynamic> map) {
return TeamList(
total: map['total'],
teams: List<Team>.from(map['teams'].map((p) => Team.fromMap(p))),
);
}
factory TeamList.fromMap(Map<String, dynamic> map) {
return TeamList(
total: map['total'],
teams: List<Team>.from(map['teams'].map((p) => Team.fromMap(p))),
);
}
Map<String, dynamic> toMap() {
return {"total": total, "teams": teams.map((p) => p.toMap()).toList()};
}
Map<String, dynamic> toMap() {
return {
"total": total,
"teams": teams.map((p) => p.toMap()).toList(),
};
}
}
+40 -40
View File
@@ -2,52 +2,52 @@ part of '../../models.dart';
/// Token
class Token implements Model {
/// Token ID.
final String $id;
/// Token ID.
final String $id;
/// Token creation date in ISO 8601 format.
final String $createdAt;
/// Token creation date in ISO 8601 format.
final String $createdAt;
/// User ID.
final String userId;
/// User ID.
final String userId;
/// Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.
final String secret;
/// Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.
final String secret;
/// Token expiration date in ISO 8601 format.
final String expire;
/// Token expiration date in ISO 8601 format.
final String expire;
/// Security phrase of a token. Empty if security phrase was not requested when creating a token. It includes randomly generated phrase which is also sent in the external resource such as email.
final String phrase;
/// Security phrase of a token. Empty if security phrase was not requested when creating a token. It includes randomly generated phrase which is also sent in the external resource such as email.
final String phrase;
Token({
required this.$id,
required this.$createdAt,
required this.userId,
required this.secret,
required this.expire,
required this.phrase,
});
Token({
required this.$id,
required this.$createdAt,
required this.userId,
required this.secret,
required this.expire,
required this.phrase,
});
factory Token.fromMap(Map<String, dynamic> map) {
return Token(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
userId: map['userId'].toString(),
secret: map['secret'].toString(),
expire: map['expire'].toString(),
phrase: map['phrase'].toString(),
);
}
factory Token.fromMap(Map<String, dynamic> map) {
return Token(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
userId: map['userId'].toString(),
secret: map['secret'].toString(),
expire: map['expire'].toString(),
phrase: map['phrase'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"userId": userId,
"secret": secret,
"expire": expire,
"phrase": phrase,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"userId": userId,
"secret": secret,
"expire": expire,
"phrase": phrase,
};
}
}
+105 -105
View File
@@ -2,130 +2,130 @@ part of '../../models.dart';
/// User
class User implements Model {
/// User ID.
final String $id;
/// User ID.
final String $id;
/// User creation date in ISO 8601 format.
final String $createdAt;
/// User creation date in ISO 8601 format.
final String $createdAt;
/// User update date in ISO 8601 format.
final String $updatedAt;
/// User update date in ISO 8601 format.
final String $updatedAt;
/// User name.
final String name;
/// User name.
final String name;
/// Hashed user password.
final String? password;
/// Hashed user password.
final String? password;
/// Password hashing algorithm.
final String? hash;
/// Password hashing algorithm.
final String? hash;
/// Password hashing algorithm configuration.
final Map? hashOptions;
/// Password hashing algorithm configuration.
final Map? hashOptions;
/// User registration date in ISO 8601 format.
final String registration;
/// User registration date in ISO 8601 format.
final String registration;
/// User status. Pass `true` for enabled and `false` for disabled.
final bool status;
/// User status. Pass `true` for enabled and `false` for disabled.
final bool status;
/// Labels for the user.
final List<String> labels;
/// Labels for the user.
final List<String> labels;
/// Password update time in ISO 8601 format.
final String passwordUpdate;
/// Password update time in ISO 8601 format.
final String passwordUpdate;
/// User email address.
final String email;
/// User email address.
final String email;
/// User phone number in E.164 format.
final String phone;
/// User phone number in E.164 format.
final String phone;
/// Email verification status.
final bool emailVerification;
/// Email verification status.
final bool emailVerification;
/// Phone verification status.
final bool phoneVerification;
/// Phone verification status.
final bool phoneVerification;
/// Multi factor authentication status.
final bool mfa;
/// Multi factor authentication status.
final bool mfa;
/// User preferences as a key-value object
final Preferences prefs;
/// User preferences as a key-value object
final Preferences prefs;
/// A user-owned message receiver. A single user may have multiple e.g. emails, phones, and a browser. Each target is registered with a single provider.
final List<Target> targets;
/// A user-owned message receiver. A single user may have multiple e.g. emails, phones, and a browser. Each target is registered with a single provider.
final List<Target> targets;
/// Most recent access date in ISO 8601 format. This attribute is only updated again after 24 hours.
final String accessedAt;
/// Most recent access date in ISO 8601 format. This attribute is only updated again after 24 hours.
final String accessedAt;
User({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.name,
this.password,
this.hash,
this.hashOptions,
required this.registration,
required this.status,
required this.labels,
required this.passwordUpdate,
required this.email,
required this.phone,
required this.emailVerification,
required this.phoneVerification,
required this.mfa,
required this.prefs,
required this.targets,
required this.accessedAt,
});
User({
required this.$id,
required this.$createdAt,
required this.$updatedAt,
required this.name,
this.password,
this.hash,
this.hashOptions,
required this.registration,
required this.status,
required this.labels,
required this.passwordUpdate,
required this.email,
required this.phone,
required this.emailVerification,
required this.phoneVerification,
required this.mfa,
required this.prefs,
required this.targets,
required this.accessedAt,
});
factory User.fromMap(Map<String, dynamic> map) {
return User(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
name: map['name'].toString(),
password: map['password']?.toString(),
hash: map['hash']?.toString(),
hashOptions: map['hashOptions'],
registration: map['registration'].toString(),
status: map['status'],
labels: List.from(map['labels'] ?? []),
passwordUpdate: map['passwordUpdate'].toString(),
email: map['email'].toString(),
phone: map['phone'].toString(),
emailVerification: map['emailVerification'],
phoneVerification: map['phoneVerification'],
mfa: map['mfa'],
prefs: Preferences.fromMap(map['prefs']),
targets: List<Target>.from(map['targets'].map((p) => Target.fromMap(p))),
accessedAt: map['accessedAt'].toString(),
);
}
factory User.fromMap(Map<String, dynamic> map) {
return User(
$id: map['\$id'].toString(),
$createdAt: map['\$createdAt'].toString(),
$updatedAt: map['\$updatedAt'].toString(),
name: map['name'].toString(),
password: map['password']?.toString(),
hash: map['hash']?.toString(),
hashOptions: map['hashOptions'],
registration: map['registration'].toString(),
status: map['status'],
labels: List.from(map['labels'] ?? []),
passwordUpdate: map['passwordUpdate'].toString(),
email: map['email'].toString(),
phone: map['phone'].toString(),
emailVerification: map['emailVerification'],
phoneVerification: map['phoneVerification'],
mfa: map['mfa'],
prefs: Preferences.fromMap(map['prefs']),
targets: List<Target>.from(map['targets'].map((p) => Target.fromMap(p))),
accessedAt: map['accessedAt'].toString(),
);
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"name": name,
"password": password,
"hash": hash,
"hashOptions": hashOptions,
"registration": registration,
"status": status,
"labels": labels,
"passwordUpdate": passwordUpdate,
"email": email,
"phone": phone,
"emailVerification": emailVerification,
"phoneVerification": phoneVerification,
"mfa": mfa,
"prefs": prefs.toMap(),
"targets": targets.map((p) => p.toMap()).toList(),
"accessedAt": accessedAt,
};
}
Map<String, dynamic> toMap() {
return {
"\$id": $id,
"\$createdAt": $createdAt,
"\$updatedAt": $updatedAt,
"name": name,
"password": password,
"hash": hash,
"hashOptions": hashOptions,
"registration": registration,
"status": status,
"labels": labels,
"passwordUpdate": passwordUpdate,
"email": email,
"phone": phone,
"emailVerification": emailVerification,
"phoneVerification": phoneVerification,
"mfa": mfa,
"prefs": prefs.toMap(),
"targets": targets.map((p) => p.toMap()).toList(),
"accessedAt": accessedAt,
};
}
}
+3 -3
View File
@@ -10,9 +10,9 @@ abstract class Realtime extends Service {
/// Initializes a [Realtime] service
factory Realtime(Client client) => createRealtime(client);
/// Subscribes to Appwrite events and returns a `RealtimeSubscription` object, which can be used
/// Subscribes to Appwrite events and returns a `RealtimeSubscription` object, which can be used
/// to listen to events on the channels in realtime and to close the subscription to stop listening.
///
///
/// Possible channels are:
/// - account
/// - collections
@@ -41,7 +41,7 @@ abstract class Realtime extends Service {
///
/// subscription.close();
/// ```
///
///
RealtimeSubscription subscribe(List<String> channels);
/// The [close code](https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5) set when the WebSocket connection is closed.
+9 -13
View File
@@ -15,6 +15,7 @@ import 'client_io.dart';
RealtimeBase createRealtime(Client client) => RealtimeIO(client);
class RealtimeIO extends RealtimeBase with RealtimeMixin {
RealtimeIO(Client client) {
this.client = client;
getWebSocket = _getWebSocket;
@@ -22,8 +23,7 @@ class RealtimeIO extends RealtimeBase with RealtimeMixin {
Future<WebSocketChannel> _getWebSocket(Uri uri) async {
Map<String, String>? headers;
while (!(client as ClientIO).initialized &&
(client as ClientIO).initProgress) {
while (!(client as ClientIO).initialized && (client as ClientIO).initProgress) {
await Future.delayed(Duration(milliseconds: 10));
}
if (!(client as ClientIO).initialized) {
@@ -32,11 +32,9 @@ class RealtimeIO extends RealtimeBase with RealtimeMixin {
final cookies = await (client as ClientIO).cookieJar.loadForRequest(uri);
headers = {HttpHeaders.cookieHeader: CookieManager.getCookies(cookies)};
final _websok = IOWebSocketChannel(
(client as ClientIO).selfSigned
? await _connectForSelfSignedCert(uri, headers)
: await WebSocket.connect(uri.toString(), headers: headers),
);
final _websok = IOWebSocketChannel((client as ClientIO).selfSigned
? await _connectForSelfSignedCert(uri, headers)
: await WebSocket.connect(uri.toString(), headers: headers));
return _websok;
}
@@ -52,18 +50,16 @@ class RealtimeIO extends RealtimeBase with RealtimeMixin {
// https://github.com/jonataslaw/getsocket/blob/f25b3a264d8cc6f82458c949b86d286cd0343792/lib/src/io.dart#L104
// and from official dart sdk websocket_impl.dart connect method
Future<WebSocket> _connectForSelfSignedCert(
Uri uri,
Map<String, dynamic> headers,
) async {
Uri uri, Map<String, dynamic> headers) async {
try {
var r = Random();
var key = base64.encode(List<int>.generate(16, (_) => r.nextInt(255)));
var client = HttpClient(context: SecurityContext());
client.badCertificateCallback =
(X509Certificate cert, String host, int port) {
debugPrint('AppwriteRealtime: Allow self-signed certificate');
return true;
};
debugPrint('AppwriteRealtime: Allow self-signed certificate');
return true;
};
uri = Uri(
scheme: uri.scheme == 'wss' ? 'https' : 'http',
+1 -1
View File
@@ -4,7 +4,7 @@ import 'package:flutter/foundation.dart';
/// Realtime Message
class RealtimeMessage {
/// All permutations of the system event that triggered this message
///
///
/// The first event in the list is the most specfic event without wildcards.
final List<String> events;
+69 -74
View File
@@ -42,7 +42,9 @@ mixin RealtimeMixin {
_stopHeartbeat();
_heartbeatTimer = Timer.periodic(Duration(seconds: 20), (_) {
if (_websok != null) {
_websok!.sink.add(jsonEncode({"type": "ping"}));
_websok!.sink.add(jsonEncode({
"type": "ping"
}));
}
});
}
@@ -53,7 +55,7 @@ mixin RealtimeMixin {
}
_createSocket() async {
if (_creatingSocket || _channels.isEmpty) return;
if(_creatingSocket || _channels.isEmpty) return;
_creatingSocket = true;
final uri = _prepareUri();
try {
@@ -73,57 +75,53 @@ mixin RealtimeMixin {
}
debugPrint('subscription: $_lastUrl');
_retries = 0;
_websocketSubscription = _websok?.stream.listen(
(response) {
final data = RealtimeResponse.fromJson(response);
switch (data.type) {
case 'error':
handleError(data);
break;
case 'connected':
// channels, user?
final message = RealtimeResponseConnected.fromMap(data.data);
if (message.user.isEmpty) {
// send fallback cookie if exists
final cookie = getFallbackCookie?.call();
if (cookie != null) {
_websok?.sink.add(
jsonEncode({
"type": "authentication",
"data": {"session": cookie},
}),
);
_websocketSubscription = _websok?.stream.listen((response) {
final data = RealtimeResponse.fromJson(response);
switch (data.type) {
case 'error':
handleError(data);
break;
case 'connected':
// channels, user?
final message = RealtimeResponseConnected.fromMap(data.data);
if (message.user.isEmpty) {
// send fallback cookie if exists
final cookie = getFallbackCookie?.call();
if (cookie != null) {
_websok?.sink.add(jsonEncode({
"type": "authentication",
"data": {
"session": cookie,
},
}));
}
}
_startHeartbeat(); // Start heartbeat after successful connection
break;
case 'pong':
debugPrint('Received heartbeat response from realtime server');
break;
case 'event':
final message = RealtimeMessage.fromMap(data.data);
for (var subscription in _subscriptions.values) {
for (var channel in message.channels) {
if (subscription.channels.contains(channel)) {
subscription.controller.add(message);
}
}
_startHeartbeat(); // Start heartbeat after successful connection
break;
case 'pong':
debugPrint('Received heartbeat response from realtime server');
break;
case 'event':
final message = RealtimeMessage.fromMap(data.data);
for (var subscription in _subscriptions.values) {
for (var channel in message.channels) {
if (subscription.channels.contains(channel)) {
subscription.controller.add(message);
}
}
}
break;
}
},
onDone: () {
_stopHeartbeat();
_retry();
},
onError: (err, stack) {
_stopHeartbeat();
for (var subscription in _subscriptions.values) {
subscription.controller.addError(err, stack);
}
_retry();
},
);
}
break;
}
}, onDone: () {
_stopHeartbeat();
_retry();
}, onError: (err, stack) {
_stopHeartbeat();
for (var subscription in _subscriptions.values) {
subscription.controller.addError(err, stack);
}
_retry();
});
} catch (e) {
if (e is AppwriteException) {
rethrow;
@@ -149,17 +147,16 @@ mixin RealtimeMixin {
return _retries < 5
? 1
: _retries < 15
? 5
: _retries < 100
? 10
: 60;
? 5
: _retries < 100
? 10
: 60;
}
Uri _prepareUri() {
if (client.endPointRealtime == null) {
throw AppwriteException(
"Please set endPointRealtime to connect to realtime server",
);
"Please set endPointRealtime to connect to realtime server");
}
var uri = Uri.parse(client.endPointRealtime!);
return Uri(
@@ -180,29 +177,27 @@ mixin RealtimeMixin {
Future.delayed(Duration.zero, () => _createSocket());
int id = DateTime.now().microsecondsSinceEpoch;
RealtimeSubscription subscription = RealtimeSubscription(
controller: controller,
channels: channels,
close: () async {
_subscriptions.remove(id);
controller.close();
_cleanup(channels);
controller: controller,
channels: channels,
close: () async {
_subscriptions.remove(id);
controller.close();
_cleanup(channels);
if (_channels.isNotEmpty) {
await Future.delayed(Duration.zero, () => _createSocket());
} else {
await _closeConnection();
}
},
);
if (_channels.isNotEmpty) {
await Future.delayed(Duration.zero, () => _createSocket());
} else {
await _closeConnection();
}
});
_subscriptions[id] = subscription;
return subscription;
}
void _cleanup(List<String> channels) {
for (var channel in channels) {
bool found = _subscriptions.values.any(
(subscription) => subscription.channels.contains(channel),
);
bool found = _subscriptions.values
.any((subscription) => subscription.channels.contains(channel));
if (!found) {
_channels.remove(channel);
}
@@ -216,4 +211,4 @@ mixin RealtimeMixin {
_retry();
}
}
}
}
+21 -9
View File
@@ -4,14 +4,27 @@ import 'package:flutter/foundation.dart';
class RealtimeResponse {
final String type; // error, event, connected, response
final Map<String, dynamic> data;
RealtimeResponse({required this.type, required this.data});
RealtimeResponse({
required this.type,
required this.data,
});
RealtimeResponse copyWith({String? type, Map<String, dynamic>? data}) {
return RealtimeResponse(type: type ?? this.type, data: data ?? this.data);
RealtimeResponse copyWith({
String? type,
Map<String, dynamic>? data,
}) {
return RealtimeResponse(
type: type ?? this.type,
data: data ?? this.data,
);
}
Map<String, dynamic> toMap() {
return {'type': type, 'data': data};
return {
'type': type,
'data': data,
};
}
factory RealtimeResponse.fromMap(Map<String, dynamic> map) {
@@ -23,8 +36,7 @@ class RealtimeResponse {
String toJson() => json.encode(toMap());
factory RealtimeResponse.fromJson(String source) =>
RealtimeResponse.fromMap(json.decode(source));
factory RealtimeResponse.fromJson(String source) => RealtimeResponse.fromMap(json.decode(source));
@override
String toString() => 'RealtimeResponse(type: $type, data: $data)';
@@ -32,10 +44,10 @@ class RealtimeResponse {
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is RealtimeResponse &&
other.type == type &&
mapEquals(other.data, data);
other.type == type &&
mapEquals(other.data, data);
}
@override
+8 -2
View File
@@ -4,7 +4,10 @@ import 'package:flutter/foundation.dart';
class RealtimeResponseConnected {
final List<String> channels;
final Map<String, dynamic> user;
RealtimeResponseConnected({required this.channels, this.user = const {}});
RealtimeResponseConnected({
required this.channels,
this.user = const {},
});
RealtimeResponseConnected copyWith({
List<String>? channels,
@@ -17,7 +20,10 @@ class RealtimeResponseConnected {
}
Map<String, dynamic> toMap() {
return {'channels': channels, 'user': user};
return {
'channels': channels,
'user': user,
};
}
factory RealtimeResponseConnected.fromMap(Map<String, dynamic> map) {
+1 -2
View File
@@ -3,5 +3,4 @@ import 'client.dart';
/// Implemented in `realtime_browser.dart` and `realtime_io.dart`.
RealtimeBase createRealtime(Client client) => throw UnsupportedError(
'Cannot create a client without dart:html or dart:io.',
);
'Cannot create a client without dart:html or dart:io.');
+3 -5
View File
@@ -16,9 +16,7 @@ class RealtimeSubscription {
final Future<void> Function() close;
/// Initializes a [RealtimeSubscription]
RealtimeSubscription({
required this.close,
required this.channels,
required this.controller,
}) : stream = controller.stream;
RealtimeSubscription(
{required this.close, required this.channels, required this.controller})
: stream = controller.stream;
}
+1 -1
View File
@@ -44,7 +44,7 @@ class UploadProgress {
"progress": progress,
"sizeUploaded": sizeUploaded,
"chunksTotal": chunksTotal,
"chunksUploaded": chunksUploaded,
"chunksUploaded": chunksUploaded
};
}
+1 -1
View File
@@ -1,5 +1,5 @@
name: appwrite
version: 17.1.0
version: 17.0.2
description: Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API
homepage: https://appwrite.io
repository: https://github.com/appwrite/sdk-for-flutter
-56
View File
@@ -76,7 +76,6 @@ void main() {
test('test method createDocument()', () async {
final Map<String, dynamic> data = {
'\$id': '5e5ea5c16897e',
'\$sequence': 1,
'\$collectionId': '5e5ea5c15117e',
'\$databaseId': '5e5ea5c15117e',
'\$createdAt': '2020-10-15T06:38:00.000+00:00',
@@ -102,7 +101,6 @@ void main() {
test('test method getDocument()', () async {
final Map<String, dynamic> data = {
'\$id': '5e5ea5c16897e',
'\$sequence': 1,
'\$collectionId': '5e5ea5c15117e',
'\$databaseId': '5e5ea5c15117e',
'\$createdAt': '2020-10-15T06:38:00.000+00:00',
@@ -127,7 +125,6 @@ void main() {
test('test method upsertDocument()', () async {
final Map<String, dynamic> data = {
'\$id': '5e5ea5c16897e',
'\$sequence': 1,
'\$collectionId': '5e5ea5c15117e',
'\$databaseId': '5e5ea5c15117e',
'\$createdAt': '2020-10-15T06:38:00.000+00:00',
@@ -153,7 +150,6 @@ void main() {
test('test method updateDocument()', () async {
final Map<String, dynamic> data = {
'\$id': '5e5ea5c16897e',
'\$sequence': 1,
'\$collectionId': '5e5ea5c15117e',
'\$databaseId': '5e5ea5c15117e',
'\$createdAt': '2020-10-15T06:38:00.000+00:00',
@@ -190,57 +186,5 @@ void main() {
);
});
test('test method decrementDocumentAttribute()', () async {
final Map<String, dynamic> data = {
'\$id': '5e5ea5c16897e',
'\$sequence': 1,
'\$collectionId': '5e5ea5c15117e',
'\$databaseId': '5e5ea5c15117e',
'\$createdAt': '2020-10-15T06:38:00.000+00:00',
'\$updatedAt': '2020-10-15T06:38:00.000+00:00',
'\$permissions': [],};
when(client.call(
HttpMethod.patch,
)).thenAnswer((_) async => Response(data: data));
final response = await databases.decrementDocumentAttribute(
databaseId: '<DATABASE_ID>',
collectionId: '<COLLECTION_ID>',
documentId: '<DOCUMENT_ID>',
attribute: '',
);
expect(response, isA<models.Document>());
});
test('test method incrementDocumentAttribute()', () async {
final Map<String, dynamic> data = {
'\$id': '5e5ea5c16897e',
'\$sequence': 1,
'\$collectionId': '5e5ea5c15117e',
'\$databaseId': '5e5ea5c15117e',
'\$createdAt': '2020-10-15T06:38:00.000+00:00',
'\$updatedAt': '2020-10-15T06:38:00.000+00:00',
'\$permissions': [],};
when(client.call(
HttpMethod.patch,
)).thenAnswer((_) async => Response(data: data));
final response = await databases.incrementDocumentAttribute(
databaseId: '<DATABASE_ID>',
collectionId: '<COLLECTION_ID>',
documentId: '<DOCUMENT_ID>',
attribute: '',
);
expect(response, isA<models.Document>());
});
});
}
-2
View File
@@ -7,7 +7,6 @@ void main() {
test('model', () {
final model = Document(
$id: '5e5ea5c16897e',
$sequence: 1,
$collectionId: '5e5ea5c15117e',
$databaseId: '5e5ea5c15117e',
$createdAt: '2020-10-15T06:38:00.000+00:00',
@@ -20,7 +19,6 @@ void main() {
final result = Document.fromMap(map);
expect(result.$id, '5e5ea5c16897e');
expect(result.$sequence, 1);
expect(result.$collectionId, '5e5ea5c15117e');
expect(result.$databaseId, '5e5ea5c15117e');
expect(result.$createdAt, '2020-10-15T06:38:00.000+00:00');