mirror of
https://github.com/appwrite/sdk-for-flutter.git
synced 2026-04-07 19:27:41 +00:00
add changelog
This commit is contained in:
+1
-1
@@ -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 @@
|
||||
export 'src/client_browser.dart';
|
||||
export 'src/client_browser.dart';
|
||||
+1
-1
@@ -1 +1 @@
|
||||
export 'src/client_io.dart';
|
||||
export 'src/client_io.dart';
|
||||
+2
-1
@@ -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
@@ -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 @@
|
||||
export 'src/realtime_browser.dart';
|
||||
export 'src/realtime_browser.dart';
|
||||
@@ -1 +1 @@
|
||||
export 'src/realtime_io.dart';
|
||||
export 'src/realtime_io.dart';
|
||||
+55
-55
@@ -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
File diff suppressed because it is too large
Load Diff
+157
-223
@@ -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;
|
||||
}
|
||||
}
|
||||
+125
-207
@@ -3,250 +3,168 @@ 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,
|
||||
);
|
||||
/// 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',
|
||||
};
|
||||
|
||||
final res = await client.call(HttpMethod.patch, path: apiPath, params: apiParams, headers: apiHeaders);
|
||||
|
||||
return models.Document.fromMap(res.data);
|
||||
|
||||
}
|
||||
|
||||
/// 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 Map<String, dynamic> apiParams = {
|
||||
'value': value,
|
||||
'max': max,
|
||||
};
|
||||
|
||||
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
@@ -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
@@ -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
@@ -3,163 +3,155 @@ part of '../appwrite.dart';
|
||||
/// The Locale service allows you to customize your app based on your users'
|
||||
/// 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
@@ -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
@@ -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
@@ -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
@@ -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 {},
|
||||
|
||||
@@ -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);
|
||||
|
||||
+15
-30
@@ -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
|
||||
@@ -46,10 +49,8 @@ class ClientBrowser extends ClientBase with ClientMixin {
|
||||
|
||||
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),
|
||||
|
||||
+65
-79
@@ -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
|
||||
@@ -59,15 +65,13 @@ class ClientIO extends ClientBase with ClientMixin {
|
||||
'x-sdk-platform': 'client',
|
||||
'x-sdk-language': 'flutter',
|
||||
'x-sdk-version': '17.1.0',
|
||||
'X-Appwrite-Response-Format': '1.7.0',
|
||||
'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
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -17,5 +17,5 @@ enum ResponseType {
|
||||
plain,
|
||||
|
||||
/// Get original bytes, the type of response will be List<int>
|
||||
bytes,
|
||||
bytes
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,65 +2,65 @@ 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;
|
||||
/// 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.$sequence,
|
||||
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(),
|
||||
$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,
|
||||
);
|
||||
}
|
||||
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,
|
||||
"\$sequence": $sequence,
|
||||
"\$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<String, dynamic>) fromJson) => fromJson(data);
|
||||
T convertTo<T>(T Function(Map<String, dynamic>) fromJson) => fromJson(data);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 "AF" for Africa, "AN" for Antarctica, "AS" for Asia, "EU" for Europe, "NA" for North America, "OC" for Oceania, and "SA" for South America.
|
||||
final String continentCode;
|
||||
/// Continent code. A two character continent code "AF" for Africa, "AN" for Antarctica, "AS" for Asia, "EU" for Europe, "NA" for North America, "OC" for Oceania, and "SA" 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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,4 +2,4 @@ part of '../../models.dart';
|
||||
|
||||
abstract class Model {
|
||||
Map<String, dynamic> toMap();
|
||||
}
|
||||
}
|
||||
+25
-25
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, dynamic>) fromJson) => fromJson(data);
|
||||
T convertTo<T>(T Function(Map<String, dynamic>) fromJson) => fromJson(data);
|
||||
}
|
||||
|
||||
+155
-155
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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.');
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ class UploadProgress {
|
||||
"progress": progress,
|
||||
"sizeUploaded": sizeUploaded,
|
||||
"chunksTotal": chunksTotal,
|
||||
"chunksUploaded": chunksUploaded,
|
||||
"chunksUploaded": chunksUploaded
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user