diff --git a/CHANGES.md b/CHANGES.md index 656f24c823..f0a3ba2101 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,22 +1,48 @@ -# Version 0.3.0 (PRE-RELEASE) - PLANNED +# Version 0.4.0 (PRE-RELEASE) - PLANNED ## Features -* Added 16 new locales for locale service and email templates (af, ar, bn, cz, hu, hy, jv, lt, no, ru, si, sv, ta, vi, zh-cn, zh-tw) -* New users service routes to allow updates pref and name update +* Added 3 new locales for locale service and email templates (is, ml, th, fo, ph, pn) * 2 stage Docker build * New database rule validation options * Update docs example with auth info * Limit HTTP origin check only to browser integrations * Allow electron apps to not pass origin header +* Updated new brexit date to 31-01-2020 + +## Security + +* Remove executable permission from avatars files [Minor] +* Updated SDK Generator Twig dependency with security issue: https://www.exploit-db.com/exploits/44102 [Minor] + +## Bugs + +* New loading message when creating a new project +* Fixed broken redirect URL when creating a new project +* Fixed broken modal when a user password is too short + +## Breaking Changes + +* OAuth path is now /auth/login/oauth instead of /auth/oauth and /auth/oauth/callback is now /auth/login/oauth/callback, this is for better consistency with new login methods we will introduce in the future + +# Version 0.3.0 + +## Features + +* Added 19 new locales for locale service and email templates (af, ar, bn, cz, hu, hy, jv, ko, lt, ml, no, ru, si, sq, sv, ta, vi, zh-cn, zh-tw) +* New users service routes to allow updates pref and name update * New OAuth adapters (Amazon, Dropbox, Microsoft, Slack, VK) * Added support for ES6 require statements in JS SDK +* New Locale API route for fetching list of continents ## Bugs * Fix for typos in PT-BR translations * Fix for UI crash when project user was missing a name +* Fix for it locale including the en templates by mistake +* Fix for UI not showing user's prefs properly +* Fixed 401 unexpected error when no permission passed in creation of a new resource -## Breaking Changs +## Breaking Changes * users/deleteUsersSession method name changed to users/deleteUserSession in all SDKs for better consistency diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 38752b5580..b3ec596562 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,39 @@ # Contributing -We would ❤️ for you to contribute to Appwrite and help make it better! As a contributor, here are the guidelines we would like you to follow: +We would ❤️ for you to contribute to Appwrite and help make it better! We want contributing to Appwrite to be fun, enjoyable, and educational for anyone and everyone. All contributions are welcome, including issues, new docs as well as updates and tweaks, blog posts, workshops, and more. + +## How to Start? + +If you are worried or don’t know where to start, check out our next section explaining what kind of help we could use and where can you get involved. You can reach out with questions to [Eldad Fux (@eldadfux)](https://twitter.com/eldadfux) or [@appwrite_io](https://twitter.com/appwrite_io) on Twitter, and anyone from the [Appwrite team on Discord](https://discord.gg/GSeTUeA). You can also submit an issue, and a maintainer can guide you! + +## Where to Start? + +Pull requests are great, but there are many other areas where you can help Appwrite. + +### Blogging & Speaking + +Blogging, speaking about, or creating tutorials about one of Appwrite’s many features. Mention [@appwrite_io](https://twitter.com/appwrite_io) on Twitter and/or email team [at] appwrite [dot] io so we can give pointers and tips and help you spread the word by promoting your content on the different Appwrite communication channels. Please add your blog posts and videos of talks to our [Awesome Appwrite]() repo on GitHub. + +### Presenting at Meetups + +Presenting at meetups and conferences about your Appwrite projects. Your unique challenges and successes in building things with Appwrite can provide great speaking material. We’d love to review your talk abstract/CFP, so get in touch with us if you’d like some help! + +### Sending Feedbacks & Reporting Bugs + +Sending feedback is a great way for us to understand your different use cases of Appwrite better. If you had any issues, bugs, or want to share about your experience, feel free to do so on our GitHub issues page or at our [Discord channel](https://discord.gg/GSeTUeA). + +### Submitting New Ideas + +If you think Appwrite could use a new feature, please open an issue on our GitHub repository, stating as much information as you can think about your new idea and it's implications. We would also use this issue to gather more information, get more feedback from the community, and have a proper discussion about the new feature. + +### Improving Documentation + +Submitting documentation updates, enhancements, designs, or bug fixes +Submitting spelling or grammar fixes will be very much appreciated. + +### Helping Someone + +Searching for Appwrite on Discord, GitHub or StackOverflow and helping someone else who needs help. You can also help by reaching others how to contribute to Appwrite's repo! ## Code of Conduct @@ -8,16 +41,16 @@ Help us keep Appwrite open and inclusive. Please read and follow our [Code of Co ## Technology Stack -To start helping us to improve Appwrite server, prior knowledge of Appwrite's technology stack can help you with getting started. +To start helping us to improve the Appwrite server by submitting code, prior knowledge of Appwrite's technology stack can help you with getting started. -Appwrite stack is combined from a variety of open-source technologies and tools. Appwrite backend API is written primarily with PHP version 7 and above on top of the Utopia PHP framework. Appwrite frontend is built with tools like gulp, less and litespeed.js. We use Docker as the container technology to package the Appwrite server for easy integration on cloud, on-premise or local hosts. +Appwrite stack is combined from a variety of open-source technologies and tools. Appwrite backend API is written primarily with PHP version 7 and above on top of the [Utopia PHP framework](https://github.com/utopia-php/framework). The Appwrite frontend is built with tools like gulp, less, and [litespeed.js](https://github.com/litespeed-js). We use Docker as the container technology to package the Appwrite server for easy integration on-cloud, on-premise, or on-localhosts. ### Other Technologies * Redis - for managing cache and in-memory data (currently, we do not use Redis for persistent data) * MariaDB - for database storage and queries * InfluxDB - for managing stats and time-series based data -* Statsd - for sending data over UDP protocol (using telegraf) +* Statsd - for sending data over UDP protocol (using Telegraf) * ClamAV - for validating and scanning storage files * Imagemagick - for manipulating and managing image media files. * Webp - for better compression of images on supporting clients @@ -26,15 +59,15 @@ Appwrite stack is combined from a variety of open-source technologies and tools. ## Package Managers -Appwrite uses a package manager for managing code dependencies for both backend and frontend development. We try our best to avoid creating any unnecessary and any new dependency to the project is subjected to a lead developer review and approval. +Appwrite uses a package manager for managing code dependencies for both backend and frontend development. We try our best to avoid creating any unnecessary, and any new dependency to the project is subjected to a lead developer review and approval. Many of Appwrite's internal modules are also used as dependencies to allow other Appwrite's projects to reuse them and as a way to contribute them back to the community. -Appwrite uses PHP's Composer for managing dependencies on the server-side and JS NPM for managing dependencies on the frontend side. +Appwrite uses [PHP's Composer](https://getcomposer.org/) for managing dependencies on the server-side and [JS NPM](https://www.npmjs.com/) for managing dependencies on the frontend side. ## Coding Standards -Appwrite is following the PHP-FIG standards. Currently, we are using both PSR-0 and PSR-4 for coding standards and autoloading standards. Soon we will also review the project for support with PSR-12 (Extended Coding Style). +Appwrite is following the [PHP-FIG standards](https://www.php-fig.org/). Currently, we are using both PSR-0 and PSR-4 for coding standards and autoloading standards. Soon we will also review the project for support with PSR-12 (Extended Coding Style). We use prettier for our JS coding standards and for auto-formatting our code. @@ -42,7 +75,7 @@ We use prettier for our JS coding standards and for auto-formatting our code. Appwrite is built to scale. Please keep in mind that the Appwrite stack can run in different environments and different scales. -We wish Appwrite will be as easy to set up and in a single, localhost and easy to grow to a large environment with thousands and even hundreds of instances. +We wish Appwrite will be as easy to set up and in a single, localhost, and easy to grow to a large environment with thousands and even hundreds of instances. When contributing code, please take into account the following considerations: @@ -57,27 +90,29 @@ When contributing code, please take into account the following considerations: ## Architecture -Appwrite's current structure is a combination of both Monolithic and Microservice architectures, but our final goal, as we grow is to be using only microservices. +Appwrite's current structure is a combination of both [Monolithic](https://en.wikipedia.org/wiki/Monolithic_application) and [Microservice](https://en.wikipedia.org/wiki/Microservices) architectures, but our final goal, as we grow, is to be using only microservices. ### The Monolithic Part Appwrite's main API container is designed as a monolithic app. This is a decision we made to allow us to develop the project faster while still being a very small team. -Although the Appwrite API is a monolithic app, it has a very clear separation of concern as each internal service or worker is separated by its container which will allow us as we grow to start breaking services for better maintenance and scalability. +Although the Appwrite API is a monolithic app, it has a very clear separation of concern as each internal service or worker is separated by its container, which will allow us as we grow to start breaking services for better maintenance and scalability. ### The Microservice Part Each container in Appwrite is a microservice on its own. Each service is an independent process that can scale without regard to any of the other services. -Currently, all of the Appwrite microservices are intended to communicate using TCP protocol over a private network. You should be aware to not expose any of the services to the public-facing network, besides the public port 80 and 443 who by default are used to expose the Appwrite HTTP API. +Currently, all of the Appwrite microservices are intended to communicate using the TCP protocol over a private network. You should be aware to not expose any of the services to the public-facing network, besides the public port 80 and 443, who, by default, are used to expose the Appwrite HTTP API. ## Security & Privacy -Security and privacy are extremely important to Appwrite, developers and users alike. Make sure to follow the best industry standards and practices. To help you make sure you are doing as best as possible we have set up our security checklist for pull requests and contributors. Please make sure to follow the list before sending a pull request. +Security and privacy are extremely important to Appwrite, developers, and users alike. Make sure to follow the best industry standards and practices. + + ## Dependencies -Please avoid introducing new dependencies to Appwrite without consulting the team. New dependencies can be very helpful but also introduce new security and privacy issues, complexity and impact total docker image size. +Please avoid introducing new dependencies to Appwrite without consulting the team. New dependencies can be very helpful but also introduce new security and privacy issues, complexity, and impact total docker image size. Adding a new dependency should have vital value on the product with minimum possible risk. @@ -89,11 +124,13 @@ For us to find the right balance, please open an issue explaining your ideas bef This will allow the Appwrite community to have sufficient discussion about the new feature value and how it fits in the product roadmap and vision. -This is also important for the Appwrite lead developers to be able to give technical input and different emphasises regarding the feature design and architecture. +This is also important for the Appwrite lead developers to be able to give technical input and different emphasize regarding the feature design and architecture. ## Setup -To set up a working development environment just fork the project git repository and install the backend and frontend dependencies using the proper package manager and create run the docker-compose stack. +To set up a working **development** environment, just fork the project git repository and install the backend and frontend dependencies using the proper package manager and create run the docker-compose stack. + +Please note that these instructions are for setting a functional dev environment. If you want to set up an Appwrite instance to integrate into your app, you should probably try and install Appwrite by using the instructions in the [getting started guide](https://appwrite.io/docs/getting-started-for-web) or in the main [README](README.md) file. ```bash git clone git@github.com:[YOUR_FORK_HERE]/appwrite.git @@ -111,16 +148,17 @@ After finishing the installation process, you can start writing and editing code ## Build -To build a new version of the Appwrite server all you need to do is run the build.sh file like this: +To build a new version of the Appwrite server, all you need to do is run the build.sh file like this: ```bash bash ./build.sh 1.0.0 ``` -Before running the command make sure you have proper write permissions to Appwrite docker hub team. +Before running the command, make sure you have proper write permissions to the Appwrite docker hub team. ## Tutorials -From time to time our team will add tutorials that will help contributors find their way in the Appwrite source code. Below is a list of currently available tutorials: +From time to time, our team will add tutorials that will help contributors find their way in the Appwrite source code. Below is a list of currently available tutorials: * [Adding Support for a New OAuth Provider](./docs/tutorials/add-oauth-provider.md) +* [Appwrite Environment Variables](./docs/tutorials/add-oauth-provider.md) diff --git a/Dockerfile b/Dockerfile old mode 100755 new mode 100644 diff --git a/README.md b/README.md index 6dac9615be..9abeeb3610 100644 --- a/README.md +++ b/README.md @@ -8,23 +8,35 @@

[![Docker Pulls](https://img.shields.io/docker/pulls/appwrite/appwrite.svg)](https://hub.docker.com/r/appwrite/appwrite) -[![Chat With Us](https://img.shields.io/gitter/room/appwrite/community.svg)](https://gitter.im/appwrite/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link) +[![Discord](https://img.shields.io/discord/564160730845151244)](https://discord.gg/GSeTUeA) [![Build Status](https://travis-ci.org/appwrite/appwrite.svg?branch=master)](https://travis-ci.org/appwrite/appwrite) [![Follow Appwrite on StackShare](https://img.stackshare.io/misc/follow-on-stackshare-badge.svg)](https://stackshare.io/appwrite) [![Follow new releases](https://app.releasly.co/assets/badges/badge-blue.svg)](https://app.releasly.co/sites/appwrite/appwrite?utm_source=github_badge) --- -Appwrite is a simple self-hosted backend server for web and mobile developers with a shiny dashboard and a very easy to use REST API. +Appwrite is a simple self-hosted backend server for web and mobile developers with a shiny dashboard and a very easy-to-use REST API. Appwrite API services aim to make developer's life a lot easier by hiding the complexity of common and repetitive software development tasks. -Using Appwrite you can easily manage user authentication with multiple sign-in methods, a database for storing and querying user and teams data, storage and file management, image manipulation and cropping, scheduled cron tasks and many other features to help you get more results in faster times and with a lot less code. +Using Appwrite, you can easily manage user authentication with multiple sign-in methods, a database for storing and querying user and team data, storage and file management, image manipulation and cropping, schedule cron tasks and many other features to help you get more results in faster times and with a lot less code. [https://appwrite.io](https://appwrite.io) ![Appwrite](public/images/github.png) +Table of Contents: + +- [Installation](#installation) + - [Changing Port Number](#changing-port-number) +- [Getting Started](#getting-started) + - [Services](#services) + - [SDKs](#sdks) +- [Security](#security) +- [Follow Us](#follow-us) +- [Contributing](#contributing) +- [Credits](#credits) + ## Installation Appwrite backend server is designed to run in a container environment. Running your server is as easy as running one command from your terminal. You can either run Appwrite on your localhost using docker-compose or on any other container orchestration tool like Kubernetes, Docker Swarm or Rancher. @@ -34,7 +46,7 @@ The easiest way to start running your Appwrite server is by running our docker-c ```bash mkdir appwrite-ce && \ cd appwrite-ce && \ -curl -o docker-compose.yml https://appwrite.io/docker-compose.yml?version=0.2.0 && \ +curl -o docker-compose.yml https://appwrite.io/docker-compose.yml?version=0.3.0 && \ docker-compose up -d --remove-orphans ``` @@ -42,7 +54,7 @@ docker-compose up -d --remove-orphans Once the Docker installation completes, go to http://localhost to access the Appwrite console from your browser. Please notice that on non-linux native hosts, the server might take a few minutes to start after installation completes. -For advanced, production and custom installation, check out our Docker [environment variables](docs/tutorials/environment-variables.md) docs. +For advanced production and custom installation, check out our Docker [environment variables](docs/tutorials/environment-variables.md) docs. ### Changing Port Number @@ -63,7 +75,7 @@ Getting started with Appwrite is as easy as creating a new project, choosing you * [**Account**](https://appwrite.io/docs/account) - Manage current user account. Track and manage the user sessions, devices, and security audit log. * [**Users**](https://appwrite.io/docs/users) - Manage and list all project users when in admin mode. * [**Teams**](https://appwrite.io/docs/teams) - Manage and group users in teams. Manage memberships, invites and user roles within a team. -* [**Database**](https://appwrite.io/docs/database) - Manage database collections and document. Read, create, update and delete documents and filter lists of documents collections using an advanced filter with graph-like capabilities. +* [**Database**](https://appwrite.io/docs/database) - Manage database collections and documents. Read, create, update and delete documents and filter lists of documents collections using an advanced filter with graph-like capabilities. * [**Storage**](https://appwrite.io/docs/storage) - Manage storage files. Read, create, delete and preview files. Manipulate the preview of your files to fit your app perfectly. All files are scanned by ClamAV and stored in a secure and encrypted way. * [**Locale**](https://appwrite.io/docs/locale) - Track user's location, and manage your app locale-based data. * [**Avatars**](https://appwrite.io/docs/avatars) - Manage your users' avatars, countries' flags, browser icons, credit card symbols and generate QR codes. @@ -72,7 +84,7 @@ For the complete API documentation, visit [https://appwrite.io/docs](https://app ### SDKs -Currently, we are supporting only a few SDK libraries and are constantly working on including new ones. +Currently, we support only a few SDK libraries and are constantly working on including new ones. Below is a list of currently supported platforms and languages. If you wish to help us add support to your platform of choice, you can go over to our [SDK Generator](https://github.com/appwrite/sdk-generator) project and view our contribution guide. @@ -89,7 +101,7 @@ For security issues, kindly email us [security@appwrite.io](mailto:security@appw ## Follow Us -Join our growing community around the world! Follow us on [Twitter](https://twitter.com/appwrite_io), [Facebook Page](https://www.facebook.com/appwrite.io), [Facebook Group](https://www.facebook.com/groups/appwrite.developers/) or join our live [Gitter community](https://gitter.im/appwrite/community) for more help, ideas and discussions. +Join our growing community around the world! Follow us on [Twitter](https://twitter.com/appwrite_io), [Facebook Page](https://www.facebook.com/appwrite.io), [Facebook Group](https://www.facebook.com/groups/appwrite.developers/) or join our live [Gitter community](https://gitter.im/appwrite/community) for more help, ideas, and discussions. ## Contributing diff --git a/app/app.php b/app/app.php index 2ef9d85acf..2831d70bff 100644 --- a/app/app.php +++ b/app/app.php @@ -3,7 +3,7 @@ // Init require_once __DIR__.'/init.php'; -global $env, $utopia, $request, $response, $register, $consoleDB, $project, $domain, $sentry, $version, $service, $providers; +global $env, $utopia, $request, $response, $register, $consoleDB, $project, $domain, $version, $service; use Utopia\App; use Utopia\Request; @@ -25,12 +25,16 @@ use Utopia\Validator\WhiteList; */ $roles = include __DIR__.'/config/roles.php'; // User roles and scopes $sdks = include __DIR__.'/config/sdks.php'; // List of SDK clients -$services = include __DIR__.'/config/services.php'; // List of SDK clients +$services = include __DIR__.'/config/services.php'; // List of services $webhook = new Event('v1-webhooks', 'WebhooksV1'); $audit = new Event('v1-audits', 'AuditsV1'); $usage = new Event('v1-usage', 'UsageV1'); +/** + * Get All verified client URLs for both console and current projects + * + Filter for duplicated entries + */ $clientsConsole = array_map(function ($node) { return $node['url']; }, array_filter($console->getAttribute('platforms', []), function ($node) { @@ -72,14 +76,14 @@ $utopia->init(function () use ($utopia, $request, $response, $register, &$user, //->addHeader('X-Frame-Options', ($refDomain == 'http://localhost') ? 'SAMEORIGIN' : 'ALLOW-FROM ' . $refDomain) ->addHeader('X-Content-Type-Options', 'nosniff') ->addHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE') - ->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-SDK-Version') + ->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-SDK-Version') ->addHeader('Access-Control-Allow-Origin', $refDomain) ->addHeader('Access-Control-Allow-Credentials', 'true') ; /* * Validate Client Domain - Check to avoid CSRF attack - * Adding appwrite api domains to allow XDOMAIN communication + * Adding Appwrite API domains to allow XDOMAIN communication */ $hostValidator = new Host($clients); $origin = $request->getServer('HTTP_ORIGIN', $request->getServer('HTTP_REFERER', '')); @@ -152,6 +156,8 @@ $utopia->init(function () use ($utopia, $request, $response, $register, &$user, } }, $user->getAttribute('memberships', [])); + // TDOO Check if user is god + if (!in_array($scope, $scopes)) { throw new Exception($user->getAttribute('email', 'Guest').' (role: '.strtolower($roles[$role]['label']).') missing scope ('.$scope.')', 401); } @@ -252,13 +258,13 @@ $utopia->options(function () use ($request, $response, $domain, $project) { $response ->addHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE') - ->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-SDK-Version') + ->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-SDK-Version') ->addHeader('Access-Control-Allow-Origin', $origin) ->addHeader('Access-Control-Allow-Credentials', 'true') ->send(); }); -$utopia->error(function ($error /* @var $error Exception */) use ($request, $response, $utopia, $project, $env, $version, $sentry, $user) { +$utopia->error(function ($error /* @var $error Exception */) use ($request, $response, $utopia, $project, $env, $version, $user) { switch ($error->getCode()) { case 400: // Error allowed publicly case 401: // Error allowed publicly @@ -438,8 +444,9 @@ $utopia->get('/v1/open-api-2.json') ->label('docs', false) ->param('platform', 'client', function () {return new WhiteList(['client', 'server']);}, 'Choose target platform.', true) ->param('extensions', 0, function () {return new Range(0, 1);}, 'Show extra data.', true) + ->param('tests', 0, function () {return new Range(0, 1);}, 'Include only test services.', true) ->action( - function ($platform, $extensions) use ($response, $request, $utopia, $domain, $services) { + function ($platform, $extensions, $tests) use ($response, $request, $utopia, $domain, $services) { function fromCamelCase($input) { preg_match_all('!([A-Z][A-Z0-9]*(?=$|[A-Z][a-z0-9])|[A-Za-z][a-z0-9]+)!', $input, $matches); @@ -457,7 +464,11 @@ $utopia->get('/v1/open-api-2.json') } foreach ($services as $service) { /* @noinspection PhpIncludeInspection */ - if (!$service['sdk']) { + if($tests && !$service['tests']) { + continue; + } + + if (!$tests && !$service['sdk']) { continue; } @@ -580,18 +591,20 @@ $utopia->get('/v1/open-api-2.json') $url = str_replace('/v1', '', $route->getURL()); $scope = $route->getLabel('scope', ''); $hide = $route->getLabel('sdk.hide', false); - $consumes = []; + $consumes = ['application/json']; if ($hide) { continue; } + $desc = realpath(__DIR__ . '/..' . $route->getLabel('sdk.description', '')); + $temp = [ 'summary' => $route->getDesc(), 'operationId' => $route->getLabel('sdk.method', uniqid()), 'consumes' => [], 'tags' => [$route->getLabel('sdk.namespace', 'default')], - 'description' => file_get_contents(realpath(__DIR__ . '/..' . $route->getLabel('sdk.description', ''))), + 'description' => ($desc) ? file_get_contents($desc) : '', 'responses' => [ 200 => [ 'description' => 'An paged array of pets', @@ -611,6 +624,7 @@ $utopia->get('/v1/open-api-2.json') 'edit' => 'https://github.com/appwrite/appwrite/edit/master' . $route->getLabel('sdk.description', ''), 'rate-limit' => $route->getLabel('abuse-limit', 0), 'rate-time' => $route->getLabel('abuse-time', 3600), + 'scope' => $route->getLabel('scope', ''), ]; } @@ -666,7 +680,7 @@ $utopia->get('/v1/open-api-2.json') //$node['format'] = 'json'; break; case 'Storage\Validators\File': - $consumes[] = 'multipart/form-data'; + $consumes = ['multipart/form-data']; $node['type'] = 'file'; break; case 'Utopia\Validator\ArrayList': @@ -756,12 +770,4 @@ if (array_key_exists($service, $services)) { /** @noinspection PhpIncludeInspect include_once $services['/']['controller']; } -if (extension_loaded('newrelic')) { - $route = $utopia->match($request); - $url = (!empty($route)) ? $route->getURL() : '/error'; - - newrelic_set_appname($name); - newrelic_name_transaction($request->getServer('REQUEST_METHOD', 'UNKNOWN').': '.$url); -} - $utopia->run($request, $response); diff --git a/app/config/avatars/browsers/adblock.png b/app/config/avatars/browsers/adblock.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/android-webview-beta.png b/app/config/avatars/browsers/android-webview-beta.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/blisk.png b/app/config/avatars/browsers/blisk.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/brave.png b/app/config/avatars/browsers/brave.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/browsh.png b/app/config/avatars/browsers/browsh.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/cent.png b/app/config/avatars/browsers/cent.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/chrome-canary.png b/app/config/avatars/browsers/chrome-canary.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/cliqz.png b/app/config/avatars/browsers/cliqz.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/cm.png b/app/config/avatars/browsers/cm.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/crusta.png b/app/config/avatars/browsers/crusta.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/dolphin.png b/app/config/avatars/browsers/dolphin.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/dooble.png b/app/config/avatars/browsers/dooble.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/edge-beta-1.png b/app/config/avatars/browsers/edge-beta-1.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/edge-beta-2.png b/app/config/avatars/browsers/edge-beta-2.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/edge.png b/app/config/avatars/browsers/edge.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/electron.png b/app/config/avatars/browsers/electron.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/epic.png b/app/config/avatars/browsers/epic.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/falkon.png b/app/config/avatars/browsers/falkon.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/firefox-beta.png b/app/config/avatars/browsers/firefox-beta.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/firefox-developer-edition.png b/app/config/avatars/browsers/firefox-developer-edition.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/firefox-nightly.png b/app/config/avatars/browsers/firefox-nightly.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/firefox.png b/app/config/avatars/browsers/firefox.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/focus.png b/app/config/avatars/browsers/focus.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/icab-mobile.png b/app/config/avatars/browsers/icab-mobile.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/icecat.png b/app/config/avatars/browsers/icecat.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/jsdom.png b/app/config/avatars/browsers/jsdom.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/lightning.png b/app/config/avatars/browsers/lightning.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/maxthon.png b/app/config/avatars/browsers/maxthon.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/mihtool.png b/app/config/avatars/browsers/mihtool.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/min.png b/app/config/avatars/browsers/min.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/netsurf.png b/app/config/avatars/browsers/netsurf.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/nw.js.png b/app/config/avatars/browsers/nw.js.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/onion.png b/app/config/avatars/browsers/onion.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/opera-beta.png b/app/config/avatars/browsers/opera-beta.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/opera-developer.png b/app/config/avatars/browsers/opera-developer.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/opera-mini-beta.png b/app/config/avatars/browsers/opera-mini-beta.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/opera-mini.png b/app/config/avatars/browsers/opera-mini.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/opera-neon.png b/app/config/avatars/browsers/opera-neon.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/opera-touch.png b/app/config/avatars/browsers/opera-touch.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/opera.png b/app/config/avatars/browsers/opera.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/orbitum.png b/app/config/avatars/browsers/orbitum.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/otter.png b/app/config/avatars/browsers/otter.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/pale-moon.png b/app/config/avatars/browsers/pale-moon.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/polarity.png b/app/config/avatars/browsers/polarity.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/puffin.png b/app/config/avatars/browsers/puffin.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/qutebrowser.png b/app/config/avatars/browsers/qutebrowser.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/safari-ios.png b/app/config/avatars/browsers/safari-ios.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/safari-technology-preview.png b/app/config/avatars/browsers/safari-technology-preview.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/samsung-internet-beta.png b/app/config/avatars/browsers/samsung-internet-beta.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/samsung-internet.png b/app/config/avatars/browsers/samsung-internet.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/seamonkey.png b/app/config/avatars/browsers/seamonkey.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/servo.png b/app/config/avatars/browsers/servo.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/silk.png b/app/config/avatars/browsers/silk.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/sogou-mobile.png b/app/config/avatars/browsers/sogou-mobile.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/tor.png b/app/config/avatars/browsers/tor.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/uc-mini.png b/app/config/avatars/browsers/uc-mini.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/uc.png b/app/config/avatars/browsers/uc.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/v8-ignition.png b/app/config/avatars/browsers/v8-ignition.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/v8-liftoff.png b/app/config/avatars/browsers/v8-liftoff.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/v8-orinoco.png b/app/config/avatars/browsers/v8-orinoco.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/v8-turbofan.png b/app/config/avatars/browsers/v8-turbofan.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/v8.png b/app/config/avatars/browsers/v8.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/vivaldi-snapshot.png b/app/config/avatars/browsers/vivaldi-snapshot.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/vivaldi.png b/app/config/avatars/browsers/vivaldi.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/waterfox.png b/app/config/avatars/browsers/waterfox.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/web.png b/app/config/avatars/browsers/web.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/yandex-alpha.png b/app/config/avatars/browsers/yandex-alpha.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/yandex-beta.png b/app/config/avatars/browsers/yandex-beta.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/yandex-lite.png b/app/config/avatars/browsers/yandex-lite.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/browsers/yandex.png b/app/config/avatars/browsers/yandex.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/amex.png b/app/config/avatars/credit-cards/amex.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/argencard.png b/app/config/avatars/credit-cards/argencard.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/cabal.png b/app/config/avatars/credit-cards/cabal.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/censosud.png b/app/config/avatars/credit-cards/censosud.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/diners.png b/app/config/avatars/credit-cards/diners.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/discover.png b/app/config/avatars/credit-cards/discover.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/elo.png b/app/config/avatars/credit-cards/elo.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/hipercard.png b/app/config/avatars/credit-cards/hipercard.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/jcb.png b/app/config/avatars/credit-cards/jcb.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/mastercard.png b/app/config/avatars/credit-cards/mastercard.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/naranja.png b/app/config/avatars/credit-cards/naranja.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/tarjeta-shopping.png b/app/config/avatars/credit-cards/tarjeta-shopping.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/union-china-pay.png b/app/config/avatars/credit-cards/union-china-pay.png old mode 100755 new mode 100644 diff --git a/app/config/avatars/credit-cards/visa.png b/app/config/avatars/credit-cards/visa.png old mode 100755 new mode 100644 diff --git a/app/config/eu.php b/app/config/eu.php index a25a9ffff7..d63ebef707 100644 --- a/app/config/eu.php +++ b/app/config/eu.php @@ -30,7 +30,7 @@ $list = [ 'SE', // Sweden ]; -if (time() < strtotime('2019-10-31')) { // @see https://en.wikipedia.org/wiki/Brexit +if (time() < strtotime('2020-01-31')) { // @see https://en.wikipedia.org/wiki/Brexit $list[] = 'GB'; // // United Kingdom } diff --git a/app/config/locales.php b/app/config/locales.php new file mode 100644 index 0000000000..76c164fb63 --- /dev/null +++ b/app/config/locales.php @@ -0,0 +1,49 @@ + '"L\'art de ser sabi és l\'art de saber què passar per alt"', // This is the line printed in the homepage and console 'view-source' + 'settings.inspire' => '"L\'art de ser savi és l\'art de saber què passar per alt"', // This is the line printed in the homepage and console 'view-source' 'settings.locale' => 'cat', 'settings.direction' => 'ltr', @@ -11,7 +11,7 @@ return [ 'auth.emails.confirm.body' => 'cat.email.auth.confirm.tpl', 'auth.emails.recovery.title' => 'Restablir contrasenya', 'auth.emails.recovery.body' => 'cat.email.auth.recovery.tpl', - 'auth.emails.invitation.title' => 'Invitació a l\'Equipo %s a %s', + 'auth.emails.invitation.title' => 'Invitació a l\'Equip %s a %s', 'auth.emails.invitation.body' => 'cat.email.auth.invitation.tpl', 'locale.country.unknown' => 'Desconegut', diff --git a/app/config/locale/cz.continents.php b/app/config/locales/cz.continents.php similarity index 100% rename from app/config/locale/cz.continents.php rename to app/config/locales/cz.continents.php diff --git a/app/config/locale/cz.countries.php b/app/config/locales/cz.countries.php similarity index 100% rename from app/config/locale/cz.countries.php rename to app/config/locales/cz.countries.php diff --git a/app/config/locale/cz.php b/app/config/locales/cz.php similarity index 100% rename from app/config/locale/cz.php rename to app/config/locales/cz.php diff --git a/app/config/locale/de.continents.php b/app/config/locales/de.continents.php similarity index 100% rename from app/config/locale/de.continents.php rename to app/config/locales/de.continents.php diff --git a/app/config/locale/de.countries.php b/app/config/locales/de.countries.php similarity index 100% rename from app/config/locale/de.countries.php rename to app/config/locales/de.countries.php diff --git a/app/config/locale/de.php b/app/config/locales/de.php similarity index 100% rename from app/config/locale/de.php rename to app/config/locales/de.php diff --git a/app/config/locale/en.continents.php b/app/config/locales/en.continents.php similarity index 100% rename from app/config/locale/en.continents.php rename to app/config/locales/en.continents.php diff --git a/app/config/locale/en.countries.php b/app/config/locales/en.countries.php similarity index 100% rename from app/config/locale/en.countries.php rename to app/config/locales/en.countries.php diff --git a/app/config/locale/en.php b/app/config/locales/en.php similarity index 100% rename from app/config/locale/en.php rename to app/config/locales/en.php diff --git a/app/config/locale/es.continents.php b/app/config/locales/es.continents.php similarity index 87% rename from app/config/locale/es.continents.php rename to app/config/locales/es.continents.php index 8822e9aab9..49a0d422f6 100644 --- a/app/config/locale/es.continents.php +++ b/app/config/locales/es.continents.php @@ -2,7 +2,7 @@ return [ 'AF' => 'África', - 'AN' => 'Antártica', + 'AN' => 'Antártida', 'AS' => 'Asia', 'EU' => 'Europa', 'NA' => 'América del Norte', diff --git a/app/config/locale/es.countries.php b/app/config/locales/es.countries.php similarity index 100% rename from app/config/locale/es.countries.php rename to app/config/locales/es.countries.php diff --git a/app/config/locale/es.php b/app/config/locales/es.php similarity index 100% rename from app/config/locale/es.php rename to app/config/locales/es.php diff --git a/app/config/locale/fi.continents.php b/app/config/locales/fi.continents.php similarity index 100% rename from app/config/locale/fi.continents.php rename to app/config/locales/fi.continents.php diff --git a/app/config/locale/fi.countries.php b/app/config/locales/fi.countries.php similarity index 100% rename from app/config/locale/fi.countries.php rename to app/config/locales/fi.countries.php diff --git a/app/config/locale/fi.php b/app/config/locales/fi.php similarity index 100% rename from app/config/locale/fi.php rename to app/config/locales/fi.php diff --git a/app/config/locales/fo.continents.php b/app/config/locales/fo.continents.php new file mode 100644 index 0000000000..bd5f9733db --- /dev/null +++ b/app/config/locales/fo.continents.php @@ -0,0 +1,11 @@ + 'Afrika', + 'AN' => 'Antarktis', + 'AS' => 'Asia', + 'EU' => 'Europa', + 'NA' => 'Norðuramerika', + 'OC' => 'Kyrrahavsoyggjarnar', + 'SA' => 'Suðuramerika', +]; diff --git a/app/config/locales/fo.countries.php b/app/config/locales/fo.countries.php new file mode 100644 index 0000000000..bc6aa77e8a --- /dev/null +++ b/app/config/locales/fo.countries.php @@ -0,0 +1,198 @@ + 'Afghanistan', + 'AO' => 'Angola', + 'AL' => 'Albania', + 'AD' => 'Andorra', + 'AE' => 'Sameindu Emirríkini', + 'AR' => 'Argentina', + 'AM' => 'Armenia', + 'AG' => 'Antigua og Barbuda', + 'AU' => 'Avstralia', + 'AT' => 'Eysturríki', + 'AZ' => 'Aserbadjan', + 'BI' => 'Burundi', + 'BE' => 'Belgia', + 'BJ' => 'Benin', + 'BF' => 'Burkina Faso', + 'BD' => 'Bangladesh', + 'BG' => 'Bulgaria', + 'BH' => 'Barein', + 'BS' => 'Bahamaoyggjar', + 'BA' => 'Bosnia-Hersegovina', + 'BY' => 'Hvítarussland', + 'BZ' => 'Belis', + 'BO' => 'Bolivia', + 'BR' => 'Brasil', + 'BB' => 'Barbados', + 'BN' => 'Brunei', + 'BT' => 'Butan', + 'BW' => 'Botsvana', + 'CF' => 'Miðafrikalýðveldið', + 'CA' => 'Kanada', + 'CH' => 'Sveis', + 'CL' => 'Kili', + 'CN' => 'Kina', + 'CI' => 'Fílabeinsstrondin', + 'CM' => 'Kamerun', + 'CD' => 'DR Congo', + 'CG' => 'Republic of the Congo', + 'CO' => 'Kolumbia', + 'KM' => 'Komoroyggjar', + 'CV' => 'Cape Verde', + 'CR' => 'Kosta Rika', + 'CU' => 'Kuba', + 'CY' => 'Kýpros', + 'CZ' => 'Kekkoslovakia', + 'DE' => 'Týskland', + 'DJ' => 'Djibouti', + 'DM' => 'Dominika', + 'DK' => 'Danmark', + 'DO' => 'Dominican Republic', + 'DZ' => 'Algeria', + 'EC' => 'Ekvador', + 'EG' => 'Egypt', + 'ER' => 'Eritrea', + 'ES' => 'Spania', + 'EE' => 'Estland', + 'ET' => 'Etiopia', + 'FI' => 'Finnland', + 'FJ' => 'Fijioyggjar', + 'FR' => 'France', + 'FM' => 'Frakland', + 'GA' => 'Gabon', + 'GB' => 'Stóra Bretland', + 'GE' => 'Georgia', + 'GH' => 'Gana', + 'GN' => 'Guinea', + 'GM' => 'Gambia', + 'GW' => 'Guinea-Bissau', + 'GQ' => 'Equatorial Guinea', + 'GR' => 'Grikkaland', + 'GD' => 'Grenada', + 'GT' => 'Guatemala', + 'GY' => 'Gujana', + 'HN' => 'Honduras', + 'HR' => 'Kroatia', + 'HT' => 'Haiti', + 'HU' => 'Ungarn', + 'ID' => 'Indonesia', + 'IN' => 'India', + 'IE' => 'IrelÍrland', + 'IR' => 'Iran', + 'IQ' => 'Iraq', + 'IS' => 'Ísland', + 'IL' => 'Ísrael', + 'IT' => 'Italia', + 'JM' => 'Jamaika', + 'JO' => 'Jordan', + 'JP' => 'Japan', + 'KZ' => 'Kasakstan', + 'KE' => 'Kenja', + 'KG' => 'Kirgistan', + 'KH' => 'Kambodja', + 'KI' => 'Kiribati', + 'KN' => 'Saint Kitts og Nevis', + 'KR' => 'Suðurkorea', + 'KW' => 'Kuvait', + 'LA' => 'Laos', + 'LB' => 'Libanon', + 'LR' => 'Liberia', + 'LY' => 'Libya', + 'LC' => 'Saint Lusia', + 'LI' => 'Liktinstein', + 'LK' => 'Sri Lanka', + 'LS' => 'Lesoto', + 'LT' => 'Litava', + 'LU' => 'Luksemborg', + 'LV' => 'Lettland', + 'MA' => 'Marokko', + 'MC' => 'Monako', + 'MD' => 'Moldova', + 'MG' => 'Madagaskar', + 'MV' => 'Maldivoyggjar', + 'MX' => 'Meksiko', + 'MH' => 'Marshalloyggjar', + 'MK' => 'Makedónia', + 'ML' => 'Mali', + 'MT' => 'Malta', + 'MM' => 'Myanmar', + 'ME' => 'Montenegro', + 'MN' => 'Mongolia', + 'MZ' => 'Mosambik', + 'MR' => 'Móritania', + 'MU' => 'Móritius', + 'MW' => 'Malavi', + 'MY' => 'Malaisia', + 'NA' => 'Namibia', + 'NE' => 'Niger', + 'NG' => 'Nigeria', + 'NI' => 'Nikaragua', + 'NL' => 'Niðurlond', + 'NO' => 'Norra', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NZ' => 'Nýsæland', + 'OM' => 'Oman', + 'PK' => 'Pakistan', + 'PA' => 'Panama', + 'PE' => 'Peru', + 'PH' => 'Filipsoyggjar', + 'PW' => 'Palau', + 'PG' => 'Papua Nýguinea', + 'PL' => 'Pólland', + 'KP' => 'Norðurkorea', + 'PT' => 'Portugal', + 'PY' => 'Paraguai', + 'QA' => 'Katar', + 'RO' => 'Romania', + 'RU' => 'Russland', + 'RW' => 'Ruanda', + 'SA' => 'Saudiarabia', + 'SD' => 'Sudan', + 'SN' => 'Senegal', + 'SG' => 'Singapor', + 'SB' => 'Sálomonsoyggjar', + 'SL' => 'Sierra Leona', + 'SV' => 'El Salvador', + 'SM' => 'San Marino', + 'SO' => 'Somalia', + 'RS' => 'Serbia', + 'SS' => 'Suðursudan', + 'ST' => 'Sao Tomi og Prinsipi', + 'SR' => 'Surinam', + 'SK' => 'Slovakia', + 'SI' => 'Slovenia', + 'SE' => 'Svøríki', + 'SZ' => 'Swaziland', + 'SC' => 'Seychelles', + 'SY' => 'Syria', + 'TD' => 'Kjad', + 'TG' => 'Togo', + 'TH' => 'Tailand', + 'TJ' => 'Tadsjikistan', + 'TM' => 'Turkmenistan', + 'TL' => 'Timor-Leste', + 'TO' => 'Tonga', + 'TT' => 'Trinidad og Tobago', + 'TN' => 'Tunesia', + 'TR' => 'Turkaland', + 'TV' => 'Tuvalu', + 'TZ' => 'Tansania', + 'UG' => 'Uganda', + 'UA' => 'Ukraina', + 'UY' => 'Uruguai', + 'US' => 'Sambandsríki Amerika', + 'UZ' => 'Usbekistan', + 'VA' => 'Vatican City', + 'VC' => 'Saint Vincent and the Grenadines', + 'VE' => 'Venesuela', + 'VN' => 'Vjetnam', + 'VU' => 'Vanuatu', + 'WS' => 'Sámoa', + 'YE' => 'Jemen', + 'ZA' => 'Suðurafrika', + 'ZM' => 'Sambia', + 'ZW' => 'Simbabvi', +]; diff --git a/app/config/locales/fo.php b/app/config/locales/fo.php new file mode 100644 index 0000000000..389fc10d12 --- /dev/null +++ b/app/config/locales/fo.php @@ -0,0 +1,21 @@ + '"Kunstin om at vera vís er at vita hvat man skal misrøkja."', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'fo', + 'settings.direction' => 'ltr', + + // Service - Users + 'auth.emails.team' => '%s Lið', + 'auth.emails.confirm.title' => 'Vátta brúkari', + 'auth.emails.confirm.body' => 'fo.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => 'Glómt passord', + 'auth.emails.recovery.body' => 'fo.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => 'Innbjóðing til %s Lið hjá %s', + 'auth.emails.invitation.body' => 'fo.email.auth.invitation.tpl', + + 'locale.country.unknown' => 'Ókjent', + + 'countries' => include 'fo.countries.php', + 'continents' => include 'fo.continents.php', +]; diff --git a/app/config/locale/fr.continents.php b/app/config/locales/fr.continents.php similarity index 86% rename from app/config/locale/fr.continents.php rename to app/config/locales/fr.continents.php index 97f163de29..4573146952 100644 --- a/app/config/locale/fr.continents.php +++ b/app/config/locales/fr.continents.php @@ -2,7 +2,7 @@ return [ 'AF' => 'Afrique', - 'AN' => 'Antartique', + 'AN' => 'Antarctique', 'AS' => 'Asie', 'EU' => 'Europe', 'NA' => 'Amérique du Nord', diff --git a/app/config/locale/fr.countries.php b/app/config/locales/fr.countries.php similarity index 93% rename from app/config/locale/fr.countries.php rename to app/config/locales/fr.countries.php index ae0b0a18f3..cd9c7dd92e 100644 --- a/app/config/locale/fr.countries.php +++ b/app/config/locales/fr.countries.php @@ -29,7 +29,7 @@ return [ 'BN' => 'Brunei', 'BT' => 'Bhoutan', 'BW' => 'Botswana', - 'CF' => 'République centrafricaine', + 'CF' => 'Centrafrique', 'CA' => 'Canada', 'CH' => 'Suisse', 'CL' => 'Chili', @@ -121,13 +121,13 @@ return [ 'ME' => 'Monténégro', 'MN' => 'Mongolie', 'MZ' => 'Mozambique', - 'MR' => 'Mauritania', + 'MR' => 'Mauritanie', 'MU' => 'Maurice', 'MW' => 'Malawi', 'MY' => 'Malaisie', 'NA' => 'Namibie', 'NE' => 'Niger', - 'NG' => 'Nigeria', + 'NG' => 'Nigéria', 'NI' => 'Nicaragua', 'NL' => 'Pays-Bas', 'NON' => 'Norvège', @@ -155,12 +155,12 @@ return [ 'SG' => 'Singapour', 'SB' => 'Iles Salomon', 'SL' => 'Sierra Leone', - 'SV' => 'El Salvador', + 'SV' => 'Salvador', 'SM' => 'Saint-Marin', 'SO' => 'Somalie', 'RS' => 'Serbie', 'SS' => 'Soudan du Sud', - 'ST' => 'São Tomé et Príncipe', + 'ST' => 'Sao Tomé-et-Principe', 'SR' => 'Suriname', 'SK' => 'Slovaquie', 'SI' => 'Slovénie', @@ -168,12 +168,12 @@ return [ 'SZ' => 'Swaziland', 'SC' => 'Seychelles', 'SY' => 'Syrie', - 'TD' => 'Chad', + 'TD' => 'Tchad', 'TG' => 'Togo', 'TH' => 'Thaïlande', 'TJ' => 'Tadjikistan', - 'TM' => 'Turkmenistan', - 'TL' => 'Timor-Leste', + 'TM' => 'Turkménistan', + 'TL' => 'Timor oriental', 'TO' => 'Tonga', 'TT' => 'Trinidad et Tobago', 'TN' => 'Tunisie', @@ -186,12 +186,12 @@ return [ 'US' => 'États-Unis', 'UZ' => 'Ouzbékistan', 'VA' => 'Cité du Vatican', - 'VC' => 'Saint-Vincent-et-les Grenadines', + 'VC' => 'Saint-Vincent-et-les-Grenadines', 'VE' => 'Venezuela', 'VN' => 'Vietnam', 'VU' => 'Vanuatu', 'WS' => 'Samoa', - 'YE' => 'Yemen', + 'YE' => 'Yémen', 'ZA' => 'Afrique du Sud', 'ZM' => 'Zambie', 'ZW' => 'Zimbabwe', diff --git a/app/config/locale/fr.php b/app/config/locales/fr.php similarity index 100% rename from app/config/locale/fr.php rename to app/config/locales/fr.php diff --git a/app/config/locale/gr.continents.php b/app/config/locales/gr.continents.php similarity index 100% rename from app/config/locale/gr.continents.php rename to app/config/locales/gr.continents.php diff --git a/app/config/locale/gr.countries.php b/app/config/locales/gr.countries.php similarity index 100% rename from app/config/locale/gr.countries.php rename to app/config/locales/gr.countries.php diff --git a/app/config/locale/gr.php b/app/config/locales/gr.php similarity index 100% rename from app/config/locale/gr.php rename to app/config/locales/gr.php diff --git a/app/config/locale/he.continents.php b/app/config/locales/he.continents.php similarity index 100% rename from app/config/locale/he.continents.php rename to app/config/locales/he.continents.php diff --git a/app/config/locale/he.countries.php b/app/config/locales/he.countries.php similarity index 100% rename from app/config/locale/he.countries.php rename to app/config/locales/he.countries.php diff --git a/app/config/locale/he.php b/app/config/locales/he.php similarity index 100% rename from app/config/locale/he.php rename to app/config/locales/he.php diff --git a/app/config/locale/hi.continents.php b/app/config/locales/hi.continents.php similarity index 100% rename from app/config/locale/hi.continents.php rename to app/config/locales/hi.continents.php diff --git a/app/config/locale/hi.countries.php b/app/config/locales/hi.countries.php similarity index 100% rename from app/config/locale/hi.countries.php rename to app/config/locales/hi.countries.php diff --git a/app/config/locale/hi.php b/app/config/locales/hi.php similarity index 100% rename from app/config/locale/hi.php rename to app/config/locales/hi.php diff --git a/app/config/locale/hu.continents.php b/app/config/locales/hu.continents.php similarity index 100% rename from app/config/locale/hu.continents.php rename to app/config/locales/hu.continents.php diff --git a/app/config/locale/hu.countries.php b/app/config/locales/hu.countries.php similarity index 100% rename from app/config/locale/hu.countries.php rename to app/config/locales/hu.countries.php diff --git a/app/config/locale/hu.php b/app/config/locales/hu.php similarity index 100% rename from app/config/locale/hu.php rename to app/config/locales/hu.php diff --git a/app/config/locale/hy.continents.php b/app/config/locales/hy.continents.php similarity index 100% rename from app/config/locale/hy.continents.php rename to app/config/locales/hy.continents.php diff --git a/app/config/locale/hy.countries.php b/app/config/locales/hy.countries.php similarity index 100% rename from app/config/locale/hy.countries.php rename to app/config/locales/hy.countries.php diff --git a/app/config/locale/hy.php b/app/config/locales/hy.php similarity index 100% rename from app/config/locale/hy.php rename to app/config/locales/hy.php diff --git a/app/config/locale/id.continents.php b/app/config/locales/id.continents.php similarity index 100% rename from app/config/locale/id.continents.php rename to app/config/locales/id.continents.php diff --git a/app/config/locale/id.countries.php b/app/config/locales/id.countries.php similarity index 100% rename from app/config/locale/id.countries.php rename to app/config/locales/id.countries.php diff --git a/app/config/locale/id.php b/app/config/locales/id.php similarity index 100% rename from app/config/locale/id.php rename to app/config/locales/id.php diff --git a/app/config/locales/is.continents.php b/app/config/locales/is.continents.php new file mode 100644 index 0000000000..944787805c --- /dev/null +++ b/app/config/locales/is.continents.php @@ -0,0 +1,10 @@ + 'Afríku', + 'AN' => 'Suðurskautslandið', + 'AS' => 'Asíu', + 'EU' => 'Evrópa', + 'NA' => 'Norður Ameríka', + 'OC' => 'Eyjaálfu', + 'SA' => 'Suður Ameríka', +]; \ No newline at end of file diff --git a/app/config/locales/is.countries.php b/app/config/locales/is.countries.php new file mode 100644 index 0000000000..da8c78321b --- /dev/null +++ b/app/config/locales/is.countries.php @@ -0,0 +1,198 @@ + 'Afganistan', + 'AO' => 'Angóla', + 'AL' => 'Albanía', + 'AD' => 'Andorra', + 'AE' => 'Sameinuðu arabísku furstadæmin', + 'AR' => 'Argentína', + 'AM' => 'Armenía', + 'AG' => 'Antígva og Barbúda', + 'AU' => 'Ástralía', + 'AT' => 'Austurríki', + 'AZ' => 'Aserbaídsjan', + 'BI' => 'Búrúndí', + 'BE' => 'Belgíu', + 'BJ' => 'Benín', + 'BF' => 'Burkina Faso', + 'BD' => 'Bangladess', + 'BG' => 'Búlgaría', + 'BH' => 'Barein', + 'BS' => 'Bahamaeyjar', + 'BA' => 'Bosnía og Hersegóvína', + 'BY' => 'Hvíta-Rússland', + 'BZ' => 'Belís', + 'BO' => 'Bólivía', + 'BR' => 'Brasilía', + 'BB' => 'Barbados', + 'BN' => 'Brúnei', + 'BT' => 'Bútan', + 'BW' => 'Botswana', + 'CF' => 'Mið-Afríkulýðveldið', + 'CA' => 'Kanada', + 'CH' => 'Sviss', + 'CL' => 'Chile', + 'CN' => 'Kína', + 'CI' => 'Fílabeinsströndin', + 'CM' => 'Kamerún', + 'CD' => 'DR Kongó', + 'CG' => 'Lýðveldið Kongó', + 'CO' => 'Kólumbía', + 'KM' => 'Kómoreyjar', + 'CV' => 'Grænhöfðaeyjar', + 'CR' => 'Kosta Ríka', + 'CU' => 'Kúba', + 'CY' => 'Kýpur', + 'CZ' => 'Tékkland', + 'DE' => 'Þýskaland', + 'DJ' => 'Djibouti', + 'DM' => 'Dominica', + 'DK' => 'Danmörk', + 'DO' => 'Dóminíska lýðveldið', + 'DZ' => 'Alsír', + 'EC' => 'Ekvador', + 'EG' => 'Egyptaland', + 'ER' => 'Erítrea', + 'ES' => 'Spánn', + 'EE' => 'Eistland', + 'ET' => 'Eþíópía', + 'FI' => 'Finnland', + 'FJ' => 'Fídjieyjar', + 'FR' => 'Frakkland', + 'FM' => 'Míkrónesía', + 'GA' => 'Gabon', + 'GB' => 'Bretland', + 'GE' => 'Georgía', + 'GH' => 'Gana', + 'GN' => 'Gíneu', + 'GM' => 'Gambía', + 'GW' => 'Gíneu-Bissá', + 'GQ' => 'Miðbaugs-Gíneu', + 'GR' => 'Grikkland', + 'GD' => 'Grenada', + 'GT' => 'Gvatemala', + 'GY' => 'Guyana', + 'HN' => 'Hondúras', + 'HR' => 'Króatía', + 'HT' => 'Haítí', + 'HU' => 'Ungverjaland', + 'ID' => 'Indónesía', + 'IN' => 'Indland', + 'IE' => 'Írland', + 'IR' => 'Íran', + 'IQ' => 'Írak', + 'IS' => 'Ísland', + 'IL' => 'Ísrael', + 'IT' => 'Ítalía', + 'JM' => 'Jamaíka', + 'JO' => 'Jórdanía', + 'JP' => 'Japan', + 'KZ' => 'Kasakstan', + 'KE' => 'Kenya', + 'KG' => 'Kirgisistan', + 'KH' => 'Kambódía', + 'KI' => 'Kiribati', + 'KN' => 'Saint Kitts og Nevis', + 'KR' => 'Suður-Kórea', + 'KW' => 'Kúveit', + 'LA' => 'Laos', + 'LB' => 'Líbanon', + 'LR' => 'Líbería', + 'LY' => 'Líbýa', + 'LC' => 'Saint Lucia', + 'LI' => 'Liechtenstein', + 'LK' => 'Sri Lanka', + 'LS' => 'Lesótó', + 'LT' => 'Litháen', + 'LU' => 'Lúxemborg', + 'LV' => 'Lettland', + 'MA' => 'Marokkó', + 'MC' => 'Mónakó', + 'MD' => 'Moldavía', + 'MG' => 'Madagaskar', + 'MV' => 'Maldíveyjar', + 'MX' => 'Mexíkó', + 'MH' => 'Marshall-eyjar', + 'MK' => 'Makedónía', + 'ML' => 'Malí', + 'MT' => 'Malta', + 'MM' => 'Mjanmar', + 'ME' => 'Svartfjallaland', + 'MN' => 'Mongólía', + 'MZ' => 'Mósambík', + 'MR' => 'Máritanía', + 'MU' => 'Máritíus', + 'MW' => 'Malaví', + 'MY' => 'Malasía', + 'NA' => 'Namibía', + 'NE' => 'Níger', + 'NG' => 'Nígería', + 'NI' => 'Níkaragva', + 'NL' => 'Holland', + 'NO' => 'Noregur', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NZ' => 'Nýja Sjáland', + 'OM' => 'Óman', + 'PK' => 'Pakistan', + 'PA' => 'Panama', + 'PE' => 'Perú', + 'PH' => 'Filippseyjar', + 'PW' => 'Palau', + 'PG' => 'Papúa Nýja Gíneu', + 'PL' => 'Pólland', + 'KP' => 'Norður-Kórea', + 'PT' => 'Portúgal', + 'PY' => 'Paragvæ', + 'QA' => 'Katar', + 'RO' => 'Rúmenía', + 'RU' => 'Rússland', + 'RW' => 'Rúanda', + 'SA' => 'Sádí Arabía', + 'SD' => 'Súdan', + 'SN' => 'Senegal', + 'SG' => 'Singapore', + 'SB' => 'Salómonseyjar', + 'SL' => 'Sierra Leone', + 'SV' => 'El Salvador', + 'SM' => 'San Marino', + 'SO' => 'Sómalía', + 'RS' => 'Serbía', + 'SS' => 'Suður-Súdan', + 'ST' => 'São Tomé og Príncipe', + 'SR' => 'Súrínam', + 'SK' => 'Slóvakía', + 'SI' => 'Slóvenía', + 'SE' => 'Svíþjóð', + 'SZ' => 'Svasíland', + 'SC' => 'Seychelles', + 'SY' => 'Sýrland', + 'TD' => 'Chad', + 'TG' => 'Tógó', + 'TH' => 'Tæland', + 'TJ' => 'Tadsjikistan', + 'TM' => 'Túrkmenistan', + 'T' => 'Tímor-Leste', + 'TO' => 'Tonga', + 'TT' => 'Trínidad og Tóbagó', + 'TN' => 'Túnis', + 'TR' => 'Tyrkland', + 'TV' => 'Túvalú', + 'TZ' => 'Tansanía', + 'UG' => 'Úganda', + 'UA' => 'Úkraína', + 'UY' => 'Úrúgvæ', + 'US' => 'Bandaríkin', + 'UZ' => 'Úsbekistan', + 'VA' => 'Vatíkanborg', + 'VC' => 'Sankti Vinsent og Grenadíneyjar', + 'VE' => 'Venesúela', + 'VN' => 'Víetnam', + 'VU' => 'Vanúatú', + 'WS' => 'Samóa', + 'YE' => 'Jemen', + 'ZA' => 'Suður-Afríka', + 'ZM' => 'Sambía', + 'ZW' => 'Zimbabwe', +]; \ No newline at end of file diff --git a/app/config/locales/is.php b/app/config/locales/is.php new file mode 100644 index 0000000000..acc5ec8329 --- /dev/null +++ b/app/config/locales/is.php @@ -0,0 +1,17 @@ + '"Listin að vera vitur er listin að vita hvað á að líta framhjá."', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'is', + 'settings.direction' => 'ltr', + // Service - Users + 'auth.emails.team' => '%s Teymi', + 'auth.emails.confirm.title' => 'Staðfesting reiknings', + 'auth.emails.confirm.body' => 'is.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => 'Núllstilla lykilorð', + 'auth.emails.recovery.body' => 'is.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => 'Boð í %s lið í %s', + 'auth.emails.invitation.body' => 'is.email.auth.invitation.tpl', + 'locale.country.unknown' => 'Óþekktur', + 'countries' => include 'is.countries.php', + 'continents' => include 'is.continents.php', +]; \ No newline at end of file diff --git a/app/config/locale/it.continents.php b/app/config/locales/it.continents.php similarity index 100% rename from app/config/locale/it.continents.php rename to app/config/locales/it.continents.php diff --git a/app/config/locale/it.countries.php b/app/config/locales/it.countries.php similarity index 100% rename from app/config/locale/it.countries.php rename to app/config/locales/it.countries.php diff --git a/app/config/locale/it.php b/app/config/locales/it.php similarity index 77% rename from app/config/locale/it.php rename to app/config/locales/it.php index 3cccea78eb..759381649b 100644 --- a/app/config/locale/it.php +++ b/app/config/locales/it.php @@ -8,11 +8,11 @@ return [ // Servizio - Utenti 'auth.emails.team' => 'Team %s', 'auth.emails.confirm.title' => 'Conferma dell\'account', - 'auth.emails.confirm.body' => 'en.email.auth.confirm.tpl', + 'auth.emails.confirm.body' => 'it.email.auth.confirm.tpl', 'auth.emails.recovery.title' => 'Recupero password', - 'auth.emails.recovery.body' => 'en.email.auth.recovery.tpl', + 'auth.emails.recovery.body' => 'it.email.auth.recovery.tpl', 'auth.emails.invitation.title' => 'Invito al team %s di %s', - 'auth.emails.invitation.body' => 'en.email.auth.invitation.tpl', + 'auth.emails.invitation.body' => 'it.email.auth.invitation.tpl', 'locale.country.unknown' => 'Sconosciuto', diff --git a/app/config/locale/ja.continents.php b/app/config/locales/ja.continents.php similarity index 100% rename from app/config/locale/ja.continents.php rename to app/config/locales/ja.continents.php diff --git a/app/config/locale/ja.countries.php b/app/config/locales/ja.countries.php similarity index 100% rename from app/config/locale/ja.countries.php rename to app/config/locales/ja.countries.php diff --git a/app/config/locale/ja.php b/app/config/locales/ja.php similarity index 100% rename from app/config/locale/ja.php rename to app/config/locales/ja.php diff --git a/app/config/locale/jv.continents.php b/app/config/locales/jv.continents.php similarity index 100% rename from app/config/locale/jv.continents.php rename to app/config/locales/jv.continents.php diff --git a/app/config/locale/jv.countries.php b/app/config/locales/jv.countries.php similarity index 100% rename from app/config/locale/jv.countries.php rename to app/config/locales/jv.countries.php diff --git a/app/config/locale/jv.php b/app/config/locales/jv.php similarity index 100% rename from app/config/locale/jv.php rename to app/config/locales/jv.php diff --git a/app/config/locales/ko.continents.php b/app/config/locales/ko.continents.php new file mode 100644 index 0000000000..ce49c08f97 --- /dev/null +++ b/app/config/locales/ko.continents.php @@ -0,0 +1,11 @@ + '아프리카', + 'AN' => '남극 대륙', + 'AS' => '아시아', + 'EU' => '유럽', + 'NA' => '북아메리카', + 'OC' => '오세아니아', + 'SA' => '남아메리카', +]; diff --git a/app/config/locales/ko.countries.php b/app/config/locales/ko.countries.php new file mode 100644 index 0000000000..1d5b8645e5 --- /dev/null +++ b/app/config/locales/ko.countries.php @@ -0,0 +1,198 @@ + '아프가니스탄', + 'AO' => '앙골라', + 'AL' => '알바니아', + 'AD' => '안도라', + 'AE' => '아랍 에미리트 연합국', + 'AR' => '아르헨티나', + 'AM' => '아르메니아', + 'AG' => '앤티가 바부다', + 'AU' => '호주', + 'AT' => '오스트리아', + 'AZ' => '아제르바이잔', + 'BI' => '부룬디', + 'BE' => '벨기에', + 'BJ' => '베냉', + 'BF' => '부르키나 파소', + 'BD' => '방글라데시', + 'BG' => '불가리아', + 'BH' => '바레인', + 'BS' => '바하마', + 'BA' => '보스니아 헤르체코비나', + 'BY' => '벨로루시', + 'BZ' => '벨리즈', + 'BO' => '볼리비아', + 'BR' => '브라질', + 'BB' => '바베이도스', + 'BN' => '브루나이', + 'BT' => '부탄', + 'BW' => '보츠와나', + 'CF' => '중앙아프리카 공화국', + 'CA' => '캐나다', + 'CH' => '스위스', + 'CL' => '칠레', + 'CN' => '중국', + 'CI' => '코트디부아르', + 'CM' => '카메룬', + 'CD' => '콩고공화국의 행정', + 'CG' => '콩고 공화국', + 'CO' => '콜롬비아', + 'KM' => '코모로', + 'CV' => '카보베르데', + 'CR' => '코스타리카', + 'CU' => '쿠바', + 'CY' => '키프로스', + 'CZ' => '체코', + 'DE' => '독일', + 'DJ' => '지부티', + 'DM' => '도미니카', + 'DK' => '덴마크', + 'DO' => '도미니카 공화국', + 'DZ' => '알제리아', + 'EC' => '에콰도르', + 'EG' => '이집트', + 'ER' => '에리트레아', + 'ES' => '스페인', + 'EE' => '에스토니아', + 'ET' => '에티오피아', + 'FI' => '핀란드', + 'FJ' => '피지', + 'FR' => '프랑스', + 'FM' => '미크로네시아', + 'GA' => '가봉', + 'GB' => '영국', + 'GE' => '조지아', + 'GH' => '가나', + 'GN' => '기니', + 'GM' => '감비아', + 'GW' => '기니비사우', + 'GQ' => '적도 기니', + 'GR' => '그리스', + 'GD' => '그레나다', + 'GT' => '과테말라', + 'GY' => '기아나', + 'HN' => '온두라스', + 'HR' => '크로아티아', + 'HT' => '아이티', + 'HU' => '헝가리', + 'ID' => '인도네시아', + 'IN' => '인도', + 'IE' => '아일랜드', + 'IR' => '이란', + 'IQ' => '이라크', + 'IS' => '아이스란드', + 'IL' => '이스라엘', + 'IT' => '이탈리아', + 'JM' => '자마이카', + 'JO' => '요르단', + 'JP' => '일본', + 'KZ' => '카자흐스탄', + 'KE' => '케냐', + 'KG' => '키르기스스탄', + 'KH' => '캄보디아', + 'KI' => '키리바시', + 'KN' => '세인트키츠네비스', + 'KR' => '대한민국', + 'KW' => '쿠웨이트', + 'LA' => '라오스', + 'LB' => '레바논', + 'LR' => '라이베리아', + 'LY' => '리비아', + 'LC' => '세인트루시아', + 'LI' => '리히텐슈타인', + 'LK' => '스리랑카', + 'LS' => '레소토', + 'LT' => '리투아니아', + 'LU' => '룩셈부르크', + 'LV' => '라트비아', + 'MA' => '모로코', + 'MC' => '모나코', + 'MD' => '몰도바', + 'MG' => '마다가스카르', + 'MV' => '몰디브', + 'MX' => '멕시코', + 'MH' => '마샬 군도', + 'MK' => '마케도니아', + 'ML' => '말리', + 'MT' => '몰타', + 'MM' => '미얀마', + 'ME' => '몬테네그로', + 'MN' => '몽골리아', + 'MZ' => '모잠비크', + 'MR' => '모리타니', + 'MU' => '모리셔스', + 'MW' => '말라위', + 'MY' => '말레이시아', + 'NA' => '나미비아', + 'NE' => '니제르', + 'NG' => '나이지리아', + 'NI' => '니카라과', + 'NL' => '네덜란드', + 'NO' => '노르웨이', + 'NP' => '네팔', + 'NR' => '나우루', + 'NZ' => '뉴질랜드', + 'OM' => '오만', + 'PK' => '파키스탄', + 'PA' => '파나마', + 'PE' => '페루', + 'PH' => '필리핀 제도', + 'PW' => '팔라우', + 'PG' => '파푸아뉴기니', + 'PL' => '폴란드', + 'KP' => '북한', + 'PT' => '포르투갈', + 'PY' => '파라과이', + 'QA' => '카타르', + 'RO' => '루마니아', + 'RU' => '러시아', + 'RW' => '르완다', + 'SA' => '사우디 아라비아', + 'SD' => '수단', + 'SN' => '세네갈', + 'SG' => '싱가포르', + 'SB' => '솔로몬 제도', + 'SL' => '시에라리온', + 'SV' => '엘살바도르', + 'SM' => '산마리노', + 'SO' => '소말리아', + 'RS' => '세르비아', + 'SS' => '남수단', + 'ST' => '상투메 프린시페', + 'SR' => '수리남', + 'SK' => '슬로바키아 공화국', + 'SI' => '슬로베니아', + 'SE' => '스웨덴', + 'SZ' => '스와질란드', + 'SC' => '세이셸', + 'SY' => '시리아', + 'TD' => '차드', + 'TG' => '토고', + 'TH' => '태국', + 'TJ' => '타지키스탄', + 'TM' => '투르크메니스탄', + 'TL' => '동티모르', + 'TO' => '통가', + 'TT' => '트리니다드토바고', + 'TN' => '튀니지', + 'TR' => '터키', + 'TV' => '투발루', + 'TZ' => '탄자니아', + 'UG' => '우간다', + 'UA' => '우크라이나', + 'UY' => '우루과이', + 'US' => '미국', + 'UZ' => '우즈베키스탄', + 'VA' => '바티칸시국', + 'VC' => '세인트빈센트 그레나딘', + 'VE' => '베네수엘라', + 'VN' => '베트남', + 'VU' => '바누아투', + 'WS' => '사모아', + 'YE' => '예멘', + 'ZA' => '남아프리카 공화국', + 'ZM' => '잠비아', + 'ZW' => '짐바브웨', +]; diff --git a/app/config/locales/ko.php b/app/config/locales/ko.php new file mode 100644 index 0000000000..8400c23d43 --- /dev/null +++ b/app/config/locales/ko.php @@ -0,0 +1,21 @@ + '"지혜롭게 되는 묘책은 그동안 간과했던 것을 알아내는 것에 있다"', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'ko', + 'settings.direction' => 'ltr', + + // Service - Users + 'auth.emails.team' => '%s 팀', + 'auth.emails.confirm.title' => '계정 확인', + 'auth.emails.confirm.body' => 'ko.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => '비밀번호 재설정', + 'auth.emails.recovery.body' => 'ko.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => '%s 팀(%s 프로젝트)에 합류 초대', + 'auth.emails.invitation.body' => 'ko.email.auth.invitation.tpl', + + 'locale.country.unknown' => '알려지지 않은', + + 'countries' => include 'ko.countries.php', + 'continents' => include 'ko.continents.php', +]; diff --git a/app/config/locale/lt.continents.php b/app/config/locales/lt.continents.php similarity index 100% rename from app/config/locale/lt.continents.php rename to app/config/locales/lt.continents.php diff --git a/app/config/locale/lt.countries.php b/app/config/locales/lt.countries.php similarity index 100% rename from app/config/locale/lt.countries.php rename to app/config/locales/lt.countries.php diff --git a/app/config/locale/lt.php b/app/config/locales/lt.php similarity index 100% rename from app/config/locale/lt.php rename to app/config/locales/lt.php diff --git a/app/config/locales/ml.continents.php b/app/config/locales/ml.continents.php new file mode 100644 index 0000000000..e6edd86eea --- /dev/null +++ b/app/config/locales/ml.continents.php @@ -0,0 +1,10 @@ + 'ആഫ്രിക്ക', + 'AN' => 'അന്റാർട്ടിക്ക', + 'AS' => 'ഏഷ്യ', + 'EU' => 'യൂറോപ്പ്', + 'NA' => 'വടക്കേ അമേരിക്ക', + 'OC' => 'ഓഷ്യാനിയ', + 'SA' => 'തെക്കേ അമേരിക്ക', +]; diff --git a/app/config/locales/ml.countries.php b/app/config/locales/ml.countries.php new file mode 100644 index 0000000000..95458cfcd8 --- /dev/null +++ b/app/config/locales/ml.countries.php @@ -0,0 +1,197 @@ + 'അഫ്ഗാനിസ്ഥാൻ', + 'AO' => 'അംഗോള', + 'AL' => 'അൽബേനിയ', + 'AD' => 'ആൻഡോറ', + 'AE' => 'യുണൈറ്റഡ് അറബ് എമിറേറ്റ്സ്', + 'AR' => 'അർജന്റീന', + 'AM' => 'അർമേനിയ', + 'AG' => 'ആന്റിഗ്വ & ബാർബുഡ', + 'AU' => 'ആസ്ട്രേലിയ', + 'AT' => 'ആസ്ട്രിയ', + 'AZ' => 'അസർബൈജാൻ', + 'BI' => 'ബുറുണ്ടി', + 'BE' => 'ബെൽജിയം', + 'BJ' => 'ബെനിൻ', + 'BF' => 'ബുർക്കിന ഫാസോ', + 'BD' => 'ബംഗ്ലാദേശ്', + 'BG' => 'ബൾഗേറിയ', + 'BH' => 'ബഹ്റൈൻ', + 'BS' => 'ബഹമാസ്', + 'BA' => 'ബോസ്നിയ & ഹെർസെഗോവിന', + 'BY' => 'ബെലാറസ്', + 'BZ' => 'ബെലിസ്', + 'BO' => 'ബൊളീവിയ', + 'BR' => 'ബ്രസീൽ', + 'BB' => 'ബാർബഡോസ്', + 'BN' => 'ബ്രൂണോ', + 'BT' => 'ഭൂട്ടാൻ', + 'BW' => 'ബോട്സ്വാന', + 'CF' => 'സെന്റ്രൽ ആഫ്രിക്കൻ റിപ്പബ്ലിക്', + 'CA' => 'കാനഡ', + 'CH' => 'സ്വിറ്റ്സർലൻഡ്', + 'CL' => 'ചിലി', + 'CN' => 'ചൈന', + 'CI' => 'ഐവറികോസ്റ്റ്', + 'CM' => 'കാമറൂൺ', + 'CD' => 'DR കോംഗോ', + 'CG' => 'റിപ്പബ്ലിക് ഓഫ് കോംഗോ', + 'CO' => 'കൊളംബിയ', + 'KM' => 'കോമൊറോസ്', + 'CV' => 'കേപ് വേർഡെ', + 'CR' => 'കോസ്റ്റാറിക്ക', + 'CU' => 'ക്യൂബ', + 'CY' => 'സൈപ്രസ്', + 'CZ' => 'ചെച്ചിയ', + 'DE' => 'ജർമനി', + 'DJ' => 'ജിബൂട്ടി', + 'DM' => 'ഡൊമിനിക', + 'DK' => 'ഡെന്മാർക്ക്', + 'DO' => 'ഡൊമിനിക്കൻ റിപ്പബ്ലിക്', + 'DZ' => 'അൾജീരിയ', + 'EC' => 'ഇക്വഡോർ', + 'EG' => 'ഈജിപ്റ്റ്', + 'ER' => 'എറിത്രിയ', + 'ES' => 'സ്പെയിൻ', + 'EE' => 'എസ്റ്റോണിയ', + 'ET' => 'എത്യോപ്യ', + 'FI' => 'ഫിൻലാന്റ്', + 'FJ' => 'ഫിജി', + 'FR' => 'ഫ്രാൻസ്', + 'FM' => 'മൈക്രോനേഷ്യ', + 'GA' => 'ഗബോൺ', + 'GB' => 'യുണൈറ്റഡ് കിങ്ഡം', + 'GE' => 'ജോർജ്ജിയ', + 'GH' => 'ഘാന', + 'GN' => 'ഗിനിയ', + 'GM' => 'ഗാംബിയ', + 'GW' => 'ഗിനിയ-ബിസാഉ', + 'GQ' => 'ഇക്വറ്റോറിയൽ ഗിനിയ', + 'GR' => 'ഗ്രീസ്', + 'GD' => 'ഗ്രെനാഡ', + 'GT' => 'ഗ്വാട്ടിമാല', + 'GY' => 'ഗയാന', + 'HN' => 'ഹോണ്ടുറാസ്', + 'HR' => 'ക്രോയേഷ്യ', + 'HT' => 'ഹെയ്തി', + 'HU' => 'ഹംഗറി', + 'ID' => 'ഇന്തൊനേഷ്യ', + 'IN' => 'ഇന്ത്യ', + 'IE' => 'അയർലണ്ട്', + 'IR' => 'ഇറാൻ', + 'IQ' => 'ഇറാഖ്', + 'IS' => 'ഐലന്റ്', + 'IL' => 'ഇസ്രായേൽ', + 'IT' => 'ഇറ്റലി', + 'JM' => 'ജമൈക്ക', + 'JO' => 'ജോർദ്ദാൻ', + 'JP' => 'ജപ്പാൻ', + 'KZ' => 'കസാക്കിസ്ഥാൻ', + 'KE' => 'കെനിയ', + 'KG' => 'കിർഗിസ്ഥാൻ', + 'KH' => 'കമ്പോഡിയ', + 'KI' => 'കിറിബാട്ടി', + 'KN' => 'സൈന്റ് കിറ്റ്സ് & നെവിസ്', + 'KR' => 'ദക്ഷിണ കൊറിയ', + 'KW' => 'കുവൈറ്റ്', + 'LA' => 'ലാവോസ്', + 'LB' => 'ലെബനൻ', + 'LR' => 'ലൈബീരിയ', + 'LY' => 'ലിബിയ', + 'LC' => 'സൈന്റ് ലൂസിയ', + 'LI' => 'ലിറ്റിൻഷൈൻ', + 'LK' => 'ശ്രീലങ്ക', + 'LS' => 'ലെസോതോ', + 'LT' => 'ലിത്വാനിയ', + 'LU' => 'ലക്സംബർഗ്', + 'LV' => 'ലാത്വിയ', + 'MA' => 'മൊറോക്കോ', + 'MC' => 'മൊണാകോ', + 'MD' => 'മോൾഡോവ', + 'MG' => 'മഡഗാസ്കർ', + 'MV' => 'മാലിദ്വീപ്', + 'MX' => 'മെക്സിക്കോ', + 'MH' => 'മാർഷൽ ദ്വീപുകൾ', + 'MK' => 'മാസിഡോണിയ', + 'ML' => 'മാലി', + 'MT' => 'മാൾട്ട', + 'MM' => 'മ്യാൻമർ', + 'ME' => 'മോണ്ടിനെഗ്രോ', + 'MN' => 'മംഗോളിയ', + 'MZ' => 'മോസാംമ്പിക്', + 'MR' => 'മൗറിത്താനിയ', + 'MU' => 'മൗറിഷ്യസ്', + 'MW' => 'മലാവി', + 'MY' => 'മലേഷ്യ', + 'NA' => 'നമീബിയ', + 'NE' => 'നൈജർ', + 'NG' => 'നൈജീരിയ', + 'NI' => 'നിക്കരാഗ്വ', + 'NL' => 'നെതർലൻഡ്സ്', + 'NO' => 'നോർവെ', + 'NP' => 'നേപ്പാൾ', + 'NR' => 'നൗറു', + 'NZ' => 'ന്യൂസിലൻഡ്', + 'OM' => 'ഒമാൻ', + 'PK' => 'പാക്കിസ്ഥാൻ', + 'PA' => 'പനാമ', + 'PE' => 'പെറു', + 'PH' => 'ഫിലിപ്പീൻസ്', + 'PW' => 'പലാവു', + 'PG' => 'പാപ്പുവ ന്യൂഗിനിയ', + 'PL' => 'പോളണ്ട്', + 'KP' => 'ഉത്തര കൊറിയ', + 'PT' => 'പോർച്ചുഗൽ', + 'PY' => 'പരാഗ്വേ', + 'QA' => 'ഖത്തർ', + 'RO' => 'റൊമാനിയ', + 'RU' => 'റഷ്യ', + 'RW' => 'റുവാണ്ട', + 'SA' => 'സൗദി അറേബ്യ', + 'SD' => 'സുഡാൻ', + 'SN' => 'സെനഗൽ', + 'SG' => 'സിംഗപ്പൂർ', + 'SB' => 'സോളമൻ ദ്വീപുകൾ', + 'SL' => 'സിയേറ ലിയോൺ', + 'SV' => 'എൽസാൽവദോർ', + 'SM' => 'സാൻ മരീനോ', + 'SO' => 'സൊമാലിയ', + 'RS' => 'സെർബിയ', + 'SS' => 'സൗത്ത് സുഡാൻ', + 'ST' => 'സാവോ ടോം & പ്രിൻസൈപ്', + 'SR' => 'സുറിനാമി', + 'SK' => 'സ്ലൊവാക്യ', + 'SI' => 'സ്ലൊവേനിയ', + 'SE' => 'സ്വീഡൻ', + 'SZ' => 'സ്വാസിലാന്റ്', + 'SC' => 'സീഷെയ്ൽസ്', + 'SY' => 'സിറിയ', + 'TD' => 'ചാട്', + 'TG' => 'ടോഗോ', + 'TH' => 'തായ്‌ലൻഡ്', + 'TJ' => 'താജിക്കിസ്ഥാൻ', + 'TM' => 'തുർക്ക്മെനിസ്ഥാൻ', + 'TL' => 'ടിമോർ-ലെസ്തെ', + 'TO' => 'ടോങ്ക', + 'TT' => 'ട്രിനിഡാഡ് ആന്റ് ടൊബാഗോ', + 'TN' => 'ടുണീഷ്യ', + 'TR' => 'തുർക്കി', + 'TV' => 'തുവാളു', + 'TZ' => 'ടാൻസാനിയ', + 'UG' => 'ഉഗാണ്ട', + 'UA' => 'ഉക്രൈൻ', + 'UY' => 'യുറഗ്വായ്', + 'US' => 'യുണൈറ്റഡ് സ്റ്റേറ്റ്സ്', + 'UZ' => 'ഉസ്ബെക്കിസ്ഥാൻ', + 'VA' => 'വത്തിക്കാൻ സിറ്റി', + 'VC' => 'സൈന്റ് വിൻസെന്റ് & ഗ്രെനാഡിൻസ്', + 'VE' => 'വെനസ്വേല', + 'VN' => 'വിയറ്റ്നാം', + 'VU' => 'വന്വാട്ടു', + 'WS' => 'സമോവ', + 'YE' => 'യെമൻ', + 'ZA' => 'സൗത്ത് ആഫ്രിക്ക', + 'ZM' => 'സാംബിയ', + 'ZW' => 'സിംബാബ്‌വെ', +]; diff --git a/app/config/locales/ml.php b/app/config/locales/ml.php new file mode 100644 index 0000000000..78819283d8 --- /dev/null +++ b/app/config/locales/ml.php @@ -0,0 +1,17 @@ + '"എന്താണ് അവഗണിക്കേണ്ടതെന്ന് അറിയാനുള്ള കലയാണ് ബുദ്ധിമാനായിരിക്കുക എന്നത്."', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'ml', + 'settings.direction' => 'ltr', + // Service - Users + 'auth.emails.team' => '%s ടീം', + 'auth.emails.confirm.title' => 'അക്കൗണ്ട് കൺഫർമേഷൻ', + 'auth.emails.confirm.body' => 'ml.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => 'പാസ്‌വേഡ് റീസെറ്റ്', + 'auth.emails.recovery.body' => 'ml.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => 'ഇൻവിറ്റേഷൻ- %s ടീം, %s പ്രോജക്ട്', + 'auth.emails.invitation.body' => 'ml.email.auth.invitation.tpl', + 'locale.country.unknown' => 'Unknown', + 'countries' => include 'ml.countries.php', + 'continents' => include 'ml.continents.php', +]; diff --git a/app/config/locales/ms.continents.php b/app/config/locales/ms.continents.php new file mode 100644 index 0000000000..db4dbf6243 --- /dev/null +++ b/app/config/locales/ms.continents.php @@ -0,0 +1,11 @@ + 'Afrika', + 'AN' => 'Antartika', + 'AS' => 'Asia', + 'EU' => 'Eropah', + 'NA' => 'Amerika Utara', + 'OC' => 'Oceania', + 'SA' => 'Amerika Selatan', +]; diff --git a/app/config/locales/ms.countries.php b/app/config/locales/ms.countries.php new file mode 100644 index 0000000000..bf94484aa7 --- /dev/null +++ b/app/config/locales/ms.countries.php @@ -0,0 +1,198 @@ + 'Afghanistan', + 'AO' => 'Angola', + 'AL' => 'Albania', + 'AD' => 'Andorra', + 'AE' => 'Emiriah Arab Bersatu', + 'AR' => 'Argentina', + 'AM' => 'Armenia', + 'AG' => 'Antigua dan Barbuda', + 'AU' => 'Australia', + 'AT' => 'Austria', + 'AZ' => 'Azerbaijan', + 'BI' => 'Burundi', + 'BE' => 'Belgium', + 'BJ' => 'Benin', + 'BF' => 'Burkina Faso', + 'BD' => 'Bangladesh', + 'BG' => 'Bulgaria', + 'BH' => 'Bahrain', + 'BS' => 'Bahamas', + 'BA' => 'Bosnia dan Herzegovina', + 'BY' => 'Belarus', + 'BZ' => 'Belize', + 'BO' => 'Bolivia', + 'BR' => 'Brazil', + 'BB' => 'Barbados', + 'BN' => 'Brunei', + 'BT' => 'Bhutan', + 'BW' => 'Botswana', + 'CF' => 'Republik Afrika Tengah', + 'CA' => 'Canada', + 'CH' => 'Switzerland', + 'CL' => 'Chile', + 'CN' => 'China', + 'CI' => 'Ivory Coast', + 'CM' => 'Cameroon', + 'CD' => 'Republik Demokratik Congo', + 'CG' => 'Republik Congo', + 'CO' => 'Colombia', + 'KM' => 'Comoros', + 'CV' => 'Cape Verde', + 'CR' => 'Costa Rica', + 'CU' => 'Cuba', + 'CY' => 'Cyprus', + 'CZ' => 'Czechia', + 'DE' => 'Jerman', + 'DJ' => 'Djibouti', + 'DM' => 'Dominica', + 'DK' => 'Denmark', + 'DO' => 'Republik Dominican', + 'DZ' => 'Algeria', + 'EC' => 'Ecuador', + 'EG' => 'Mesir', + 'ER' => 'Eritrea', + 'ES' => 'Sepanyol', + 'EE' => 'Estonia', + 'ET' => 'Ethiopia', + 'FI' => 'Finland', + 'FJ' => 'Fiji', + 'FR' => 'Perancis', + 'FM' => 'Micronesia', + 'GA' => 'Gabon', + 'GB' => 'United Kingdom', + 'GE' => 'Georgia', + 'GH' => 'Ghana', + 'GN' => 'Guinea', + 'GM' => 'Gambia', + 'GW' => 'Guinea-Bissau', + 'GQ' => 'Equatorial Guinea', + 'GR' => 'Greece', + 'GD' => 'Granada', + 'GT' => 'Guatemala', + 'GY' => 'Guyana', + 'HN' => 'Honduras', + 'HR' => 'Kroatia', + 'HT' => 'Haiti', + 'HU' => 'Hungary', + 'ID' => 'Indonesia', + 'IN' => 'India', + 'IE' => 'Ireland', + 'IR' => 'Iran', + 'IQ' => 'Iraq', + 'IS' => 'Iceland', + 'IL' => 'Israel', + 'IT' => 'Italy', + 'JM' => 'Jamaica', + 'JO' => 'Jordan', + 'JP' => 'Jepun', + 'KZ' => 'Kazakhstan', + 'KE' => 'Kenya', + 'KG' => 'Kyrgyzstan', + 'KH' => 'Cambodia', + 'KI' => 'Kiribati', + 'KN' => 'Saint Kitts dan Nevis', + 'KR' => 'Korea Selatan', + 'KW' => 'Kuwait', + 'LA' => 'Laos', + 'LB' => 'Lebanon', + 'LR' => 'Liberia', + 'LY' => 'Libya', + 'LC' => 'Saint Lucia', + 'LI' => 'Liechtenstein', + 'LK' => 'Sri Lanka', + 'LS' => 'Lesotho', + 'LT' => 'Lithuania', + 'LU' => 'Luxembourg', + 'LV' => 'Latvia', + 'MA' => 'Morocco', + 'MC' => 'Monaco', + 'MD' => 'Moldova', + 'MG' => 'Madagascar', + 'MV' => 'Maldives', + 'MX' => 'Mexico', + 'MH' => 'Marshall Islands', + 'MK' => 'Macedonia', + 'ML' => 'Mali', + 'MT' => 'Malta', + 'MM' => 'Myanmar', + 'ME' => 'Montenegro', + 'MN' => 'Mongolia', + 'MZ' => 'Mozambique', + 'MR' => 'Mauritania', + 'MU' => 'Mauritius', + 'MW' => 'Malawi', + 'MY' => 'Malaysia', + 'NA' => 'Namibia', + 'NE' => 'Niger', + 'NG' => 'Nigeria', + 'NI' => 'Nicaragua', + 'NL' => 'Netherlands', + 'NO' => 'Norway', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NZ' => 'New Zealand', + 'OM' => 'Oman', + 'PK' => 'Pakistan', + 'PA' => 'Panama', + 'PE' => 'Peru', + 'PH' => 'Filipina', + 'PW' => 'Palau', + 'PG' => 'Papua New Guinea', + 'PL' => 'Poland', + 'KP' => 'Korea Utara', + 'PT' => 'Portugal', + 'PY' => 'Paraguay', + 'QA' => 'Qatar', + 'RO' => 'Romania', + 'RU' => 'Russia', + 'RW' => 'Rwanda', + 'SA' => 'Arab Saudi', + 'SD' => 'Sudan', + 'SN' => 'Senegal', + 'SG' => 'Singapore', + 'SB' => 'Kepulauan Solomon', + 'SL' => 'Sierra Leone', + 'SV' => 'El Salvador', + 'SM' => 'San Marino', + 'SO' => 'Somalia', + 'RS' => 'Serbia', + 'SS' => 'Sudan Selatan', + 'ST' => 'São Tomé dan Príncipe', + 'SR' => 'Suriname', + 'SK' => 'Slovakia', + 'SI' => 'Slovenia', + 'SE' => 'Sweden', + 'SZ' => 'Swaziland', + 'SC' => 'Seychelles', + 'SY' => 'Syria', + 'TD' => 'Chad', + 'TG' => 'Togo', + 'TH' => 'Thailand', + 'TJ' => 'Tajikistan', + 'TM' => 'Turkmenistan', + 'TL' => 'Timor-Leste', + 'TO' => 'Tonga', + 'TT' => 'Trinidad dan Tobago', + 'TN' => 'Tunisia', + 'TR' => 'Turkey', + 'TV' => 'Tuvalu', + 'TZ' => 'Tanzania', + 'UG' => 'Uganda', + 'UA' => 'Ukraine', + 'UY' => 'Uruguay', + 'US' => 'Amerika Syarikat', + 'UZ' => 'Uzbekistan', + 'VA' => 'Vatican City', + 'VC' => 'Saint Vincent dan Grenadines', + 'VE' => 'Venezuela', + 'VN' => 'Vietnam', + 'VU' => 'Vanuatu', + 'WS' => 'Samoa', + 'YE' => 'Yemen', + 'ZA' => 'Afrika Selatan', + 'ZM' => 'Zambia', + 'ZW' => 'Zimbabwe', +]; diff --git a/app/config/locales/ms.php b/app/config/locales/ms.php new file mode 100644 index 0000000000..7854ac30c5 --- /dev/null +++ b/app/config/locales/ms.php @@ -0,0 +1,21 @@ + '"Seni menjadi pandai adalah seni mengetahui apa yang dilihatnya."', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'ms', + 'settings.direction' => 'ltr', + + // Service - Users + 'auth.emails.team' => '%s Team', + 'auth.emails.confirm.title' => 'Pengesahan akaun', + 'auth.emails.confirm.body' => 'ms.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => 'Tetapkan semula kata laluan', + 'auth.emails.recovery.body' => 'ms.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => 'Undangan ke dalam kumpulan %s di %s', + 'auth.emails.invitation.body' => 'ms.email.auth.invitation.tpl', + + 'locale.country.unknown' => 'Tidak Diketahui', + + 'countries' => include 'ms.countries.php', + 'continents' => include 'ms.continents.php', +]; diff --git a/app/config/locale/nl.continents.php b/app/config/locales/nl.continents.php similarity index 100% rename from app/config/locale/nl.continents.php rename to app/config/locales/nl.continents.php diff --git a/app/config/locale/nl.countries.php b/app/config/locales/nl.countries.php similarity index 100% rename from app/config/locale/nl.countries.php rename to app/config/locales/nl.countries.php diff --git a/app/config/locale/nl.php b/app/config/locales/nl.php similarity index 100% rename from app/config/locale/nl.php rename to app/config/locales/nl.php diff --git a/app/config/locale/no.continents.php b/app/config/locales/no.continents.php similarity index 100% rename from app/config/locale/no.continents.php rename to app/config/locales/no.continents.php diff --git a/app/config/locale/no.countries.php b/app/config/locales/no.countries.php similarity index 100% rename from app/config/locale/no.countries.php rename to app/config/locales/no.countries.php diff --git a/app/config/locale/no.php b/app/config/locales/no.php similarity index 100% rename from app/config/locale/no.php rename to app/config/locales/no.php diff --git a/app/config/locales/ph.continents.php b/app/config/locales/ph.continents.php new file mode 100644 index 0000000000..024e6a0557 --- /dev/null +++ b/app/config/locales/ph.continents.php @@ -0,0 +1,11 @@ + 'Aprika', + 'AN' => 'Antartika', + 'AS' => 'Asya', + 'EU' => 'Europa', + 'NA' => 'Amerika Norte', + 'OC' => 'Oceanya', + 'SA' => 'Amerika Sur', +]; diff --git a/app/config/locales/ph.countries.php b/app/config/locales/ph.countries.php new file mode 100644 index 0000000000..d16c7cf395 --- /dev/null +++ b/app/config/locales/ph.countries.php @@ -0,0 +1,198 @@ + 'Apganistan', + 'AO' => 'Anggola', + 'AL' => 'Albanya', + 'AD' => 'Andorra', + 'AE' => 'United Arab Emirates', + 'AR' => 'Arhentina', + 'AM' => 'Armenya', + 'AG' => 'Antigua at Barbuda', + 'AU' => 'Australya', + 'AT' => 'Austria', + 'AZ' => 'Aserbayan', + 'BI' => 'Burundi', + 'BE' => 'Belhika', + 'BJ' => 'Benin', + 'BF' => 'Burkina Faso', + 'BD' => 'Bangladesh', + 'BG' => 'Bulgarya', + 'BH' => 'Barein', + 'BS' => 'Bahamas', + 'BA' => 'Bosnia at Herzegovina', + 'BY' => 'Biyelorusya', + 'BZ' => 'Belise', + 'BO' => 'Bolivia', + 'BR' => 'Brasil', + 'BB' => 'Barbados', + 'BN' => 'Brunay', + 'BT' => 'Butan', + 'BW' => 'Botswana', + 'CF' => 'Republika ng Gitnang Aprika', + 'CA' => 'Canada', + 'CH' => 'Suwisa', + 'CL' => 'Chile', + 'CN' => 'Tsina', + 'CI' => 'Baybaying Garing', + 'CM' => 'Kamerun', + 'CD' => 'Demokratikong Republika ng Konggo', + 'CG' => 'Republika ng Konggo', + 'CO' => 'Colombia', + 'KM' => 'Komoros', + 'CV' => 'Kabo Berde', + 'CR' => 'Costa Rica', + 'CU' => 'Kuba', + 'CY' => 'Tsipre', + 'CZ' => 'Republikang Tseko', + 'DE' => 'Alemanya', + 'DJ' => 'Hiboti', + 'DM' => 'Dominika', + 'DK' => 'Dinamarka', + 'DO' => 'Republikang Dominikano', + 'DZ' => 'Arhelya', + 'EC' => 'Ekwador', + 'EG' => 'Ehipto', + 'ER' => 'Eritrea', + 'ES' => 'Espanya', + 'EE' => 'Estonia', + 'ET' => 'Etiyopiya', + 'FI' => 'Finland', + 'FJ' => 'Piyi', + 'FR' => 'Pransiya', + 'FM' => 'Mikronesya', + 'GA' => 'Gabon', + 'GB' => 'Nagkakaisang Kaharian', + 'GE' => 'Heorhiya', + 'GH' => 'Ghana', + 'GN' => 'Ginea', + 'GM' => 'Ang Gambiya', + 'GW' => 'Ginea-Bissau', + 'GQ' => 'Gineang Ekwatoriyal', + 'GR' => 'Gresya', + 'GD' => 'Grenada', + 'GT' => 'Guwatemala', + 'GY' => 'Guyana', + 'HN' => 'Honduras', + 'HR' => 'Kroasya', + 'HT' => 'Hayti', + 'HU' => 'Unggarya', + 'ID' => 'Indonesya', + 'IN' => 'Indiya', + 'IE' => 'Irlanda', + 'IR' => 'Iran', + 'IQ' => 'Irak', + 'IS' => 'Lupangyelo', + 'IL' => 'Israel', + 'IT' => 'Italya', + 'JM' => 'Hamayka', + 'JO' => 'Hordan', + 'JP' => 'Hapon', + 'KZ' => 'Kazakhstan', + 'KE' => 'Kenya', + 'KG' => 'Kirgistan', + 'KH' => 'Kambodya', + 'KI' => 'Kiribati', + 'KN' => 'San Cristobal at Niyebes', + 'KR' => 'Timog Korea', + 'KW' => 'Kuwait', + 'LA' => 'Laos', + 'LB' => 'Libano', + 'LR' => 'Liberia', + 'LY' => 'Libya', + 'LC' => 'Santa Lucia', + 'LI' => 'Liechtenstein', + 'LK' => 'Sri Lanka', + 'LS' => 'Lesoto', + 'LT' => 'Litwaniya', + 'LU' => 'Luxembourg', + 'LV' => 'Latbiya', + 'MA' => 'Maruekos', + 'MC' => 'Monako', + 'MD' => 'Moldavia', + 'MG' => 'Madagaskar', + 'MV' => 'Maldives', + 'MX' => 'Mehiko', + 'MH' => 'Kapuluang Marshall', + 'MK' => 'Macedonia', + 'ML' => 'Mali', + 'MT' => 'Malta', + 'MM' => 'Myanmar', + 'ME' => 'Montenegro', + 'MN' => 'Mongolia', + 'MZ' => 'Mozambique', + 'MR' => 'Mauritania', + 'MU' => 'Maurisyo', + 'MW' => 'Malawi', + 'MY' => 'Malasya', + 'NA' => 'Namibya', + 'NE' => 'Niyer', + 'NG' => 'Nigerya', + 'NI' => 'Nicaragua', + 'NL' => 'Olanda', + 'NO' => 'Noruwega', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NZ' => 'New Zealand', + 'OM' => 'Oman', + 'PK' => 'Pakistan', + 'PA' => 'Panama', + 'PE' => 'Peru', + 'PH' => 'Pilipinas', + 'PW' => 'Palaw', + 'PG' => 'Papua Bagong Guinea', + 'PL' => 'Polonya', + 'KP' => 'Hilagang Korea', + 'PT' => 'Portugal', + 'PY' => 'Paraguay', + 'QA' => 'Katar', + 'RO' => 'Rumanya', + 'RU' => 'Rusya', + 'RW' => 'Ruwanda', + 'SA' => 'Arabyang Saudi', + 'SD' => 'Sudan', + 'SN' => 'Senegal', + 'SG' => 'Singapore', + 'SB' => 'Kapuluang Solomon', + 'SL' => 'Bulubunduking Leona', + 'SV' => 'El Salvador', + 'SM' => 'San Marino', + 'SO' => 'Somalya', + 'RS' => 'Serbya', + 'SS' => 'Timog Sudan', + 'ST' => 'Santo Tomé at Prinsipe', + 'SR' => 'Surinam', + 'SK' => 'Slovakia', + 'SI' => 'Slovenia', + 'SE' => 'Suwesya', + 'SZ' => 'Suwasilandya', + 'SC' => 'Seyshels', + 'SY' => 'Syria', + 'TD' => 'Tsad', + 'TG' => 'Togo', + 'TH' => 'Taylandiya', + 'TJ' => 'Tayikistan', + 'TM' => 'Turkmenistan', + 'TL' => 'Silangang Timor', + 'TO' => 'Tonga', + 'TT' => 'Trinidad at Tobago', + 'TN' => 'Tunisya', + 'TR' => 'Pabo', + 'TV' => 'Tuvalu', + 'TZ' => 'Tanzania', + 'UG' => 'Uganda', + 'UA' => 'Ukranya', + 'UY' => 'Uruguay', + 'US' => 'Estados Unidos', + 'UZ' => 'Uzbekistan', + 'VA' => 'Lungsod ng Vaticano', + 'VC' => 'San Vicente at ang Kagranadinahan', + 'VE' => 'Venezuela', + 'VN' => 'Vietnam', + 'VU' => 'Vanuatu', + 'WS' => 'Samoa', + 'YE' => 'Yemen', + 'ZA' => 'Timog Aprika', + 'ZM' => 'Sambya', + 'ZW' => 'Simbabwe', +]; diff --git a/app/config/locales/ph.php b/app/config/locales/ph.php new file mode 100644 index 0000000000..d338f4d094 --- /dev/null +++ b/app/config/locales/ph.php @@ -0,0 +1,21 @@ + '"Ang sining ng pagiging matalino ay ang sining ng pag-alam kung ano ang dapat kaligtaan."', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'ph', + 'settings.direction' => 'ltr', + + // Service - Users + 'auth.emails.team' => 'Pangkat ng %s', + 'auth.emails.confirm.title' => 'Pagkumpirma ng Account', + 'auth.emails.confirm.body' => 'ph.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => 'Pagreset ng Password', + 'auth.emails.recovery.body' => 'ph.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => 'Paanyaya sa Pangkat ng %s sa %s', + 'auth.emails.invitation.body' => 'ph.email.auth.invitation.tpl', + + 'locale.country.unknown' => 'Hindi alam', + + 'countries' => include 'ph.countries.php', + 'continents' => include 'ph.continents.php', +]; diff --git a/app/config/locale/pl.continents.php b/app/config/locales/pl.continents.php similarity index 100% rename from app/config/locale/pl.continents.php rename to app/config/locales/pl.continents.php diff --git a/app/config/locale/pl.countries.php b/app/config/locales/pl.countries.php similarity index 100% rename from app/config/locale/pl.countries.php rename to app/config/locales/pl.countries.php diff --git a/app/config/locale/pl.php b/app/config/locales/pl.php similarity index 100% rename from app/config/locale/pl.php rename to app/config/locales/pl.php diff --git a/app/config/locales/pn.continents.php b/app/config/locales/pn.continents.php new file mode 100644 index 0000000000..ccf3057116 --- /dev/null +++ b/app/config/locales/pn.continents.php @@ -0,0 +1,10 @@ + 'ਅਫਰੀਕਾ', + 'AN' => 'ਅੰਤਾਰਕਟੀਕਾ', + 'AS' => 'ਏਸੀਆਈ', + 'EU' => 'ਯੂਰੋਪਾ', + 'NA' => 'ਨੂਰਡ-ਅਮੇਰਿਕਾ', + 'OC' => 'ਓਸੀਆਨੀ', + 'SA' => 'ਸੂਡ-ਅਮੇਰਿਕਾ', +]; diff --git a/app/config/locales/pn.countries.php b/app/config/locales/pn.countries.php new file mode 100644 index 0000000000..ed16e84333 --- /dev/null +++ b/app/config/locales/pn.countries.php @@ -0,0 +1,197 @@ + 'ਅਫਗਾਨਿਸਤਾਨ', + 'AO' => 'ਅੰਗੋਲਾ', + 'AL' => 'ਅਲਬਾਨੀë', + 'AD' => 'ਅੰਡੋਰਾ', + 'AE' => 'Verenigde ਅਰਬਿਅਨ ਅਮੀਰਾਤ', + 'AR' => 'ਅਰਜਨਟੀਨੀë', + 'AM' => 'ਅਰਮੀਨੀë', + 'AG' => 'ਐਂਟੀਗੁਆ ਐਨ ਬਾਰਬੁਡਾ', + 'AU' => 'ਆਸਟਰੇਲੀਆਈ', + 'AT' => 'ਓਓਸਟੇਨਰੀਕ', + 'AZ' => 'ਅਜ਼ਰਬਾਈਜਾਨ', + 'BI' => 'ਬੁਰੂੰਡੀ', + 'BE' => 'ਬੈਲਜੀë', + 'BJ' => 'ਬੇਨਿਨ', + 'BF' => 'ਬੁਰਕੀਨਾ ਫਾਸੋ', + 'BD' => 'ਬੰਗਲਾਦੇਸ਼', + 'BG' => 'ਬੁਲਗਾਰੀ', + 'BH' => 'ਬਹਿਰੀਨ', + 'BS' => 'ਬਾਹਾਮਸ', + 'BA' => 'ਬੋਸਨੀਅ ਇਨ ਹਰਜ਼ੈਗੋਵਿਨਾ', + 'BY' => 'ਬੇਲਾਰੂਸ', + 'BZ' => 'ਬੇਲੀਜ਼', + 'BO' => 'ਬੋਲੀਵੀਆ', + 'BR' => 'ਬ੍ਰਾਸੀਲੀë', + 'BB' => 'ਬਾਰਬਾਡੋਸ', + 'BN' => 'ਬਰੂਨੇਈ', + 'BT' => 'ਭੋਏਤਨ', + 'BW' => 'ਬੋਤਸਵਾਨਾ', + 'CF' => 'ਮੱਧ ਅਫ਼ਰੀਕੀ ਗਣਰਾਜ', + 'CA' => 'ਕਨਡਾ', + 'CH' => 'ਸਵਿਟਜ਼ਰਲੈਂਡ', + 'CL' => 'ਚਿਲੀ', + 'CN' => 'ਸਜੀਨਾ', + 'CI' => 'ਇਵੋੋਰਕਸ', + 'CM' => 'ਕਾਮਰੋਇਨ', + 'CD' => 'ਡੈਮੋਕਰੇਟੀਜ਼ ਰਿਪਬਲਿਕ ਵੈਨ ਡਾਈ ਕੌਂਗੋ', + 'CG' => 'ਰਿਪਬਲਿਕ ਵੈਨ ਡਾਈ ਕੌਂਗੋ', + 'CO' => 'ਕੋਲੰਬੀਆ', + 'KM' => 'ਕੋਮੋਰੋਜ਼', + 'CV' => 'ਕਾਪ ਵਰਡੇ', + 'CR' => 'ਕੋਸਟਾਰੀਕਾ', + 'CU' => 'ਕੁਬਾ', + 'CY' => 'ਸਾਈਪ੍ਰਸ', + 'CZ' => 'ਸਿਜ਼ੈਗੀ ਰੀਪਬਲਿਕ', + 'DE' => 'ਡਿਟਸਲੈਂਡ', + 'DJ' => 'ਜਾਇਬੂਤੀ', + 'DM' => 'ਡੋਮਿਨਿਕਾ', + 'DK' => 'ਡੀਨੇਮਾਰਕ', + 'DO' => 'ਡੋਮੀਨੀਕੇਂਸ ਰਿਪਬਲਿਕ', + 'DZ' => 'ਅਲਜੀਰੀਆ', + 'EC' => 'ਇਕੂਏਟਰ', + 'EG' => 'ਐਗਪੇਟ', + 'ER' => 'ਏਰੀਟਰੀਆ', + 'ES' => 'ਸਪੰਜੇ', + 'EE' => 'ਐਸਟਲੈਂਡ', + 'ET' => 'ਈਥੀਓਪੀਅ', + 'FI' => 'ਫਿਨਲੈਂਡ', + 'FJ' => 'ਫਿਦਜੀ', + 'FR' => 'ਫ੍ਰੈਂਕ੍ਰੀਕ', + 'FM' => 'ਮਿਕਰੋਨੇਸੀ', + 'GA' => 'ਗਾਬੋਅਨ', + 'GB' => 'Verenigde Koninkryk', + 'GE' => 'ਜਾਰਜੀਆ', + 'GH' => 'ਘਾਨਾ', + 'GN' => 'ਗਿੰਨੀ', + 'GM' => 'ਗਾਮੀ', + 'GW' => 'ਗਿੰਨੀ-ਬਿਸਾਉ', + 'GQ' => 'ਏਕਵੇਟਰਿਆਲ-ਗਿੰਨੀ', + 'GR' => 'ਗ੍ਰੀਕਲੈਂਡ', + 'GD' => 'ਗ੍ਰੇਨਾਡਾ', + 'GT' => 'ਗੁਆਟੇਮਾਲਾ', + 'GY' => 'ਗੁਆਨਾ', + 'HN' => 'ਹੌਂਡੂਰਸ', + 'HR' => 'ਕ੍ਰੋਸੀë', + 'HT' => 'ਹੈਤੀ', + 'HU' => 'ਹਾਂਗਰੀ', + 'ID' => 'ਇੰਡੋਨੇਸ਼ੀਆਈ', + 'IN' => 'ਇੰਡੀë', + 'IE' => 'ਆਇਰਲੈਂਡ', + 'IR' => 'ਇਰਾਨ', + 'IQ' => 'ਇਰਕ', + 'IS' => 'Ysland', + 'IL' => 'ਇਜ਼ਰਾਈਲ', + 'IT' => 'ਇਟਾਲੀë', + 'JM' => 'ਜਮਾਏਕਾ', + 'JO' => 'ਜਾਰਡਨ', + 'JP' => 'ਜਪਾਨ', + 'KZ' => 'ਕਜ਼ਾਕਸਤਾਨ', + 'KE' => 'ਕੀਨੀਆ', + 'KG' => 'ਕਿਰਗਿਸਤਾਨ', + 'KH' => 'ਕੰਬੋਡਜਾ', + 'KI' => 'ਕਿਰੀਬਾਤੀ', + 'KN' => 'ਸੇਂਟ ਕਿਟਸ ਐਨ ਨੇਵਿਸ', + 'KR' => 'ਸੂਡ-ਕੋਰੀਆ', + 'KW' => 'ਕੁਵੈਤ', + 'LA' => 'ਲਾਓਸ', + 'LB' => 'ਲਿਬਨਾਨ', + 'LR' => 'ਲਿਬੇਰੀë', + 'LY' => 'ਲੀਬੀë', + 'LC' => 'ਸੇਂਟ ਲੂਸੀਆ', + 'LI' => 'ਲਿਚਟੇਨਸਟਾਈਨ', + 'LK' => 'ਸ਼ਿਰੀਲੰਕਾ', + 'LS' => 'ਲੈਸੋਥੋ', + 'LT' => 'ਲੀਟਾ', + 'LU' => 'ਲਕਸਮਬਰਗ', + 'LV' => 'ਲਾਤਵੀਆ', + 'MA' => 'ਮਾਰੋਕੋ', + 'MC' => 'ਮੋਨੈਕੋ', + 'MD' => 'ਮੋਲਦਾਵੀ', + 'MG' => 'ਮੈਡਾਗਾਸਕਰ', + 'MV' => 'ਮਾਲਦੀਵ', + 'MX' => 'ਮੇਕਸਿਕੋ', + 'MH' => 'ਮਾਰਸ਼ਲ-ਆਈਲੈਂਡ', + 'MK' => 'ਮੈਸੇਡੋਨੀë', + 'ML' => 'ਮਾਲੀ', + 'MT' => 'ਮਾਲਟਾ', + 'MM' => 'ਮਿਆਂਮਾਰ', + 'ME' => 'ਮੌਂਟੇਨੇਗਰੋ', + 'MN' => 'ਮੰਗੋਲੀë', + 'MZ' => 'ਮੋਸਾਮਬੀਕ', + 'MR' => 'ਮੌਰੀਟਨੀë', + 'MU' => 'ਮਾਰੀਸ਼ਸ', + 'MW' => 'ਮਾਲਾਵੀ', + 'MY' => 'ਮਲੇਸੀਆਈ', + 'NA' => 'ਨਾਮੀਬੀ', + 'NE' => 'ਨਾਈਜਰ', + 'NG' => 'ਨਾਈਜੀਰੀë', + 'NI' => 'ਨਿਕਾਰਾਗੁਆ', + 'NL' => 'ਨੀਡਰਲੈਂਡ', + 'NO' => 'ਨੂਰਵੇë', + 'NP' => 'ਨੇਪਾਲ', + 'NR' => 'ਨੌਰੂ', + 'NZ' => 'ਨਿie-ਸੀਲੈਂਡ', + 'OM' => 'ਓਮਾਨ', + 'PK' => 'ਪਾਕਿਸਤਾਨ', + 'PA' => 'ਪਨਾਮਾ', + 'PE' => 'ਪੇਰੂ', + 'PH' => 'ਫਿਲਪੀਨ', + 'PW' => 'ਪਲਾਉ', + 'PG' => 'ਪਾਪੀਆ-ਨੀਯੂ-ਗਿੰਨੀ', + 'PL' => 'ਪੋਲ', + 'KP' => 'ਨੂਰਡ-ਕੋਰੀਆ', + 'PT' => 'ਪੁਰਤਗਾਲ', + 'PY' => 'ਪੈਰਾਗੁਏ', + 'QA' => 'ਕਟਾਰ', + 'RO' => 'ਰੋਮੇਨੀਅ', + 'RU' => 'ਰਸਲੈਂਡ', + 'RW' => 'ਰਵਾਂਡਾ', + 'SA' => 'ਸਾਓਦੀ-ਅਰਾਬੀ', + 'SD' => 'ਸੋਦਾਨ', + 'SN' => 'ਸੇਨੇਗਲ', + 'SG' => 'ਸਿੰਗਾਪੁਰ', + 'SB' => 'ਸਲੋਮੋ-ਆਈਲੈਂਡ', + 'SL' => 'ਸੀਅਰਾ ਲਿਓਨ', + 'SV' => 'ਐਲ ਸਾਲਵਾਡੋਰ', + 'SM' => 'ਸੈਨ ਮਰੀਨੋ', + 'SO' => 'ਸੋਮਾਲੀë', + 'RS' => 'ਸਰਵੀë', + 'SS' => 'ਸੂਇਡ-ਸੋਦਾਨ', + 'ST' => 'ਸਾਓ ਤੋਮੇ ਐਨ ਪ੍ਰਿੰਸੀਪੇ', + 'SR' => 'ਸੂਰੀਨਾਮ', + 'SK' => 'ਸਲੋਕਯੇ', + 'SI' => 'ਹੌਲੀ', + 'SE' => 'ਸਵੈਡੇ', + 'SZ' => 'ਸਵਾਜ਼ੀਲੈਂਡ', + 'SC' => 'ਸੇਸ਼ੇਲ', + 'SY' => 'ਸਿਰੀ', + 'TD' => 'ਚਾਡ', + 'TG' => 'ਹੁਣੇ ਜਾਣਾ', + 'TH' => 'ਥਾਈਲੈਂਡ', + 'TJ' => 'ਤਦਜਿਕਿਸਤਾਨ', + 'TM' => 'ਤੁਰਕਮੇਨਿਸਤਾਨ', + 'TL' => 'ਓਸ-ਤਿਮੋਰ', + 'TO' => 'ਟੋਂਗਾ', + 'TT' => 'ਤ੍ਰਿਨੀਦਾਦ ਅਤੇ ਟੋਬੈਗੋ', + 'TN' => 'ਟਿisਨੀਸੀਅ', + 'TR' => 'ਤੁਰਕੀ', + 'TV' => 'ਤੁਵਾਲੁ', + 'TZ' => 'ਤਨਜ਼ਾਨੀë', + 'UG' => 'ਯੂਗਾਂਡਾ', + 'UA' => 'ਓਕ੍ਰਾੱਨ', + 'UY' => 'ਉਰੂਗਵੇ', + 'US' => 'ਵੇਰੇਨਿਗਡੇ ਸਟੇਟ', + 'UZ' => 'ਓਸਬੀਕਕਿਸਤਾਨ', + 'VA' => 'ਵਾਟਿਕਾਂਸਟੈਡ', + 'VC' => 'ਸਿਨਟ ਵਿਨਸੈਂਟ ਏਨ ਡਾਈ ਗ੍ਰੇਨਾਡਾਈਨਜ਼', + 'VE' => 'ਵੈਨਜ਼ੂਏਲਾ', + 'VN' => 'ਵਿਯਤਨਮ', + 'VU' => 'ਵੈਨੂਆਟੂ', + 'WS' => 'ਸਮੋਆ', + 'YE' => 'ਜੀਮਨ', + 'ZA' => 'ਸੂਡ-ਅਫਰੀਕਾ', + 'ZM' => 'ਜ਼ੈਂਬੀਆ', + 'ZW' => 'ਜ਼ਿੰਬਾਬਵੇ', +]; diff --git a/app/config/locales/pn.php b/app/config/locales/pn.php new file mode 100644 index 0000000000..907926db61 --- /dev/null +++ b/app/config/locales/pn.php @@ -0,0 +1,17 @@ + '"I love Typing&coding in punjabi :)."', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'pn', + 'settings.direction' => 'ltr', + // Service - Users + 'auth.emails.team' => '%s ਟੀਮ(Priyanka)', + 'auth.emails.confirm.title' => 'ਖਾਤਾ ਪੁਸ਼ਟੀਕਰਣ', + 'auth.emails.confirm.body' => 'app/config/locales/templates/pn.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => 'ਪਾਸਵਰਡ ਰੀਸੈੱਟ', + 'auth.emails.recovery.body' => 'app/config/locales/templates/pn.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => '% S ਟੀਮ% s ਤੇ ਸੱਦਾ', + 'auth.emails.invitation.body' => 'app/config/locales/templates/pn.email.auth.invitation.tpl', + 'locale.country.unknown' => 'India', + 'countries' => include 'pn.countries.php', + 'continents' => include 'pn.continents.php', +]; diff --git a/app/config/locale/pt-br.continents.php b/app/config/locales/pt-br.continents.php similarity index 100% rename from app/config/locale/pt-br.continents.php rename to app/config/locales/pt-br.continents.php diff --git a/app/config/locale/pt-br.countries.php b/app/config/locales/pt-br.countries.php similarity index 100% rename from app/config/locale/pt-br.countries.php rename to app/config/locales/pt-br.countries.php diff --git a/app/config/locale/pt-br.php b/app/config/locales/pt-br.php similarity index 100% rename from app/config/locale/pt-br.php rename to app/config/locales/pt-br.php diff --git a/app/config/locale/pt-pt.continents.php b/app/config/locales/pt-pt.continents.php similarity index 100% rename from app/config/locale/pt-pt.continents.php rename to app/config/locales/pt-pt.continents.php diff --git a/app/config/locale/pt-pt.countries.php b/app/config/locales/pt-pt.countries.php similarity index 100% rename from app/config/locale/pt-pt.countries.php rename to app/config/locales/pt-pt.countries.php diff --git a/app/config/locale/pt-pt.php b/app/config/locales/pt-pt.php similarity index 100% rename from app/config/locale/pt-pt.php rename to app/config/locales/pt-pt.php diff --git a/app/config/locale/ro.continents.php b/app/config/locales/ro.continents.php similarity index 100% rename from app/config/locale/ro.continents.php rename to app/config/locales/ro.continents.php diff --git a/app/config/locale/ro.countries.php b/app/config/locales/ro.countries.php similarity index 100% rename from app/config/locale/ro.countries.php rename to app/config/locales/ro.countries.php diff --git a/app/config/locale/ro.php b/app/config/locales/ro.php similarity index 100% rename from app/config/locale/ro.php rename to app/config/locales/ro.php diff --git a/app/config/locale/ru.continents.php b/app/config/locales/ru.continents.php similarity index 100% rename from app/config/locale/ru.continents.php rename to app/config/locales/ru.continents.php diff --git a/app/config/locale/ru.countries.php b/app/config/locales/ru.countries.php similarity index 100% rename from app/config/locale/ru.countries.php rename to app/config/locales/ru.countries.php diff --git a/app/config/locale/ru.php b/app/config/locales/ru.php similarity index 100% rename from app/config/locale/ru.php rename to app/config/locales/ru.php diff --git a/app/config/locale/si.continents.php b/app/config/locales/si.continents.php similarity index 100% rename from app/config/locale/si.continents.php rename to app/config/locales/si.continents.php diff --git a/app/config/locale/si.countries.php b/app/config/locales/si.countries.php similarity index 100% rename from app/config/locale/si.countries.php rename to app/config/locales/si.countries.php diff --git a/app/config/locale/si.php b/app/config/locales/si.php similarity index 100% rename from app/config/locale/si.php rename to app/config/locales/si.php diff --git a/app/config/locale/sl.continents.php b/app/config/locales/sl.continents.php similarity index 100% rename from app/config/locale/sl.continents.php rename to app/config/locales/sl.continents.php diff --git a/app/config/locale/sl.countries.php b/app/config/locales/sl.countries.php similarity index 100% rename from app/config/locale/sl.countries.php rename to app/config/locales/sl.countries.php diff --git a/app/config/locale/sl.php b/app/config/locales/sl.php similarity index 100% rename from app/config/locale/sl.php rename to app/config/locales/sl.php diff --git a/app/config/locales/sq.continents.php b/app/config/locales/sq.continents.php new file mode 100644 index 0000000000..57eb1d3426 --- /dev/null +++ b/app/config/locales/sq.continents.php @@ -0,0 +1,10 @@ + 'Afrika', + 'AN' => 'Antarktik', + 'AS' => 'Azi', + 'EU' => 'Evropë', + 'NA' => 'Amerika e Veriut', + 'OC' => 'Oqeani', + 'SA' => 'Amerika e Jugut', +]; diff --git a/app/config/locales/sq.countries.php b/app/config/locales/sq.countries.php new file mode 100644 index 0000000000..fecc93e447 --- /dev/null +++ b/app/config/locales/sq.countries.php @@ -0,0 +1,198 @@ + 'Afganistani', + 'AO' => 'Angola', + 'AL' => 'Albania', + 'AD' => 'Andorra', + 'AE' => 'Emiratet e Bashkuara Arabe', + 'AR' => 'Argjentina', + 'AM' => 'Armenia', + 'AG' => 'Antigua dhe Barbuda', + 'AU' => 'Australia', + 'AT' => 'Austri', + 'AZ' => 'Azerbajxhani', + 'BI' => 'Burundi', + 'BE' => 'Belgjika', + 'BJ' => 'Benin', + 'BF' => 'Burkina Faso', + 'BD' => 'Bangladeshi', + 'BG' => 'Bullgaria', + 'BH' => 'Bahreini', + 'BS' => 'Bahamas', + 'BA' => 'Bosnja dhe Hercegovina', + 'BY' => 'Belarusia', + 'BZ' => 'Belize', + 'BO' => 'Bolivia', + 'BR' => 'Brazili', + 'BB' => 'Barbados', + 'BN' => 'Brunei', + 'BT' => 'Bhutan', + 'BW' => 'Botsvana', + 'CF' => 'Republika Qendrore e Afrikës', + 'CA' => 'Kanada', + 'CH' => 'Zvicra', + 'CL' => 'Kili', + 'CN' => 'Kinë', + 'CI' => 'Cλεte de Ivoire', + 'CM' => 'Kamerun', + 'CD' => 'Republika Demokratike e Kongos', + 'CG' => 'Republika e Kongos', + 'CO' => 'Kolumbia', + 'KM' => 'Komoret', + 'CV' => 'Cape Verde', + 'CR' => 'Kosta Rika', + 'CU' => 'Kuba', + 'CY' => 'Qipro', + 'CZ' => 'Republika Czecheke', + 'DE' => 'Gjermani', + 'DJ' => 'Djibouti', + 'DM' => 'Dominica', + 'DK' => 'Danimarka', + 'DO' => 'Republika Dominikane', + 'DZ' => 'Algjeria', + 'EC' => 'Ekuador', + 'EG' => 'Egjipt', + 'ER' => 'Eritrea', + 'ES' => 'Spanjë', + 'BE' => 'Estonia', + 'ET' => 'Etiopi', + 'FI' => 'Finlanda', + 'FJ' => 'Fiji', + 'FR' => 'France', + 'FM' => 'Mikronezia', + 'GA' => 'Gabon', + 'GB' => 'Mbretëria e Bashkuar', + 'GE' => 'Bujqësia', + 'GH' => 'Gana', + 'GN' => 'Guinea', + 'GM' => 'Gambia', + 'GW' => 'Guinea-Bissau', + 'GQ' => 'Guinea Ekuatoriale', + 'GR' => 'Greqi', + 'GD' => 'Grenada', + 'GT' => 'Guatemala', + 'GY' => 'Guajana', + 'HN' => 'Honduras', + 'HR' => 'Kroacia', + 'HT' => 'Haiti', + 'HU' => 'Hungaria', + 'ID' => 'Indonezi', + 'IN' => 'India', + 'IE' => 'Irlanda', + 'IR' => 'Irani', + 'IQ' => 'Irak', + 'IS' => 'Islanda', + 'IL' => 'Izraeli', + 'IT' => 'Itali', + 'JM' => 'Xhamajka', + 'JO' => 'Jordan', + 'JP' => 'Japoni', + 'KZ' => 'Kazakistani', + 'KE' => 'Kenia', + 'KG' => 'Kirgistani', + 'KH' => 'Kamboxhia', + 'KI' => 'Kiribati', + 'KN' => 'Shen Christopher and Nevis', + 'KR' => 'Koreja e Jugut', + 'KW' => 'Kuvajti', + 'LA' => 'Laos', + 'LB' => 'Libanez', + 'LR' => 'Liberia', + 'LY' => 'Libia', + 'LC' => 'St. Louis', + 'LI' => 'Lihtenshtajni', + 'LK' => 'Sri Lanka', + 'LS' => 'Lesoto', + 'LT' => 'Lituania', + 'LU' => 'Luksemburgu', + 'LV' => 'Letonia', + 'MA' => 'Marok', + 'MC' => 'Monako', + 'MD' => 'Moldavia', + 'MG' => 'Madagascar', + 'MV' => 'Maldive', + 'MX' => 'Meksika', + 'MH' => 'Ishujt Marshall', + 'MK' => 'Maqedonia', + 'ML' => 'Mali', + 'MT' => 'Maltë', + 'MM' => 'Myanmar', + 'ME' => 'Mali i Zi', + 'MN' => 'Mongolia', + 'MZ' => 'Mozambik', + 'MR' => 'Mauritania', + 'MU' => 'Mauritius', + 'MW' => 'Malawi', + 'MY' => 'Malajzia', + 'NA' => 'Namibia', + 'NE' => 'Niger', + 'NG' => 'Nigeria', + 'NI' => 'Nikaragua', + 'NL' => 'Hollanda', + 'JO' => 'Norvegjia', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NZ' => 'Zelanda e Re', + 'OM' => 'Oman', + 'PK' => 'Pakistan', + 'PA' => 'Panama', + 'PE' => 'Peru', + 'PH' => 'Filipine', + 'PW' => 'Palau', + 'PG' => 'Papua Guinea e Re', + 'PL' => 'Polonia', + 'KP' => 'Koreja e Veriut', + 'PT' => 'Portugalia', + 'PY' => 'Paraguai', + 'QA' => 'Katar', + 'RO' => 'Rumania', + 'RU' => 'Rusia', + 'RW' => 'Ruanda', + 'SA' => 'Arabia Saudite', + 'SD' => 'Sudan', + 'SN' => 'Senegal', + 'SG' => 'Singapori', + 'SB' => 'Ishujt Solomon', + 'SL' => 'Sierra Leone', + 'SV' => 'El Salvador', + 'SM' => 'San Marino', + 'SO' => 'Somalia', + 'RS' => 'Serbia', + 'SS' => 'Sudani i Jugut', + 'ST' => 'Sao Tome dhe Principe', + 'SR' => 'Suriname', + 'SK' => 'Sllovakia', + 'SI' => 'Sllovenia', + 'SE' => 'Suedia', + 'SZ' => 'Swaziland', + 'SC' => 'Seychelles', + 'SY' => 'Siria', + 'TD' => 'Çad', + 'TG' => 'Togo', + 'TH' => 'Tajlandë', + 'TJ' => 'Taxhikistan', + 'TM' => 'Turkmenistani', + 'TL' => 'Timori Lindor', + 'TO' => 'Tonga', + 'TT' => 'Trinidad dhe Tobago', + 'TN' => 'Tunizia', + 'TR' => 'Turqia', + 'TV' => 'Tuvalu', + 'TZ' => 'Tanzania', + 'UG' => 'Uganda', + 'UA' => 'Ukraina', + 'UY' => 'Uruguaji', + 'US' => 'Shtetet e Bashkuara', + 'UZ' => 'Uzbekistan', + 'VA' => 'Qyteti i Vatikanit', + 'VC' => 'Saint Vincent dhe Grenadines', + 'VE' => 'Venezuela', + 'VN' => 'Vietnami', + 'VU' => 'Vanuatu', + 'WS' => 'Samoa', + 'YE' => 'Jemen', + 'ZA' => 'Afrika e Jugut', + 'ZM' => 'Zambia', + 'ZW' => 'Zimbabve', +]; \ No newline at end of file diff --git a/app/config/locales/sq.php b/app/config/locales/sq.php new file mode 100644 index 0000000000..235d2d6d98 --- /dev/null +++ b/app/config/locales/sq.php @@ -0,0 +1,21 @@ + '"The art of being wise is the art of knowing what to overlook."', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'sq', + 'settings.direction' => 'ltr', + + // Service - Users + 'auth.emails.team' => 'Grup %s', + 'auth.emails.confirm.title' => 'Konfirmimi i llogarisë', + 'auth.emails.confirm.body' => 'sq.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => 'Rivendosni fjalëkalimin', + 'auth.emails.recovery.body' => 'sq.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => 'Ftesë në grup %s në %s', + 'auth.emails.invitation.body' => 'sq.email.auth.invitation.tpl', + + 'locale.country.unknown' => 'I panjohur', + + 'countries' => include 'sq.countries.php', + 'continents' => include 'sq.continents.php', +]; diff --git a/app/config/locale/sv.continents.php b/app/config/locales/sv.continents.php similarity index 100% rename from app/config/locale/sv.continents.php rename to app/config/locales/sv.continents.php diff --git a/app/config/locale/sv.countries.php b/app/config/locales/sv.countries.php similarity index 100% rename from app/config/locale/sv.countries.php rename to app/config/locales/sv.countries.php diff --git a/app/config/locale/sv.php b/app/config/locales/sv.php similarity index 100% rename from app/config/locale/sv.php rename to app/config/locales/sv.php diff --git a/app/config/locale/ta.continents.php b/app/config/locales/ta.continents.php similarity index 100% rename from app/config/locale/ta.continents.php rename to app/config/locales/ta.continents.php diff --git a/app/config/locale/ta.countries.php b/app/config/locales/ta.countries.php similarity index 100% rename from app/config/locale/ta.countries.php rename to app/config/locales/ta.countries.php diff --git a/app/config/locale/ta.php b/app/config/locales/ta.php similarity index 100% rename from app/config/locale/ta.php rename to app/config/locales/ta.php diff --git a/app/config/locale/templates/af.email.auth.confirm.tpl b/app/config/locales/templates/af.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/af.email.auth.confirm.tpl rename to app/config/locales/templates/af.email.auth.confirm.tpl diff --git a/app/config/locale/templates/af.email.auth.invitation.tpl b/app/config/locales/templates/af.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/af.email.auth.invitation.tpl rename to app/config/locales/templates/af.email.auth.invitation.tpl diff --git a/app/config/locale/templates/af.email.auth.recovery.tpl b/app/config/locales/templates/af.email.auth.recovery.tpl similarity index 83% rename from app/config/locale/templates/af.email.auth.recovery.tpl rename to app/config/locales/templates/af.email.auth.recovery.tpl index 0b5cec7b22..598c4c1d96 100644 --- a/app/config/locale/templates/af.email.auth.recovery.tpl +++ b/app/config/locales/templates/af.email.auth.recovery.tpl @@ -15,7 +15,7 @@ {{redirect}}

- As jy nie gevra het om you wagwoord te verander nie, kan jy die boodskap ignoreer. + As jy nie gevra het om you wagwoord te verander nie, kan jy hierdie boodskap ignoreer.

Baie dankie, diff --git a/app/config/locales/templates/alb.email.auth.confirm.tpl b/app/config/locales/templates/alb.email.auth.confirm.tpl new file mode 100644 index 0000000000..549340eca9 --- /dev/null +++ b/app/config/locales/templates/alb.email.auth.confirm.tpl @@ -0,0 +1,24 @@ + + +
+ Hej {{name}}, +
+
+ Ndiqni këtë lidhje për të konfirmuar adresën tuaj të emailit. +
+ {{redirect}} +
+
+ Nëse nuk keni kërkuar të konfirmoni këtë adresë, mund ta injoroni këtë mesazh. +
+
+ Faleminderit, +
+ Ekipi i tij {{project}} +
diff --git a/app/config/locales/templates/alb.email.auth.invitation.tpl b/app/config/locales/templates/alb.email.auth.invitation.tpl new file mode 100644 index 0000000000..fc75e51825 --- /dev/null +++ b/app/config/locales/templates/alb.email.auth.invitation.tpl @@ -0,0 +1,27 @@ + + +
+ Ηej, +
+
+ Ju e morët këtë email sepse {{owner}} ju ftoi të bashkoheni në ekip {{team}} në {{project}}. +
+
+ Ndiqni këtë lidhje për t'u bashkuar me grupin {{team}}: +
+ {{redirect}} +
+
+ Nëse nuk jeni të interesuar, mund ta injoroni këtë mesazh. +
+
+ Faleminderit, +
+ Ekipi i tij {{project}} +
diff --git a/app/config/locales/templates/alb.email.auth.recovery.tpl b/app/config/locales/templates/alb.email.auth.recovery.tpl new file mode 100644 index 0000000000..d8e0bf867c --- /dev/null +++ b/app/config/locales/templates/alb.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ Hej {{name}}, +
+
+ Ndiqni këtë lidhje për të rivendosur fjalëkalimin tuaj ajo {{project}}. +
+ {{redirect}} +
+
+ Nëse nuk keni kërkuar një ndryshim të fjalëkalimit, mund ta injoroni këtë mesazh. +
+
+ Faleminderit, +
+ Ekipi i tij {{project}} +
diff --git a/app/config/locale/templates/ar.email.auth.confirm.tpl b/app/config/locales/templates/ar.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/ar.email.auth.confirm.tpl rename to app/config/locales/templates/ar.email.auth.confirm.tpl diff --git a/app/config/locale/templates/ar.email.auth.invitation.tpl b/app/config/locales/templates/ar.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/ar.email.auth.invitation.tpl rename to app/config/locales/templates/ar.email.auth.invitation.tpl diff --git a/app/config/locale/templates/ar.email.auth.recovery.tpl b/app/config/locales/templates/ar.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/ar.email.auth.recovery.tpl rename to app/config/locales/templates/ar.email.auth.recovery.tpl diff --git a/app/config/locale/templates/bn.email.auth.confirm.tpl b/app/config/locales/templates/bn.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/bn.email.auth.confirm.tpl rename to app/config/locales/templates/bn.email.auth.confirm.tpl diff --git a/app/config/locale/templates/bn.email.auth.invitation.tpl b/app/config/locales/templates/bn.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/bn.email.auth.invitation.tpl rename to app/config/locales/templates/bn.email.auth.invitation.tpl diff --git a/app/config/locale/templates/bn.email.auth.recovery.tpl b/app/config/locales/templates/bn.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/bn.email.auth.recovery.tpl rename to app/config/locales/templates/bn.email.auth.recovery.tpl diff --git a/app/config/locale/templates/cat.email.auth.confirm.tpl b/app/config/locales/templates/cat.email.auth.confirm.tpl similarity index 95% rename from app/config/locale/templates/cat.email.auth.confirm.tpl rename to app/config/locales/templates/cat.email.auth.confirm.tpl index 1e5513512f..3761912010 100644 --- a/app/config/locale/templates/cat.email.auth.confirm.tpl +++ b/app/config/locales/templates/cat.email.auth.confirm.tpl @@ -1,24 +1,24 @@ - - -
- Hola {{name}}, -
-
- Segueix aquest enllaç per verificar la teva direcció de correu: -
- {{redirect}} -
-
- Si no has solicitat verificar aquesta direcció, pots ignorar aquest missatge. -
-
- Gràcies, -
- Equip {{project}} -
+ + +
+ Hola {{name}}, +
+
+ Segueix aquest enllaç per verificar la teva direcció de correu: +
+ {{redirect}} +
+
+ Si no has solicitat verificar aquesta direcció, pots ignorar aquest missatge. +
+
+ Gràcies, +
+ Equip {{project}} +
diff --git a/app/config/locale/templates/cat.email.auth.invitation.tpl b/app/config/locales/templates/cat.email.auth.invitation.tpl similarity index 95% rename from app/config/locale/templates/cat.email.auth.invitation.tpl rename to app/config/locales/templates/cat.email.auth.invitation.tpl index f52129e1bf..69687693a2 100644 --- a/app/config/locale/templates/cat.email.auth.invitation.tpl +++ b/app/config/locales/templates/cat.email.auth.invitation.tpl @@ -1,28 +1,28 @@ - - -
- Hola, -
-
- T'hem enviat aquest correu perquè {{owner}} et vol convidar a formar part - de l'equip {{team}} a {{project}}. -
-
- Segueix aquest enllaç per unir-te a l'equip {{team}}: -
- {{redirect}} -
-
- Si no estàs interessat, pots ignorar aquest missatge. -
-
- Gràcies, -
- Equip {{project}} -
+ + +
+ Hola, +
+
+ T'hem enviat aquest correu perquè {{owner}} et vol convidar a formar part + de l'equip {{team}} a {{project}}. +
+
+ Segueix aquest enllaç per unir-te a l'equip {{team}}: +
+ {{redirect}} +
+
+ Si no estàs interessat, pots ignorar aquest missatge. +
+
+ Gràcies, +
+ Equip {{project}} +
diff --git a/app/config/locale/templates/cat.email.auth.recovery.tpl b/app/config/locales/templates/cat.email.auth.recovery.tpl similarity index 95% rename from app/config/locale/templates/cat.email.auth.recovery.tpl rename to app/config/locales/templates/cat.email.auth.recovery.tpl index 62cc4fae68..2c17989674 100644 --- a/app/config/locale/templates/cat.email.auth.recovery.tpl +++ b/app/config/locales/templates/cat.email.auth.recovery.tpl @@ -1,24 +1,24 @@ - - -
- Hola {{name}}, -
-
- Segueix aquest enllaç per restablir la teva contrasenya de {{project}}. -
- {{redirect}} -
-
- Si no has demanat restablir la teva contrasenya, pots ignorar aquest missatge. -
-
- Gràcies, -
- Equip {{project}} -
+ + +
+ Hola {{name}}, +
+
+ Segueix aquest enllaç per restablir la teva contrasenya de {{project}}. +
+ {{redirect}} +
+
+ Si no has demanat restablir la teva contrasenya, pots ignorar aquest missatge. +
+
+ Gràcies, +
+ Equip {{project}} +
diff --git a/app/config/locale/templates/cz.email.auth.confirm.tpl b/app/config/locales/templates/cz.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/cz.email.auth.confirm.tpl rename to app/config/locales/templates/cz.email.auth.confirm.tpl diff --git a/app/config/locale/templates/cz.email.auth.invitation.tpl b/app/config/locales/templates/cz.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/cz.email.auth.invitation.tpl rename to app/config/locales/templates/cz.email.auth.invitation.tpl diff --git a/app/config/locale/templates/cz.email.auth.recovery.tpl b/app/config/locales/templates/cz.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/cz.email.auth.recovery.tpl rename to app/config/locales/templates/cz.email.auth.recovery.tpl diff --git a/app/config/locale/templates/de.email.auth.confirm.tpl b/app/config/locales/templates/de.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/de.email.auth.confirm.tpl rename to app/config/locales/templates/de.email.auth.confirm.tpl diff --git a/app/config/locale/templates/de.email.auth.invitation.tpl b/app/config/locales/templates/de.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/de.email.auth.invitation.tpl rename to app/config/locales/templates/de.email.auth.invitation.tpl diff --git a/app/config/locale/templates/de.email.auth.recovery.tpl b/app/config/locales/templates/de.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/de.email.auth.recovery.tpl rename to app/config/locales/templates/de.email.auth.recovery.tpl diff --git a/app/config/locale/templates/en.email.auth.confirm.tpl b/app/config/locales/templates/en.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/en.email.auth.confirm.tpl rename to app/config/locales/templates/en.email.auth.confirm.tpl diff --git a/app/config/locale/templates/en.email.auth.invitation.tpl b/app/config/locales/templates/en.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/en.email.auth.invitation.tpl rename to app/config/locales/templates/en.email.auth.invitation.tpl diff --git a/app/config/locale/templates/en.email.auth.recovery.tpl b/app/config/locales/templates/en.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/en.email.auth.recovery.tpl rename to app/config/locales/templates/en.email.auth.recovery.tpl diff --git a/app/config/locale/templates/es.email.auth.confirm.tpl b/app/config/locales/templates/es.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/es.email.auth.confirm.tpl rename to app/config/locales/templates/es.email.auth.confirm.tpl diff --git a/app/config/locale/templates/es.email.auth.invitation.tpl b/app/config/locales/templates/es.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/es.email.auth.invitation.tpl rename to app/config/locales/templates/es.email.auth.invitation.tpl diff --git a/app/config/locale/templates/es.email.auth.recovery.tpl b/app/config/locales/templates/es.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/es.email.auth.recovery.tpl rename to app/config/locales/templates/es.email.auth.recovery.tpl diff --git a/app/config/locale/templates/fi.email.auth.confirm.tpl b/app/config/locales/templates/fi.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/fi.email.auth.confirm.tpl rename to app/config/locales/templates/fi.email.auth.confirm.tpl diff --git a/app/config/locale/templates/fi.email.auth.invitation.tpl b/app/config/locales/templates/fi.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/fi.email.auth.invitation.tpl rename to app/config/locales/templates/fi.email.auth.invitation.tpl diff --git a/app/config/locale/templates/fi.email.auth.recovery.tpl b/app/config/locales/templates/fi.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/fi.email.auth.recovery.tpl rename to app/config/locales/templates/fi.email.auth.recovery.tpl diff --git a/app/config/locales/templates/fo.email.auth.confirm.tpl b/app/config/locales/templates/fo.email.auth.confirm.tpl new file mode 100644 index 0000000000..9af52651b8 --- /dev/null +++ b/app/config/locales/templates/fo.email.auth.confirm.tpl @@ -0,0 +1,24 @@ + + +
+ Halló {{name}}, +
+
+ Fylg hesa lenka fyrið at verifisera teldupostur +
+ {{redirect}} +
+
+ Om tú ikke spurdi om at verifisera hesa teldupostur, kannst tú ignorera hesa boð. +
+
+ Takk, +
+ {{project}} lið +
\ No newline at end of file diff --git a/app/config/locales/templates/fo.email.auth.invitation.tpl b/app/config/locales/templates/fo.email.auth.invitation.tpl new file mode 100644 index 0000000000..586daac0e4 --- /dev/null +++ b/app/config/locales/templates/fo.email.auth.invitation.tpl @@ -0,0 +1,27 @@ + + +
+ Halló, +
+
+ Hesa teldupost var send til tín tí {{owner}} vildi bjóða tær at vera eitt lið limur hjá {{team}} á {{project}} +
+
+ Fylg hettar lenka fyrið at bliva vi {{team}} lið: +
+ {{redirect}} +
+
+ Om tú ikke er áhugaður, kannst tú ignorera hesa boð +
+
+ Takk, +
+ {{project}} lið +
diff --git a/app/config/locales/templates/fo.email.auth.recovery.tpl b/app/config/locales/templates/fo.email.auth.recovery.tpl new file mode 100644 index 0000000000..8c916a723f --- /dev/null +++ b/app/config/locales/templates/fo.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ Halló {{name}}, +
+
+ Fylg hettar lenka fyrið at resette títt {{project}} passord. +
+ {{redirect}} +
+
+ Om tú ikke spurdi om at verifisera hesa telduposturin, kannst du ignorera hesa boð. +
+
+ Takk, +
+ {{project}} lið +
diff --git a/app/config/locale/templates/fr.email.auth.confirm.tpl b/app/config/locales/templates/fr.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/fr.email.auth.confirm.tpl rename to app/config/locales/templates/fr.email.auth.confirm.tpl diff --git a/app/config/locale/templates/fr.email.auth.invitation.tpl b/app/config/locales/templates/fr.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/fr.email.auth.invitation.tpl rename to app/config/locales/templates/fr.email.auth.invitation.tpl diff --git a/app/config/locale/templates/fr.email.auth.recovery.tpl b/app/config/locales/templates/fr.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/fr.email.auth.recovery.tpl rename to app/config/locales/templates/fr.email.auth.recovery.tpl diff --git a/app/config/locale/templates/gr.email.auth.confirm.tpl b/app/config/locales/templates/gr.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/gr.email.auth.confirm.tpl rename to app/config/locales/templates/gr.email.auth.confirm.tpl diff --git a/app/config/locale/templates/gr.email.auth.invitation.tpl b/app/config/locales/templates/gr.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/gr.email.auth.invitation.tpl rename to app/config/locales/templates/gr.email.auth.invitation.tpl diff --git a/app/config/locale/templates/gr.email.auth.recovery.tpl b/app/config/locales/templates/gr.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/gr.email.auth.recovery.tpl rename to app/config/locales/templates/gr.email.auth.recovery.tpl diff --git a/app/config/locale/templates/he.email.auth.confirm.tpl b/app/config/locales/templates/he.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/he.email.auth.confirm.tpl rename to app/config/locales/templates/he.email.auth.confirm.tpl diff --git a/app/config/locale/templates/he.email.auth.invitation.tpl b/app/config/locales/templates/he.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/he.email.auth.invitation.tpl rename to app/config/locales/templates/he.email.auth.invitation.tpl diff --git a/app/config/locale/templates/he.email.auth.recovery.tpl b/app/config/locales/templates/he.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/he.email.auth.recovery.tpl rename to app/config/locales/templates/he.email.auth.recovery.tpl diff --git a/app/config/locale/templates/hi.email.auth.confirm.tpl b/app/config/locales/templates/hi.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/hi.email.auth.confirm.tpl rename to app/config/locales/templates/hi.email.auth.confirm.tpl diff --git a/app/config/locale/templates/hi.email.auth.invitation.tpl b/app/config/locales/templates/hi.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/hi.email.auth.invitation.tpl rename to app/config/locales/templates/hi.email.auth.invitation.tpl diff --git a/app/config/locale/templates/hi.email.auth.recovery.tpl b/app/config/locales/templates/hi.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/hi.email.auth.recovery.tpl rename to app/config/locales/templates/hi.email.auth.recovery.tpl diff --git a/app/config/locale/templates/hu.email.auth.confirm.tpl b/app/config/locales/templates/hu.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/hu.email.auth.confirm.tpl rename to app/config/locales/templates/hu.email.auth.confirm.tpl diff --git a/app/config/locale/templates/hu.email.auth.invitation.tpl b/app/config/locales/templates/hu.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/hu.email.auth.invitation.tpl rename to app/config/locales/templates/hu.email.auth.invitation.tpl diff --git a/app/config/locale/templates/hu.email.auth.recovery.tpl b/app/config/locales/templates/hu.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/hu.email.auth.recovery.tpl rename to app/config/locales/templates/hu.email.auth.recovery.tpl diff --git a/app/config/locale/templates/hy.email.auth.confirm.tpl b/app/config/locales/templates/hy.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/hy.email.auth.confirm.tpl rename to app/config/locales/templates/hy.email.auth.confirm.tpl diff --git a/app/config/locale/templates/hy.email.auth.invitation.tpl b/app/config/locales/templates/hy.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/hy.email.auth.invitation.tpl rename to app/config/locales/templates/hy.email.auth.invitation.tpl diff --git a/app/config/locale/templates/hy.email.auth.recovery.tpl b/app/config/locales/templates/hy.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/hy.email.auth.recovery.tpl rename to app/config/locales/templates/hy.email.auth.recovery.tpl diff --git a/app/config/locale/templates/id.email.auth.confirm.tpl b/app/config/locales/templates/id.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/id.email.auth.confirm.tpl rename to app/config/locales/templates/id.email.auth.confirm.tpl diff --git a/app/config/locale/templates/id.email.auth.invitation.tpl b/app/config/locales/templates/id.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/id.email.auth.invitation.tpl rename to app/config/locales/templates/id.email.auth.invitation.tpl diff --git a/app/config/locale/templates/id.email.auth.recovery.tpl b/app/config/locales/templates/id.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/id.email.auth.recovery.tpl rename to app/config/locales/templates/id.email.auth.recovery.tpl diff --git a/app/config/locales/templates/is.email.auth.confirm.tpl b/app/config/locales/templates/is.email.auth.confirm.tpl new file mode 100644 index 0000000000..e9733cd47d --- /dev/null +++ b/app/config/locales/templates/is.email.auth.confirm.tpl @@ -0,0 +1,24 @@ + + +
+ Halló {{name}}, +
+
+ Fylgdu þessum tengli til að staðfesta netfangið þitt. +
+ {{redirect}} +
+
+ Ef þú baðst ekki um að staðfesta þetta netfang geturðu hunsað þessi skilaboð. +
+
+ Takk, +
+ {{project}} Teymi +
diff --git a/app/config/locales/templates/is.email.auth.invitation.tpl b/app/config/locales/templates/is.email.auth.invitation.tpl new file mode 100644 index 0000000000..2738fc2025 --- /dev/null +++ b/app/config/locales/templates/is.email.auth.invitation.tpl @@ -0,0 +1,27 @@ + + +
+ Halló, +
+
+ Þessi póstur var sendur til þín vegna þess að {{owner}} vildi bjóða þér að gerast liðsmaður í {{team}} teymi í {{project}}. +
+
+ Fylgdu þessum hlekk til að ganga í {{team}} liðið: +
+ {{redirect}} +
+
+ Ef þú hefur ekki áhuga geturðu hunsað þessi skilaboð. +
+
+ Takk, +
+ {{project}} Teymi +
\ No newline at end of file diff --git a/app/config/locales/templates/is.email.auth.recovery.tpl b/app/config/locales/templates/is.email.auth.recovery.tpl new file mode 100644 index 0000000000..fc3bc57722 --- /dev/null +++ b/app/config/locales/templates/is.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ Halló {{name}}, +
+
+ Fylgdu þessum tengli til að núllstilla lykilorð {{project}}. +
+ {{redirect}} +
+
+ Ef þú baðst ekki um að endurstilla lykilorðið þitt geturðu hunsað þessi skilaboð. +
+
+ Takk, +
+ {{project}} Teymi +
\ No newline at end of file diff --git a/app/config/locale/templates/it.email.auth.confirm.tpl b/app/config/locales/templates/it.email.auth.confirm.tpl similarity index 95% rename from app/config/locale/templates/it.email.auth.confirm.tpl rename to app/config/locales/templates/it.email.auth.confirm.tpl index fedbe80182..93ee5e006f 100644 --- a/app/config/locale/templates/it.email.auth.confirm.tpl +++ b/app/config/locales/templates/it.email.auth.confirm.tpl @@ -1,25 +1,25 @@ - - - -
- Ciao {{name}}, -
-
- Segui questo link per verificare il tuo indirizzo email. -
- {{redirect}} -
-
- Se non hai chiesto di verificare questo indirizzo, puoi ignorare questo messaggio. -
-
- Grazie, -
- Il team di {{project}} + + + +
+ Ciao {{name}}, +
+
+ Segui questo link per verificare il tuo indirizzo email. +
+ {{redirect}} +
+
+ Se non hai chiesto di verificare questo indirizzo, puoi ignorare questo messaggio. +
+
+ Grazie, +
+ Il team di {{project}}
\ No newline at end of file diff --git a/app/config/locale/templates/it.email.auth.invitation.tpl b/app/config/locales/templates/it.email.auth.invitation.tpl similarity index 96% rename from app/config/locale/templates/it.email.auth.invitation.tpl rename to app/config/locales/templates/it.email.auth.invitation.tpl index 9ec03cf39b..e6eddb5d1b 100644 --- a/app/config/locale/templates/it.email.auth.invitation.tpl +++ b/app/config/locales/templates/it.email.auth.invitation.tpl @@ -1,28 +1,28 @@ - - - -
- Ciao, -
-
- Questa mail ti è stata inviata perchè {{owner}} vuole invitarti a diventare un membro del team {{team}} del progetto {{project}}. -
-
- Segui questo link per unirti al team {{team}}: -
- {{redirect}} -
-
- Se non sei interessato, puoi ignorare questo messaggio. -
-
- Grazie, -
- Il team di {{project}} + + + +
+ Ciao, +
+
+ Questa mail ti è stata inviata perchè {{owner}} vuole invitarti a diventare un membro del team {{team}} del progetto {{project}}. +
+
+ Segui questo link per unirti al team {{team}}: +
+ {{redirect}} +
+
+ Se non sei interessato, puoi ignorare questo messaggio. +
+
+ Grazie, +
+ Il team di {{project}}
\ No newline at end of file diff --git a/app/config/locale/templates/it.email.auth.recovery.tpl b/app/config/locales/templates/it.email.auth.recovery.tpl similarity index 95% rename from app/config/locale/templates/it.email.auth.recovery.tpl rename to app/config/locales/templates/it.email.auth.recovery.tpl index 2756b1569d..64e865fe76 100644 --- a/app/config/locale/templates/it.email.auth.recovery.tpl +++ b/app/config/locales/templates/it.email.auth.recovery.tpl @@ -1,24 +1,24 @@ - - -
- Ciao {{name}}, -
-
- Segui questo link per reimpostare la tua password per {{project}}. -
- {{redirect}} -
-
- Se non hai chiesto di reimpostare la password, puoi ignorare questo messaggio. -
-
- Grazie, -
- Il team di {{project}} + + +
+ Ciao {{name}}, +
+
+ Segui questo link per reimpostare la tua password per {{project}}. +
+ {{redirect}} +
+
+ Se non hai chiesto di reimpostare la password, puoi ignorare questo messaggio. +
+
+ Grazie, +
+ Il team di {{project}}
\ No newline at end of file diff --git a/app/config/locale/templates/ja.email.auth.confirm.tpl b/app/config/locales/templates/ja.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/ja.email.auth.confirm.tpl rename to app/config/locales/templates/ja.email.auth.confirm.tpl diff --git a/app/config/locale/templates/ja.email.auth.invitation.tpl b/app/config/locales/templates/ja.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/ja.email.auth.invitation.tpl rename to app/config/locales/templates/ja.email.auth.invitation.tpl diff --git a/app/config/locale/templates/ja.email.auth.recovery.tpl b/app/config/locales/templates/ja.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/ja.email.auth.recovery.tpl rename to app/config/locales/templates/ja.email.auth.recovery.tpl diff --git a/app/config/locale/templates/jv.email.auth.confirm.tpl b/app/config/locales/templates/jv.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/jv.email.auth.confirm.tpl rename to app/config/locales/templates/jv.email.auth.confirm.tpl diff --git a/app/config/locale/templates/jv.email.auth.invitation.tpl b/app/config/locales/templates/jv.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/jv.email.auth.invitation.tpl rename to app/config/locales/templates/jv.email.auth.invitation.tpl diff --git a/app/config/locale/templates/jv.email.auth.recovery.tpl b/app/config/locales/templates/jv.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/jv.email.auth.recovery.tpl rename to app/config/locales/templates/jv.email.auth.recovery.tpl diff --git a/app/config/locales/templates/ko.email.auth.confirm.tpl b/app/config/locales/templates/ko.email.auth.confirm.tpl new file mode 100644 index 0000000000..e3c6070d55 --- /dev/null +++ b/app/config/locales/templates/ko.email.auth.confirm.tpl @@ -0,0 +1,24 @@ + + +
+ 안녕하세요 {{name}}님, +
+
+ 회원님 이메일을 인증하러 아래 링크를 클릭하세요. +
+ {{redirect}} +
+
+ 만약 인증 요청하지 않으셨다면 이 이메일을 무시하세요. +
+
+ 감사합니다! +
+ {{project}}팀 드림 +
\ No newline at end of file diff --git a/app/config/locales/templates/ko.email.auth.invitation.tpl b/app/config/locales/templates/ko.email.auth.invitation.tpl new file mode 100644 index 0000000000..4fc62b8516 --- /dev/null +++ b/app/config/locales/templates/ko.email.auth.invitation.tpl @@ -0,0 +1,27 @@ + + +
+ 안녕하세요, +
+
+ {{owner}}님이 {{project}}프로젝트의 {{team}}팀에 초대했습니다. +
+
+ 아래 링크를 통하여 {{team}}팀에 합류해주시면 됩니다. +
+ {{redirect}} +
+
+ 만약 합류에 관심 없으시면 이 이메일을 무시하세요. +
+
+ 감사합니다! +
+ {{project}}팀 드림 +
diff --git a/app/config/locales/templates/ko.email.auth.recovery.tpl b/app/config/locales/templates/ko.email.auth.recovery.tpl new file mode 100644 index 0000000000..bf73a93058 --- /dev/null +++ b/app/config/locales/templates/ko.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ 안녕하세요 {{name}}님, +
+
+ {{project}} 비밀번호 재설정하러 아래 링크를 클릭하세요. +
+ {{redirect}} +
+
+ 만약 회원님이 비밀번호 재설정 요청하지 않으셨다면 이 이메일을 무시하세요. +
+
+ 감사합니다! +
+ {{project}}팀 드림 +
diff --git a/app/config/locale/templates/lt.email.auth.confirm.tpl b/app/config/locales/templates/lt.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/lt.email.auth.confirm.tpl rename to app/config/locales/templates/lt.email.auth.confirm.tpl diff --git a/app/config/locale/templates/lt.email.auth.invitation.tpl b/app/config/locales/templates/lt.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/lt.email.auth.invitation.tpl rename to app/config/locales/templates/lt.email.auth.invitation.tpl diff --git a/app/config/locale/templates/lt.email.auth.recovery.tpl b/app/config/locales/templates/lt.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/lt.email.auth.recovery.tpl rename to app/config/locales/templates/lt.email.auth.recovery.tpl diff --git a/app/config/locales/templates/ml.email.auth.confirm.tpl b/app/config/locales/templates/ml.email.auth.confirm.tpl new file mode 100644 index 0000000000..14746f04a5 --- /dev/null +++ b/app/config/locales/templates/ml.email.auth.confirm.tpl @@ -0,0 +1,28 @@ + + +
+ + നമസ്കാരം {{name}}, +
+
+ + താങ്കളുടെ ഇമെയിൽ ഐഡി വെരിഫൈ ചെയ്യുന്നതിന് താഴെ കാണുന്ന ലിങ്കിൽ ക്ലിക്ക് ചെയ്യൂ +
+ {{redirect}} +
+
+ + ഇമെയിൽ ഐഡി വെരിഫൈ ചെയ്യേണ്ടെങ്കിൽ ഈ മെസ്സേജ് ഇഗ്നോർ ചെയ്യാം +
+
+ + നന്ദി +
+ {{project}} ടീം. +
diff --git a/app/config/locales/templates/ml.email.auth.invitation.tpl b/app/config/locales/templates/ml.email.auth.invitation.tpl new file mode 100644 index 0000000000..5f16374dcd --- /dev/null +++ b/app/config/locales/templates/ml.email.auth.invitation.tpl @@ -0,0 +1,27 @@ + + +
+ നമസ്കാരം, +
+
+ {{owner}} താങ്കളെ {{project}} പ്രോജക്ടിലെ {{team}} ടീമിൽ അംഗമാവാൻ ക്ഷണിച്ചിരിക്കുന്നു. +
+
+ {{team}} ടീമിൽ ചേരുവാൻ താഴെ കാണുന്ന ലിങ്കിൽ ക്ലിക്ക് ചെയ്യൂ. +
+ {{redirect}} +
+
+ താൽപര്യമില്ലെങ്കിൽ ഈ മെസ്സേജ് ഇഗ്നോർ ചെയ്യാം +
+
+ നന്ദി, +
+ {{project}} ടീം. +
diff --git a/app/config/locales/templates/ml.email.auth.recovery.tpl b/app/config/locales/templates/ml.email.auth.recovery.tpl new file mode 100644 index 0000000000..ee1e73a52b --- /dev/null +++ b/app/config/locales/templates/ml.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ നമസ്കാരം {{name}}, +
+
+ താങ്കളുടെ {{project}} പാസ്‌വേഡ് റീസെറ്റ് ചെയ്യാൻ താഴെ കാണുന്ന ലിങ്കിൽ ക്ലിക്ക് ചെയ്യുക +
+ {{redirect}} +
+
+ പാസ്‌വേഡ് റീസെറ്റ് ചെയ്യാൻ താങ്കൾ റിക്വസ്റ്റ് ചെയ്തിട്ടില്ലെങ്കിൽ ദയവായി ഈ മെസ്സേജ് ഇഗ്നോർ ചെയ്യുക +
+
+ നന്ദി, +
+ {{project}} ടീം +
diff --git a/app/config/locales/templates/my.email.auth.confirm.tpl b/app/config/locales/templates/my.email.auth.confirm.tpl new file mode 100644 index 0000000000..65a224c51f --- /dev/null +++ b/app/config/locales/templates/my.email.auth.confirm.tpl @@ -0,0 +1,24 @@ + + +
+ Hello {{name}}, +
+
+ Ikuti pautan ini untuk mengesahkan alamat e-mel anda. +
+ {{redirect}} +
+
+ Jika anda tidak meminta untuk mengesahkan alamat ini, anda boleh mengabaikan mesej ini. +
+
+ Terima kasih, +
+ Kumpulan {{project}} +
\ No newline at end of file diff --git a/app/config/locales/templates/my.email.auth.invitation.tpl b/app/config/locales/templates/my.email.auth.invitation.tpl new file mode 100644 index 0000000000..891e1eb4de --- /dev/null +++ b/app/config/locales/templates/my.email.auth.invitation.tpl @@ -0,0 +1,27 @@ + + +
+ Hello, +
+
+ E-mel ini dihantar kepada anda kerana {{owner}}ingin mengundang Anda untuk menjadi anggota kumpulan {{team}} di dalam {{project}}. +
+
+ Ikuti pautan ini untuk menyertai kumpulan {{team}}: +
+ {{redirect}} +
+
+ Sekiranya anda tidak berminat,anda boleh mengabaikan mesej ini. +
+
+ Terima Kasih, +
+ Kumpulan {{project}} +
diff --git a/app/config/locales/templates/my.email.auth.recovery.tpl b/app/config/locales/templates/my.email.auth.recovery.tpl new file mode 100644 index 0000000000..25f81408d7 --- /dev/null +++ b/app/config/locales/templates/my.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ Hello {{name}}, +
+
+ Ikuti pautan ini sekiranya anda mahu menetapkan semula kata laluan {{project}} anda. +
+ {{redirect}} +
+
+ Sekiranya anda tidak meminta untuk menetapkan semula kata laluan anda,anda boleh sahaja mengabaikan mesej ini. +
+
+ Terima Kasih, +
+ Kumpulan {{project}} +
diff --git a/app/config/locale/templates/nl.email.auth.confirm.tpl b/app/config/locales/templates/nl.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/nl.email.auth.confirm.tpl rename to app/config/locales/templates/nl.email.auth.confirm.tpl diff --git a/app/config/locale/templates/nl.email.auth.invitation.tpl b/app/config/locales/templates/nl.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/nl.email.auth.invitation.tpl rename to app/config/locales/templates/nl.email.auth.invitation.tpl diff --git a/app/config/locale/templates/nl.email.auth.recovery.tpl b/app/config/locales/templates/nl.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/nl.email.auth.recovery.tpl rename to app/config/locales/templates/nl.email.auth.recovery.tpl diff --git a/app/config/locale/templates/no.email.auth.confirm.tpl b/app/config/locales/templates/no.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/no.email.auth.confirm.tpl rename to app/config/locales/templates/no.email.auth.confirm.tpl diff --git a/app/config/locale/templates/no.email.auth.invitation.tpl b/app/config/locales/templates/no.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/no.email.auth.invitation.tpl rename to app/config/locales/templates/no.email.auth.invitation.tpl diff --git a/app/config/locale/templates/no.email.auth.recovery.tpl b/app/config/locales/templates/no.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/no.email.auth.recovery.tpl rename to app/config/locales/templates/no.email.auth.recovery.tpl diff --git a/app/config/locales/templates/ph.email.auth.confirm.tpl b/app/config/locales/templates/ph.email.auth.confirm.tpl new file mode 100644 index 0000000000..08a9b6d639 --- /dev/null +++ b/app/config/locales/templates/ph.email.auth.confirm.tpl @@ -0,0 +1,24 @@ + + +
+ Kamusta {{name}}, +
+
+ Sundun ang link na ito upang ma-verify ang iyong email address. +
+ {{redirect}} +
+
+ Kung hindi mo hiniling na i-verify ang address na ito, maaari mong balewalain ang mensaheng ito. +
+
+ Salamat, +
+ Pangkat ng {{project}} +
\ No newline at end of file diff --git a/app/config/locales/templates/ph.email.auth.invitation.tpl b/app/config/locales/templates/ph.email.auth.invitation.tpl new file mode 100644 index 0000000000..f8a8668e50 --- /dev/null +++ b/app/config/locales/templates/ph.email.auth.invitation.tpl @@ -0,0 +1,27 @@ + + +
+ Kamusta, +
+
+ Ipinadala ang email na ito sa iyo dahil nais kang anyayahan ni {{ owner }} upang maging isang kasapi ng pangkat ng {{ team }} sa {{ project }}. +
+
+ Sundan ang link na ito upang sumali sa pangkat ng {{team}}: +
+ {{redirect}} +
+
+ Kung hindi ka interesado, maari mong balewalain ang mensahing ito. +
+
+ Salamat, +
+ Pangkat ng {{project}} +
diff --git a/app/config/locales/templates/ph.email.auth.recovery.tpl b/app/config/locales/templates/ph.email.auth.recovery.tpl new file mode 100644 index 0000000000..abf1b780ef --- /dev/null +++ b/app/config/locales/templates/ph.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ Kamusta {{name}}, +
+
+ Sundan ang link na ito updang i-reset ang iyong password sa {{ project }}. +
+ {{redirect}} +
+
+ Kung hindi mo hiniling na i-reset ang iyong password, maaari mong balewalain ang mensahe na ito. +
+
+ Salamat, +
+ Pangkat ng {{project}} +
diff --git a/app/config/locale/templates/pl.email.auth.confirm.tpl b/app/config/locales/templates/pl.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/pl.email.auth.confirm.tpl rename to app/config/locales/templates/pl.email.auth.confirm.tpl diff --git a/app/config/locale/templates/pl.email.auth.invitation.tpl b/app/config/locales/templates/pl.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/pl.email.auth.invitation.tpl rename to app/config/locales/templates/pl.email.auth.invitation.tpl diff --git a/app/config/locale/templates/pl.email.auth.recovery.tpl b/app/config/locales/templates/pl.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/pl.email.auth.recovery.tpl rename to app/config/locales/templates/pl.email.auth.recovery.tpl diff --git a/app/config/locales/templates/pn.email.auth.confirm.tpl b/app/config/locales/templates/pn.email.auth.confirm.tpl new file mode 100644 index 0000000000..3b31381808 --- /dev/null +++ b/app/config/locales/templates/pn.email.auth.confirm.tpl @@ -0,0 +1,24 @@ + + +
+ ਹੈਲੋ {{name}}, +
+
+ ਆਪਣੇ ਈਮੇਲ ਪਤੇ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਇਸ ਲਿੰਕ ਦਾ ਪਾਲਣ ਕਰੋ: +
+ {{redirect}} +
+
+ ਜੇ ਤੁਸੀਂ ਇਸ ਪਤੇ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ ਨਹੀਂ ਕਿਹਾ, ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰ ਅੰਦਾਜ਼ ਕਰ ਸਕਦੇ ਹੋ. +
+
+ ਧੰਨਵਾਦ, +
+ {{project}} ਟੀਮ +
diff --git a/app/config/locales/templates/pn.email.auth.invitation.tpl b/app/config/locales/templates/pn.email.auth.invitation.tpl new file mode 100644 index 0000000000..2b0a5fd279 --- /dev/null +++ b/app/config/locales/templates/pn.email.auth.invitation.tpl @@ -0,0 +1,27 @@ + + +
+ ਸਤ ਸ੍ਰੀ ਅਕਾਲ, +
+
+ ਇਹ ਮੇਲ ਤੁਹਾਨੂੰ ਇਸ ਲਈ ਭੇਜਿਆ ਗਿਆ ਸੀ ਕਿਉਂਕਿ {{owner}} ਤੁਹਾਨੂੰ {{team} at ਟੀਮ {{project}} 'ਤੇ ਟੀਮ ਦੇ ਮੈਂਬਰ ਬਣਨ ਲਈ ਸੱਦਾ ਦੇਣਾ ਚਾਹੁੰਦਾ ਸੀ. +
+
+ {{team}} ਟੀਮ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਲਈ ਇਸ ਲਿੰਕ ਦਾ ਪਾਲਣ ਕਰੋ: +
+ {{redirect}} +
+
+ ਜੇ ਤੁਸੀਂ ਦਿਲਚਸਪੀ ਨਹੀਂ ਰੱਖਦੇ, ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੰਦੇਸ਼ ਨੂੰ ਨਜ਼ਰ ਅੰਦਾਜ਼ ਕਰ ਸਕਦੇ ਹੋ. +
+
+ ਧੰਨਵਾਦ, +
+ {{project}} ਟੀਮ +
diff --git a/app/config/locales/templates/pn.email.auth.recovery.tpl b/app/config/locales/templates/pn.email.auth.recovery.tpl new file mode 100644 index 0000000000..e85026a203 --- /dev/null +++ b/app/config/locales/templates/pn.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ ਸਤ ਸ੍ਰੀ ਅਕਾਲ {{name}}, +
+
+ ਆਪਣੇ {{project}} ਪਾਸਵਰਡ ਨੂੰ ਰੀਸੈਟ ਕਰਨ ਲਈ ਇਸ ਲਿੰਕ ਦਾ ਪਾਲਣ ਕਰੋ. +
+ {{redirect}} +
+
+ ਜੇ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਰੀਸੈਟ ਕਰਨ ਲਈ ਨਹੀਂ ਕਿਹਾ, ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰ ਅੰਦਾਜ਼ ਕਰ ਸਕਦੇ ਹੋ. +
+
+ ਧੰਨਵਾਦ, +
+ {{project}} ਟੀਮ +
diff --git a/app/config/locale/templates/pt-br.email.auth.confirm.tpl b/app/config/locales/templates/pt-br.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/pt-br.email.auth.confirm.tpl rename to app/config/locales/templates/pt-br.email.auth.confirm.tpl diff --git a/app/config/locale/templates/pt-br.email.auth.invitation.tpl b/app/config/locales/templates/pt-br.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/pt-br.email.auth.invitation.tpl rename to app/config/locales/templates/pt-br.email.auth.invitation.tpl diff --git a/app/config/locale/templates/pt-br.email.auth.recovery.tpl b/app/config/locales/templates/pt-br.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/pt-br.email.auth.recovery.tpl rename to app/config/locales/templates/pt-br.email.auth.recovery.tpl diff --git a/app/config/locale/templates/pt-pt.email.auth.confirm.tpl b/app/config/locales/templates/pt-pt.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/pt-pt.email.auth.confirm.tpl rename to app/config/locales/templates/pt-pt.email.auth.confirm.tpl diff --git a/app/config/locale/templates/pt-pt.email.auth.invitation.tpl b/app/config/locales/templates/pt-pt.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/pt-pt.email.auth.invitation.tpl rename to app/config/locales/templates/pt-pt.email.auth.invitation.tpl diff --git a/app/config/locale/templates/pt-pt.email.auth.recovery.tpl b/app/config/locales/templates/pt-pt.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/pt-pt.email.auth.recovery.tpl rename to app/config/locales/templates/pt-pt.email.auth.recovery.tpl diff --git a/app/config/locale/templates/ro.email.auth.confirm.tpl b/app/config/locales/templates/ro.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/ro.email.auth.confirm.tpl rename to app/config/locales/templates/ro.email.auth.confirm.tpl diff --git a/app/config/locale/templates/ro.email.auth.invitation.tpl b/app/config/locales/templates/ro.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/ro.email.auth.invitation.tpl rename to app/config/locales/templates/ro.email.auth.invitation.tpl diff --git a/app/config/locale/templates/ro.email.auth.recovery.tpl b/app/config/locales/templates/ro.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/ro.email.auth.recovery.tpl rename to app/config/locales/templates/ro.email.auth.recovery.tpl diff --git a/app/config/locale/templates/ru.email.auth.confirm.tpl b/app/config/locales/templates/ru.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/ru.email.auth.confirm.tpl rename to app/config/locales/templates/ru.email.auth.confirm.tpl diff --git a/app/config/locale/templates/ru.email.auth.invitation.tpl b/app/config/locales/templates/ru.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/ru.email.auth.invitation.tpl rename to app/config/locales/templates/ru.email.auth.invitation.tpl diff --git a/app/config/locale/templates/ru.email.auth.recovery.tpl b/app/config/locales/templates/ru.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/ru.email.auth.recovery.tpl rename to app/config/locales/templates/ru.email.auth.recovery.tpl diff --git a/app/config/locale/templates/si.email.auth.confirm.tpl b/app/config/locales/templates/si.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/si.email.auth.confirm.tpl rename to app/config/locales/templates/si.email.auth.confirm.tpl diff --git a/app/config/locale/templates/si.email.auth.invitation.tpl b/app/config/locales/templates/si.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/si.email.auth.invitation.tpl rename to app/config/locales/templates/si.email.auth.invitation.tpl diff --git a/app/config/locale/templates/si.email.auth.recovery.tpl b/app/config/locales/templates/si.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/si.email.auth.recovery.tpl rename to app/config/locales/templates/si.email.auth.recovery.tpl diff --git a/app/config/locale/templates/sl.email.auth.confirm.tpl b/app/config/locales/templates/sl.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/sl.email.auth.confirm.tpl rename to app/config/locales/templates/sl.email.auth.confirm.tpl diff --git a/app/config/locale/templates/sl.email.auth.invitation.tpl b/app/config/locales/templates/sl.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/sl.email.auth.invitation.tpl rename to app/config/locales/templates/sl.email.auth.invitation.tpl diff --git a/app/config/locale/templates/sl.email.auth.recovery.tpl b/app/config/locales/templates/sl.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/sl.email.auth.recovery.tpl rename to app/config/locales/templates/sl.email.auth.recovery.tpl diff --git a/app/config/locale/templates/sv.email.auth.confirm.tpl b/app/config/locales/templates/sv.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/sv.email.auth.confirm.tpl rename to app/config/locales/templates/sv.email.auth.confirm.tpl diff --git a/app/config/locale/templates/sv.email.auth.invitation.tpl b/app/config/locales/templates/sv.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/sv.email.auth.invitation.tpl rename to app/config/locales/templates/sv.email.auth.invitation.tpl diff --git a/app/config/locale/templates/sv.email.auth.recovery.tpl b/app/config/locales/templates/sv.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/sv.email.auth.recovery.tpl rename to app/config/locales/templates/sv.email.auth.recovery.tpl diff --git a/app/config/locale/templates/ta.email.auth.confirm.tpl b/app/config/locales/templates/ta.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/ta.email.auth.confirm.tpl rename to app/config/locales/templates/ta.email.auth.confirm.tpl diff --git a/app/config/locale/templates/ta.email.auth.invitation.tpl b/app/config/locales/templates/ta.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/ta.email.auth.invitation.tpl rename to app/config/locales/templates/ta.email.auth.invitation.tpl diff --git a/app/config/locale/templates/ta.email.auth.recovery.tpl b/app/config/locales/templates/ta.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/ta.email.auth.recovery.tpl rename to app/config/locales/templates/ta.email.auth.recovery.tpl diff --git a/app/config/locales/templates/th.email.auth.confirm.tpl b/app/config/locales/templates/th.email.auth.confirm.tpl new file mode 100644 index 0000000000..99a6268ea7 --- /dev/null +++ b/app/config/locales/templates/th.email.auth.confirm.tpl @@ -0,0 +1,24 @@ + + +
+ สวัสดี {{name}}, +
+
+ ตามไปยังลิงค์นี้เพื่อยืนยันที่อยู่อีเมลของคุณ +
+ {{redirect}} +
+
+ หากคุณไม่ได้ขอให้ยืนยันที่อยู่นี้คุณสามารถเพิกเฉยต่อข้อความนี้ได้ +
+
+ ขอบคุณ, +
+ ทีม {{project}} +
diff --git a/app/config/locales/templates/th.email.auth.invitation.tpl b/app/config/locales/templates/th.email.auth.invitation.tpl new file mode 100644 index 0000000000..399e47c686 --- /dev/null +++ b/app/config/locales/templates/th.email.auth.invitation.tpl @@ -0,0 +1,28 @@ + + +
+ สวัสดี, +
+
+ + เมลนี้ส่งถึงคุณเพราะ {{owner}} ต้องการเชิญคุณเป็นสมาชิกในทีม {{team}} ของ {{project}}. +
+
+ ตามลิงค์นี้เพื่อเข้าร่วม {{team}} ทีม: +
+ {{redirect}} +
+
+ หากคุณไม่สนใจคุณสามารถละเว้นข้อความนี้ +
+
+ ขอบคุณ, +
+ {{project}} ทีม +
diff --git a/app/config/locales/templates/th.email.auth.recovery.tpl b/app/config/locales/templates/th.email.auth.recovery.tpl new file mode 100644 index 0000000000..d835481dc4 --- /dev/null +++ b/app/config/locales/templates/th.email.auth.recovery.tpl @@ -0,0 +1,24 @@ + + +
+ สวัสดี {{name}}, +
+
+ ตามไปยังลิงค์นี้เพื่อรีเซ็ตรหัสผ่าน {{project}}. +
+ {{redirect}} +
+
+ หากคุณไม่ได้ขอให้ตั้งรหัสผ่านใหม่คุณสามารถเพิกเฉยต่อข้อความนี้ได้ +
+
+ ขอบคุณ, +
+ ทีม {{project}} +
diff --git a/app/config/locale/templates/tr.email.auth.confirm.tpl b/app/config/locales/templates/tr.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/tr.email.auth.confirm.tpl rename to app/config/locales/templates/tr.email.auth.confirm.tpl diff --git a/app/config/locale/templates/tr.email.auth.invitation.tpl b/app/config/locales/templates/tr.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/tr.email.auth.invitation.tpl rename to app/config/locales/templates/tr.email.auth.invitation.tpl diff --git a/app/config/locale/templates/tr.email.auth.recovery.tpl b/app/config/locales/templates/tr.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/tr.email.auth.recovery.tpl rename to app/config/locales/templates/tr.email.auth.recovery.tpl diff --git a/app/config/locale/templates/ua.email.auth.confirm.tpl b/app/config/locales/templates/ua.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/ua.email.auth.confirm.tpl rename to app/config/locales/templates/ua.email.auth.confirm.tpl diff --git a/app/config/locale/templates/ua.email.auth.invitation.tpl b/app/config/locales/templates/ua.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/ua.email.auth.invitation.tpl rename to app/config/locales/templates/ua.email.auth.invitation.tpl diff --git a/app/config/locale/templates/ua.email.auth.recovery.tpl b/app/config/locales/templates/ua.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/ua.email.auth.recovery.tpl rename to app/config/locales/templates/ua.email.auth.recovery.tpl diff --git a/app/config/locale/templates/vi.email.auth.confirm.tpl b/app/config/locales/templates/vi.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/vi.email.auth.confirm.tpl rename to app/config/locales/templates/vi.email.auth.confirm.tpl diff --git a/app/config/locale/templates/vi.email.auth.invitation.tpl b/app/config/locales/templates/vi.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/vi.email.auth.invitation.tpl rename to app/config/locales/templates/vi.email.auth.invitation.tpl diff --git a/app/config/locale/templates/vi.email.auth.recovery.tpl b/app/config/locales/templates/vi.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/vi.email.auth.recovery.tpl rename to app/config/locales/templates/vi.email.auth.recovery.tpl diff --git a/app/config/locale/templates/zh-cn.email.auth.confirm.tpl b/app/config/locales/templates/zh-cn.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/zh-cn.email.auth.confirm.tpl rename to app/config/locales/templates/zh-cn.email.auth.confirm.tpl diff --git a/app/config/locale/templates/zh-cn.email.auth.invitation.tpl b/app/config/locales/templates/zh-cn.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/zh-cn.email.auth.invitation.tpl rename to app/config/locales/templates/zh-cn.email.auth.invitation.tpl diff --git a/app/config/locale/templates/zh-cn.email.auth.recovery.tpl b/app/config/locales/templates/zh-cn.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/zh-cn.email.auth.recovery.tpl rename to app/config/locales/templates/zh-cn.email.auth.recovery.tpl diff --git a/app/config/locale/templates/zh-tw.email.auth.confirm.tpl b/app/config/locales/templates/zh-tw.email.auth.confirm.tpl similarity index 100% rename from app/config/locale/templates/zh-tw.email.auth.confirm.tpl rename to app/config/locales/templates/zh-tw.email.auth.confirm.tpl diff --git a/app/config/locale/templates/zh-tw.email.auth.invitation.tpl b/app/config/locales/templates/zh-tw.email.auth.invitation.tpl similarity index 100% rename from app/config/locale/templates/zh-tw.email.auth.invitation.tpl rename to app/config/locales/templates/zh-tw.email.auth.invitation.tpl diff --git a/app/config/locale/templates/zh-tw.email.auth.recovery.tpl b/app/config/locales/templates/zh-tw.email.auth.recovery.tpl similarity index 100% rename from app/config/locale/templates/zh-tw.email.auth.recovery.tpl rename to app/config/locales/templates/zh-tw.email.auth.recovery.tpl diff --git a/app/config/locales/th.continents.php b/app/config/locales/th.continents.php new file mode 100644 index 0000000000..87ec326fa6 --- /dev/null +++ b/app/config/locales/th.continents.php @@ -0,0 +1,10 @@ + 'แอฟริกา', + 'AN' => 'ทวีปแอนตาร์กติกา', + 'AS' => 'เอเชีย', + 'EU' => 'ยุโรป', + 'NA' => 'อเมริกาเหนือ', + 'OC' => 'โอเชียเนีย', + 'SA' => 'อเมริกาใต้', +]; diff --git a/app/config/locales/th.countries.php b/app/config/locales/th.countries.php new file mode 100644 index 0000000000..e183b4795b --- /dev/null +++ b/app/config/locales/th.countries.php @@ -0,0 +1,198 @@ + 'อัฟกานิสถาน', + 'AO' => 'แองโกลา', + 'AL' => 'แอลเบเนีย', + 'AD' => 'อันโดร์รา', + 'AE' => 'สหรัฐอาหรับเอมิเรตส์', + 'AR' => 'อาร์เจนตินา', + 'AM' => 'อาร์มีเนีย', + 'AG' => 'แอนติกาและบาร์บูดา', + 'AU' => 'ออสเตรเลีย', + 'AT' => 'ออสเตรีย', + 'AZ' => 'อาเซอร์ไบจาน', + 'BI' => 'บุรุนดี', + 'BE' => 'เบลเยียม', + 'BJ' => 'เบนิน', + 'BF' => 'บูร์กินาฟาโซ', + 'BD' => 'บังคลาเทศ', + 'BG' => 'บัลแกเรีย', + 'BH' => 'บาห์เรน', + 'BS' => 'บาฮามาส', + 'BA' => 'บอสเนียและเฮอร์เซโก', + 'BY' => 'เบลารุส', + 'BZ' => 'เบลีซ', + 'BO' => 'โบลิเวีย', + 'BR' => 'บราซิล', + 'BB' => 'บาร์เบโดส', + 'BN' => 'บรูไน', + 'BT' => 'ภูฏาน', + 'BW' => 'บอตสวานา', + 'CF' => 'สาธารณรัฐอัฟริกากลาง', + 'CA' => 'แคนาดา', + 'CH' => 'สวิสเซอร์แลนด์', + 'CL' => 'ชิลี', + 'CN' => 'จีน', + 'CI' => 'ไอวอรีโคสต์', + 'CM' => 'แคเมอรูน', + 'CD' => 'สาธารณรัฐประชาธิปไตยคองโก', + 'CG' => 'สาธารณรัฐคองโก', + 'CO' => 'โคลอมเบีย', + 'KM' => 'คอโมโรส', + 'CV' => 'เคปเวิร์ด', + 'CR' => 'คอสตาริกา', + 'CU' => 'คิวบา', + 'CY' => 'ไซปรัส', + 'CZ' => 'เช็ก', + 'DE' => 'เยอรมัน', + 'DJ' => 'จิบูตี', + 'DM' => 'โดมินิกา', + 'DK' => 'เดนมาร์ก', + 'DO' => 'สาธารณรัฐโดมินิกัน', + 'DZ' => 'แอลจีเรีย', + 'EC' => 'เอกวาดอร์', + 'EG' => 'อียิปต์', + 'ER' => 'เอริเทรี', + 'ES' => 'สเปน', + 'EE' => 'เอสโตเนีย', + 'ET' => 'สาธารณรัฐเอธิโอเปีย', + 'FI' => 'ฟินแลนด์', + 'FJ' => 'ฟิจิ', + 'FR' => 'ฝรั่งเศส', + 'FM' => 'ไมโครนีเซีย', + 'GA' => 'กาบอง', + 'GB' => 'สหราชอาณาจักร', + 'GE' => 'จอร์เจีย', + 'GH' => 'กานา', + 'GN' => 'กินี', + 'GM' => 'แกมเบีย', + 'GW' => 'กินีบิสเซา', + 'GQ' => 'อิเควทอเรียลกินี', + 'GR' => 'กรีซ', + 'GD' => 'เกรเนดา', + 'GT' => 'กัวเตมาลา', + 'GY' => 'กายอานา', + 'HN' => 'ฮอนดูรัส', + 'HR' => 'โครเอเชีย', + 'HT' => 'ไฮติ', + 'HU' => 'ฮังการี', + 'ID' => 'อินโดนีเซีย', + 'IN' => 'อินเดีย', + 'IE' => 'ไอร์แลนด์', + 'IR' => 'อิหร่าน', + 'IQ' => 'อิรัก', + 'IS' => 'ไอซ์แลนด์', + 'IL' => 'อิสราเอล', + 'IT' => 'อิตาลี', + 'JM' => 'จาเมกา', + 'JO' => 'จอร์แดน', + 'JP' => 'ญี่ปุ่น', + 'KZ' => 'คาซัคสถาน', + 'KE' => 'เคนย่า', + 'KG' => 'คีร์กีสถาน', + 'KH' => 'กัมพูชา', + 'KI' => 'คิริบาส', + 'KN' => 'เซนต์คิตส์และเนวิส', + 'KR' => 'เกาหลีใต้', + 'KW' => 'คูเวต', + 'LA' => 'ลาว', + 'LB' => 'เลบานอน', + 'LR' => 'ไลบีเรีย', + 'LY' => 'ลิบยา', + 'LC' => 'เซนต์ลูเซีย', + 'LI' => 'ลิกเตนสไตน์', + 'LK' => 'ศรีลังกา', + 'LS' => 'เลโซโท', + 'LT' => 'ลิธัวเนีย', + 'LU' => 'ลักเซมเบิร์ก', + 'LV' => 'ลัตเวีย', + 'MA' => 'โมร็อกโก', + 'MC' => 'โมนาโก', + 'MD' => 'มอลโดวา', + 'MG' => 'มาดากัสการ์', + 'MV' => 'มัลดีฟส์', + 'MX' => 'เม็กซิโก', + 'MH' => 'หมู่เกาะมาร์แชลล์', + 'MK' => 'มาซิโดเนีย', + 'ML' => 'มาลี', + 'MT' => 'เกาะมอลตา', + 'MM' => 'พม่า', + 'ME' => 'มอนเตเนโก', + 'MN' => 'มองโกเลีย', + 'MZ' => 'โมซัมบิก', + 'MR' => 'มอริเตเนีย', + 'MU' => 'มอริเชียส', + 'MW' => 'มาลาวี', + 'MY' => 'มาเลเซีย', + 'NA' => 'นามิเบีย', + 'NE' => 'ไนเธอร์', + 'NG' => 'ไนจีเรีย', + 'NI' => 'นิการากัว', + 'NL' => 'เนเธอร์แลนด์', + 'NO' => 'นอร์เวย์', + 'NP' => 'เนปาล', + 'NR' => 'นาอูรู', + 'NZ' => 'New Zealand', + 'OM' => 'โอมาน', + 'PK' => 'ปากีสถาน', + 'PA' => 'ปานามา', + 'PE' => 'เปรู', + 'PH' => 'ฟิลิปปินส์', + 'PW' => 'ปาเลา', + 'PG' => 'ปาปัวนิวกินี', + 'PL' => 'โปแลนด์', + 'KP' => 'เกาหลีเหนือ', + 'PT' => 'โปรตุเกส', + 'PY' => 'ปารากวัย', + 'QA' => 'กาตาร์', + 'RO' => 'โรมาเนีย', + 'RU' => 'รัสเซีย', + 'RW' => 'รวันดา', + 'SA' => 'ซาอุดิอาราเบีย', + 'SD' => 'ซูดาน', + 'SN' => 'เซเนกัล', + 'SG' => 'สิงคโปร์', + 'SB' => 'เกาะโซโลมอน', + 'SL' => 'เซียร์ราลีโอน', + 'SV' => 'เซียร์ราลีโอน', + 'SM' => 'ซานมาริโน', + 'SO' => 'โซมาเลีย', + 'RS' => 'เซอร์เบีย', + 'SS' => 'ซูดานใต้', + 'ST' => 'เซาตูเมและปรินซิปี', + 'SR' => 'ซูรินาเม', + 'SK' => 'สโลวะเกีย', + 'SI' => 'สโลวีเนีย', + 'SE' => 'สวีเดน', + 'SZ' => 'สวาซิแลนด์', + 'SC' => 'เซเชลส์', + 'SY' => 'ซีเรีย', + 'TD' => 'ชาด', + 'TG' => 'สาธารณรัฐโตโก', + 'TH' => 'ไทย', + 'TJ' => 'ทาจิกิสถาน', + 'TM' => 'เติร์กเมนิสถาน', + 'TL' => 'ติมอร์เลสเต', + 'TO' => 'ตองกา', + 'TT' => 'ตรินิแดดและโตเบโก', + 'TN' => 'ตูนิเซีย', + 'TR' => 'ตุรกี', + 'TV' => 'ตูวาลู', + 'TZ' => 'แทนซาเนีย', + 'UG' => 'ยูกันดา', + 'UA' => 'ยูเครน', + 'UY' => 'อุรุกวัย', + 'US' => 'สหรัฐ', + 'UZ' => 'ยุสเบกิสทัน', + 'VA' => 'นครวาติกัน', + 'VC' => 'เซนต์วินเซนต์และเกรนาดีนส์', + 'VE' => 'เวเนซุเอลา', + 'VN' => 'เวียดนาม', + 'VU' => 'วานูอาตู', + 'WS' => 'ซามัว', + 'YE' => 'เยเมน', + 'ZA' => 'แอฟริกาใต้', + 'ZM' => 'แซมเบีย', + 'ZW' => 'ซิมบับเว', +]; diff --git a/app/config/locales/th.php b/app/config/locales/th.php new file mode 100644 index 0000000000..841d97496f --- /dev/null +++ b/app/config/locales/th.php @@ -0,0 +1,21 @@ + '"ศิลปะแห่งความฉลาดคือศิลปะแห่งการรู้ว่าจะมองข้ามอะไร"', // This is the line printed in the homepage and console 'view-source' + 'settings.locale' => 'th', + 'settings.direction' => 'ltr', + + // Service - Users + 'auth.emails.team' => '%s ทีม', + 'auth.emails.confirm.title' => 'ยืนยันบัญชี', + 'auth.emails.confirm.body' => 'th.email.auth.confirm.tpl', + 'auth.emails.recovery.title' => 'รีเซ็ตรหัสผ่าน', + 'auth.emails.recovery.body' => 'th.email.auth.recovery.tpl', + 'auth.emails.invitation.title' => 'ขอเชิญเข้าร่วม %s ทีมที่ %s', + 'auth.emails.invitation.body' => 'th.email.auth.invitation.tpl', + + 'locale.country.unknown' => 'ไม่ทราบ', + + 'countries' => include 'th.countries.php', + 'continents' => include 'th.continents.php', +]; diff --git a/app/config/locale/tr.continents.php b/app/config/locales/tr.continents.php similarity index 100% rename from app/config/locale/tr.continents.php rename to app/config/locales/tr.continents.php diff --git a/app/config/locale/tr.countries.php b/app/config/locales/tr.countries.php similarity index 100% rename from app/config/locale/tr.countries.php rename to app/config/locales/tr.countries.php diff --git a/app/config/locale/tr.php b/app/config/locales/tr.php similarity index 100% rename from app/config/locale/tr.php rename to app/config/locales/tr.php diff --git a/app/config/locale/ua.continents.php b/app/config/locales/ua.continents.php similarity index 100% rename from app/config/locale/ua.continents.php rename to app/config/locales/ua.continents.php diff --git a/app/config/locale/ua.countries.php b/app/config/locales/ua.countries.php similarity index 100% rename from app/config/locale/ua.countries.php rename to app/config/locales/ua.countries.php diff --git a/app/config/locale/ua.php b/app/config/locales/ua.php similarity index 100% rename from app/config/locale/ua.php rename to app/config/locales/ua.php diff --git a/app/config/locale/vi.continents.php b/app/config/locales/vi.continents.php similarity index 100% rename from app/config/locale/vi.continents.php rename to app/config/locales/vi.continents.php diff --git a/app/config/locale/vi.countries.php b/app/config/locales/vi.countries.php similarity index 100% rename from app/config/locale/vi.countries.php rename to app/config/locales/vi.countries.php diff --git a/app/config/locale/vi.php b/app/config/locales/vi.php similarity index 100% rename from app/config/locale/vi.php rename to app/config/locales/vi.php diff --git a/app/config/locale/zh-cn.continents.php b/app/config/locales/zh-cn.continents.php similarity index 100% rename from app/config/locale/zh-cn.continents.php rename to app/config/locales/zh-cn.continents.php diff --git a/app/config/locale/zh-cn.countries.php b/app/config/locales/zh-cn.countries.php similarity index 100% rename from app/config/locale/zh-cn.countries.php rename to app/config/locales/zh-cn.countries.php diff --git a/app/config/locale/zh-cn.php b/app/config/locales/zh-cn.php similarity index 100% rename from app/config/locale/zh-cn.php rename to app/config/locales/zh-cn.php diff --git a/app/config/locale/zh-tw.continents.php b/app/config/locales/zh-tw.continents.php similarity index 100% rename from app/config/locale/zh-tw.continents.php rename to app/config/locales/zh-tw.continents.php diff --git a/app/config/locale/zh-tw.countries.php b/app/config/locales/zh-tw.countries.php similarity index 100% rename from app/config/locale/zh-tw.countries.php rename to app/config/locales/zh-tw.countries.php diff --git a/app/config/locale/zh-tw.php b/app/config/locales/zh-tw.php similarity index 100% rename from app/config/locale/zh-tw.php rename to app/config/locales/zh-tw.php diff --git a/app/config/services.php b/app/config/services.php index 0f4c44599d..0e4a3385c3 100644 --- a/app/config/services.php +++ b/app/config/services.php @@ -5,68 +5,87 @@ return [ 'name' => 'Homepage', 'controller' => 'controllers/home.php', 'sdk' => false, + 'tests' => false, ], 'console/' => [ 'name' => 'Console', 'controller' => 'controllers/console.php', 'sdk' => false, + 'tests' => false, ], 'v1/account' => [ 'name' => 'Account', 'description' => '/docs/services/account.md', 'controller' => 'controllers/account.php', 'sdk' => true, + 'tests' => false, ], 'v1/auth' => [ // Add to docs later: You can also learn how to [configure support for our supported OAuth providers](/docs/oauth) 'name' => 'Auth', 'description' => '/docs/services/auth.md', 'controller' => 'controllers/auth.php', 'sdk' => true, + 'tests' => false, ], 'v1/avatars' => [ 'name' => 'Avatars', 'description' => '/docs/services/avatars.md', 'controller' => 'controllers/avatars.php', 'sdk' => true, + 'tests' => false, ], 'v1/database' => [ 'name' => 'Database', 'description' => '/docs/services/database.md', 'controller' => 'controllers/database.php', 'sdk' => true, + 'tests' => false, ], 'v1/locale' => [ 'name' => 'Locale', 'description' => '/docs/services/locale.md', 'controller' => 'controllers/locale.php', 'sdk' => true, + 'tests' => false, ], 'v1/health' => [ 'name' => 'Health', 'controller' => 'controllers/health.php', 'sdk' => false, + 'tests' => false, ], 'v1/projects' => [ 'name' => 'Projects', 'controller' => 'controllers/projects.php', 'sdk' => true, + 'tests' => false, ], 'v1/storage' => [ 'name' => 'Storage', 'description' => '/docs/services/storage.md', 'controller' => 'controllers/storage.php', 'sdk' => true, + 'tests' => false, ], 'v1/teams' => [ 'name' => 'Teams', 'description' => '/docs/services/teams.md', 'controller' => 'controllers/teams.php', 'sdk' => true, + 'tests' => false, ], 'v1/users' => [ 'name' => 'Users', 'description' => '/docs/services/users.md', 'controller' => 'controllers/users.php', 'sdk' => true, + 'tests' => false, + ], + 'v1/mock' => [ + 'name' => 'Mock', + 'description' => '', + 'controller' => 'controllers/mock.php', + 'sdk' => false, + 'tests' => true, ], ]; diff --git a/app/config/version.php b/app/config/version.php index 3e3d3ee0c3..051e5e1e9f 100644 --- a/app/config/version.php +++ b/app/config/version.php @@ -1,5 +1,5 @@ post('/v1/auth/register') - ->desc('Register User') + ->desc('Register') ->label('webhook', 'auth.register') ->label('scope', 'auth') ->label('sdk.namespace', 'auth') @@ -135,7 +135,7 @@ $utopia->post('/v1/auth/register') $confirm['query'] = Template::mergeQuery(((isset($confirm['query'])) ? $confirm['query'] : ''), ['userId' => $user->getUid(), 'token' => $confirmSecret]); $confirm = Template::unParseURL($confirm); - $body = new Template(__DIR__.'/../config/locale/templates/'.Locale::getText('auth.emails.confirm.body')); + $body = new Template(__DIR__.'/../config/locales/templates/'.Locale::getText('auth.emails.confirm.body')); $body ->setParam('{{direction}}', Locale::getText('settings.direction')) ->setParam('{{project}}', $project->getAttribute('name', ['[APP-NAME]'])) @@ -185,7 +185,7 @@ $utopia->post('/v1/auth/register') ); $utopia->post('/v1/auth/register/confirm') - ->desc('Confirm User') + ->desc('Confirmation') ->label('webhook', 'auth.confirm') ->label('scope', 'public') ->label('sdk.namespace', 'auth') @@ -272,7 +272,7 @@ $utopia->post('/v1/auth/register/confirm/resend') $confirm['query'] = Template::mergeQuery(((isset($confirm['query'])) ? $confirm['query'] : ''), ['userId' => $user->getUid(), 'token' => $secret]); $confirm = Template::unParseURL($confirm); - $body = new Template(__DIR__.'/../config/locale/templates/'.Locale::getText('auth.emails.confirm.body')); + $body = new Template(__DIR__.'/../config/locales/templates/'.Locale::getText('auth.emails.confirm.body')); $body ->setParam('{{direction}}', Locale::getText('settings.direction')) ->setParam('{{project}}', $project->getAttribute('name', ['[APP-NAME]'])) @@ -299,7 +299,7 @@ $utopia->post('/v1/auth/register/confirm/resend') ); $utopia->post('/v1/auth/login') - ->desc('Login User') + ->desc('Login') ->label('webhook', 'auth.login') ->label('scope', 'auth') ->label('sdk.namespace', 'auth') @@ -497,7 +497,7 @@ $utopia->post('/v1/auth/recovery') $reset['query'] = Template::mergeQuery(((isset($reset['query'])) ? $reset['query'] : ''), ['userId' => $profile->getUid(), 'token' => $secret]); $reset = Template::unParseURL($reset); - $body = new Template(__DIR__.'/../config/locale/templates/'.Locale::getText('auth.emails.recovery.body')); + $body = new Template(__DIR__.'/../config/locales/templates/'.Locale::getText('auth.emails.recovery.body')); $body ->setParam('{{direction}}', Locale::getText('settings.direction')) ->setParam('{{project}}', $project->getAttribute('name', ['[APP-NAME]'])) @@ -590,8 +590,8 @@ $utopia->put('/v1/auth/recovery/reset') } ); -$utopia->get('/v1/auth/oauth/:provider') - ->desc('OAuth Login') +$utopia->get('/v1/auth/login/oauth/:provider') + ->desc('Login with OAuth') ->label('error', __DIR__.'/../views/general/error.phtml') ->label('scope', 'auth') ->label('sdk.namespace', 'auth') @@ -601,11 +601,11 @@ $utopia->get('/v1/auth/oauth/:provider') ->label('abuse-limit', 50) ->label('abuse-key', 'ip:{ip}') ->param('provider', '', function () use ($providers) { return new WhiteList(array_keys($providers)); }, 'OAuth Provider') - ->param('success', '', function () use ($clients) { return new Host($clients); }, 'URL to redirect back to your app after a successful login attempt.', true) - ->param('failure', '', function () use ($clients) { return new Host($clients); }, 'URL to redirect back to your app after a failed login attempt.', true) + ->param('success', '', function () use ($clients) { return new Host($clients); }, 'URL to redirect back to your app after a successful login attempt.') + ->param('failure', '', function () use ($clients) { return new Host($clients); }, 'URL to redirect back to your app after a failed login attempt.') ->action( function ($provider, $success, $failure) use ($response, $request, $project) { - $callback = $request->getServer('REQUEST_SCHEME', 'https').'://'.$request->getServer('HTTP_HOST').'/v1/auth/oauth/callback/'.$provider.'/'.$project->getUid(); + $callback = $request->getServer('REQUEST_SCHEME', 'https').'://'.$request->getServer('HTTP_HOST').'/v1/auth/login/oauth/callback/'.$provider.'/'.$project->getUid(); $appId = $project->getAttribute('usersOauth'.ucfirst($provider).'Appid', ''); $appSecret = $project->getAttribute('usersOauth'.ucfirst($provider).'Secret', '{}'); @@ -632,7 +632,7 @@ $utopia->get('/v1/auth/oauth/:provider') } ); -$utopia->get('/v1/auth/oauth/callback/:provider/:projectId') +$utopia->get('/v1/auth/login/oauth/callback/:provider/:projectId') ->desc('OAuth Callback') ->label('error', __DIR__.'/../views/general/error.phtml') ->label('scope', 'auth') @@ -645,12 +645,12 @@ $utopia->get('/v1/auth/oauth/callback/:provider/:projectId') ->param('state', '', function () { return new Text(2048); }, 'Login state params', true) ->action( function ($projectId, $provider, $code, $state) use ($response, $request, $domain) { - $response->redirect($request->getServer('REQUEST_SCHEME', 'https').'://'.$domain.'/v1/auth/oauth/'.$provider.'/redirect?' + $response->redirect($request->getServer('REQUEST_SCHEME', 'https').'://'.$domain.'/v1/auth/login/oauth/'.$provider.'/redirect?' .http_build_query(['project' => $projectId, 'code' => $code, 'state' => $state])); } ); -$utopia->get('/v1/auth/oauth/:provider/redirect') +$utopia->get('/v1/auth/login/oauth/:provider/redirect') ->desc('OAuth Redirect') ->label('error', __DIR__.'/../views/general/error.phtml') ->label('webhook', 'auth.oauth') @@ -663,7 +663,7 @@ $utopia->get('/v1/auth/oauth/:provider/redirect') ->param('state', '', function () { return new Text(2048); }, 'OAuth state params', true) ->action( function ($provider, $code, $state) use ($response, $request, $user, $projectDB, $project, $audit) { - $callback = $request->getServer('REQUEST_SCHEME', 'https').'://'.$request->getServer('HTTP_HOST').'/v1/auth/oauth/callback/'.$provider.'/'.$project->getUid(); + $callback = $request->getServer('REQUEST_SCHEME', 'https').'://'.$request->getServer('HTTP_HOST').'/v1/auth/login/oauth/callback/'.$provider.'/'.$project->getUid(); $defaultState = ['success' => $project->getAttribute('url', ''), 'failure' => '']; $validateURL = new URL(); diff --git a/app/controllers/database.php b/app/controllers/database.php index 4b18b0a586..8a923e65c4 100644 --- a/app/controllers/database.php +++ b/app/controllers/database.php @@ -95,9 +95,9 @@ $utopia->post('/v1/database') ->label('sdk.method', 'createCollection') ->label('sdk.description', '/docs/references/database/create-collection.md') ->param('name', '', function () { return new Text(256); }, 'Collection name.') - ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions).', true) - ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions).', true) - ->param('rules', [], function () use ($projectDB) { return new ArrayList(new Collection($projectDB, [Database::SYSTEM_COLLECTION_RULES], ['$collection' => Database::SYSTEM_COLLECTION_RULES, '$permissions' => ['read' => [], 'write' => []]])); }, 'Array of [rule objects](/docs/rules). Each rule define a collection field name, data type and validation', true) + ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') + ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') + ->param('rules', [], function () use ($projectDB) { return new ArrayList(new Collection($projectDB, [Database::SYSTEM_COLLECTION_RULES], ['$collection' => Database::SYSTEM_COLLECTION_RULES, '$permissions' => ['read' => [], 'write' => []]])); }, 'Array of [rule objects](/docs/rules). Each rule define a collection field name, data type and validation') ->action( function ($name, $read, $write, $rules) use ($response, $projectDB, $webhook, $audit) { $parsedRules = []; @@ -163,8 +163,8 @@ $utopia->put('/v1/database/:collectionId') ->label('sdk.description', '/docs/references/database/update-collection.md') ->param('collectionId', '', function () { return new UID(); }, 'Collection unique ID.') ->param('name', null, function () { return new Text(256); }, 'Collection name.') - ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions).', true) - ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions).', true) + ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') + ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') ->param('rules', [], function () use ($projectDB) { return new ArrayList(new Collection($projectDB, [Database::SYSTEM_COLLECTION_RULES], ['$collection' => Database::SYSTEM_COLLECTION_RULES, '$permissions' => ['read' => [], 'write' => []]])); }, 'Array of [rule objects](/docs/rules). Each rule define a collection field name, data type and validation', true) ->action( function ($collectionId, $name, $read, $write, $rules) use ($response, $projectDB) { @@ -353,8 +353,8 @@ $utopia->post('/v1/database/:collectionId/documents') ->label('sdk.description', '/docs/references/database/create-document.md') ->param('collectionId', null, function () { return new UID(); }, 'Collection unique ID.') ->param('data', [], function () { return new \Utopia\Validator\Mock(); }, 'Document data as JSON string.') - ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions).', true) - ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions).', true) + ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') + ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') ->param('parentDocument', '', function () { return new UID(); }, 'Parent document unique ID. Use when you want your new document to be a child of a parent document.', true) ->param('parentProperty', '', function () { return new Key(); }, 'Parent document property name. Use when you want your new document to be a child of a parent document.', true) ->param('parentPropertyType', Document::SET_TYPE_ASSIGN, function () { return new WhiteList([Document::SET_TYPE_ASSIGN, Document::SET_TYPE_APPEND, Document::SET_TYPE_PREPEND]); }, 'Parent document property connection type. You can set this value to **assign**, **append** or **prepend**, default value is assign. Use when you want your new document to be a child of a parent document.', true) @@ -460,8 +460,8 @@ $utopia->patch('/v1/database/:collectionId/documents/:documentId') ->param('collectionId', null, function () { return new UID(); }, 'Collection unique ID') ->param('documentId', null, function () { return new UID(); }, 'Document unique ID') ->param('data', [], function () { return new \Utopia\Validator\Mock(); }, 'Document data as JSON string') - ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions).', true) - ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions).', true) + ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') + ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') ->action( function ($collectionId, $documentId, $data, $read, $write) use ($response, $projectDB, &$output, $webhook, $audit, $isDev) { $collection = $projectDB->getDocument($collectionId/*, $isDev*/); diff --git a/app/controllers/locale.php b/app/controllers/locale.php index 62c7c0b24b..37b9b657a1 100644 --- a/app/controllers/locale.php +++ b/app/controllers/locale.php @@ -70,7 +70,7 @@ $utopia->get('/v1/locale/countries') ->label('sdk.method', 'getCountries') ->label('sdk.description', '/docs/references/locale/get-countries.md') ->action( - function () use ($response, $request) { + function () use ($response) { $list = Locale::getText('countries'); /* @var $list array */ asort($list); @@ -127,6 +127,23 @@ $utopia->get('/v1/locale/countries/phones') } ); +$utopia->get('/v1/locale/continents') + ->desc('List Countries') + ->label('scope', 'locale.read') + ->label('sdk.namespace', 'locale') + ->label('sdk.method', 'getContinents') + ->label('sdk.description', '/docs/references/locale/get-continents.md') + ->action( + function () use ($response) { + $list = Locale::getText('continents'); /* @var $list array */ + + asort($list); + + $response->json($list); + } + ); + + $utopia->get('/v1/locale/currencies') ->desc('List of currencies') ->label('scope', 'locale.read') diff --git a/app/controllers/mock.php b/app/controllers/mock.php new file mode 100644 index 0000000000..0683438ab8 --- /dev/null +++ b/app/controllers/mock.php @@ -0,0 +1,205 @@ +get('/v1/mock/tests/foo') + ->desc('Mock a get request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'foo') + ->label('sdk.method', 'get') + ->label('sdk.description', 'Mock a get request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->post('/v1/mock/tests/foo') + ->desc('Mock a post request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'foo') + ->label('sdk.method', 'post') + ->label('sdk.description', 'Mock a post request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->patch('/v1/mock/tests/foo') + ->desc('Mock a patch request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'foo') + ->label('sdk.method', 'patch') + ->label('sdk.description', 'Mock a get request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->put('/v1/mock/tests/foo') + ->desc('Mock a put request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'foo') + ->label('sdk.method', 'put') + ->label('sdk.description', 'Mock a put request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->delete('/v1/mock/tests/foo') + ->desc('Mock a delete request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'foo') + ->label('sdk.method', 'delete') + ->label('sdk.description', 'Mock a delete request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->get('/v1/mock/tests/bar') + ->desc('Mock a get request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'bar') + ->label('sdk.method', 'get') + ->label('sdk.description', 'Mock a get request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->post('/v1/mock/tests/bar') + ->desc('Mock a post request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'bar') + ->label('sdk.method', 'post') + ->label('sdk.description', 'Mock a post request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->patch('/v1/mock/tests/bar') + ->desc('Mock a patch request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'bar') + ->label('sdk.method', 'patch') + ->label('sdk.description', 'Mock a get request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->put('/v1/mock/tests/bar') + ->desc('Mock a put request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'bar') + ->label('sdk.method', 'put') + ->label('sdk.description', 'Mock a put request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + + $utopia->delete('/v1/mock/tests/bar') + ->desc('Mock a delete request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'bar') + ->label('sdk.method', 'delete') + ->label('sdk.description', 'Mock a delete request for SDK tests') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->action( + function ($x, $y, $z) { + + } + ); + +$utopia->post('/v1/mock/tests/files') + ->desc('Mock a post request for SDK tests') + ->label('scope', 'public') + ->label('sdk.namespace', 'files') + ->label('sdk.method', 'upload') + ->label('sdk.description', 'Mock a delete request for SDK tests') + ->label('sdk.consumes', 'multipart/form-data') + ->param('x', '', function () { return new Text(100); }, 'Sample string param') + ->param('y', '', function () { return new Numeric(); }, 'Sample numeric param') + ->param('z', null, function () { return new ArrayList(new Text(256)); }, 'Sample array param') + ->param('file', [], function () { return new File(); }, 'Sample file param', false) + ->action( + function ($x, $y, $z, $file) use ($request) { + $file = $request->getFiles('file'); + $file['tmp_name'] = (is_array($file['tmp_name'])) ? $file['tmp_name'] : [$file['tmp_name']]; + + foreach ($file['tmp_name'] as $i => $tmpName) { + if(md5(file_get_contents($tmpName)) !== 'asdasdasd') { + throw new Exception('Wrong file uploaded', 400); + } + } + } + ); + +$utopia->shutdown(function() use ($response, $request, &$result, $utopia) { + + $route = $utopia->match($request); + $path = '/storage/cache/tests.json'; + $tests = (file_exists($path)) ? json_decode(file_get_contents($path), true) : []; + + if(!is_array($tests)) { + throw new Exception('Failed to read results', 500); + } + + $result[$route->getMethod() . ':' . $route->getURL()] = true; + + $tests = array_merge($tests, $result); + + if(!file_put_contents($path, json_encode($tests), LOCK_EX)) { + throw new Exception('Failed to save resutls', 500); + } + + $response->json(['result' => $route->getMethod() . ':' . $route->getURL() . ':passed']); +}); \ No newline at end of file diff --git a/app/controllers/storage.php b/app/controllers/storage.php index 964ecb85ab..5faa84aea5 100644 --- a/app/controllers/storage.php +++ b/app/controllers/storage.php @@ -401,8 +401,8 @@ $utopia->post('/v1/storage/files') ->label('sdk.description', '/docs/references/storage/create-file.md') ->label('sdk.consumes', 'multipart/form-data') ->param('files', [], function () { return new File(); }, 'Binary Files.', false) - ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions).', true) - ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions).', true) + ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') + ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') ->param('folderId', '', function () { return new UID(); }, 'Folder to associate files with.', true) ->action( function ($files, $read, $write, $folderId) use ($request, $response, $user, $projectDB, $audit, $usage) { @@ -523,8 +523,8 @@ $utopia->put('/v1/storage/files/:fileId') ->label('sdk.method', 'updateFile') ->label('sdk.description', '/docs/references/storage/update-file.md') ->param('fileId', '', function () { return new UID(); }, 'File unique ID.') - ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions).', true) - ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions).', true) + ->param('read', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') + ->param('write', [], function () { return new ArrayList(new Text(64)); }, 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions.') ->param('folderId', '', function () { return new UID(); }, 'Folder to associate files with.', true) ->action( function ($fileId, $read, $write, $folderId) use ($response, $projectDB) { diff --git a/app/controllers/teams.php b/app/controllers/teams.php index 9ab3dfe53e..60676ba56c 100644 --- a/app/controllers/teams.php +++ b/app/controllers/teams.php @@ -356,7 +356,7 @@ $utopia->post('/v1/teams/:teamId/memberships') $redirect['query'] = Template::mergeQuery(((isset($redirect['query'])) ? $redirect['query'] : ''), ['inviteId' => $membership->getUid(), 'teamId' => $team->getUid(), 'userId' => $invitee->getUid(), 'secret' => $secret]); $redirect = Template::unParseURL($redirect); - $body = new Template(__DIR__.'/../config/locale/templates/'.Locale::getText('auth.emails.invitation.body')); + $body = new Template(__DIR__.'/../config/locales/templates/'.Locale::getText('auth.emails.invitation.body')); $body ->setParam('{{direction}}', Locale::getText('settings.direction')) ->setParam('{{project}}', $project->getAttribute('name', ['[APP-NAME]'])) @@ -435,7 +435,7 @@ $utopia->post('/v1/teams/:teamId/memberships/:inviteId/resend') $redirect['query'] = Template::mergeQuery(((isset($redirect['query'])) ? $redirect['query'] : ''), ['inviteId' => $membership->getUid(), 'userId' => $membership->getAttribute('userId'), 'secret' => $secret]); $redirect = Template::unParseURL($redirect); - $body = new Template(__DIR__.'/../config/locale/templates/'.Locale::getText('auth.emails.invitation.body')); + $body = new Template(__DIR__.'/../config/locales/templates/'.Locale::getText('auth.emails.invitation.body')); $body ->setParam('{{direction}}', Locale::getText('settings.direction')) ->setParam('{{project}}', $project->getAttribute('name', ['[APP-NAME]'])) diff --git a/app/controllers/users.php b/app/controllers/users.php index 76153386bd..dbb809016a 100644 --- a/app/controllers/users.php +++ b/app/controllers/users.php @@ -12,7 +12,6 @@ use Utopia\Validator\Text; use Utopia\Validator\Range; use Utopia\Locale\Locale; use Database\Database; -use Database\Validator\Authorization; use Database\Validator\UID; use DeviceDetector\DeviceDetector; use GeoIp2\Database\Reader; @@ -56,6 +55,7 @@ $utopia->get('/v1/users') return $value->getArrayCopy(array_merge( [ '$uid', + 'status', 'email', 'registration', 'confirm', @@ -98,13 +98,14 @@ $utopia->get('/v1/users/:userId') $response->json(array_merge($user->getArrayCopy(array_merge( [ '$uid', + 'status', 'email', 'registration', 'confirm', 'name', ], $oauthKeys - )), ['roles' => Authorization::getRoles()])); + )), ['roles' => []])); } ); @@ -322,7 +323,7 @@ $utopia->post('/v1/users') 'registration', 'confirm', 'name', - ], $oauthKeys)), ['roles' => Authorization::getRoles()])); + ], $oauthKeys)), ['roles' => []])); } ); @@ -333,9 +334,9 @@ $utopia->patch('/v1/users/:userId/status') ->label('sdk.method', 'updateUserStatus') ->label('sdk.description', '/docs/references/users/update-user-status.md') ->param('userId', '', function () { return new UID(); }, 'User unique ID.') - ->param('status', '', function () { return new WhiteList([Auth::USER_STATUS_ACTIVATED, Auth::USER_STATUS_BLOCKED, Auth::USER_STATUS_UNACTIVATED]); }, 'User Status code. To activate the user pass '.Auth::USER_STATUS_ACTIVATED.', to blocking the user pass '.Auth::USER_STATUS_BLOCKED.' and for disabling the user pass '.Auth::USER_STATUS_UNACTIVATED) + ->param('status', '', function () { return new WhiteList([Auth::USER_STATUS_ACTIVATED, Auth::USER_STATUS_BLOCKED, Auth::USER_STATUS_UNACTIVATED]); }, 'User Status code. To activate the user pass '.Auth::USER_STATUS_ACTIVATED.', to block the user pass '.Auth::USER_STATUS_BLOCKED.' and for disabling the user pass '.Auth::USER_STATUS_UNACTIVATED) ->action( - function ($userId, $status) use ($response, $projectDB) { + function ($userId, $status) use ($response, $projectDB, $providers) { $user = $projectDB->getDocument($userId); if (empty($user->getUid()) || Database::SYSTEM_COLLECTION_USERS != $user->getCollection()) { @@ -349,9 +350,27 @@ $utopia->patch('/v1/users/:userId/status') if (false === $user) { throw new Exception('Failed saving user to DB', 500); } + + $oauthKeys = []; + + foreach ($providers as $key => $provider) { + if (!$provider['enabled']) { + continue; + } + + $oauthKeys[] = 'oauth'.ucfirst($key); + $oauthKeys[] = 'oauth'.ucfirst($key).'AccessToken'; + } $response - ->json(array('result' => 'success')); + ->json(array_merge($user->getArrayCopy(array_merge([ + '$uid', + 'status', + 'email', + 'registration', + 'confirm', + 'name', + ], $oauthKeys)), ['roles' => []])); } ); @@ -364,7 +383,7 @@ $utopia->patch('/v1/users/:userId/prefs') ->param('userId', '', function () { return new UID(); }, 'User unique ID.') ->param('prefs', '', function () { return new \Utopia\Validator\Mock(); }, 'Prefs key-value JSON object string.') ->action( - function ($userId, $prefs) use ($response, $projectDB) { + function ($userId, $prefs) use ($response, $projectDB, $providers) { $user = $projectDB->getDocument($userId); if (empty($user->getUid()) || Database::SYSTEM_COLLECTION_USERS != $user->getCollection()) { @@ -374,11 +393,24 @@ $utopia->patch('/v1/users/:userId/prefs') $user = $projectDB->updateDocument(array_merge($user->getArrayCopy(), [ 'prefs' => json_encode(array_merge(json_decode($user->getAttribute('prefs', '{}'), true), $prefs)), ])); + if (false === $user) { throw new Exception('Failed saving user to DB', 500); } - $response->json(array('result' => 'success')); + $prefs = $user->getAttribute('prefs', ''); + + if (empty($prefs)) { + $prefs = '[]'; + } + + try { + $prefs = json_decode($prefs, true); + } catch (\Exception $error) { + throw new Exception('Failed to parse prefs', 500); + } + + $response->json($prefs); } ); diff --git a/app/init.php b/app/init.php index 1ade533f35..3683f591fe 100644 --- a/app/init.php +++ b/app/init.php @@ -24,9 +24,8 @@ const APP_EMAIL_TEAM = 'team@'.APP_DOMAIN; const APP_EMAIL_SECURITY = 'security@'.APP_DOMAIN; const APP_USERAGENT = APP_NAME.'-Server/%s Please report abuse at '.APP_EMAIL_SECURITY; const APP_MODE_ADMIN = 'admin'; -const APP_LOCALES = ['af', 'ar', 'bn', 'cat', 'cz', 'de', 'en', 'es', 'fi', 'fr', 'gr', 'he', 'hi', 'hu', 'hy', 'id', 'it', 'ja', 'jv', 'lt', 'nl', 'no', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'si', 'sl', 'sv', 'ta', 'tr', 'ua', 'vi', 'zh-cn', 'zh-tw']; const APP_PAGING_LIMIT = 15; -const APP_VERSION_STABLE = '0.2.0'; +const APP_VERSION_STABLE = '0.3.0'; $register = new Registry(); $request = new Request(); @@ -39,6 +38,7 @@ $env = $request->getServer('_APP_ENV', App::ENV_TYPE_PRODUCTION); $domain = $request->getServer('HTTP_HOST', ''); $version = include __DIR__.'/../app/config/version.php'; $providers = include __DIR__.'/../app/config/providers.php'; // OAuth providers list +$locales = include __DIR__.'/../app/config/locales.php'; // OAuth providers list $collections = include __DIR__.'/../app/config/collections.php'; // OAuth providers list $redisHost = $request->getServer('_APP_REDIS_HOST', ''); $redisPort = $request->getServer('_APP_REDIS_PORT', ''); @@ -128,46 +128,55 @@ $locale = $request->getParam('locale', $request->getHeader('X-Appwrite-Locale', Locale::$exceptions = false; -Locale::setLanguage('af', include __DIR__.'/config/locale/af.php'); -Locale::setLanguage('ar', include __DIR__.'/config/locale/ar.php'); -Locale::setLanguage('bn', include __DIR__.'/config/locale/bn.php'); -Locale::setLanguage('cat', include __DIR__.'/config/locale/cat.php'); -Locale::setLanguage('cz', include __DIR__.'/config/locale/cz.php'); -Locale::setLanguage('de', include __DIR__.'/config/locale/de.php'); -Locale::setLanguage('en', include __DIR__.'/config/locale/en.php'); -Locale::setLanguage('es', include __DIR__.'/config/locale/es.php'); -Locale::setLanguage('fi', include __DIR__.'/config/locale/fi.php'); -Locale::setLanguage('fr', include __DIR__.'/config/locale/fr.php'); -Locale::setLanguage('gr', include __DIR__.'/config/locale/gr.php'); -Locale::setLanguage('he', include __DIR__.'/config/locale/he.php'); -Locale::setLanguage('hi', include __DIR__.'/config/locale/hi.php'); -Locale::setLanguage('hu', include __DIR__.'/config/locale/hu.php'); -Locale::setLanguage('hy', include __DIR__.'/config/locale/hy.php'); -Locale::setLanguage('id', include __DIR__.'/config/locale/id.php'); -Locale::setLanguage('it', include __DIR__.'/config/locale/it.php'); -Locale::setLanguage('jv', include __DIR__.'/config/locale/ja.php'); -Locale::setLanguage('jv', include __DIR__.'/config/locale/jv.php'); -Locale::setLanguage('lt', include __DIR__.'/config/locale/lt.php'); -Locale::setLanguage('nl', include __DIR__.'/config/locale/nl.php'); -Locale::setLanguage('no', include __DIR__.'/config/locale/no.php'); -Locale::setLanguage('pl', include __DIR__.'/config/locale/pl.php'); -Locale::setLanguage('pt-br', include __DIR__.'/config/locale/pt-br.php'); -Locale::setLanguage('pt-pt', include __DIR__.'/config/locale/pt-pt.php'); -Locale::setLanguage('ro', include __DIR__.'/config/locale/ro.php'); -Locale::setLanguage('ru', include __DIR__ . '/config/locale/ru.php'); -Locale::setLanguage('si', include __DIR__ . '/config/locale/si.php'); -Locale::setLanguage('sl', include __DIR__ . '/config/locale/sl.php'); -Locale::setLanguage('sv', include __DIR__ . '/config/locale/sv.php'); -Locale::setLanguage('ta', include __DIR__ . '/config/locale/ta.php'); -Locale::setLanguage('tr', include __DIR__.'/config/locale/tr.php'); -Locale::setLanguage('ua', include __DIR__.'/config/locale/ua.php'); -Locale::setLanguage('vi', include __DIR__.'/config/locale/vi.php'); -Locale::setLanguage('zh-cn', include __DIR__.'/config/locale/zh-cn.php'); -Locale::setLanguage('zh-tw', include __DIR__.'/config/locale/zh-tw.php'); +Locale::setLanguage('af', include __DIR__.'/config/locales/af.php'); +Locale::setLanguage('ar', include __DIR__.'/config/locales/ar.php'); +Locale::setLanguage('bn', include __DIR__.'/config/locales/bn.php'); +Locale::setLanguage('cat', include __DIR__.'/config/locales/cat.php'); +Locale::setLanguage('cz', include __DIR__.'/config/locales/cz.php'); +Locale::setLanguage('de', include __DIR__.'/config/locales/de.php'); +Locale::setLanguage('en', include __DIR__.'/config/locales/en.php'); +Locale::setLanguage('es', include __DIR__.'/config/locales/es.php'); +Locale::setLanguage('fi', include __DIR__.'/config/locales/fi.php'); +Locale::setLanguage('fo', include __DIR__.'/config/locales/fo.php'); +Locale::setLanguage('fr', include __DIR__.'/config/locales/fr.php'); +Locale::setLanguage('gr', include __DIR__.'/config/locales/gr.php'); +Locale::setLanguage('he', include __DIR__.'/config/locales/he.php'); +Locale::setLanguage('hi', include __DIR__.'/config/locales/hi.php'); +Locale::setLanguage('hu', include __DIR__.'/config/locales/hu.php'); +Locale::setLanguage('hy', include __DIR__.'/config/locales/hy.php'); +Locale::setLanguage('id', include __DIR__.'/config/locales/id.php'); +Locale::setLanguage('is', include __DIR__.'/config/locales/is.php'); +Locale::setLanguage('it', include __DIR__.'/config/locales/it.php'); +Locale::setLanguage('jv', include __DIR__.'/config/locales/ja.php'); +Locale::setLanguage('jv', include __DIR__.'/config/locales/jv.php'); +Locale::setLanguage('ko', include __DIR__.'/config/locales/ko.php'); +Locale::setLanguage('lt', include __DIR__.'/config/locales/lt.php'); +Locale::setLanguage('ml', include __DIR__.'/config/locales/ml.php'); +Locale::setLanguage('ms', include __DIR__.'/config/locales/ms.php'); +Locale::setLanguage('nl', include __DIR__.'/config/locales/nl.php'); +Locale::setLanguage('no', include __DIR__.'/config/locales/no.php'); +Locale::setLanguage('ph', include __DIR__.'/config/locales/ph.php'); +Locale::setLanguage('pl', include __DIR__.'/config/locales/pl.php'); +Locale::setLanguage('pn', include __DIR__.'/config/locales/pn.php'); +Locale::setLanguage('pt-br', include __DIR__.'/config/locales/pt-br.php'); +Locale::setLanguage('pt-pt', include __DIR__.'/config/locales/pt-pt.php'); +Locale::setLanguage('ro', include __DIR__.'/config/locales/ro.php'); +Locale::setLanguage('ru', include __DIR__ . '/config/locales/ru.php'); +Locale::setLanguage('si', include __DIR__ . '/config/locales/si.php'); +Locale::setLanguage('sl', include __DIR__ . '/config/locales/sl.php'); +Locale::setLanguage('sq', include __DIR__ . '/config/locales/sq.php'); +Locale::setLanguage('sv', include __DIR__ . '/config/locales/sv.php'); +Locale::setLanguage('ta', include __DIR__ . '/config/locales/ta.php'); +Locale::setLanguage('th', include __DIR__.'/config/locales/th.php'); +Locale::setLanguage('tr', include __DIR__.'/config/locales/tr.php'); +Locale::setLanguage('ua', include __DIR__.'/config/locales/ua.php'); +Locale::setLanguage('vi', include __DIR__.'/config/locales/vi.php'); +Locale::setLanguage('zh-cn', include __DIR__.'/config/locales/zh-cn.php'); +Locale::setLanguage('zh-tw', include __DIR__.'/config/locales/zh-tw.php'); Locale::setDefault('en'); -if (in_array($locale, APP_LOCALES)) { +if (in_array($locale, $locales)) { Locale::setDefault($locale); } diff --git a/app/sdks/dart/.packages b/app/sdks/dart/.packages new file mode 100644 index 0000000000..d1ecc93e1e --- /dev/null +++ b/app/sdks/dart/.packages @@ -0,0 +1,14 @@ +# Generated by pub on 2019-10-23 20:50:57.387283. +charcode:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.2/lib/ +collection:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/collection-1.14.12/lib/ +cookie_jar:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/cookie_jar-1.0.1/lib/ +dio:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/dio-3.0.3/lib/ +dio_cookie_manager:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/dio_cookie_manager-1.0.0/lib/ +http_parser:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.3/lib/ +meta:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/meta-1.1.7/lib/ +path:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/path-1.6.4/lib/ +source_span:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/source_span-1.5.5/lib/ +string_scanner:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.0.5/lib/ +term_glyph:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.1.0/lib/ +typed_data:file:///Users/eldadfux/.pub-cache/hosted/pub.dartlang.org/typed_data-1.1.6/lib/ +appwrite:lib/ diff --git a/app/sdks/dart/README.md b/app/sdks/dart/README.md index effbe7922c..d1eba8f20f 100644 --- a/app/sdks/dart/README.md +++ b/app/sdks/dart/README.md @@ -1,7 +1,7 @@ # Appwrite SDK for Dart ![License](https://img.shields.io/github/license/appwrite/sdk-for-dart.svg?v=1) -![Version](https://img.shields.io/badge/api%20version-0.2.0-blue.svg?v=1) +![Version](https://img.shields.io/badge/api%20version-0.3.0-blue.svg?v=1) **WORK IN PROGRESS - NOT READY FOR USAGE - Want to help us improve this client SDK? Send a pull request to Appwrite [SDK generator repository](https://github.com/appwrite/sdk-generator).** @@ -17,7 +17,7 @@ Add this to your package's pubspec.yaml file: ```yml dependencies: - appwrite: ^0.0.2 + appwrite: ^0.0.5 ``` You can install packages from the command line: diff --git a/app/sdks/dart/lib/client.dart b/app/sdks/dart/lib/client.dart index c03342e33e..af4a0e97bd 100644 --- a/app/sdks/dart/lib/client.dart +++ b/app/sdks/dart/lib/client.dart @@ -12,7 +12,7 @@ class Client { this.endPoint = 'https://appwrite.io/v1'; this.headers = { 'content-type': 'application/json', - 'x-sdk-version': 'appwrite:dart:0.0.2', + 'x-sdk-version': 'appwrite:dart:0.0.5', }; this.selfSigned = false; diff --git a/app/sdks/dart/lib/services/auth.dart b/app/sdks/dart/lib/services/auth.dart index 45c0be71a7..f16ab607b8 100644 --- a/app/sdks/dart/lib/services/auth.dart +++ b/app/sdks/dart/lib/services/auth.dart @@ -11,16 +11,16 @@ class Auth extends Service { /// redirect URL\'s back to your app when login is completed. /// /// Please notice that in order to avoid a [Redirect - /// Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - /// the only valid redirect URL's are the once from domains you have set when - /// added your platforms in the console interface. + /// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + /// the only valid redirect URLs are the ones from domains you have set when + /// adding your platforms in the console interface. /// /// When accessing this route using Javascript from the browser, success and /// failure parameter URLs are required. Appwrite server will respond with a /// 301 redirect status code and will set the user session cookie. This /// behavior is enforced because modern browsers are limiting 3rd party cookies /// in XHR of fetch requests to protect user privacy. - Future login({email, password, success, failure}) async { + Future login({email, password, success = null, failure = null}) async { String path = '/auth/login'; Map params = { @@ -33,7 +33,7 @@ class Auth extends Service { return await this.client.call('post', path: path, params: params); } /// Use this endpoint to log out the currently logged in user from his account. - /// When succeed this endpoint will delete the user session and remove the + /// When successful this endpoint will delete the user session and remove the /// session secret cookie from the user client. Future logout() async { String path = '/auth/logout'; @@ -54,7 +54,7 @@ class Auth extends Service { return await this.client.call('delete', path: path, params: params); } - Future oauth({provider, success = null, failure = null}) async { + Future oauth({provider, success, failure}) async { String path = '/auth/oauth/{provider}'.replaceAll(RegExp('{provider}'), provider); Map params = { @@ -86,9 +86,9 @@ class Auth extends Service { /// /auth/recovery endpoint. /// /// Please notice that in order to avoid a [Redirect - /// Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - /// the only valid redirect URL's are the once from domains you have set when - /// added your platforms in the console interface. + /// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + /// the only valid redirect URLs are the ones from domains you have set when + /// adding your platforms in the console interface. Future recoveryReset({userId, token, passwordA, passwordB}) async { String path = '/auth/recovery/reset'; @@ -102,7 +102,7 @@ class Auth extends Service { return await this.client.call('put', path: path, params: params); } /// Use this endpoint to allow a new user to register an account in your - /// project. Use the success and failure URL's to redirect users back to your + /// project. Use the success and failure URLs to redirect users back to your /// application after signup completes. /// /// If registration completes successfully user will be sent with a @@ -112,9 +112,9 @@ class Auth extends Service { /// /auth/confirm endpoint to complete the account confirmation. /// /// Please notice that in order to avoid a [Redirect - /// Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - /// the only valid redirect URL's are the once from domains you have set when - /// added your platforms in the console interface. + /// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + /// the only valid redirect URLs are the ones from domains you have set when + /// adding your platforms in the console interface. /// /// When accessing this route using Javascript from the browser, success and /// failure parameter URLs are required. Appwrite server will respond with a @@ -150,13 +150,13 @@ class Auth extends Service { return await this.client.call('post', path: path, params: params); } /// This endpoint allows the user to request your app to resend him his email - /// confirmation message. The redirect arguments acts the same way as in + /// confirmation message. The redirect arguments act the same way as in /// /auth/register endpoint. /// /// Please notice that in order to avoid a [Redirect - /// Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - /// the only valid redirect URL's are the once from domains you have set when - /// added your platforms in the console interface. + /// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + /// the only valid redirect URLs are the ones from domains you have set when + /// adding your platforms in the console interface. Future confirmResend({confirm}) async { String path = '/auth/register/confirm/resend'; diff --git a/app/sdks/dart/lib/services/avatars.dart b/app/sdks/dart/lib/services/avatars.dart index 48e6c7b692..4ffcc6aa15 100644 --- a/app/sdks/dart/lib/services/avatars.dart +++ b/app/sdks/dart/lib/services/avatars.dart @@ -6,8 +6,8 @@ class Avatars extends Service { Avatars(Client client): super(client); - /// You can use this endpoint to show different browser icons to your users, - /// The code argument receives the browser code as appear in your user + /// 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 /// /account/sessions endpoint. Use width, height and quality arguments to /// change the output settings. Future getBrowser({code, width = 100, height = 100, quality = 100}) async { @@ -21,7 +21,7 @@ class Avatars extends Service { return await this.client.call('get', path: path, params: params); } - /// Need to display your users with your billing method or there payment + /// Need to display your users with your billing method or their payment /// methods? 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. @@ -48,7 +48,7 @@ class Avatars extends Service { return await this.client.call('get', path: path, params: params); } /// You can use this endpoint to show different country flags icons to your - /// users, The code argument receives the a 2 letter country code. Use width, + /// users. The code argument receives the 2 letter country code. Use width, /// height and quality arguments to change the output settings. Future getFlag({code, width = 100, height = 100, quality = 100}) async { String path = '/avatars/flags/{code}'.replaceAll(RegExp('{code}'), code); @@ -63,7 +63,7 @@ class Avatars extends Service { } /// 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 cases, you want to make sure a 3rd party + /// remote images in your app or in case you want to make sure a 3rd party /// image is properly served using a TLS protocol. Future getImage({url, width = 400, height = 400}) async { String path = '/avatars/image'; diff --git a/app/sdks/dart/lib/services/database.dart b/app/sdks/dart/lib/services/database.dart index 7ac3b36c6f..5ecb54ad06 100644 --- a/app/sdks/dart/lib/services/database.dart +++ b/app/sdks/dart/lib/services/database.dart @@ -23,7 +23,7 @@ class Database extends Service { return await this.client.call('get', path: path, params: params); } /// Create a new Collection. - Future createCollection({name, read = const [], write = const [], rules = const []}) async { + Future createCollection({name, read, write, rules}) async { String path = '/database'; Map params = { @@ -46,7 +46,7 @@ class Database extends Service { return await this.client.call('get', path: path, params: params); } /// Update collection by its unique ID. - Future updateCollection({collectionId, name, read = const [], write = const [], rules = const []}) async { + Future updateCollection({collectionId, name, read, write, rules = const []}) async { String path = '/database/{collectionId}'.replaceAll(RegExp('{collectionId}'), collectionId); Map params = { @@ -90,7 +90,7 @@ class Database extends Service { return await this.client.call('get', path: path, params: params); } /// Create a new Document. - Future createDocument({collectionId, data, read = const [], write = const [], parentDocument = null, parentProperty = null, parentPropertyType = 'assign'}) async { + Future createDocument({collectionId, data, read, write, parentDocument = null, parentProperty = null, parentPropertyType = 'assign'}) async { String path = '/database/{collectionId}/documents'.replaceAll(RegExp('{collectionId}'), collectionId); Map params = { @@ -114,7 +114,7 @@ class Database extends Service { return await this.client.call('get', path: path, params: params); } - Future updateDocument({collectionId, documentId, data, read = const [], write = const []}) async { + Future updateDocument({collectionId, documentId, data, read, write}) async { String path = '/database/{collectionId}/documents/{documentId}'.replaceAll(RegExp('{collectionId}'), collectionId).replaceAll(RegExp('{documentId}'), documentId); Map params = { diff --git a/app/sdks/dart/lib/services/locale.dart b/app/sdks/dart/lib/services/locale.dart index 29f87ac5ea..6112ada3e3 100644 --- a/app/sdks/dart/lib/services/locale.dart +++ b/app/sdks/dart/lib/services/locale.dart @@ -8,7 +8,7 @@ class Locale extends Service { /// 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 + /// suggested currency. You can use the locale header to get the data in a /// supported language. Future getLocale() async { String path = '/locale'; @@ -18,7 +18,17 @@ class Locale extends Service { return await this.client.call('get', path: path, params: params); } - /// List of all countries. You can use the locale header to get the data in + /// List of all continents. You can use the locale header to get the data in a + /// supported language. + Future getContinents() async { + String path = '/locale/continents'; + + Map params = { + }; + + return await this.client.call('get', path: path, params: params); + } + /// List of all countries. You can use the locale header to get the data in a /// supported language. Future getCountries() async { String path = '/locale/countries'; @@ -29,7 +39,7 @@ class Locale extends Service { return await this.client.call('get', path: path, params: params); } /// List of all countries that are currently members of the EU. You can use the - /// locale header to get the data in supported language. UK brexit date is + /// locale header to get the data in a supported language. UK brexit date is /// currently set to 2019-10-31 and will be updated if and when needed. Future getCountriesEU() async { String path = '/locale/countries/eu'; @@ -40,7 +50,7 @@ class Locale extends Service { return await this.client.call('get', path: path, params: params); } /// List of all countries phone codes. You can use the locale header to get the - /// data in supported language. + /// data in a supported language. Future getCountriesPhones() async { String path = '/locale/countries/phones'; @@ -51,7 +61,7 @@ class Locale extends Service { } /// List of all currencies, including currency symol, name, plural, and decimal /// digits for all major and minor currencies. You can use the locale header to - /// get the data in supported language. + /// get the data in a supported language. Future getCurrencies() async { String path = '/locale/currencies'; diff --git a/app/sdks/dart/lib/services/storage.dart b/app/sdks/dart/lib/services/storage.dart index 373cc44193..7367986a05 100644 --- a/app/sdks/dart/lib/services/storage.dart +++ b/app/sdks/dart/lib/services/storage.dart @@ -24,7 +24,7 @@ class Storage extends Service { /// Create a new file. The user who creates the file will automatically be /// assigned to read and write access unless he has passed custom values for /// read and write arguments. - Future createFile({files, read = const [], write = const [], folderId = null}) async { + Future createFile({files, read, write, folderId = null}) async { String path = '/storage/files'; Map params = { @@ -48,7 +48,7 @@ class Storage extends Service { } /// Update file by its unique ID. Only users with write permissions have access /// to update this resource. - Future updateFile({fileId, read = const [], write = const [], folderId = null}) async { + Future updateFile({fileId, read, write, folderId = null}) async { String path = '/storage/files/{fileId}'.replaceAll(RegExp('{fileId}'), fileId); Map params = { diff --git a/app/sdks/dart/pubspec.lock b/app/sdks/dart/pubspec.lock new file mode 100644 index 0000000000..98d3035608 --- /dev/null +++ b/app/sdks/dart/pubspec.lock @@ -0,0 +1,89 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.14.12" + cookie_jar: + dependency: "direct main" + description: + name: cookie_jar + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + dio: + dependency: "direct main" + description: + name: dio + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.3" + dio_cookie_manager: + dependency: "direct main" + description: + name: dio_cookie_manager + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.7" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.4" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.5" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" +sdks: + dart: ">2.4.0 <3.0.0" diff --git a/app/sdks/dart/pubspec.yaml b/app/sdks/dart/pubspec.yaml index fbf132c388..fc0f0a376d 100644 --- a/app/sdks/dart/pubspec.yaml +++ b/app/sdks/dart/pubspec.yaml @@ -1,5 +1,5 @@ name: appwrite -version: 0.0.2 +version: 0.0.5 description: Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) author: Appwrite Team homepage: https://github.com/appwrite/sdk-for-dart diff --git a/app/sdks/go/LICENSE b/app/sdks/go/LICENSE new file mode 100644 index 0000000000..fc7c051a91 --- /dev/null +++ b/app/sdks/go/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2019 Appwrite (https://appwrite.io) and individual contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + 3. Neither the name Appwrite nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/app/sdks/go/README.md b/app/sdks/go/README.md new file mode 100644 index 0000000000..71faece4c0 --- /dev/null +++ b/app/sdks/go/README.md @@ -0,0 +1,24 @@ +# Appwrite SDK for Go + +![License](https://img.shields.io/github/license/appwrite/sdk-for-go.svg?v=1) +![Version](https://img.shields.io/badge/api%20version-0.3.0-blue.svg?v=1) + +**WORK IN PROGRESS - NOT READY FOR USAGE - Want to help us improve this client SDK? Send a pull request to Appwrite [SDK generator repository](https://github.com/appwrite/sdk-generator).** + +Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) + + + +![Appwrite](https://appwrite.io/images/github.png) + +## Installation + +To install using `go get`: + +```bash +go get github.com/appwrite/sdk-for-go +``` + +## License + +Please see the [BSD-3-Clause license](https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE) file for more information. \ No newline at end of file diff --git a/app/sdks/go/account.go b/app/sdks/go/account.go new file mode 100644 index 0000000000..ed8cfe83ed --- /dev/null +++ b/app/sdks/go/account.go @@ -0,0 +1,112 @@ +package appwrite + +import ( +) + +// Account service +type Account struct { + client *Client +} + +// Get get currently logged in user data as JSON object. +func (srv *Account) Get() (map[string]interface{}, error) { + path := "/account" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// Delete delete currently logged in user account. +func (srv *Account) Delete() (map[string]interface{}, error) { + path := "/account" + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// UpdateEmail update currently logged in user account email address. After +// changing user address, user confirmation status is being reset and a new +// confirmation mail is sent. For security measures, user password is required +// to complete this request. +func (srv *Account) UpdateEmail(Email string, Password string) (map[string]interface{}, error) { + path := "/account/email" + + params := map[string]interface{}{ + "email": Email, + "password": Password, + } + + return srv.client.Call("PATCH", path, nil, params) +} + +// UpdateName update currently logged in user account name. +func (srv *Account) UpdateName(Name string) (map[string]interface{}, error) { + path := "/account/name" + + params := map[string]interface{}{ + "name": Name, + } + + return srv.client.Call("PATCH", path, nil, params) +} + +// UpdatePassword update currently logged in user password. For validation, +// user is required to pass the password twice. +func (srv *Account) UpdatePassword(Password string, OldPassword string) (map[string]interface{}, error) { + path := "/account/password" + + params := map[string]interface{}{ + "password": Password, + "old-password": OldPassword, + } + + return srv.client.Call("PATCH", path, nil, params) +} + +// GetPrefs get currently logged in user preferences key-value object. +func (srv *Account) GetPrefs() (map[string]interface{}, error) { + path := "/account/prefs" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdatePrefs update currently logged in user account preferences. You can +// pass only the specific settings you wish to update. +func (srv *Account) UpdatePrefs(Prefs string) (map[string]interface{}, error) { + path := "/account/prefs" + + params := map[string]interface{}{ + "prefs": Prefs, + } + + return srv.client.Call("PATCH", path, nil, params) +} + +// GetSecurity get currently logged in user list of latest security activity +// logs. Each log returns user IP address, location and date and time of log. +func (srv *Account) GetSecurity() (map[string]interface{}, error) { + path := "/account/security" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetSessions get currently logged in user list of active sessions across +// different devices. +func (srv *Account) GetSessions() (map[string]interface{}, error) { + path := "/account/sessions" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} diff --git a/app/sdks/go/auth.go b/app/sdks/go/auth.go new file mode 100644 index 0000000000..f538cd807a --- /dev/null +++ b/app/sdks/go/auth.go @@ -0,0 +1,183 @@ +package appwrite + +import ( + "strings" +) + +// Auth service +type Auth struct { + client *Client +} + +// Login allow the user to login into his account by providing a valid email +// and password combination. Use the success and failure arguments to provide +// a redirect URL\'s back to your app when login is completed. +// +// Please notice that in order to avoid a [Redirect +// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) +// the only valid redirect URLs are the ones from domains you have set when +// adding your platforms in the console interface. +// +// When accessing this route using Javascript from the browser, success and +// failure parameter URLs are required. Appwrite server will respond with a +// 301 redirect status code and will set the user session cookie. This +// behavior is enforced because modern browsers are limiting 3rd party cookies +// in XHR of fetch requests to protect user privacy. +func (srv *Auth) Login(Email string, Password string, Success string, Failure string) (map[string]interface{}, error) { + path := "/auth/login" + + params := map[string]interface{}{ + "email": Email, + "password": Password, + "success": Success, + "failure": Failure, + } + + return srv.client.Call("POST", path, nil, params) +} + +// Logout use this endpoint to log out the currently logged in user from his +// account. When successful this endpoint will delete the user session and +// remove the session secret cookie from the user client. +func (srv *Auth) Logout() (map[string]interface{}, error) { + path := "/auth/logout" + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// LogoutBySession use this endpoint to log out the currently logged in user +// from all his account sessions across all his different devices. When using +// the option id argument, only the session unique ID provider will be +// deleted. +func (srv *Auth) LogoutBySession(Id string) (map[string]interface{}, error) { + r := strings.NewReplacer("{id}", Id) + path := r.Replace("/auth/logout/{id}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// Oauth +func (srv *Auth) Oauth(Provider string, Success string, Failure string) (map[string]interface{}, error) { + r := strings.NewReplacer("{provider}", Provider) + path := r.Replace("/auth/oauth/{provider}") + + params := map[string]interface{}{ + "success": Success, + "failure": Failure, + } + + return srv.client.Call("GET", path, nil, params) +} + +// Recovery sends the user an email with a temporary secret token for password +// reset. When the user clicks the confirmation link he is redirected back to +// your app password reset redirect URL with a secret token and email address +// values attached to the URL query string. Use the query string params to +// submit a request to the /auth/password/reset endpoint to complete the +// process. +func (srv *Auth) Recovery(Email string, Reset string) (map[string]interface{}, error) { + path := "/auth/recovery" + + params := map[string]interface{}{ + "email": Email, + "reset": Reset, + } + + return srv.client.Call("POST", path, nil, params) +} + +// RecoveryReset use this endpoint to complete the user account password +// reset. Both the **userId** and **token** arguments will be passed as query +// parameters to the redirect URL you have provided when sending your request +// to the /auth/recovery endpoint. +// +// Please notice that in order to avoid a [Redirect +// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) +// the only valid redirect URLs are the ones from domains you have set when +// adding your platforms in the console interface. +func (srv *Auth) RecoveryReset(UserId string, Token string, PasswordA string, PasswordB string) (map[string]interface{}, error) { + path := "/auth/recovery/reset" + + params := map[string]interface{}{ + "userId": UserId, + "token": Token, + "password-a": PasswordA, + "password-b": PasswordB, + } + + return srv.client.Call("PUT", path, nil, params) +} + +// Register use this endpoint to allow a new user to register an account in +// your project. Use the success and failure URLs to redirect users back to +// your application after signup completes. +// +// If registration completes successfully user will be sent with a +// confirmation email in order to confirm he is the owner of the account email +// address. Use the confirmation parameter to redirect the user from the +// confirmation email back to your app. When the user is redirected, use the +// /auth/confirm endpoint to complete the account confirmation. +// +// Please notice that in order to avoid a [Redirect +// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) +// the only valid redirect URLs are the ones from domains you have set when +// adding your platforms in the console interface. +// +// When accessing this route using Javascript from the browser, success and +// failure parameter URLs are required. Appwrite server will respond with a +// 301 redirect status code and will set the user session cookie. This +// behavior is enforced because modern browsers are limiting 3rd party cookies +// in XHR of fetch requests to protect user privacy. +func (srv *Auth) Register(Email string, Password string, Confirm string, Success string, Failure string, Name string) (map[string]interface{}, error) { + path := "/auth/register" + + params := map[string]interface{}{ + "email": Email, + "password": Password, + "confirm": Confirm, + "success": Success, + "failure": Failure, + "name": Name, + } + + return srv.client.Call("POST", path, nil, params) +} + +// Confirm use this endpoint to complete the confirmation of the user account +// email address. Both the **userId** and **token** arguments will be passed +// as query parameters to the redirect URL you have provided when sending your +// request to the /auth/register endpoint. +func (srv *Auth) Confirm(UserId string, Token string) (map[string]interface{}, error) { + path := "/auth/register/confirm" + + params := map[string]interface{}{ + "userId": UserId, + "token": Token, + } + + return srv.client.Call("POST", path, nil, params) +} + +// ConfirmResend this endpoint allows the user to request your app to resend +// him his email confirmation message. The redirect arguments act the same way +// as in /auth/register endpoint. +// +// Please notice that in order to avoid a [Redirect +// Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) +// the only valid redirect URLs are the ones from domains you have set when +// adding your platforms in the console interface. +func (srv *Auth) ConfirmResend(Confirm string) (map[string]interface{}, error) { + path := "/auth/register/confirm/resend" + + params := map[string]interface{}{ + "confirm": Confirm, + } + + return srv.client.Call("POST", path, nil, params) +} diff --git a/app/sdks/go/avatars.go b/app/sdks/go/avatars.go new file mode 100644 index 0000000000..286f644f8d --- /dev/null +++ b/app/sdks/go/avatars.go @@ -0,0 +1,103 @@ +package appwrite + +import ( + "strings" +) + +// Avatars service +type Avatars struct { + client *Client +} + +// GetBrowser 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 /account/sessions endpoint. Use width, height and quality +// arguments to change the output settings. +func (srv *Avatars) GetBrowser(Code string, Width int, Height int, Quality int) (map[string]interface{}, error) { + r := strings.NewReplacer("{code}", Code) + path := r.Replace("/avatars/browsers/{code}") + + params := map[string]interface{}{ + "width": Width, + "height": Height, + "quality": Quality, + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetCreditCard need to display your users with your billing method or their +// payment methods? 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. +func (srv *Avatars) GetCreditCard(Code string, Width int, Height int, Quality int) (map[string]interface{}, error) { + r := strings.NewReplacer("{code}", Code) + path := r.Replace("/avatars/credit-cards/{code}") + + params := map[string]interface{}{ + "width": Width, + "height": Height, + "quality": Quality, + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetFavicon use this endpoint to fetch the favorite icon (AKA favicon) of a +// any remote website URL. +func (srv *Avatars) GetFavicon(Url string) (map[string]interface{}, error) { + path := "/avatars/favicon" + + params := map[string]interface{}{ + "url": Url, + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetFlag 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. +func (srv *Avatars) GetFlag(Code string, Width int, Height int, Quality int) (map[string]interface{}, error) { + r := strings.NewReplacer("{code}", Code) + path := r.Replace("/avatars/flags/{code}") + + params := map[string]interface{}{ + "width": Width, + "height": Height, + "quality": Quality, + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetImage 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. +func (srv *Avatars) GetImage(Url string, Width int, Height int) (map[string]interface{}, error) { + path := "/avatars/image" + + params := map[string]interface{}{ + "url": Url, + "width": Width, + "height": Height, + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetQR 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. +func (srv *Avatars) GetQR(Text string, Size int, Margin int, Download int) (map[string]interface{}, error) { + path := "/avatars/qr" + + params := map[string]interface{}{ + "text": Text, + "size": Size, + "margin": Margin, + "download": Download, + } + + return srv.client.Call("GET", path, nil, params) +} diff --git a/app/sdks/go/client.go b/app/sdks/go/client.go new file mode 100644 index 0000000000..94f2546cff --- /dev/null +++ b/app/sdks/go/client.go @@ -0,0 +1,119 @@ +package appwrite + +import ( + "encoding/json" + "io/ioutil" + "net/http" + "net/url" + "strings" +) + +// Client is the client struct to access Appwrite services +type Client struct { + client *http.Client + endpoint string + headers map[string]string + selfSigned bool +} + +// SetEndpoint sets the default endpoint to which the Client connects to +func (clt *Client) SetEndpoint(endpoint string) { + clt.endpoint = endpoint +} + +// SetSelfSigned sets the condition that specify if the Client should allow connections to a server using a self-signed certificate +func (clt *Client) SetSelfSigned(status bool) { + clt.selfSigned = status +} + +// AddHeader add a new custom header that the Client should send on each request +func (clt *Client) AddHeader(key string, value string) { + clt.headers[key] = value +} + +// SetProjectHeader add the 'X-Appwrite-Project' header for the Client. Your Appwrite project ID +func (clt *Client) SetProjectHeader(value string) { + clt.headers["X-Appwrite-Project"] = value +} + +// SetKeyHeader add the 'X-Appwrite-Key' header for the Client. Your Appwrite project secret key +func (clt *Client) SetKeyHeader(value string) { + clt.headers["X-Appwrite-Key"] = value +} + +// SetLocaleHeader add the 'X-Appwrite-Locale' header for the Client. +func (clt *Client) SetLocaleHeader(value string) { + clt.headers["X-Appwrite-Locale"] = value +} + +// SetModeHeader add the 'X-Appwrite-Mode' header for the Client. +func (clt *Client) SetModeHeader(value string) { + clt.headers["X-Appwrite-Mode"] = value +} + +// Call an API using Client +func (clt *Client) Call(method string, path string, headers map[string]interface{}, params map[string]interface{}) (map[string]interface{}, error) { + if clt.client == nil { + // Create HTTP client + clt.client = &http.Client{} + } + + if clt.selfSigned { + // Allow self signed requests + } + + urlPath := clt.endpoint + path + isGet := strings.ToUpper(method) == "GET" + + var reqBody *strings.Reader + if !isGet { + frm := url.Values{} + for key, val := range params { + frm.Add(key, ToString(val)) + } + reqBody = strings.NewReader(frm.Encode()) + } + + // Create and modify HTTP request before sending + req, err := http.NewRequest(method, urlPath, reqBody) + if err != nil { + return nil, err + } + + // Set Client headers + for key, val := range clt.headers { + req.Header.Set(key, ToString(val)) + } + + // Set Custom headers + for key, val := range headers { + req.Header.Set(key, ToString(val)) + } + + if isGet { + q := req.URL.Query() + for key, val := range params { + q.Add(key, ToString(val)) + } + req.URL.RawQuery = q.Encode() + } + + // Make request + response, err := clt.client.Do(req) + if err != nil { + return nil, err + } + + // Handle response + defer response.Body.Close() + + responseData, err := ioutil.ReadAll(response.Body) + if err != nil { + return nil, err + } + + var jsonResponse map[string]interface{} + json.Unmarshal(responseData, &jsonResponse) + + return jsonResponse, nil +} diff --git a/app/sdks/go/database.go b/app/sdks/go/database.go new file mode 100644 index 0000000000..99648bf0da --- /dev/null +++ b/app/sdks/go/database.go @@ -0,0 +1,159 @@ +package appwrite + +import ( + "strings" +) + +// Database service +type Database struct { + client *Client +} + +// ListCollections get a list of all the user collections. You can use the +// query params to filter your results. On admin mode, this endpoint will +// return a list of all of the project collections. [Learn more about +// different API modes](/docs/modes). +func (srv *Database) ListCollections(Search string, Limit int, Offset int, OrderType string) (map[string]interface{}, error) { + path := "/database" + + params := map[string]interface{}{ + "search": Search, + "limit": Limit, + "offset": Offset, + "orderType": OrderType, + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateCollection create a new Collection. +func (srv *Database) CreateCollection(Name string, Read []interface{}, Write []interface{}, Rules []interface{}) (map[string]interface{}, error) { + path := "/database" + + params := map[string]interface{}{ + "name": Name, + "read": Read, + "write": Write, + "rules": Rules, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetCollection get collection by its unique ID. This endpoint response +// returns a JSON object with the collection metadata. +func (srv *Database) GetCollection(CollectionId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{collectionId}", CollectionId) + path := r.Replace("/database/{collectionId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateCollection update collection by its unique ID. +func (srv *Database) UpdateCollection(CollectionId string, Name string, Read []interface{}, Write []interface{}, Rules []interface{}) (map[string]interface{}, error) { + r := strings.NewReplacer("{collectionId}", CollectionId) + path := r.Replace("/database/{collectionId}") + + params := map[string]interface{}{ + "name": Name, + "read": Read, + "write": Write, + "rules": Rules, + } + + return srv.client.Call("PUT", path, nil, params) +} + +// DeleteCollection delete a collection by its unique ID. Only users with +// write permissions have access to delete this resource. +func (srv *Database) DeleteCollection(CollectionId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{collectionId}", CollectionId) + path := r.Replace("/database/{collectionId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// ListDocuments get a list of all the user documents. You can use the query +// params to filter your results. On admin mode, this endpoint will return a +// list of all of the project documents. [Learn more about different API +// modes](/docs/modes). +func (srv *Database) ListDocuments(CollectionId string, Filters []interface{}, Offset int, Limit int, OrderField string, OrderType string, OrderCast string, Search string, First int, Last int) (map[string]interface{}, error) { + r := strings.NewReplacer("{collectionId}", CollectionId) + path := r.Replace("/database/{collectionId}/documents") + + params := map[string]interface{}{ + "filters": Filters, + "offset": Offset, + "limit": Limit, + "order-field": OrderField, + "order-type": OrderType, + "order-cast": OrderCast, + "search": Search, + "first": First, + "last": Last, + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateDocument create a new Document. +func (srv *Database) CreateDocument(CollectionId string, Data string, Read []interface{}, Write []interface{}, ParentDocument string, ParentProperty string, ParentPropertyType string) (map[string]interface{}, error) { + r := strings.NewReplacer("{collectionId}", CollectionId) + path := r.Replace("/database/{collectionId}/documents") + + params := map[string]interface{}{ + "data": Data, + "read": Read, + "write": Write, + "parentDocument": ParentDocument, + "parentProperty": ParentProperty, + "parentPropertyType": ParentPropertyType, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetDocument get document by its unique ID. This endpoint response returns a +// JSON object with the document data. +func (srv *Database) GetDocument(CollectionId string, DocumentId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{collectionId}", CollectionId, "{documentId}", DocumentId) + path := r.Replace("/database/{collectionId}/documents/{documentId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateDocument +func (srv *Database) UpdateDocument(CollectionId string, DocumentId string, Data string, Read []interface{}, Write []interface{}) (map[string]interface{}, error) { + r := strings.NewReplacer("{collectionId}", CollectionId, "{documentId}", DocumentId) + path := r.Replace("/database/{collectionId}/documents/{documentId}") + + params := map[string]interface{}{ + "data": Data, + "read": Read, + "write": Write, + } + + return srv.client.Call("PATCH", path, nil, params) +} + +// DeleteDocument delete document by its unique ID. This endpoint deletes only +// the parent documents, his attributes and relations to other documents. +// Child documents **will not** be deleted. +func (srv *Database) DeleteDocument(CollectionId string, DocumentId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{collectionId}", CollectionId, "{documentId}", DocumentId) + path := r.Replace("/database/{collectionId}/documents/{documentId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} diff --git a/app/sdks/go/docs/examples/Account/Delete.md b/app/sdks/go/docs/examples/Account/Delete.md new file mode 100644 index 0000000000..a029c47c14 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/Delete.md @@ -0,0 +1,35 @@ +# Account Examples + +## Delete + +```go + package appwrite-delete + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call Delete method and handle results + var res, err := srv.Delete() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/Get.md b/app/sdks/go/docs/examples/Account/Get.md new file mode 100644 index 0000000000..a6dd237a5d --- /dev/null +++ b/app/sdks/go/docs/examples/Account/Get.md @@ -0,0 +1,35 @@ +# Account Examples + +## Get + +```go + package appwrite-get + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call Get method and handle results + var res, err := srv.Get() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/GetPrefs.md b/app/sdks/go/docs/examples/Account/GetPrefs.md new file mode 100644 index 0000000000..0e4cfea354 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/GetPrefs.md @@ -0,0 +1,35 @@ +# Account Examples + +## GetPrefs + +```go + package appwrite-getprefs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call GetPrefs method and handle results + var res, err := srv.GetPrefs() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/GetSecurity.md b/app/sdks/go/docs/examples/Account/GetSecurity.md new file mode 100644 index 0000000000..113eb16ae5 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/GetSecurity.md @@ -0,0 +1,35 @@ +# Account Examples + +## GetSecurity + +```go + package appwrite-getsecurity + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call GetSecurity method and handle results + var res, err := srv.GetSecurity() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/GetSessions.md b/app/sdks/go/docs/examples/Account/GetSessions.md new file mode 100644 index 0000000000..153b8e3fe9 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/GetSessions.md @@ -0,0 +1,35 @@ +# Account Examples + +## GetSessions + +```go + package appwrite-getsessions + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call GetSessions method and handle results + var res, err := srv.GetSessions() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/UpdateEmail.md b/app/sdks/go/docs/examples/Account/UpdateEmail.md new file mode 100644 index 0000000000..6f9895257e --- /dev/null +++ b/app/sdks/go/docs/examples/Account/UpdateEmail.md @@ -0,0 +1,35 @@ +# Account Examples + +## UpdateEmail + +```go + package appwrite-updateemail + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call UpdateEmail method and handle results + var res, err := srv.UpdateEmail("email@example.com", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/UpdateName.md b/app/sdks/go/docs/examples/Account/UpdateName.md new file mode 100644 index 0000000000..3172a94fa6 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/UpdateName.md @@ -0,0 +1,35 @@ +# Account Examples + +## UpdateName + +```go + package appwrite-updatename + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call UpdateName method and handle results + var res, err := srv.UpdateName("[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/UpdatePassword.md b/app/sdks/go/docs/examples/Account/UpdatePassword.md new file mode 100644 index 0000000000..2aa8543fcd --- /dev/null +++ b/app/sdks/go/docs/examples/Account/UpdatePassword.md @@ -0,0 +1,35 @@ +# Account Examples + +## UpdatePassword + +```go + package appwrite-updatepassword + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call UpdatePassword method and handle results + var res, err := srv.UpdatePassword("password", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/UpdatePrefs.md b/app/sdks/go/docs/examples/Account/UpdatePrefs.md new file mode 100644 index 0000000000..869e12572d --- /dev/null +++ b/app/sdks/go/docs/examples/Account/UpdatePrefs.md @@ -0,0 +1,35 @@ +# Account Examples + +## UpdatePrefs + +```go + package appwrite-updateprefs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call UpdatePrefs method and handle results + var res, err := srv.UpdatePrefs("{}") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/get-prefs.md b/app/sdks/go/docs/examples/Account/get-prefs.md new file mode 100644 index 0000000000..0e4cfea354 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/get-prefs.md @@ -0,0 +1,35 @@ +# Account Examples + +## GetPrefs + +```go + package appwrite-getprefs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call GetPrefs method and handle results + var res, err := srv.GetPrefs() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/get-security.md b/app/sdks/go/docs/examples/Account/get-security.md new file mode 100644 index 0000000000..113eb16ae5 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/get-security.md @@ -0,0 +1,35 @@ +# Account Examples + +## GetSecurity + +```go + package appwrite-getsecurity + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call GetSecurity method and handle results + var res, err := srv.GetSecurity() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/get-sessions.md b/app/sdks/go/docs/examples/Account/get-sessions.md new file mode 100644 index 0000000000..153b8e3fe9 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/get-sessions.md @@ -0,0 +1,35 @@ +# Account Examples + +## GetSessions + +```go + package appwrite-getsessions + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call GetSessions method and handle results + var res, err := srv.GetSessions() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/update-email.md b/app/sdks/go/docs/examples/Account/update-email.md new file mode 100644 index 0000000000..6f9895257e --- /dev/null +++ b/app/sdks/go/docs/examples/Account/update-email.md @@ -0,0 +1,35 @@ +# Account Examples + +## UpdateEmail + +```go + package appwrite-updateemail + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call UpdateEmail method and handle results + var res, err := srv.UpdateEmail("email@example.com", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/update-name.md b/app/sdks/go/docs/examples/Account/update-name.md new file mode 100644 index 0000000000..3172a94fa6 --- /dev/null +++ b/app/sdks/go/docs/examples/Account/update-name.md @@ -0,0 +1,35 @@ +# Account Examples + +## UpdateName + +```go + package appwrite-updatename + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call UpdateName method and handle results + var res, err := srv.UpdateName("[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/update-password.md b/app/sdks/go/docs/examples/Account/update-password.md new file mode 100644 index 0000000000..2aa8543fcd --- /dev/null +++ b/app/sdks/go/docs/examples/Account/update-password.md @@ -0,0 +1,35 @@ +# Account Examples + +## UpdatePassword + +```go + package appwrite-updatepassword + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call UpdatePassword method and handle results + var res, err := srv.UpdatePassword("password", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Account/update-prefs.md b/app/sdks/go/docs/examples/Account/update-prefs.md new file mode 100644 index 0000000000..869e12572d --- /dev/null +++ b/app/sdks/go/docs/examples/Account/update-prefs.md @@ -0,0 +1,35 @@ +# Account Examples + +## UpdatePrefs + +```go + package appwrite-updateprefs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Account service passing Client + var srv := appwrite.Account{ + client: &clt + } + + // Call UpdatePrefs method and handle results + var res, err := srv.UpdatePrefs("{}") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/Confirm.md b/app/sdks/go/docs/examples/Auth/Confirm.md new file mode 100644 index 0000000000..c7305d378a --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/Confirm.md @@ -0,0 +1,33 @@ +# Auth Examples + +## Confirm + +```go + package appwrite-confirm + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call Confirm method and handle results + var res, err := srv.Confirm("[USER_ID]", "[TOKEN]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/ConfirmResend.md b/app/sdks/go/docs/examples/Auth/ConfirmResend.md new file mode 100644 index 0000000000..42750db217 --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/ConfirmResend.md @@ -0,0 +1,35 @@ +# Auth Examples + +## ConfirmResend + +```go + package appwrite-confirmresend + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call ConfirmResend method and handle results + var res, err := srv.ConfirmResend("https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/Login.md b/app/sdks/go/docs/examples/Auth/Login.md new file mode 100644 index 0000000000..2f60a9ffd3 --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/Login.md @@ -0,0 +1,35 @@ +# Auth Examples + +## Login + +```go + package appwrite-login + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call Login method and handle results + var res, err := srv.Login("email@example.com", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/Logout.md b/app/sdks/go/docs/examples/Auth/Logout.md new file mode 100644 index 0000000000..4a3d126e7e --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/Logout.md @@ -0,0 +1,35 @@ +# Auth Examples + +## Logout + +```go + package appwrite-logout + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call Logout method and handle results + var res, err := srv.Logout() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/LogoutBySession.md b/app/sdks/go/docs/examples/Auth/LogoutBySession.md new file mode 100644 index 0000000000..239e764b16 --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/LogoutBySession.md @@ -0,0 +1,35 @@ +# Auth Examples + +## LogoutBySession + +```go + package appwrite-logoutbysession + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call LogoutBySession method and handle results + var res, err := srv.LogoutBySession("[ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/Oauth.md b/app/sdks/go/docs/examples/Auth/Oauth.md new file mode 100644 index 0000000000..0cfb46726d --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/Oauth.md @@ -0,0 +1,35 @@ +# Auth Examples + +## Oauth + +```go + package appwrite-oauth + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call Oauth method and handle results + var res, err := srv.Oauth("bitbucket", "https://example.com", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/Recovery.md b/app/sdks/go/docs/examples/Auth/Recovery.md new file mode 100644 index 0000000000..4e4e88093c --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/Recovery.md @@ -0,0 +1,35 @@ +# Auth Examples + +## Recovery + +```go + package appwrite-recovery + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call Recovery method and handle results + var res, err := srv.Recovery("email@example.com", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/RecoveryReset.md b/app/sdks/go/docs/examples/Auth/RecoveryReset.md new file mode 100644 index 0000000000..d5922708aa --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/RecoveryReset.md @@ -0,0 +1,35 @@ +# Auth Examples + +## RecoveryReset + +```go + package appwrite-recoveryreset + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call RecoveryReset method and handle results + var res, err := srv.RecoveryReset("[USER_ID]", "[TOKEN]", "password", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/Register.md b/app/sdks/go/docs/examples/Auth/Register.md new file mode 100644 index 0000000000..8e64c96fcb --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/Register.md @@ -0,0 +1,35 @@ +# Auth Examples + +## Register + +```go + package appwrite-register + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call Register method and handle results + var res, err := srv.Register("email@example.com", "password", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/confirm-resend.md b/app/sdks/go/docs/examples/Auth/confirm-resend.md new file mode 100644 index 0000000000..42750db217 --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/confirm-resend.md @@ -0,0 +1,35 @@ +# Auth Examples + +## ConfirmResend + +```go + package appwrite-confirmresend + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call ConfirmResend method and handle results + var res, err := srv.ConfirmResend("https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/logout-by-session.md b/app/sdks/go/docs/examples/Auth/logout-by-session.md new file mode 100644 index 0000000000..239e764b16 --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/logout-by-session.md @@ -0,0 +1,35 @@ +# Auth Examples + +## LogoutBySession + +```go + package appwrite-logoutbysession + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call LogoutBySession method and handle results + var res, err := srv.LogoutBySession("[ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Auth/recovery-reset.md b/app/sdks/go/docs/examples/Auth/recovery-reset.md new file mode 100644 index 0000000000..d5922708aa --- /dev/null +++ b/app/sdks/go/docs/examples/Auth/recovery-reset.md @@ -0,0 +1,35 @@ +# Auth Examples + +## RecoveryReset + +```go + package appwrite-recoveryreset + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Auth service passing Client + var srv := appwrite.Auth{ + client: &clt + } + + // Call RecoveryReset method and handle results + var res, err := srv.RecoveryReset("[USER_ID]", "[TOKEN]", "password", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/GetBrowser.md b/app/sdks/go/docs/examples/Avatars/GetBrowser.md new file mode 100644 index 0000000000..9628da910b --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/GetBrowser.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetBrowser + +```go + package appwrite-getbrowser + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetBrowser method and handle results + var res, err := srv.GetBrowser("aa") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/GetCreditCard.md b/app/sdks/go/docs/examples/Avatars/GetCreditCard.md new file mode 100644 index 0000000000..488077cfc3 --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/GetCreditCard.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetCreditCard + +```go + package appwrite-getcreditcard + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetCreditCard method and handle results + var res, err := srv.GetCreditCard("amex") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/GetFavicon.md b/app/sdks/go/docs/examples/Avatars/GetFavicon.md new file mode 100644 index 0000000000..c235967d6b --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/GetFavicon.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetFavicon + +```go + package appwrite-getfavicon + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetFavicon method and handle results + var res, err := srv.GetFavicon("https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/GetFlag.md b/app/sdks/go/docs/examples/Avatars/GetFlag.md new file mode 100644 index 0000000000..955c96c530 --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/GetFlag.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetFlag + +```go + package appwrite-getflag + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetFlag method and handle results + var res, err := srv.GetFlag("af") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/GetImage.md b/app/sdks/go/docs/examples/Avatars/GetImage.md new file mode 100644 index 0000000000..11d1c6523d --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/GetImage.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetImage + +```go + package appwrite-getimage + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetImage method and handle results + var res, err := srv.GetImage("https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/GetQR.md b/app/sdks/go/docs/examples/Avatars/GetQR.md new file mode 100644 index 0000000000..0874c0e6be --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/GetQR.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetQR + +```go + package appwrite-getqr + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetQR method and handle results + var res, err := srv.GetQR("[TEXT]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/get-browser.md b/app/sdks/go/docs/examples/Avatars/get-browser.md new file mode 100644 index 0000000000..9628da910b --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/get-browser.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetBrowser + +```go + package appwrite-getbrowser + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetBrowser method and handle results + var res, err := srv.GetBrowser("aa") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/get-credit-card.md b/app/sdks/go/docs/examples/Avatars/get-credit-card.md new file mode 100644 index 0000000000..488077cfc3 --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/get-credit-card.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetCreditCard + +```go + package appwrite-getcreditcard + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetCreditCard method and handle results + var res, err := srv.GetCreditCard("amex") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/get-favicon.md b/app/sdks/go/docs/examples/Avatars/get-favicon.md new file mode 100644 index 0000000000..c235967d6b --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/get-favicon.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetFavicon + +```go + package appwrite-getfavicon + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetFavicon method and handle results + var res, err := srv.GetFavicon("https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/get-flag.md b/app/sdks/go/docs/examples/Avatars/get-flag.md new file mode 100644 index 0000000000..955c96c530 --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/get-flag.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetFlag + +```go + package appwrite-getflag + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetFlag method and handle results + var res, err := srv.GetFlag("af") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/get-image.md b/app/sdks/go/docs/examples/Avatars/get-image.md new file mode 100644 index 0000000000..11d1c6523d --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/get-image.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetImage + +```go + package appwrite-getimage + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetImage method and handle results + var res, err := srv.GetImage("https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Avatars/get-q-r.md b/app/sdks/go/docs/examples/Avatars/get-q-r.md new file mode 100644 index 0000000000..0874c0e6be --- /dev/null +++ b/app/sdks/go/docs/examples/Avatars/get-q-r.md @@ -0,0 +1,35 @@ +# Avatars Examples + +## GetQR + +```go + package appwrite-getqr + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Avatars service passing Client + var srv := appwrite.Avatars{ + client: &clt + } + + // Call GetQR method and handle results + var res, err := srv.GetQR("[TEXT]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/CreateCollection.md b/app/sdks/go/docs/examples/Database/CreateCollection.md new file mode 100644 index 0000000000..f4f2ab1fc3 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/CreateCollection.md @@ -0,0 +1,35 @@ +# Database Examples + +## CreateCollection + +```go + package appwrite-createcollection + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call CreateCollection method and handle results + var res, err := srv.CreateCollection("[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/CreateDocument.md b/app/sdks/go/docs/examples/Database/CreateDocument.md new file mode 100644 index 0000000000..ab9aa9e602 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/CreateDocument.md @@ -0,0 +1,35 @@ +# Database Examples + +## CreateDocument + +```go + package appwrite-createdocument + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call CreateDocument method and handle results + var res, err := srv.CreateDocument("[COLLECTION_ID]", "{}") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/DeleteCollection.md b/app/sdks/go/docs/examples/Database/DeleteCollection.md new file mode 100644 index 0000000000..85928bde3b --- /dev/null +++ b/app/sdks/go/docs/examples/Database/DeleteCollection.md @@ -0,0 +1,35 @@ +# Database Examples + +## DeleteCollection + +```go + package appwrite-deletecollection + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call DeleteCollection method and handle results + var res, err := srv.DeleteCollection("[COLLECTION_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/DeleteDocument.md b/app/sdks/go/docs/examples/Database/DeleteDocument.md new file mode 100644 index 0000000000..256a0abccb --- /dev/null +++ b/app/sdks/go/docs/examples/Database/DeleteDocument.md @@ -0,0 +1,35 @@ +# Database Examples + +## DeleteDocument + +```go + package appwrite-deletedocument + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call DeleteDocument method and handle results + var res, err := srv.DeleteDocument("[COLLECTION_ID]", "[DOCUMENT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/GetCollection.md b/app/sdks/go/docs/examples/Database/GetCollection.md new file mode 100644 index 0000000000..120ad0a19e --- /dev/null +++ b/app/sdks/go/docs/examples/Database/GetCollection.md @@ -0,0 +1,35 @@ +# Database Examples + +## GetCollection + +```go + package appwrite-getcollection + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call GetCollection method and handle results + var res, err := srv.GetCollection("[COLLECTION_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/GetDocument.md b/app/sdks/go/docs/examples/Database/GetDocument.md new file mode 100644 index 0000000000..8866442b6b --- /dev/null +++ b/app/sdks/go/docs/examples/Database/GetDocument.md @@ -0,0 +1,35 @@ +# Database Examples + +## GetDocument + +```go + package appwrite-getdocument + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call GetDocument method and handle results + var res, err := srv.GetDocument("[COLLECTION_ID]", "[DOCUMENT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/ListCollections.md b/app/sdks/go/docs/examples/Database/ListCollections.md new file mode 100644 index 0000000000..1db6530df7 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/ListCollections.md @@ -0,0 +1,35 @@ +# Database Examples + +## ListCollections + +```go + package appwrite-listcollections + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call ListCollections method and handle results + var res, err := srv.ListCollections() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/ListDocuments.md b/app/sdks/go/docs/examples/Database/ListDocuments.md new file mode 100644 index 0000000000..6c46ead8db --- /dev/null +++ b/app/sdks/go/docs/examples/Database/ListDocuments.md @@ -0,0 +1,35 @@ +# Database Examples + +## ListDocuments + +```go + package appwrite-listdocuments + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call ListDocuments method and handle results + var res, err := srv.ListDocuments("[COLLECTION_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/UpdateCollection.md b/app/sdks/go/docs/examples/Database/UpdateCollection.md new file mode 100644 index 0000000000..f6ab2b17e1 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/UpdateCollection.md @@ -0,0 +1,35 @@ +# Database Examples + +## UpdateCollection + +```go + package appwrite-updatecollection + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call UpdateCollection method and handle results + var res, err := srv.UpdateCollection("[COLLECTION_ID]", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/UpdateDocument.md b/app/sdks/go/docs/examples/Database/UpdateDocument.md new file mode 100644 index 0000000000..6a2775e71a --- /dev/null +++ b/app/sdks/go/docs/examples/Database/UpdateDocument.md @@ -0,0 +1,35 @@ +# Database Examples + +## UpdateDocument + +```go + package appwrite-updatedocument + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call UpdateDocument method and handle results + var res, err := srv.UpdateDocument("[COLLECTION_ID]", "[DOCUMENT_ID]", "{}") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/create-collection.md b/app/sdks/go/docs/examples/Database/create-collection.md new file mode 100644 index 0000000000..48e5977c60 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/create-collection.md @@ -0,0 +1,35 @@ +# Database Examples + +## CreateCollection + +```go + package appwrite-createcollection + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call CreateCollection method and handle results + var res, err := srv.CreateCollection("[NAME]", [], [], []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/create-document.md b/app/sdks/go/docs/examples/Database/create-document.md new file mode 100644 index 0000000000..ccaa02f578 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/create-document.md @@ -0,0 +1,35 @@ +# Database Examples + +## CreateDocument + +```go + package appwrite-createdocument + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call CreateDocument method and handle results + var res, err := srv.CreateDocument("[COLLECTION_ID]", "{}", [], []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/delete-collection.md b/app/sdks/go/docs/examples/Database/delete-collection.md new file mode 100644 index 0000000000..85928bde3b --- /dev/null +++ b/app/sdks/go/docs/examples/Database/delete-collection.md @@ -0,0 +1,35 @@ +# Database Examples + +## DeleteCollection + +```go + package appwrite-deletecollection + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call DeleteCollection method and handle results + var res, err := srv.DeleteCollection("[COLLECTION_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/delete-document.md b/app/sdks/go/docs/examples/Database/delete-document.md new file mode 100644 index 0000000000..256a0abccb --- /dev/null +++ b/app/sdks/go/docs/examples/Database/delete-document.md @@ -0,0 +1,35 @@ +# Database Examples + +## DeleteDocument + +```go + package appwrite-deletedocument + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call DeleteDocument method and handle results + var res, err := srv.DeleteDocument("[COLLECTION_ID]", "[DOCUMENT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/get-collection.md b/app/sdks/go/docs/examples/Database/get-collection.md new file mode 100644 index 0000000000..120ad0a19e --- /dev/null +++ b/app/sdks/go/docs/examples/Database/get-collection.md @@ -0,0 +1,35 @@ +# Database Examples + +## GetCollection + +```go + package appwrite-getcollection + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call GetCollection method and handle results + var res, err := srv.GetCollection("[COLLECTION_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/get-document.md b/app/sdks/go/docs/examples/Database/get-document.md new file mode 100644 index 0000000000..8866442b6b --- /dev/null +++ b/app/sdks/go/docs/examples/Database/get-document.md @@ -0,0 +1,35 @@ +# Database Examples + +## GetDocument + +```go + package appwrite-getdocument + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call GetDocument method and handle results + var res, err := srv.GetDocument("[COLLECTION_ID]", "[DOCUMENT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/list-collections.md b/app/sdks/go/docs/examples/Database/list-collections.md new file mode 100644 index 0000000000..1db6530df7 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/list-collections.md @@ -0,0 +1,35 @@ +# Database Examples + +## ListCollections + +```go + package appwrite-listcollections + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call ListCollections method and handle results + var res, err := srv.ListCollections() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/list-documents.md b/app/sdks/go/docs/examples/Database/list-documents.md new file mode 100644 index 0000000000..6c46ead8db --- /dev/null +++ b/app/sdks/go/docs/examples/Database/list-documents.md @@ -0,0 +1,35 @@ +# Database Examples + +## ListDocuments + +```go + package appwrite-listdocuments + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call ListDocuments method and handle results + var res, err := srv.ListDocuments("[COLLECTION_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/update-collection.md b/app/sdks/go/docs/examples/Database/update-collection.md new file mode 100644 index 0000000000..7cf07ac2c0 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/update-collection.md @@ -0,0 +1,35 @@ +# Database Examples + +## UpdateCollection + +```go + package appwrite-updatecollection + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call UpdateCollection method and handle results + var res, err := srv.UpdateCollection("[COLLECTION_ID]", "[NAME]", [], []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Database/update-document.md b/app/sdks/go/docs/examples/Database/update-document.md new file mode 100644 index 0000000000..88f57eefa9 --- /dev/null +++ b/app/sdks/go/docs/examples/Database/update-document.md @@ -0,0 +1,35 @@ +# Database Examples + +## UpdateDocument + +```go + package appwrite-updatedocument + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Database service passing Client + var srv := appwrite.Database{ + client: &clt + } + + // Call UpdateDocument method and handle results + var res, err := srv.UpdateDocument("[COLLECTION_ID]", "[DOCUMENT_ID]", "{}", [], []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/GetCountries.md b/app/sdks/go/docs/examples/Locale/GetCountries.md new file mode 100644 index 0000000000..be286c1979 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/GetCountries.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetCountries + +```go + package appwrite-getcountries + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetCountries method and handle results + var res, err := srv.GetCountries() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/GetCountriesEU.md b/app/sdks/go/docs/examples/Locale/GetCountriesEU.md new file mode 100644 index 0000000000..ca8ed7ca48 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/GetCountriesEU.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetCountriesEU + +```go + package appwrite-getcountrieseu + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetCountriesEU method and handle results + var res, err := srv.GetCountriesEU() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/GetCountriesPhones.md b/app/sdks/go/docs/examples/Locale/GetCountriesPhones.md new file mode 100644 index 0000000000..8847258258 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/GetCountriesPhones.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetCountriesPhones + +```go + package appwrite-getcountriesphones + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetCountriesPhones method and handle results + var res, err := srv.GetCountriesPhones() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/GetCurrencies.md b/app/sdks/go/docs/examples/Locale/GetCurrencies.md new file mode 100644 index 0000000000..fcbb679fd3 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/GetCurrencies.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetCurrencies + +```go + package appwrite-getcurrencies + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetCurrencies method and handle results + var res, err := srv.GetCurrencies() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/GetLocale.md b/app/sdks/go/docs/examples/Locale/GetLocale.md new file mode 100644 index 0000000000..67cfcdccc9 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/GetLocale.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetLocale + +```go + package appwrite-getlocale + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetLocale method and handle results + var res, err := srv.GetLocale() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/get-continents.md b/app/sdks/go/docs/examples/Locale/get-continents.md new file mode 100644 index 0000000000..faeab3a977 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/get-continents.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetContinents + +```go + package appwrite-getcontinents + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetContinents method and handle results + var res, err := srv.GetContinents() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/get-countries-e-u.md b/app/sdks/go/docs/examples/Locale/get-countries-e-u.md new file mode 100644 index 0000000000..ca8ed7ca48 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/get-countries-e-u.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetCountriesEU + +```go + package appwrite-getcountrieseu + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetCountriesEU method and handle results + var res, err := srv.GetCountriesEU() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/get-countries-phones.md b/app/sdks/go/docs/examples/Locale/get-countries-phones.md new file mode 100644 index 0000000000..8847258258 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/get-countries-phones.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetCountriesPhones + +```go + package appwrite-getcountriesphones + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetCountriesPhones method and handle results + var res, err := srv.GetCountriesPhones() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/get-countries.md b/app/sdks/go/docs/examples/Locale/get-countries.md new file mode 100644 index 0000000000..be286c1979 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/get-countries.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetCountries + +```go + package appwrite-getcountries + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetCountries method and handle results + var res, err := srv.GetCountries() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/get-currencies.md b/app/sdks/go/docs/examples/Locale/get-currencies.md new file mode 100644 index 0000000000..fcbb679fd3 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/get-currencies.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetCurrencies + +```go + package appwrite-getcurrencies + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetCurrencies method and handle results + var res, err := srv.GetCurrencies() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Locale/get-locale.md b/app/sdks/go/docs/examples/Locale/get-locale.md new file mode 100644 index 0000000000..67cfcdccc9 --- /dev/null +++ b/app/sdks/go/docs/examples/Locale/get-locale.md @@ -0,0 +1,35 @@ +# Locale Examples + +## GetLocale + +```go + package appwrite-getlocale + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Locale service passing Client + var srv := appwrite.Locale{ + client: &clt + } + + // Call GetLocale method and handle results + var res, err := srv.GetLocale() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/CreateKey.md b/app/sdks/go/docs/examples/Projects/CreateKey.md new file mode 100644 index 0000000000..7fa69e4b67 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/CreateKey.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreateKey + +```go + package appwrite-createkey + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreateKey method and handle results + var res, err := srv.CreateKey("[PROJECT_ID]", "[NAME]", []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/CreatePlatform.md b/app/sdks/go/docs/examples/Projects/CreatePlatform.md new file mode 100644 index 0000000000..7f2d247741 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/CreatePlatform.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreatePlatform + +```go + package appwrite-createplatform + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreatePlatform method and handle results + var res, err := srv.CreatePlatform("[PROJECT_ID]", "web", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/CreateProject.md b/app/sdks/go/docs/examples/Projects/CreateProject.md new file mode 100644 index 0000000000..44525bdcd2 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/CreateProject.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreateProject + +```go + package appwrite-createproject + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreateProject method and handle results + var res, err := srv.CreateProject("[NAME]", "[TEAM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/CreateTask.md b/app/sdks/go/docs/examples/Projects/CreateTask.md new file mode 100644 index 0000000000..25c617ec9b --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/CreateTask.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreateTask + +```go + package appwrite-createtask + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreateTask method and handle results + var res, err := srv.CreateTask("[PROJECT_ID]", "[NAME]", "play", "", 0, "GET", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/CreateWebhook.md b/app/sdks/go/docs/examples/Projects/CreateWebhook.md new file mode 100644 index 0000000000..58e5dc548f --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/CreateWebhook.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreateWebhook + +```go + package appwrite-createwebhook + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreateWebhook method and handle results + var res, err := srv.CreateWebhook("[PROJECT_ID]", "[NAME]", [], "[URL]", 0) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/DeleteKey.md b/app/sdks/go/docs/examples/Projects/DeleteKey.md new file mode 100644 index 0000000000..3160b37d1c --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/DeleteKey.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeleteKey + +```go + package appwrite-deletekey + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeleteKey method and handle results + var res, err := srv.DeleteKey("[PROJECT_ID]", "[KEY_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/DeletePlatform.md b/app/sdks/go/docs/examples/Projects/DeletePlatform.md new file mode 100644 index 0000000000..a9e3f0d3b9 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/DeletePlatform.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeletePlatform + +```go + package appwrite-deleteplatform + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeletePlatform method and handle results + var res, err := srv.DeletePlatform("[PROJECT_ID]", "[PLATFORM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/DeleteProject.md b/app/sdks/go/docs/examples/Projects/DeleteProject.md new file mode 100644 index 0000000000..446f640c0d --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/DeleteProject.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeleteProject + +```go + package appwrite-deleteproject + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeleteProject method and handle results + var res, err := srv.DeleteProject("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/DeleteTask.md b/app/sdks/go/docs/examples/Projects/DeleteTask.md new file mode 100644 index 0000000000..a5275e3b04 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/DeleteTask.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeleteTask + +```go + package appwrite-deletetask + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeleteTask method and handle results + var res, err := srv.DeleteTask("[PROJECT_ID]", "[TASK_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/DeleteWebhook.md b/app/sdks/go/docs/examples/Projects/DeleteWebhook.md new file mode 100644 index 0000000000..377708f6a3 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/DeleteWebhook.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeleteWebhook + +```go + package appwrite-deletewebhook + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeleteWebhook method and handle results + var res, err := srv.DeleteWebhook("[PROJECT_ID]", "[WEBHOOK_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/GetKey.md b/app/sdks/go/docs/examples/Projects/GetKey.md new file mode 100644 index 0000000000..abe636ba31 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/GetKey.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetKey + +```go + package appwrite-getkey + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetKey method and handle results + var res, err := srv.GetKey("[PROJECT_ID]", "[KEY_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/GetPlatform.md b/app/sdks/go/docs/examples/Projects/GetPlatform.md new file mode 100644 index 0000000000..14a9d3bda5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/GetPlatform.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetPlatform + +```go + package appwrite-getplatform + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetPlatform method and handle results + var res, err := srv.GetPlatform("[PROJECT_ID]", "[PLATFORM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/GetProject.md b/app/sdks/go/docs/examples/Projects/GetProject.md new file mode 100644 index 0000000000..8e0986f592 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/GetProject.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetProject + +```go + package appwrite-getproject + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetProject method and handle results + var res, err := srv.GetProject("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/GetProjectUsage.md b/app/sdks/go/docs/examples/Projects/GetProjectUsage.md new file mode 100644 index 0000000000..2bb6bc4dc5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/GetProjectUsage.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetProjectUsage + +```go + package appwrite-getprojectusage + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetProjectUsage method and handle results + var res, err := srv.GetProjectUsage("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/GetTask.md b/app/sdks/go/docs/examples/Projects/GetTask.md new file mode 100644 index 0000000000..c6efdf553b --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/GetTask.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetTask + +```go + package appwrite-gettask + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetTask method and handle results + var res, err := srv.GetTask("[PROJECT_ID]", "[TASK_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/GetWebhook.md b/app/sdks/go/docs/examples/Projects/GetWebhook.md new file mode 100644 index 0000000000..b46bf392b5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/GetWebhook.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetWebhook + +```go + package appwrite-getwebhook + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetWebhook method and handle results + var res, err := srv.GetWebhook("[PROJECT_ID]", "[WEBHOOK_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/ListKeys.md b/app/sdks/go/docs/examples/Projects/ListKeys.md new file mode 100644 index 0000000000..e084035bb5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/ListKeys.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListKeys + +```go + package appwrite-listkeys + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListKeys method and handle results + var res, err := srv.ListKeys("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/ListPlatforms.md b/app/sdks/go/docs/examples/Projects/ListPlatforms.md new file mode 100644 index 0000000000..ecce7449e1 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/ListPlatforms.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListPlatforms + +```go + package appwrite-listplatforms + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListPlatforms method and handle results + var res, err := srv.ListPlatforms("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/ListProjects.md b/app/sdks/go/docs/examples/Projects/ListProjects.md new file mode 100644 index 0000000000..f17ea76beb --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/ListProjects.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListProjects + +```go + package appwrite-listprojects + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListProjects method and handle results + var res, err := srv.ListProjects() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/ListTasks.md b/app/sdks/go/docs/examples/Projects/ListTasks.md new file mode 100644 index 0000000000..84f5356c34 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/ListTasks.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListTasks + +```go + package appwrite-listtasks + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListTasks method and handle results + var res, err := srv.ListTasks("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/ListWebhooks.md b/app/sdks/go/docs/examples/Projects/ListWebhooks.md new file mode 100644 index 0000000000..aee6b8da62 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/ListWebhooks.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListWebhooks + +```go + package appwrite-listwebhooks + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListWebhooks method and handle results + var res, err := srv.ListWebhooks("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/UpdateKey.md b/app/sdks/go/docs/examples/Projects/UpdateKey.md new file mode 100644 index 0000000000..205caef8c8 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/UpdateKey.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateKey + +```go + package appwrite-updatekey + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateKey method and handle results + var res, err := srv.UpdateKey("[PROJECT_ID]", "[KEY_ID]", "[NAME]", []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/UpdatePlatform.md b/app/sdks/go/docs/examples/Projects/UpdatePlatform.md new file mode 100644 index 0000000000..bc966f73a8 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/UpdatePlatform.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdatePlatform + +```go + package appwrite-updateplatform + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdatePlatform method and handle results + var res, err := srv.UpdatePlatform("[PROJECT_ID]", "[PLATFORM_ID]", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/UpdateProject.md b/app/sdks/go/docs/examples/Projects/UpdateProject.md new file mode 100644 index 0000000000..7663ec4c4e --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/UpdateProject.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateProject + +```go + package appwrite-updateproject + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateProject method and handle results + var res, err := srv.UpdateProject("[PROJECT_ID]", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/UpdateProjectOAuth.md b/app/sdks/go/docs/examples/Projects/UpdateProjectOAuth.md new file mode 100644 index 0000000000..58f23b698b --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/UpdateProjectOAuth.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateProjectOAuth + +```go + package appwrite-updateprojectoauth + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateProjectOAuth method and handle results + var res, err := srv.UpdateProjectOAuth("[PROJECT_ID]", "bitbucket") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/UpdateTask.md b/app/sdks/go/docs/examples/Projects/UpdateTask.md new file mode 100644 index 0000000000..f977fd5540 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/UpdateTask.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateTask + +```go + package appwrite-updatetask + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateTask method and handle results + var res, err := srv.UpdateTask("[PROJECT_ID]", "[TASK_ID]", "[NAME]", "play", "", 0, "GET", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/UpdateWebhook.md b/app/sdks/go/docs/examples/Projects/UpdateWebhook.md new file mode 100644 index 0000000000..0120707ad5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/UpdateWebhook.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateWebhook + +```go + package appwrite-updatewebhook + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateWebhook method and handle results + var res, err := srv.UpdateWebhook("[PROJECT_ID]", "[WEBHOOK_ID]", "[NAME]", [], "[URL]", 0) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/create-key.md b/app/sdks/go/docs/examples/Projects/create-key.md new file mode 100644 index 0000000000..7fa69e4b67 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/create-key.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreateKey + +```go + package appwrite-createkey + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreateKey method and handle results + var res, err := srv.CreateKey("[PROJECT_ID]", "[NAME]", []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/create-platform.md b/app/sdks/go/docs/examples/Projects/create-platform.md new file mode 100644 index 0000000000..7f2d247741 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/create-platform.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreatePlatform + +```go + package appwrite-createplatform + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreatePlatform method and handle results + var res, err := srv.CreatePlatform("[PROJECT_ID]", "web", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/create-project.md b/app/sdks/go/docs/examples/Projects/create-project.md new file mode 100644 index 0000000000..44525bdcd2 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/create-project.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreateProject + +```go + package appwrite-createproject + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreateProject method and handle results + var res, err := srv.CreateProject("[NAME]", "[TEAM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/create-task.md b/app/sdks/go/docs/examples/Projects/create-task.md new file mode 100644 index 0000000000..25c617ec9b --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/create-task.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreateTask + +```go + package appwrite-createtask + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreateTask method and handle results + var res, err := srv.CreateTask("[PROJECT_ID]", "[NAME]", "play", "", 0, "GET", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/create-webhook.md b/app/sdks/go/docs/examples/Projects/create-webhook.md new file mode 100644 index 0000000000..58e5dc548f --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/create-webhook.md @@ -0,0 +1,35 @@ +# Projects Examples + +## CreateWebhook + +```go + package appwrite-createwebhook + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call CreateWebhook method and handle results + var res, err := srv.CreateWebhook("[PROJECT_ID]", "[NAME]", [], "[URL]", 0) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/delete-key.md b/app/sdks/go/docs/examples/Projects/delete-key.md new file mode 100644 index 0000000000..3160b37d1c --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/delete-key.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeleteKey + +```go + package appwrite-deletekey + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeleteKey method and handle results + var res, err := srv.DeleteKey("[PROJECT_ID]", "[KEY_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/delete-platform.md b/app/sdks/go/docs/examples/Projects/delete-platform.md new file mode 100644 index 0000000000..a9e3f0d3b9 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/delete-platform.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeletePlatform + +```go + package appwrite-deleteplatform + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeletePlatform method and handle results + var res, err := srv.DeletePlatform("[PROJECT_ID]", "[PLATFORM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/delete-project.md b/app/sdks/go/docs/examples/Projects/delete-project.md new file mode 100644 index 0000000000..446f640c0d --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/delete-project.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeleteProject + +```go + package appwrite-deleteproject + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeleteProject method and handle results + var res, err := srv.DeleteProject("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/delete-task.md b/app/sdks/go/docs/examples/Projects/delete-task.md new file mode 100644 index 0000000000..a5275e3b04 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/delete-task.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeleteTask + +```go + package appwrite-deletetask + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeleteTask method and handle results + var res, err := srv.DeleteTask("[PROJECT_ID]", "[TASK_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/delete-webhook.md b/app/sdks/go/docs/examples/Projects/delete-webhook.md new file mode 100644 index 0000000000..377708f6a3 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/delete-webhook.md @@ -0,0 +1,35 @@ +# Projects Examples + +## DeleteWebhook + +```go + package appwrite-deletewebhook + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call DeleteWebhook method and handle results + var res, err := srv.DeleteWebhook("[PROJECT_ID]", "[WEBHOOK_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/get-key.md b/app/sdks/go/docs/examples/Projects/get-key.md new file mode 100644 index 0000000000..abe636ba31 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/get-key.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetKey + +```go + package appwrite-getkey + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetKey method and handle results + var res, err := srv.GetKey("[PROJECT_ID]", "[KEY_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/get-platform.md b/app/sdks/go/docs/examples/Projects/get-platform.md new file mode 100644 index 0000000000..14a9d3bda5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/get-platform.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetPlatform + +```go + package appwrite-getplatform + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetPlatform method and handle results + var res, err := srv.GetPlatform("[PROJECT_ID]", "[PLATFORM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/get-project-usage.md b/app/sdks/go/docs/examples/Projects/get-project-usage.md new file mode 100644 index 0000000000..2bb6bc4dc5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/get-project-usage.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetProjectUsage + +```go + package appwrite-getprojectusage + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetProjectUsage method and handle results + var res, err := srv.GetProjectUsage("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/get-project.md b/app/sdks/go/docs/examples/Projects/get-project.md new file mode 100644 index 0000000000..8e0986f592 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/get-project.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetProject + +```go + package appwrite-getproject + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetProject method and handle results + var res, err := srv.GetProject("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/get-task.md b/app/sdks/go/docs/examples/Projects/get-task.md new file mode 100644 index 0000000000..c6efdf553b --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/get-task.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetTask + +```go + package appwrite-gettask + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetTask method and handle results + var res, err := srv.GetTask("[PROJECT_ID]", "[TASK_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/get-webhook.md b/app/sdks/go/docs/examples/Projects/get-webhook.md new file mode 100644 index 0000000000..b46bf392b5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/get-webhook.md @@ -0,0 +1,35 @@ +# Projects Examples + +## GetWebhook + +```go + package appwrite-getwebhook + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call GetWebhook method and handle results + var res, err := srv.GetWebhook("[PROJECT_ID]", "[WEBHOOK_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/list-keys.md b/app/sdks/go/docs/examples/Projects/list-keys.md new file mode 100644 index 0000000000..e084035bb5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/list-keys.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListKeys + +```go + package appwrite-listkeys + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListKeys method and handle results + var res, err := srv.ListKeys("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/list-platforms.md b/app/sdks/go/docs/examples/Projects/list-platforms.md new file mode 100644 index 0000000000..ecce7449e1 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/list-platforms.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListPlatforms + +```go + package appwrite-listplatforms + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListPlatforms method and handle results + var res, err := srv.ListPlatforms("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/list-projects.md b/app/sdks/go/docs/examples/Projects/list-projects.md new file mode 100644 index 0000000000..f17ea76beb --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/list-projects.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListProjects + +```go + package appwrite-listprojects + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListProjects method and handle results + var res, err := srv.ListProjects() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/list-tasks.md b/app/sdks/go/docs/examples/Projects/list-tasks.md new file mode 100644 index 0000000000..84f5356c34 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/list-tasks.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListTasks + +```go + package appwrite-listtasks + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListTasks method and handle results + var res, err := srv.ListTasks("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/list-webhooks.md b/app/sdks/go/docs/examples/Projects/list-webhooks.md new file mode 100644 index 0000000000..aee6b8da62 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/list-webhooks.md @@ -0,0 +1,35 @@ +# Projects Examples + +## ListWebhooks + +```go + package appwrite-listwebhooks + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call ListWebhooks method and handle results + var res, err := srv.ListWebhooks("[PROJECT_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/update-key.md b/app/sdks/go/docs/examples/Projects/update-key.md new file mode 100644 index 0000000000..205caef8c8 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/update-key.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateKey + +```go + package appwrite-updatekey + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateKey method and handle results + var res, err := srv.UpdateKey("[PROJECT_ID]", "[KEY_ID]", "[NAME]", []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/update-platform.md b/app/sdks/go/docs/examples/Projects/update-platform.md new file mode 100644 index 0000000000..bc966f73a8 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/update-platform.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdatePlatform + +```go + package appwrite-updateplatform + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdatePlatform method and handle results + var res, err := srv.UpdatePlatform("[PROJECT_ID]", "[PLATFORM_ID]", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/update-project-o-auth.md b/app/sdks/go/docs/examples/Projects/update-project-o-auth.md new file mode 100644 index 0000000000..58f23b698b --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/update-project-o-auth.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateProjectOAuth + +```go + package appwrite-updateprojectoauth + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateProjectOAuth method and handle results + var res, err := srv.UpdateProjectOAuth("[PROJECT_ID]", "bitbucket") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/update-project.md b/app/sdks/go/docs/examples/Projects/update-project.md new file mode 100644 index 0000000000..7663ec4c4e --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/update-project.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateProject + +```go + package appwrite-updateproject + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateProject method and handle results + var res, err := srv.UpdateProject("[PROJECT_ID]", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/update-task.md b/app/sdks/go/docs/examples/Projects/update-task.md new file mode 100644 index 0000000000..f977fd5540 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/update-task.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateTask + +```go + package appwrite-updatetask + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateTask method and handle results + var res, err := srv.UpdateTask("[PROJECT_ID]", "[TASK_ID]", "[NAME]", "play", "", 0, "GET", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Projects/update-webhook.md b/app/sdks/go/docs/examples/Projects/update-webhook.md new file mode 100644 index 0000000000..0120707ad5 --- /dev/null +++ b/app/sdks/go/docs/examples/Projects/update-webhook.md @@ -0,0 +1,35 @@ +# Projects Examples + +## UpdateWebhook + +```go + package appwrite-updatewebhook + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Projects service passing Client + var srv := appwrite.Projects{ + client: &clt + } + + // Call UpdateWebhook method and handle results + var res, err := srv.UpdateWebhook("[PROJECT_ID]", "[WEBHOOK_ID]", "[NAME]", [], "[URL]", 0) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/CreateFile.md b/app/sdks/go/docs/examples/Storage/CreateFile.md new file mode 100644 index 0000000000..2b33879f54 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/CreateFile.md @@ -0,0 +1,35 @@ +# Storage Examples + +## CreateFile + +```go + package appwrite-createfile + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call CreateFile method and handle results + var res, err := srv.CreateFile(file) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/DeleteFile.md b/app/sdks/go/docs/examples/Storage/DeleteFile.md new file mode 100644 index 0000000000..c6ecabdf99 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/DeleteFile.md @@ -0,0 +1,35 @@ +# Storage Examples + +## DeleteFile + +```go + package appwrite-deletefile + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call DeleteFile method and handle results + var res, err := srv.DeleteFile("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/GetFile.md b/app/sdks/go/docs/examples/Storage/GetFile.md new file mode 100644 index 0000000000..0e7bff0952 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/GetFile.md @@ -0,0 +1,35 @@ +# Storage Examples + +## GetFile + +```go + package appwrite-getfile + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call GetFile method and handle results + var res, err := srv.GetFile("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/GetFileDownload.md b/app/sdks/go/docs/examples/Storage/GetFileDownload.md new file mode 100644 index 0000000000..4513337425 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/GetFileDownload.md @@ -0,0 +1,35 @@ +# Storage Examples + +## GetFileDownload + +```go + package appwrite-getfiledownload + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call GetFileDownload method and handle results + var res, err := srv.GetFileDownload("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/GetFilePreview.md b/app/sdks/go/docs/examples/Storage/GetFilePreview.md new file mode 100644 index 0000000000..a30a271d93 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/GetFilePreview.md @@ -0,0 +1,35 @@ +# Storage Examples + +## GetFilePreview + +```go + package appwrite-getfilepreview + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call GetFilePreview method and handle results + var res, err := srv.GetFilePreview("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/GetFileView.md b/app/sdks/go/docs/examples/Storage/GetFileView.md new file mode 100644 index 0000000000..7782cb3b1e --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/GetFileView.md @@ -0,0 +1,35 @@ +# Storage Examples + +## GetFileView + +```go + package appwrite-getfileview + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call GetFileView method and handle results + var res, err := srv.GetFileView("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/ListFiles.md b/app/sdks/go/docs/examples/Storage/ListFiles.md new file mode 100644 index 0000000000..7c5d800f6e --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/ListFiles.md @@ -0,0 +1,35 @@ +# Storage Examples + +## ListFiles + +```go + package appwrite-listfiles + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call ListFiles method and handle results + var res, err := srv.ListFiles() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/UpdateFile.md b/app/sdks/go/docs/examples/Storage/UpdateFile.md new file mode 100644 index 0000000000..157d44b7a4 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/UpdateFile.md @@ -0,0 +1,35 @@ +# Storage Examples + +## UpdateFile + +```go + package appwrite-updatefile + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call UpdateFile method and handle results + var res, err := srv.UpdateFile("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/create-file.md b/app/sdks/go/docs/examples/Storage/create-file.md new file mode 100644 index 0000000000..1d0bf35af8 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/create-file.md @@ -0,0 +1,35 @@ +# Storage Examples + +## CreateFile + +```go + package appwrite-createfile + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call CreateFile method and handle results + var res, err := srv.CreateFile(file, [], []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/delete-file.md b/app/sdks/go/docs/examples/Storage/delete-file.md new file mode 100644 index 0000000000..c6ecabdf99 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/delete-file.md @@ -0,0 +1,35 @@ +# Storage Examples + +## DeleteFile + +```go + package appwrite-deletefile + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call DeleteFile method and handle results + var res, err := srv.DeleteFile("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/get-file-download.md b/app/sdks/go/docs/examples/Storage/get-file-download.md new file mode 100644 index 0000000000..4513337425 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/get-file-download.md @@ -0,0 +1,35 @@ +# Storage Examples + +## GetFileDownload + +```go + package appwrite-getfiledownload + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call GetFileDownload method and handle results + var res, err := srv.GetFileDownload("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/get-file-preview.md b/app/sdks/go/docs/examples/Storage/get-file-preview.md new file mode 100644 index 0000000000..a30a271d93 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/get-file-preview.md @@ -0,0 +1,35 @@ +# Storage Examples + +## GetFilePreview + +```go + package appwrite-getfilepreview + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call GetFilePreview method and handle results + var res, err := srv.GetFilePreview("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/get-file-view.md b/app/sdks/go/docs/examples/Storage/get-file-view.md new file mode 100644 index 0000000000..7782cb3b1e --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/get-file-view.md @@ -0,0 +1,35 @@ +# Storage Examples + +## GetFileView + +```go + package appwrite-getfileview + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call GetFileView method and handle results + var res, err := srv.GetFileView("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/get-file.md b/app/sdks/go/docs/examples/Storage/get-file.md new file mode 100644 index 0000000000..0e7bff0952 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/get-file.md @@ -0,0 +1,35 @@ +# Storage Examples + +## GetFile + +```go + package appwrite-getfile + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call GetFile method and handle results + var res, err := srv.GetFile("[FILE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/list-files.md b/app/sdks/go/docs/examples/Storage/list-files.md new file mode 100644 index 0000000000..7c5d800f6e --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/list-files.md @@ -0,0 +1,35 @@ +# Storage Examples + +## ListFiles + +```go + package appwrite-listfiles + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call ListFiles method and handle results + var res, err := srv.ListFiles() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Storage/update-file.md b/app/sdks/go/docs/examples/Storage/update-file.md new file mode 100644 index 0000000000..01b44bc620 --- /dev/null +++ b/app/sdks/go/docs/examples/Storage/update-file.md @@ -0,0 +1,35 @@ +# Storage Examples + +## UpdateFile + +```go + package appwrite-updatefile + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Storage service passing Client + var srv := appwrite.Storage{ + client: &clt + } + + // Call UpdateFile method and handle results + var res, err := srv.UpdateFile("[FILE_ID]", [], []) + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/CreateTeam.md b/app/sdks/go/docs/examples/Teams/CreateTeam.md new file mode 100644 index 0000000000..7922f904f8 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/CreateTeam.md @@ -0,0 +1,35 @@ +# Teams Examples + +## CreateTeam + +```go + package appwrite-createteam + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call CreateTeam method and handle results + var res, err := srv.CreateTeam("[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/CreateTeamMembership.md b/app/sdks/go/docs/examples/Teams/CreateTeamMembership.md new file mode 100644 index 0000000000..9d74105ec5 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/CreateTeamMembership.md @@ -0,0 +1,35 @@ +# Teams Examples + +## CreateTeamMembership + +```go + package appwrite-createteammembership + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call CreateTeamMembership method and handle results + var res, err := srv.CreateTeamMembership("[TEAM_ID]", "email@example.com", [], "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/CreateTeamMembershipResend.md b/app/sdks/go/docs/examples/Teams/CreateTeamMembershipResend.md new file mode 100644 index 0000000000..9925df6e95 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/CreateTeamMembershipResend.md @@ -0,0 +1,35 @@ +# Teams Examples + +## CreateTeamMembershipResend + +```go + package appwrite-createteammembershipresend + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call CreateTeamMembershipResend method and handle results + var res, err := srv.CreateTeamMembershipResend("[TEAM_ID]", "[INVITE_ID]", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/DeleteTeam.md b/app/sdks/go/docs/examples/Teams/DeleteTeam.md new file mode 100644 index 0000000000..fa15cce6d6 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/DeleteTeam.md @@ -0,0 +1,35 @@ +# Teams Examples + +## DeleteTeam + +```go + package appwrite-deleteteam + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call DeleteTeam method and handle results + var res, err := srv.DeleteTeam("[TEAM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/DeleteTeamMembership.md b/app/sdks/go/docs/examples/Teams/DeleteTeamMembership.md new file mode 100644 index 0000000000..80cdc936b0 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/DeleteTeamMembership.md @@ -0,0 +1,35 @@ +# Teams Examples + +## DeleteTeamMembership + +```go + package appwrite-deleteteammembership + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call DeleteTeamMembership method and handle results + var res, err := srv.DeleteTeamMembership("[TEAM_ID]", "[INVITE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/GetTeam.md b/app/sdks/go/docs/examples/Teams/GetTeam.md new file mode 100644 index 0000000000..8418da4d14 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/GetTeam.md @@ -0,0 +1,35 @@ +# Teams Examples + +## GetTeam + +```go + package appwrite-getteam + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call GetTeam method and handle results + var res, err := srv.GetTeam("[TEAM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/GetTeamMembers.md b/app/sdks/go/docs/examples/Teams/GetTeamMembers.md new file mode 100644 index 0000000000..35dd4aa047 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/GetTeamMembers.md @@ -0,0 +1,35 @@ +# Teams Examples + +## GetTeamMembers + +```go + package appwrite-getteammembers + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call GetTeamMembers method and handle results + var res, err := srv.GetTeamMembers("[TEAM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/ListTeams.md b/app/sdks/go/docs/examples/Teams/ListTeams.md new file mode 100644 index 0000000000..089daf4697 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/ListTeams.md @@ -0,0 +1,35 @@ +# Teams Examples + +## ListTeams + +```go + package appwrite-listteams + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call ListTeams method and handle results + var res, err := srv.ListTeams() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/UpdateTeam.md b/app/sdks/go/docs/examples/Teams/UpdateTeam.md new file mode 100644 index 0000000000..d32a67800a --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/UpdateTeam.md @@ -0,0 +1,35 @@ +# Teams Examples + +## UpdateTeam + +```go + package appwrite-updateteam + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call UpdateTeam method and handle results + var res, err := srv.UpdateTeam("[TEAM_ID]", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/UpdateTeamMembershipStatus.md b/app/sdks/go/docs/examples/Teams/UpdateTeamMembershipStatus.md new file mode 100644 index 0000000000..7d4346d2a3 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/UpdateTeamMembershipStatus.md @@ -0,0 +1,35 @@ +# Teams Examples + +## UpdateTeamMembershipStatus + +```go + package appwrite-updateteammembershipstatus + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call UpdateTeamMembershipStatus method and handle results + var res, err := srv.UpdateTeamMembershipStatus("[TEAM_ID]", "[INVITE_ID]", "[USER_ID]", "[SECRET]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/create-team-membership-resend.md b/app/sdks/go/docs/examples/Teams/create-team-membership-resend.md new file mode 100644 index 0000000000..9925df6e95 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/create-team-membership-resend.md @@ -0,0 +1,35 @@ +# Teams Examples + +## CreateTeamMembershipResend + +```go + package appwrite-createteammembershipresend + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call CreateTeamMembershipResend method and handle results + var res, err := srv.CreateTeamMembershipResend("[TEAM_ID]", "[INVITE_ID]", "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/create-team-membership.md b/app/sdks/go/docs/examples/Teams/create-team-membership.md new file mode 100644 index 0000000000..9d74105ec5 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/create-team-membership.md @@ -0,0 +1,35 @@ +# Teams Examples + +## CreateTeamMembership + +```go + package appwrite-createteammembership + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call CreateTeamMembership method and handle results + var res, err := srv.CreateTeamMembership("[TEAM_ID]", "email@example.com", [], "https://example.com") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/create-team.md b/app/sdks/go/docs/examples/Teams/create-team.md new file mode 100644 index 0000000000..7922f904f8 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/create-team.md @@ -0,0 +1,35 @@ +# Teams Examples + +## CreateTeam + +```go + package appwrite-createteam + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call CreateTeam method and handle results + var res, err := srv.CreateTeam("[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/delete-team-membership.md b/app/sdks/go/docs/examples/Teams/delete-team-membership.md new file mode 100644 index 0000000000..80cdc936b0 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/delete-team-membership.md @@ -0,0 +1,35 @@ +# Teams Examples + +## DeleteTeamMembership + +```go + package appwrite-deleteteammembership + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call DeleteTeamMembership method and handle results + var res, err := srv.DeleteTeamMembership("[TEAM_ID]", "[INVITE_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/delete-team.md b/app/sdks/go/docs/examples/Teams/delete-team.md new file mode 100644 index 0000000000..fa15cce6d6 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/delete-team.md @@ -0,0 +1,35 @@ +# Teams Examples + +## DeleteTeam + +```go + package appwrite-deleteteam + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call DeleteTeam method and handle results + var res, err := srv.DeleteTeam("[TEAM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/get-team-members.md b/app/sdks/go/docs/examples/Teams/get-team-members.md new file mode 100644 index 0000000000..35dd4aa047 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/get-team-members.md @@ -0,0 +1,35 @@ +# Teams Examples + +## GetTeamMembers + +```go + package appwrite-getteammembers + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call GetTeamMembers method and handle results + var res, err := srv.GetTeamMembers("[TEAM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/get-team.md b/app/sdks/go/docs/examples/Teams/get-team.md new file mode 100644 index 0000000000..8418da4d14 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/get-team.md @@ -0,0 +1,35 @@ +# Teams Examples + +## GetTeam + +```go + package appwrite-getteam + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call GetTeam method and handle results + var res, err := srv.GetTeam("[TEAM_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/list-teams.md b/app/sdks/go/docs/examples/Teams/list-teams.md new file mode 100644 index 0000000000..089daf4697 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/list-teams.md @@ -0,0 +1,35 @@ +# Teams Examples + +## ListTeams + +```go + package appwrite-listteams + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call ListTeams method and handle results + var res, err := srv.ListTeams() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/update-team-membership-status.md b/app/sdks/go/docs/examples/Teams/update-team-membership-status.md new file mode 100644 index 0000000000..7d4346d2a3 --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/update-team-membership-status.md @@ -0,0 +1,35 @@ +# Teams Examples + +## UpdateTeamMembershipStatus + +```go + package appwrite-updateteammembershipstatus + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call UpdateTeamMembershipStatus method and handle results + var res, err := srv.UpdateTeamMembershipStatus("[TEAM_ID]", "[INVITE_ID]", "[USER_ID]", "[SECRET]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Teams/update-team.md b/app/sdks/go/docs/examples/Teams/update-team.md new file mode 100644 index 0000000000..d32a67800a --- /dev/null +++ b/app/sdks/go/docs/examples/Teams/update-team.md @@ -0,0 +1,35 @@ +# Teams Examples + +## UpdateTeam + +```go + package appwrite-updateteam + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Teams service passing Client + var srv := appwrite.Teams{ + client: &clt + } + + // Call UpdateTeam method and handle results + var res, err := srv.UpdateTeam("[TEAM_ID]", "[NAME]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/CreateUser.md b/app/sdks/go/docs/examples/Users/CreateUser.md new file mode 100644 index 0000000000..b790840277 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/CreateUser.md @@ -0,0 +1,35 @@ +# Users Examples + +## CreateUser + +```go + package appwrite-createuser + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call CreateUser method and handle results + var res, err := srv.CreateUser("email@example.com", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/DeleteUserSession.md b/app/sdks/go/docs/examples/Users/DeleteUserSession.md new file mode 100644 index 0000000000..6bc880b88a --- /dev/null +++ b/app/sdks/go/docs/examples/Users/DeleteUserSession.md @@ -0,0 +1,35 @@ +# Users Examples + +## DeleteUserSession + +```go + package appwrite-deleteusersession + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call DeleteUserSession method and handle results + var res, err := srv.DeleteUserSession("[USER_ID]", "[SESSION_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/DeleteUserSessions.md b/app/sdks/go/docs/examples/Users/DeleteUserSessions.md new file mode 100644 index 0000000000..8d36d951d5 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/DeleteUserSessions.md @@ -0,0 +1,35 @@ +# Users Examples + +## DeleteUserSessions + +```go + package appwrite-deleteusersessions + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call DeleteUserSessions method and handle results + var res, err := srv.DeleteUserSessions("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/GetUser.md b/app/sdks/go/docs/examples/Users/GetUser.md new file mode 100644 index 0000000000..d61430718b --- /dev/null +++ b/app/sdks/go/docs/examples/Users/GetUser.md @@ -0,0 +1,35 @@ +# Users Examples + +## GetUser + +```go + package appwrite-getuser + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call GetUser method and handle results + var res, err := srv.GetUser("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/GetUserLogs.md b/app/sdks/go/docs/examples/Users/GetUserLogs.md new file mode 100644 index 0000000000..227d123413 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/GetUserLogs.md @@ -0,0 +1,35 @@ +# Users Examples + +## GetUserLogs + +```go + package appwrite-getuserlogs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call GetUserLogs method and handle results + var res, err := srv.GetUserLogs("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/GetUserPrefs.md b/app/sdks/go/docs/examples/Users/GetUserPrefs.md new file mode 100644 index 0000000000..fc9515a4af --- /dev/null +++ b/app/sdks/go/docs/examples/Users/GetUserPrefs.md @@ -0,0 +1,35 @@ +# Users Examples + +## GetUserPrefs + +```go + package appwrite-getuserprefs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call GetUserPrefs method and handle results + var res, err := srv.GetUserPrefs("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/GetUserSessions.md b/app/sdks/go/docs/examples/Users/GetUserSessions.md new file mode 100644 index 0000000000..99dd8b3fff --- /dev/null +++ b/app/sdks/go/docs/examples/Users/GetUserSessions.md @@ -0,0 +1,35 @@ +# Users Examples + +## GetUserSessions + +```go + package appwrite-getusersessions + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call GetUserSessions method and handle results + var res, err := srv.GetUserSessions("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/ListUsers.md b/app/sdks/go/docs/examples/Users/ListUsers.md new file mode 100644 index 0000000000..8332347ba8 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/ListUsers.md @@ -0,0 +1,35 @@ +# Users Examples + +## ListUsers + +```go + package appwrite-listusers + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call ListUsers method and handle results + var res, err := srv.ListUsers() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/UpdateUserPrefs.md b/app/sdks/go/docs/examples/Users/UpdateUserPrefs.md new file mode 100644 index 0000000000..50614f238e --- /dev/null +++ b/app/sdks/go/docs/examples/Users/UpdateUserPrefs.md @@ -0,0 +1,35 @@ +# Users Examples + +## UpdateUserPrefs + +```go + package appwrite-updateuserprefs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call UpdateUserPrefs method and handle results + var res, err := srv.UpdateUserPrefs("[USER_ID]", "{}") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/UpdateUserStatus.md b/app/sdks/go/docs/examples/Users/UpdateUserStatus.md new file mode 100644 index 0000000000..d5570ca041 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/UpdateUserStatus.md @@ -0,0 +1,35 @@ +# Users Examples + +## UpdateUserStatus + +```go + package appwrite-updateuserstatus + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call UpdateUserStatus method and handle results + var res, err := srv.UpdateUserStatus("[USER_ID]", "1") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/create-user.md b/app/sdks/go/docs/examples/Users/create-user.md new file mode 100644 index 0000000000..b790840277 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/create-user.md @@ -0,0 +1,35 @@ +# Users Examples + +## CreateUser + +```go + package appwrite-createuser + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call CreateUser method and handle results + var res, err := srv.CreateUser("email@example.com", "password") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/delete-user-session.md b/app/sdks/go/docs/examples/Users/delete-user-session.md new file mode 100644 index 0000000000..6bc880b88a --- /dev/null +++ b/app/sdks/go/docs/examples/Users/delete-user-session.md @@ -0,0 +1,35 @@ +# Users Examples + +## DeleteUserSession + +```go + package appwrite-deleteusersession + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call DeleteUserSession method and handle results + var res, err := srv.DeleteUserSession("[USER_ID]", "[SESSION_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/delete-user-sessions.md b/app/sdks/go/docs/examples/Users/delete-user-sessions.md new file mode 100644 index 0000000000..8d36d951d5 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/delete-user-sessions.md @@ -0,0 +1,35 @@ +# Users Examples + +## DeleteUserSessions + +```go + package appwrite-deleteusersessions + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call DeleteUserSessions method and handle results + var res, err := srv.DeleteUserSessions("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/get-user-logs.md b/app/sdks/go/docs/examples/Users/get-user-logs.md new file mode 100644 index 0000000000..227d123413 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/get-user-logs.md @@ -0,0 +1,35 @@ +# Users Examples + +## GetUserLogs + +```go + package appwrite-getuserlogs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call GetUserLogs method and handle results + var res, err := srv.GetUserLogs("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/get-user-prefs.md b/app/sdks/go/docs/examples/Users/get-user-prefs.md new file mode 100644 index 0000000000..fc9515a4af --- /dev/null +++ b/app/sdks/go/docs/examples/Users/get-user-prefs.md @@ -0,0 +1,35 @@ +# Users Examples + +## GetUserPrefs + +```go + package appwrite-getuserprefs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call GetUserPrefs method and handle results + var res, err := srv.GetUserPrefs("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/get-user-sessions.md b/app/sdks/go/docs/examples/Users/get-user-sessions.md new file mode 100644 index 0000000000..99dd8b3fff --- /dev/null +++ b/app/sdks/go/docs/examples/Users/get-user-sessions.md @@ -0,0 +1,35 @@ +# Users Examples + +## GetUserSessions + +```go + package appwrite-getusersessions + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call GetUserSessions method and handle results + var res, err := srv.GetUserSessions("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/get-user.md b/app/sdks/go/docs/examples/Users/get-user.md new file mode 100644 index 0000000000..d61430718b --- /dev/null +++ b/app/sdks/go/docs/examples/Users/get-user.md @@ -0,0 +1,35 @@ +# Users Examples + +## GetUser + +```go + package appwrite-getuser + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call GetUser method and handle results + var res, err := srv.GetUser("[USER_ID]") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/list-users.md b/app/sdks/go/docs/examples/Users/list-users.md new file mode 100644 index 0000000000..8332347ba8 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/list-users.md @@ -0,0 +1,35 @@ +# Users Examples + +## ListUsers + +```go + package appwrite-listusers + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call ListUsers method and handle results + var res, err := srv.ListUsers() + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/update-user-prefs.md b/app/sdks/go/docs/examples/Users/update-user-prefs.md new file mode 100644 index 0000000000..50614f238e --- /dev/null +++ b/app/sdks/go/docs/examples/Users/update-user-prefs.md @@ -0,0 +1,35 @@ +# Users Examples + +## UpdateUserPrefs + +```go + package appwrite-updateuserprefs + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call UpdateUserPrefs method and handle results + var res, err := srv.UpdateUserPrefs("[USER_ID]", "{}") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/docs/examples/Users/update-user-status.md b/app/sdks/go/docs/examples/Users/update-user-status.md new file mode 100644 index 0000000000..d5570ca041 --- /dev/null +++ b/app/sdks/go/docs/examples/Users/update-user-status.md @@ -0,0 +1,35 @@ +# Users Examples + +## UpdateUserStatus + +```go + package appwrite-updateuserstatus + + import ( + "fmt" + "os" + "github.com/appwrite/sdk-for-go" + ) + + func main() { + // Create a Client + var clt := appwrite.Client{} + + // Set Client required headers + clt.SetProject("") + clt.SetKey("") + + // Create a new Users service passing Client + var srv := appwrite.Users{ + client: &clt + } + + // Call UpdateUserStatus method and handle results + var res, err := srv.UpdateUserStatus("[USER_ID]", "1") + if err != nil { + panic(err) + } + + fmt.Println(res) + } +``` \ No newline at end of file diff --git a/app/sdks/go/locale.go b/app/sdks/go/locale.go new file mode 100644 index 0000000000..fa66971182 --- /dev/null +++ b/app/sdks/go/locale.go @@ -0,0 +1,80 @@ +package appwrite + +import ( +) + +// Locale service +type Locale struct { + client *Client +} + +// GetLocale 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. +func (srv *Locale) GetLocale() (map[string]interface{}, error) { + path := "/locale" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetContinents list of all continents. You can use the locale header to get +// the data in a supported language. +func (srv *Locale) GetContinents() (map[string]interface{}, error) { + path := "/locale/continents" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetCountries list of all countries. You can use the locale header to get +// the data in a supported language. +func (srv *Locale) GetCountries() (map[string]interface{}, error) { + path := "/locale/countries" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetCountriesEU 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. UK +// brexit date is currently set to 2019-10-31 and will be updated if and when +// needed. +func (srv *Locale) GetCountriesEU() (map[string]interface{}, error) { + path := "/locale/countries/eu" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetCountriesPhones list of all countries phone codes. You can use the +// locale header to get the data in a supported language. +func (srv *Locale) GetCountriesPhones() (map[string]interface{}, error) { + path := "/locale/countries/phones" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetCurrencies list of all currencies, including currency symol, 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. +func (srv *Locale) GetCurrencies() (map[string]interface{}, error) { + path := "/locale/currencies" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} diff --git a/app/sdks/go/main.go b/app/sdks/go/main.go new file mode 100644 index 0000000000..13df7fc1b5 --- /dev/null +++ b/app/sdks/go/main.go @@ -0,0 +1,6 @@ +package appwrite + +// NewClient initializes a new Appwrite client +func NewClient() Client { + return Client{} +} diff --git a/app/sdks/go/projects.go b/app/sdks/go/projects.go new file mode 100644 index 0000000000..d3a425a52c --- /dev/null +++ b/app/sdks/go/projects.go @@ -0,0 +1,372 @@ +package appwrite + +import ( + "strings" +) + +// Projects service +type Projects struct { + client *Client +} + +// ListProjects +func (srv *Projects) ListProjects() (map[string]interface{}, error) { + path := "/projects" + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateProject +func (srv *Projects) CreateProject(Name string, TeamId string, Description string, Logo string, Url string, LegalName string, LegalCountry string, LegalState string, LegalCity string, LegalAddress string, LegalTaxId string) (map[string]interface{}, error) { + path := "/projects" + + params := map[string]interface{}{ + "name": Name, + "teamId": TeamId, + "description": Description, + "logo": Logo, + "url": Url, + "legalName": LegalName, + "legalCountry": LegalCountry, + "legalState": LegalState, + "legalCity": LegalCity, + "legalAddress": LegalAddress, + "legalTaxId": LegalTaxId, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetProject +func (srv *Projects) GetProject(ProjectId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateProject +func (srv *Projects) UpdateProject(ProjectId string, Name string, Description string, Logo string, Url string, LegalName string, LegalCountry string, LegalState string, LegalCity string, LegalAddress string, LegalTaxId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}") + + params := map[string]interface{}{ + "name": Name, + "description": Description, + "logo": Logo, + "url": Url, + "legalName": LegalName, + "legalCountry": LegalCountry, + "legalState": LegalState, + "legalCity": LegalCity, + "legalAddress": LegalAddress, + "legalTaxId": LegalTaxId, + } + + return srv.client.Call("PATCH", path, nil, params) +} + +// DeleteProject +func (srv *Projects) DeleteProject(ProjectId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// ListKeys +func (srv *Projects) ListKeys(ProjectId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/keys") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateKey +func (srv *Projects) CreateKey(ProjectId string, Name string, Scopes []interface{}) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/keys") + + params := map[string]interface{}{ + "name": Name, + "scopes": Scopes, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetKey +func (srv *Projects) GetKey(ProjectId string, KeyId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{keyId}", KeyId) + path := r.Replace("/projects/{projectId}/keys/{keyId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateKey +func (srv *Projects) UpdateKey(ProjectId string, KeyId string, Name string, Scopes []interface{}) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{keyId}", KeyId) + path := r.Replace("/projects/{projectId}/keys/{keyId}") + + params := map[string]interface{}{ + "name": Name, + "scopes": Scopes, + } + + return srv.client.Call("PUT", path, nil, params) +} + +// DeleteKey +func (srv *Projects) DeleteKey(ProjectId string, KeyId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{keyId}", KeyId) + path := r.Replace("/projects/{projectId}/keys/{keyId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// UpdateProjectOAuth +func (srv *Projects) UpdateProjectOAuth(ProjectId string, Provider string, AppId string, Secret string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/oauth") + + params := map[string]interface{}{ + "provider": Provider, + "appId": AppId, + "secret": Secret, + } + + return srv.client.Call("PATCH", path, nil, params) +} + +// ListPlatforms +func (srv *Projects) ListPlatforms(ProjectId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/platforms") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreatePlatform +func (srv *Projects) CreatePlatform(ProjectId string, Type string, Name string, Key string, Store string, Url string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/platforms") + + params := map[string]interface{}{ + "type": Type, + "name": Name, + "key": Key, + "store": Store, + "url": Url, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetPlatform +func (srv *Projects) GetPlatform(ProjectId string, PlatformId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{platformId}", PlatformId) + path := r.Replace("/projects/{projectId}/platforms/{platformId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdatePlatform +func (srv *Projects) UpdatePlatform(ProjectId string, PlatformId string, Name string, Key string, Store string, Url string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{platformId}", PlatformId) + path := r.Replace("/projects/{projectId}/platforms/{platformId}") + + params := map[string]interface{}{ + "name": Name, + "key": Key, + "store": Store, + "url": Url, + } + + return srv.client.Call("PUT", path, nil, params) +} + +// DeletePlatform +func (srv *Projects) DeletePlatform(ProjectId string, PlatformId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{platformId}", PlatformId) + path := r.Replace("/projects/{projectId}/platforms/{platformId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// ListTasks +func (srv *Projects) ListTasks(ProjectId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/tasks") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateTask +func (srv *Projects) CreateTask(ProjectId string, Name string, Status string, Schedule string, Security int, HttpMethod string, HttpUrl string, HttpHeaders []interface{}, HttpUser string, HttpPass string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/tasks") + + params := map[string]interface{}{ + "name": Name, + "status": Status, + "schedule": Schedule, + "security": Security, + "httpMethod": HttpMethod, + "httpUrl": HttpUrl, + "httpHeaders": HttpHeaders, + "httpUser": HttpUser, + "httpPass": HttpPass, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetTask +func (srv *Projects) GetTask(ProjectId string, TaskId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{taskId}", TaskId) + path := r.Replace("/projects/{projectId}/tasks/{taskId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateTask +func (srv *Projects) UpdateTask(ProjectId string, TaskId string, Name string, Status string, Schedule string, Security int, HttpMethod string, HttpUrl string, HttpHeaders []interface{}, HttpUser string, HttpPass string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{taskId}", TaskId) + path := r.Replace("/projects/{projectId}/tasks/{taskId}") + + params := map[string]interface{}{ + "name": Name, + "status": Status, + "schedule": Schedule, + "security": Security, + "httpMethod": HttpMethod, + "httpUrl": HttpUrl, + "httpHeaders": HttpHeaders, + "httpUser": HttpUser, + "httpPass": HttpPass, + } + + return srv.client.Call("PUT", path, nil, params) +} + +// DeleteTask +func (srv *Projects) DeleteTask(ProjectId string, TaskId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{taskId}", TaskId) + path := r.Replace("/projects/{projectId}/tasks/{taskId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// GetProjectUsage +func (srv *Projects) GetProjectUsage(ProjectId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/usage") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// ListWebhooks +func (srv *Projects) ListWebhooks(ProjectId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/webhooks") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateWebhook +func (srv *Projects) CreateWebhook(ProjectId string, Name string, Events []interface{}, Url string, Security int, HttpUser string, HttpPass string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId) + path := r.Replace("/projects/{projectId}/webhooks") + + params := map[string]interface{}{ + "name": Name, + "events": Events, + "url": Url, + "security": Security, + "httpUser": HttpUser, + "httpPass": HttpPass, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetWebhook +func (srv *Projects) GetWebhook(ProjectId string, WebhookId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{webhookId}", WebhookId) + path := r.Replace("/projects/{projectId}/webhooks/{webhookId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateWebhook +func (srv *Projects) UpdateWebhook(ProjectId string, WebhookId string, Name string, Events []interface{}, Url string, Security int, HttpUser string, HttpPass string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{webhookId}", WebhookId) + path := r.Replace("/projects/{projectId}/webhooks/{webhookId}") + + params := map[string]interface{}{ + "name": Name, + "events": Events, + "url": Url, + "security": Security, + "httpUser": HttpUser, + "httpPass": HttpPass, + } + + return srv.client.Call("PUT", path, nil, params) +} + +// DeleteWebhook +func (srv *Projects) DeleteWebhook(ProjectId string, WebhookId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{projectId}", ProjectId, "{webhookId}", WebhookId) + path := r.Replace("/projects/{projectId}/webhooks/{webhookId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} diff --git a/app/sdks/go/storage.go b/app/sdks/go/storage.go new file mode 100644 index 0000000000..b942230b32 --- /dev/null +++ b/app/sdks/go/storage.go @@ -0,0 +1,128 @@ +package appwrite + +import ( + "strings" +) + +// Storage service +type Storage struct { + client *Client +} + +// ListFiles get a list of all the user files. You can use the query params to +// filter your results. On admin mode, this endpoint will return a list of all +// of the project files. [Learn more about different API modes](/docs/modes). +func (srv *Storage) ListFiles(Search string, Limit int, Offset int, OrderType string) (map[string]interface{}, error) { + path := "/storage/files" + + params := map[string]interface{}{ + "search": Search, + "limit": Limit, + "offset": Offset, + "orderType": OrderType, + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateFile create a new file. The user who creates the file will +// automatically be assigned to read and write access unless he has passed +// custom values for read and write arguments. +func (srv *Storage) CreateFile(Files string, Read []interface{}, Write []interface{}, FolderId string) (map[string]interface{}, error) { + path := "/storage/files" + + params := map[string]interface{}{ + "files": Files, + "read": Read, + "write": Write, + "folderId": FolderId, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetFile get file by its unique ID. This endpoint response returns a JSON +// object with the file metadata. +func (srv *Storage) GetFile(FileId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{fileId}", FileId) + path := r.Replace("/storage/files/{fileId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateFile update file by its unique ID. Only users with write permissions +// have access to update this resource. +func (srv *Storage) UpdateFile(FileId string, Read []interface{}, Write []interface{}, FolderId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{fileId}", FileId) + path := r.Replace("/storage/files/{fileId}") + + params := map[string]interface{}{ + "read": Read, + "write": Write, + "folderId": FolderId, + } + + return srv.client.Call("PUT", path, nil, params) +} + +// DeleteFile delete a file by its unique ID. Only users with write +// permissions have access to delete this resource. +func (srv *Storage) DeleteFile(FileId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{fileId}", FileId) + path := r.Replace("/storage/files/{fileId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// GetFileDownload get 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. +func (srv *Storage) GetFileDownload(FileId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{fileId}", FileId) + path := r.Replace("/storage/files/{fileId}/download") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetFilePreview get 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 file icon image. You can +// also pass query string arguments for cutting and resizing your preview +// image. +func (srv *Storage) GetFilePreview(FileId string, Width int, Height int, Quality int, Background string, Output string) (map[string]interface{}, error) { + r := strings.NewReplacer("{fileId}", FileId) + path := r.Replace("/storage/files/{fileId}/preview") + + params := map[string]interface{}{ + "width": Width, + "height": Height, + "quality": Quality, + "background": Background, + "output": Output, + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetFileView get file content by its unique ID. This endpoint is similar to +// the download method but returns with no 'Content-Disposition: attachment' +// header. +func (srv *Storage) GetFileView(FileId string, As string) (map[string]interface{}, error) { + r := strings.NewReplacer("{fileId}", FileId) + path := r.Replace("/storage/files/{fileId}/view") + + params := map[string]interface{}{ + "as": As, + } + + return srv.client.Call("GET", path, nil, params) +} diff --git a/app/sdks/go/teams.go b/app/sdks/go/teams.go new file mode 100644 index 0000000000..295956720c --- /dev/null +++ b/app/sdks/go/teams.go @@ -0,0 +1,173 @@ +package appwrite + +import ( + "strings" +) + +// Teams service +type Teams struct { + client *Client +} + +// ListTeams get a list of all the current user teams. You can use the query +// params to filter your results. On admin mode, this endpoint will return a +// list of all of the project teams. [Learn more about different API +// modes](/docs/modes). +func (srv *Teams) ListTeams(Search string, Limit int, Offset int, OrderType string) (map[string]interface{}, error) { + path := "/teams" + + params := map[string]interface{}{ + "search": Search, + "limit": Limit, + "offset": Offset, + "orderType": OrderType, + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateTeam create a new team. The user who creates the team will +// automatically be assigned as the owner of the team. The team owner can +// invite new members, who will be able add new owners and update or delete +// the team from your project. +func (srv *Teams) CreateTeam(Name string, Roles []interface{}) (map[string]interface{}, error) { + path := "/teams" + + params := map[string]interface{}{ + "name": Name, + "roles": Roles, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetTeam get team by its unique ID. All team members have read access for +// this resource. +func (srv *Teams) GetTeam(TeamId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{teamId}", TeamId) + path := r.Replace("/teams/{teamId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateTeam update team by its unique ID. Only team owners have write access +// for this resource. +func (srv *Teams) UpdateTeam(TeamId string, Name string) (map[string]interface{}, error) { + r := strings.NewReplacer("{teamId}", TeamId) + path := r.Replace("/teams/{teamId}") + + params := map[string]interface{}{ + "name": Name, + } + + return srv.client.Call("PUT", path, nil, params) +} + +// DeleteTeam delete team by its unique ID. Only team owners have write access +// for this resource. +func (srv *Teams) DeleteTeam(TeamId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{teamId}", TeamId) + path := r.Replace("/teams/{teamId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// GetTeamMembers get team members by the team unique ID. All team members +// have read access for this list of resources. +func (srv *Teams) GetTeamMembers(TeamId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{teamId}", TeamId) + path := r.Replace("/teams/{teamId}/members") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateTeamMembership use this endpoint to invite a new member to your team. +// An email with a link to join the team will be sent to the new member email +// address. If member doesn't exists in the project it will be automatically +// created. +// +// Use the redirect parameter to redirect the user from the invitation email +// back to your app. When the user is redirected, use the +// /teams/{teamId}/memberships/{inviteId}/status endpoint to finally join the +// user to the team. +// +// Please notice that in order to avoid a [Redirect +// Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) +// the only valid redirect URL's are the once from domains you have set when +// added your platforms in the console interface. +func (srv *Teams) CreateTeamMembership(TeamId string, Email string, Roles []interface{}, Redirect string, Name string) (map[string]interface{}, error) { + r := strings.NewReplacer("{teamId}", TeamId) + path := r.Replace("/teams/{teamId}/memberships") + + params := map[string]interface{}{ + "email": Email, + "name": Name, + "roles": Roles, + "redirect": Redirect, + } + + return srv.client.Call("POST", path, nil, params) +} + +// DeleteTeamMembership this endpoint allows a user to leave a team or for a +// team owner to delete the membership of any other team member. +func (srv *Teams) DeleteTeamMembership(TeamId string, InviteId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{teamId}", TeamId, "{inviteId}", InviteId) + path := r.Replace("/teams/{teamId}/memberships/{inviteId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// CreateTeamMembershipResend use this endpoint to resend your invitation +// email for a user to join a team. +func (srv *Teams) CreateTeamMembershipResend(TeamId string, InviteId string, Redirect string) (map[string]interface{}, error) { + r := strings.NewReplacer("{teamId}", TeamId, "{inviteId}", InviteId) + path := r.Replace("/teams/{teamId}/memberships/{inviteId}/resend") + + params := map[string]interface{}{ + "redirect": Redirect, + } + + return srv.client.Call("POST", path, nil, params) +} + +// UpdateTeamMembershipStatus use this endpoint to let user accept an +// invitation to join a team after he is being redirect back to your app from +// the invitation email. Use the success and failure URL's to redirect users +// back to your application after the request completes. +// +// Please notice that in order to avoid a [Redirect +// Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) +// the only valid redirect URL's are the once from domains you have set when +// added your platforms in the console interface. +// +// When not using the success or failure redirect arguments this endpoint will +// result with a 200 status code on success and with 401 status error on +// failure. This behavior was applied to help the web clients deal with +// browsers who don't allow to set 3rd party HTTP cookies needed for saving +// the account session token. +func (srv *Teams) UpdateTeamMembershipStatus(TeamId string, InviteId string, UserId string, Secret string, Success string, Failure string) (map[string]interface{}, error) { + r := strings.NewReplacer("{teamId}", TeamId, "{inviteId}", InviteId) + path := r.Replace("/teams/{teamId}/memberships/{inviteId}/status") + + params := map[string]interface{}{ + "userId": UserId, + "secret": Secret, + "success": Success, + "failure": Failure, + } + + return srv.client.Call("PATCH", path, nil, params) +} diff --git a/app/sdks/go/users.go b/app/sdks/go/users.go new file mode 100644 index 0000000000..6ef84d510a --- /dev/null +++ b/app/sdks/go/users.go @@ -0,0 +1,130 @@ +package appwrite + +import ( + "strings" +) + +// Users service +type Users struct { + client *Client +} + +// ListUsers get a list of all the project users. You can use the query params +// to filter your results. +func (srv *Users) ListUsers(Search string, Limit int, Offset int, OrderType string) (map[string]interface{}, error) { + path := "/users" + + params := map[string]interface{}{ + "search": Search, + "limit": Limit, + "offset": Offset, + "orderType": OrderType, + } + + return srv.client.Call("GET", path, nil, params) +} + +// CreateUser create a new user. +func (srv *Users) CreateUser(Email string, Password string, Name string) (map[string]interface{}, error) { + path := "/users" + + params := map[string]interface{}{ + "email": Email, + "password": Password, + "name": Name, + } + + return srv.client.Call("POST", path, nil, params) +} + +// GetUser get user by its unique ID. +func (srv *Users) GetUser(UserId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{userId}", UserId) + path := r.Replace("/users/{userId}") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetUserLogs get user activity logs list by its unique ID. +func (srv *Users) GetUserLogs(UserId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{userId}", UserId) + path := r.Replace("/users/{userId}/logs") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// GetUserPrefs get user preferences by its unique ID. +func (srv *Users) GetUserPrefs(UserId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{userId}", UserId) + path := r.Replace("/users/{userId}/prefs") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// UpdateUserPrefs update user preferences by its unique ID. You can pass only +// the specific settings you wish to update. +func (srv *Users) UpdateUserPrefs(UserId string, Prefs string) (map[string]interface{}, error) { + r := strings.NewReplacer("{userId}", UserId) + path := r.Replace("/users/{userId}/prefs") + + params := map[string]interface{}{ + "prefs": Prefs, + } + + return srv.client.Call("PATCH", path, nil, params) +} + +// GetUserSessions get user sessions list by its unique ID. +func (srv *Users) GetUserSessions(UserId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{userId}", UserId) + path := r.Replace("/users/{userId}/sessions") + + params := map[string]interface{}{ + } + + return srv.client.Call("GET", path, nil, params) +} + +// DeleteUserSessions delete all user sessions by its unique ID. +func (srv *Users) DeleteUserSessions(UserId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{userId}", UserId) + path := r.Replace("/users/{userId}/sessions") + + params := map[string]interface{}{ + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// DeleteUserSession delete user sessions by its unique ID. +func (srv *Users) DeleteUserSession(UserId string, SessionId string) (map[string]interface{}, error) { + r := strings.NewReplacer("{userId}", UserId) + path := r.Replace("/users/{userId}/sessions/:session") + + params := map[string]interface{}{ + "sessionId": SessionId, + } + + return srv.client.Call("DELETE", path, nil, params) +} + +// UpdateUserStatus update user status by its unique ID. +func (srv *Users) UpdateUserStatus(UserId string, Status string) (map[string]interface{}, error) { + r := strings.NewReplacer("{userId}", UserId) + path := r.Replace("/users/{userId}/status") + + params := map[string]interface{}{ + "status": Status, + } + + return srv.client.Call("PATCH", path, nil, params) +} diff --git a/app/sdks/go/utils.go b/app/sdks/go/utils.go new file mode 100644 index 0000000000..ca36149cf1 --- /dev/null +++ b/app/sdks/go/utils.go @@ -0,0 +1,36 @@ +package appwrite + +import ( + "fmt" + "reflect" + "strconv" +) + +// ToString changes arg to string +func ToString(arg interface{}) string { + var tmp = reflect.Indirect(reflect.ValueOf(arg)).Interface() + switch v := tmp.(type) { + case int: + return strconv.Itoa(v) + case int8: + return strconv.FormatInt(int64(v), 10) + case int16: + return strconv.FormatInt(int64(v), 10) + case int32: + return strconv.FormatInt(int64(v), 10) + case int64: + return strconv.FormatInt(v, 10) + case string: + return v + case float32: + return strconv.FormatFloat(float64(v), 'f', -1, 32) + case float64: + return strconv.FormatFloat(v, 'f', -1, 64) + case fmt.Stringer: + return v.String() + case reflect.Value: + return ToString(v.Interface()) + default: + return "" + } +} diff --git a/app/sdks/js/README.md b/app/sdks/js/README.md index 65711154fa..974341a38e 100644 --- a/app/sdks/js/README.md +++ b/app/sdks/js/README.md @@ -1,9 +1,9 @@ # Appwrite SDK for JavaScript ![License](https://img.shields.io/github/license/appwrite/sdk-for-js.svg?v=1) -![Version](https://img.shields.io/badge/api%20version-0.2.0-blue.svg?v=1) +![Version](https://img.shields.io/badge/api%20version-0.3.0-blue.svg?v=1) -**This SDK is compatible with Appwrite server version 0.2.0. For older versions, please check previous releases.** +**This SDK is compatible with Appwrite server version 0.3.0. For older versions, please check previous releases.** Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) @@ -30,7 +30,7 @@ import * as Appwrite from "appwrite"; To install with a CDN (content delivery network) add the following scripts to the bottom of your tag, but before you use any Appwrite services: ```html - + ``` ## Getting Started @@ -49,6 +49,7 @@ appwrite ``` + ## License Please see the [BSD-3-Clause license](https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE) file for more information. \ No newline at end of file diff --git a/app/sdks/js/docs/examples/auth/login.md b/app/sdks/js/docs/examples/auth/login.md index 40ff7a46c6..99ffaa8df7 100644 --- a/app/sdks/js/docs/examples/auth/login.md +++ b/app/sdks/js/docs/examples/auth/login.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.auth.login('email@example.com', 'password', 'https://example.com', 'https://example.com'); +let promise = sdk.auth.login('email@example.com', 'password'); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/auth/oauth.md b/app/sdks/js/docs/examples/auth/oauth.md index 7eb7c7adca..eeffd40b57 100644 --- a/app/sdks/js/docs/examples/auth/oauth.md +++ b/app/sdks/js/docs/examples/auth/oauth.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.auth.oauth('bitbucket'); +let promise = sdk.auth.oauth('bitbucket', 'https://example.com', 'https://example.com'); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/database/create-collection.md b/app/sdks/js/docs/examples/database/create-collection.md index f1dbd4a9aa..a93fe45778 100644 --- a/app/sdks/js/docs/examples/database/create-collection.md +++ b/app/sdks/js/docs/examples/database/create-collection.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.database.createCollection('[NAME]'); +let promise = sdk.database.createCollection('[NAME]', [], [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/database/create-document.md b/app/sdks/js/docs/examples/database/create-document.md index 00bf9e9f85..aa251ae2b2 100644 --- a/app/sdks/js/docs/examples/database/create-document.md +++ b/app/sdks/js/docs/examples/database/create-document.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.database.createDocument('[COLLECTION_ID]', '{}'); +let promise = sdk.database.createDocument('[COLLECTION_ID]', '{}', [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/database/update-collection.md b/app/sdks/js/docs/examples/database/update-collection.md index 547d554e7f..726c244c79 100644 --- a/app/sdks/js/docs/examples/database/update-collection.md +++ b/app/sdks/js/docs/examples/database/update-collection.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.database.updateCollection('[COLLECTION_ID]', '[NAME]'); +let promise = sdk.database.updateCollection('[COLLECTION_ID]', '[NAME]', [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/database/update-document.md b/app/sdks/js/docs/examples/database/update-document.md index 3790154d19..7809b97bfd 100644 --- a/app/sdks/js/docs/examples/database/update-document.md +++ b/app/sdks/js/docs/examples/database/update-document.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.database.updateDocument('[COLLECTION_ID]', '[DOCUMENT_ID]', '{}'); +let promise = sdk.database.updateDocument('[COLLECTION_ID]', '[DOCUMENT_ID]', '{}', [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/locale/get-continents.md b/app/sdks/js/docs/examples/locale/get-continents.md new file mode 100644 index 0000000000..a8de63eb91 --- /dev/null +++ b/app/sdks/js/docs/examples/locale/get-continents.md @@ -0,0 +1,13 @@ +let sdk = new Appwrite(); + +sdk + .setProject('') +; + +let promise = sdk.locale.getContinents(); + +promise.then(function (response) { + console.log(response); +}, function (error) { + console.log(error); +}); \ No newline at end of file diff --git a/app/sdks/js/docs/examples/projects/create-task.md b/app/sdks/js/docs/examples/projects/create-task.md index 4338198465..3262b4d9fe 100644 --- a/app/sdks/js/docs/examples/projects/create-task.md +++ b/app/sdks/js/docs/examples/projects/create-task.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.projects.createTask('[PROJECT_ID]', '[NAME]', 'play', '', 1, 'GET', 'https://example.com'); +let promise = sdk.projects.createTask('[PROJECT_ID]', '[NAME]', 'play', '', 0, 'GET', 'https://example.com'); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/projects/create-webhook.md b/app/sdks/js/docs/examples/projects/create-webhook.md index 1136c5eedf..66a76c26c2 100644 --- a/app/sdks/js/docs/examples/projects/create-webhook.md +++ b/app/sdks/js/docs/examples/projects/create-webhook.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.projects.createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 1); +let promise = sdk.projects.createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 0); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/projects/update-webhook.md b/app/sdks/js/docs/examples/projects/update-webhook.md index f580952533..ce876d5a64 100644 --- a/app/sdks/js/docs/examples/projects/update-webhook.md +++ b/app/sdks/js/docs/examples/projects/update-webhook.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.projects.updateWebhook('[PROJECT_ID]', '[WEBHOOK_ID]', '[NAME]', [], '[URL]', 1); +let promise = sdk.projects.updateWebhook('[PROJECT_ID]', '[WEBHOOK_ID]', '[NAME]', [], '[URL]', 0); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/storage/create-file.md b/app/sdks/js/docs/examples/storage/create-file.md index 7869e8348b..53157d19a3 100644 --- a/app/sdks/js/docs/examples/storage/create-file.md +++ b/app/sdks/js/docs/examples/storage/create-file.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.storage.createFile(document.getElementById('uploader').files[0]); +let promise = sdk.storage.createFile(document.getElementById('uploader').files[0], [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/storage/update-file.md b/app/sdks/js/docs/examples/storage/update-file.md index 30380a0fbd..72d6ee3166 100644 --- a/app/sdks/js/docs/examples/storage/update-file.md +++ b/app/sdks/js/docs/examples/storage/update-file.md @@ -4,7 +4,7 @@ sdk .setProject('') ; -let promise = sdk.storage.updateFile('[FILE_ID]'); +let promise = sdk.storage.updateFile('[FILE_ID]', [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/package.json b/app/sdks/js/package.json index db7a1916ab..499bfdd69c 100644 --- a/app/sdks/js/package.json +++ b/app/sdks/js/package.json @@ -2,7 +2,7 @@ "name": "appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)", - "version": "1.0.23", + "version": "1.0.27", "license": "BSD-3-Clause", "main": "src/sdk.js", "repository": { diff --git a/app/sdks/js/src/sdk.js b/app/sdks/js/src/sdk.js index 5c8a0bc134..1608e3b497 100644 --- a/app/sdks/js/src/sdk.js +++ b/app/sdks/js/src/sdk.js @@ -139,7 +139,7 @@ globalParams.push({key: key, value: value}); }; - addGlobalHeader('x-sdk-version', 'appwrite:javascript:1.0.23'); + addGlobalHeader('x-sdk-version', 'appwrite:javascript:1.0.27'); addGlobalHeader('content-type', ''); /** @@ -313,7 +313,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -330,7 +332,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -368,7 +372,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -394,7 +400,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -430,7 +438,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -447,7 +457,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -474,7 +486,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -492,7 +506,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -510,7 +526,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); } }; @@ -524,9 +542,9 @@ * redirect URL\'s back to your app when login is completed. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * When accessing this route using Javascript from the browser, success and * failure parameter URLs are required. Appwrite server will respond with a @@ -541,7 +559,7 @@ * @throws {Error} * @return {null} */ - login: function(email, password, success, failure) { + login: function(email, password, success = '', failure = '') { if(email === undefined) { throw new Error('Missing required parameter: "email"'); } @@ -550,14 +568,6 @@ throw new Error('Missing required parameter: "password"'); } - if(success === undefined) { - throw new Error('Missing required parameter: "success"'); - } - - if(failure === undefined) { - throw new Error('Missing required parameter: "failure"'); - } - let path = '/auth/login'; let payload = {}; @@ -587,7 +597,7 @@ * Logout Current Session * * Use this endpoint to log out the currently logged in user from his account. - * When succeed this endpoint will delete the user session and remove the + * When successful this endpoint will delete the user session and remove the * session secret cookie from the user client. * * @throws {Error} @@ -599,7 +609,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -623,7 +635,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -634,13 +648,21 @@ * @param {string} success * @param {string} failure * @throws {Error} - * @return {Promise} + * @return {null} */ - oauth: function(provider, success = '', failure = '') { + oauth: function(provider, success, failure) { if(provider === undefined) { throw new Error('Missing required parameter: "provider"'); } + if(success === undefined) { + throw new Error('Missing required parameter: "success"'); + } + + if(failure === undefined) { + throw new Error('Missing required parameter: "failure"'); + } + let path = '/auth/oauth/{provider}'.replace(new RegExp('{provider}', 'g'), provider); let payload = {}; @@ -653,8 +675,9 @@ payload['failure'] = failure; } - return http - .get(path, {'content-type': 'application/json'}, payload); + payload['project'] = config.project; + + return iframe('get', path, payload); }, /** @@ -694,7 +717,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -706,9 +731,9 @@ * /auth/recovery endpoint. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param {string} userId * @param {string} token @@ -755,14 +780,16 @@ } return http - .put(path, {'content-type': 'application/json'}, payload); + .put(path, { + 'content-type': 'application/json', + }, payload); }, /** * Register User * * Use this endpoint to allow a new user to register an account in your - * project. Use the success and failure URL's to redirect users back to your + * project. Use the success and failure URLs to redirect users back to your * application after signup completes. * * If registration completes successfully user will be sent with a @@ -772,9 +799,9 @@ * /auth/confirm endpoint to complete the account confirmation. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * When accessing this route using Javascript from the browser, success and * failure parameter URLs are required. Appwrite server will respond with a @@ -872,20 +899,22 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** * Resend Confirmation * * This endpoint allows the user to request your app to resend him his email - * confirmation message. The redirect arguments acts the same way as in + * confirmation message. The redirect arguments act the same way as in * /auth/register endpoint. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param {string} confirm * @throws {Error} @@ -905,7 +934,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); } }; @@ -914,8 +945,8 @@ /** * Get Browser Icon * - * You can use this endpoint to show different browser icons to your users, - * The code argument receives the browser code as appear in your user + * 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 * /account/sessions endpoint. Use width, height and quality arguments to * change the output settings. * @@ -948,13 +979,15 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** * Get Credit Card Icon * - * Need to display your users with your billing method or there payment + * Need to display your users with your billing method or their payment * methods? 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. @@ -988,7 +1021,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1015,14 +1050,16 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** * Get Country Flag * * You can use this endpoint to show different country flags icons to your - * users, The code argument receives the a 2 letter country code. Use width, + * users. The code argument receives the 2 letter country code. Use width, * height and quality arguments to change the output settings. * * @param {string} code @@ -1054,7 +1091,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1062,7 +1101,7 @@ * * 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 cases, you want to make sure a 3rd party + * remote images in your app or in case you want to make sure a 3rd party * image is properly served using a TLS protocol. * * @param {string} url @@ -1093,7 +1132,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1135,7 +1176,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); } }; @@ -1178,7 +1221,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1193,11 +1238,23 @@ * @throws {Error} * @return {Promise} */ - createCollection: function(name, read = [], write = [], rules = []) { + createCollection: function(name, read, write, rules) { if(name === undefined) { throw new Error('Missing required parameter: "name"'); } + if(read === undefined) { + throw new Error('Missing required parameter: "read"'); + } + + if(write === undefined) { + throw new Error('Missing required parameter: "write"'); + } + + if(rules === undefined) { + throw new Error('Missing required parameter: "rules"'); + } + let path = '/database'; let payload = {}; @@ -1219,7 +1276,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1242,7 +1301,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1258,7 +1319,7 @@ * @throws {Error} * @return {Promise} */ - updateCollection: function(collectionId, name, read = [], write = [], rules = []) { + updateCollection: function(collectionId, name, read, write, rules = []) { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); } @@ -1267,6 +1328,14 @@ throw new Error('Missing required parameter: "name"'); } + if(read === undefined) { + throw new Error('Missing required parameter: "read"'); + } + + if(write === undefined) { + throw new Error('Missing required parameter: "write"'); + } + let path = '/database/{collectionId}'.replace(new RegExp('{collectionId}', 'g'), collectionId); let payload = {}; @@ -1288,7 +1357,9 @@ } return http - .put(path, {'content-type': 'application/json'}, payload); + .put(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1311,7 +1382,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1381,7 +1454,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1399,7 +1474,7 @@ * @throws {Error} * @return {Promise} */ - createDocument: function(collectionId, data, read = [], write = [], parentDocument = '', parentProperty = '', parentPropertyType = 'assign') { + createDocument: function(collectionId, data, read, write, parentDocument = '', parentProperty = '', parentPropertyType = 'assign') { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); } @@ -1408,6 +1483,14 @@ throw new Error('Missing required parameter: "data"'); } + if(read === undefined) { + throw new Error('Missing required parameter: "read"'); + } + + if(write === undefined) { + throw new Error('Missing required parameter: "write"'); + } + let path = '/database/{collectionId}/documents'.replace(new RegExp('{collectionId}', 'g'), collectionId); let payload = {}; @@ -1437,7 +1520,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1465,7 +1550,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1480,7 +1567,7 @@ * @throws {Error} * @return {Promise} */ - updateDocument: function(collectionId, documentId, data, read = [], write = []) { + updateDocument: function(collectionId, documentId, data, read, write) { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); } @@ -1493,6 +1580,14 @@ throw new Error('Missing required parameter: "data"'); } + if(read === undefined) { + throw new Error('Missing required parameter: "read"'); + } + + if(write === undefined) { + throw new Error('Missing required parameter: "write"'); + } + let path = '/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}', 'g'), collectionId).replace(new RegExp('{documentId}', 'g'), documentId); let payload = {}; @@ -1510,7 +1605,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1539,7 +1636,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); } }; @@ -1550,7 +1649,7 @@ * * 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 + * suggested currency. You can use the locale header to get the data in a * supported language. * * @throws {Error} @@ -1562,13 +1661,35 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** * List Countries * - * List of all countries. You can use the locale header to get the data in + * List of all continents. You can use the locale header to get the data in a + * supported language. + * + * @throws {Error} + * @return {Promise} + */ + getContinents: function() { + let path = '/locale/continents'; + + let payload = {}; + + return http + .get(path, { + 'content-type': 'application/json', + }, payload); + }, + + /** + * List Countries + * + * List of all countries. You can use the locale header to get the data in a * supported language. * * @throws {Error} @@ -1580,14 +1701,16 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** * List EU Countries * * List of all countries that are currently members of the EU. You can use the - * locale header to get the data in supported language. UK brexit date is + * locale header to get the data in a supported language. UK brexit date is * currently set to 2019-10-31 and will be updated if and when needed. * * @throws {Error} @@ -1599,14 +1722,16 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** * List Countries Phone Codes * * List of all countries phone codes. You can use the locale header to get the - * data in supported language. + * data in a supported language. * * @throws {Error} * @return {Promise} @@ -1617,7 +1742,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1625,7 +1752,7 @@ * * List of all currencies, including currency symol, name, plural, and decimal * digits for all major and minor currencies. You can use the locale header to - * get the data in supported language. + * get the data in a supported language. * * @throws {Error} * @return {Promise} @@ -1636,7 +1763,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); } }; @@ -1655,7 +1784,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1734,7 +1865,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1755,7 +1888,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1830,7 +1965,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1851,7 +1988,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1872,7 +2011,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1911,7 +2052,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1937,7 +2080,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -1981,7 +2126,9 @@ } return http - .put(path, {'content-type': 'application/json'}, payload); + .put(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2007,7 +2154,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2047,7 +2196,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2068,7 +2219,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2122,7 +2275,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2148,7 +2303,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2198,7 +2355,9 @@ } return http - .put(path, {'content-type': 'application/json'}, payload); + .put(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2224,7 +2383,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2245,7 +2406,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2335,7 +2498,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2361,7 +2526,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2456,7 +2623,9 @@ } return http - .put(path, {'content-type': 'application/json'}, payload); + .put(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2482,7 +2651,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2503,7 +2674,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2524,7 +2697,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2591,7 +2766,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2617,7 +2794,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2689,7 +2868,9 @@ } return http - .put(path, {'content-type': 'application/json'}, payload); + .put(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2715,7 +2896,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); } }; @@ -2757,7 +2940,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2774,11 +2959,19 @@ * @throws {Error} * @return {Promise} */ - createFile: function(files, read = [], write = [], folderId = '') { + createFile: function(files, read, write, folderId = '') { if(files === undefined) { throw new Error('Missing required parameter: "files"'); } + if(read === undefined) { + throw new Error('Missing required parameter: "read"'); + } + + if(write === undefined) { + throw new Error('Missing required parameter: "write"'); + } + let path = '/storage/files'; let payload = {}; @@ -2800,7 +2993,9 @@ } return http - .post(path, {'content-type': 'multipart/form-data'}, payload); + .post(path, { + 'content-type': 'multipart/form-data', + }, payload); }, /** @@ -2823,7 +3018,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2839,11 +3036,19 @@ * @throws {Error} * @return {Promise} */ - updateFile: function(fileId, read = [], write = [], folderId = '') { + updateFile: function(fileId, read, write, folderId = '') { if(fileId === undefined) { throw new Error('Missing required parameter: "fileId"'); } + if(read === undefined) { + throw new Error('Missing required parameter: "read"'); + } + + if(write === undefined) { + throw new Error('Missing required parameter: "write"'); + } + let path = '/storage/files/{fileId}'.replace(new RegExp('{fileId}', 'g'), fileId); let payload = {}; @@ -2861,7 +3066,9 @@ } return http - .put(path, {'content-type': 'application/json'}, payload); + .put(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2884,7 +3091,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2908,7 +3117,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2958,7 +3169,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -2986,7 +3199,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); } }; @@ -3028,7 +3243,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3062,7 +3279,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3085,7 +3304,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3117,7 +3338,9 @@ } return http - .put(path, {'content-type': 'application/json'}, payload); + .put(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3140,7 +3363,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3163,7 +3388,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3229,7 +3456,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3257,7 +3486,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3294,7 +3525,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3405,7 +3638,9 @@ } return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3445,7 +3680,9 @@ } return http - .post(path, {'content-type': 'application/json'}, payload); + .post(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3467,7 +3704,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3489,7 +3728,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3511,11 +3752,13 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** - * Update Account Prefs + * Update User Prefs * * Update user preferences by its unique ID. You can pass only the specific * settings you wish to update. @@ -3543,7 +3786,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3565,7 +3810,9 @@ let payload = {}; return http - .get(path, {'content-type': 'application/json'}, payload); + .get(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3587,7 +3834,9 @@ let payload = {}; return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** @@ -3618,11 +3867,13 @@ } return http - .delete(path, {'content-type': 'application/json'}, payload); + .delete(path, { + 'content-type': 'application/json', + }, payload); }, /** - * Update user status + * Update User Status * * Update user status by its unique ID. * @@ -3649,7 +3900,9 @@ } return http - .patch(path, {'content-type': 'application/json'}, payload); + .patch(path, { + 'content-type': 'application/json', + }, payload); } }; diff --git a/app/sdks/js/src/sdk.min.js b/app/sdks/js/src/sdk.min.js index a1d7e392a1..f4e06660ba 100644 --- a/app/sdks/js/src/sdk.min.js +++ b/app/sdks/js/src/sdk.min.js @@ -1,5 +1,5 @@ (function(window){'use strict';window.Appwrite=function(){let config={endpoint:'https://appwrite.io/v1',project:'',key:'',locale:'',mode:'',};let setEndpoint=function(endpoint){config.endpoint=endpoint;return this};let setProject=function(value){http.addGlobalHeader('X-Appwrite-Project',value);config.project=value;return this};let setKey=function(value){http.addGlobalHeader('X-Appwrite-Key',value);config.key=value;return this};let setLocale=function(value){http.addGlobalHeader('X-Appwrite-Locale',value);config.locale=value;return this};let setMode=function(value){http.addGlobalHeader('X-Appwrite-Mode',value);config.mode=value;return this};let http=function(document){let globalParams=[],globalHeaders=[];let addParam=function(url,param,value){let a=document.createElement('a'),regex=/(?:\?|&|&)+([^=]+)(?:=([^&]*))*/g;let match,str=[];a.href=url;param=encodeURIComponent(param);while(match=regex.exec(a.search))if(param!==match[1])str.push(match[1]+(match[2]?"="+match[2]:""));str.push(param+(value?"="+encodeURIComponent(value):""));a.search=str.join("&");return a.href};let buildQuery=function(params){let str=[];for(let p in params){if(Array.isArray(params[p])){for(let index=0;index=request.status){let data=request.response;let contentType=this.getResponseHeader('content-type')||'';contentType=contentType.substring(0,contentType.indexOf(';'));switch(contentType){case 'application/json':data=JSON.parse(data);break} resolve(data)}else{reject(new Error(request.statusText))}};if(progress){request.addEventListener('progress',progress);request.upload.addEventListener('progress',progress,!1)} request.onerror=function(){reject(new Error("Network Error"))};request.send(params)})};return{'get':function(path,headers={},params={}){return call('GET',path+((Object.keys(params).length>0)?'?'+buildQuery(params):''),headers,{})},'post':function(path,headers={},params={},progress=null){return call('POST',path,headers,params,progress)},'put':function(path,headers={},params={},progress=null){return call('PUT',path,headers,params,progress)},'patch':function(path,headers={},params={},progress=null){return call('PATCH',path,headers,params,progress)},'delete':function(path,headers={},params={},progress=null){return call('DELETE',path,headers,params,progress)},'addGlobalParam':addGlobalParam,'addGlobalHeader':addGlobalHeader}}(window.document);let iframe=function(method,url,params){let form=document.createElement('form');form.setAttribute('method',method);form.setAttribute('action',config.endpoint+url);for(let key in params){if(params.hasOwnProperty(key)){let hiddenField=document.createElement("input");hiddenField.setAttribute("type","hidden");hiddenField.setAttribute("name",key);hiddenField.setAttribute("value",params[key]);form.appendChild(hiddenField)}} -document.body.appendChild(form);return form.submit()};let account={get:function(){let path='/account';let payload={};return http.get(path,{'content-type':'application/json'},payload)},delete:function(){let path='/account';let payload={};return http.delete(path,{'content-type':'application/json'},payload)},updateEmail:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"')} +document.body.appendChild(form);return form.submit()};let account={get:function(){let path='/account';let payload={};return http.get(path,{'content-type':'application/json',},payload)},delete:function(){let path='/account';let payload={};return http.delete(path,{'content-type':'application/json',},payload)},updateEmail:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(password===undefined){throw new Error('Missing required parameter: "password"')} let path='/account/email';let payload={};if(email){payload.email=email} if(password){payload.password=password} -return http.patch(path,{'content-type':'application/json'},payload)},updateName:function(name){if(name===undefined){throw new Error('Missing required parameter: "name"')} +return http.patch(path,{'content-type':'application/json',},payload)},updateName:function(name){if(name===undefined){throw new Error('Missing required parameter: "name"')} let path='/account/name';let payload={};if(name){payload.name=name} -return http.patch(path,{'content-type':'application/json'},payload)},updatePassword:function(password,oldPassword){if(password===undefined){throw new Error('Missing required parameter: "password"')} +return http.patch(path,{'content-type':'application/json',},payload)},updatePassword:function(password,oldPassword){if(password===undefined){throw new Error('Missing required parameter: "password"')} if(oldPassword===undefined){throw new Error('Missing required parameter: "oldPassword"')} let path='/account/password';let payload={};if(password){payload.password=password} if(oldPassword){payload['old-password']=oldPassword} -return http.patch(path,{'content-type':'application/json'},payload)},getPrefs:function(){let path='/account/prefs';let payload={};return http.get(path,{'content-type':'application/json'},payload)},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"')} +return http.patch(path,{'content-type':'application/json',},payload)},getPrefs:function(){let path='/account/prefs';let payload={};return http.get(path,{'content-type':'application/json',},payload)},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"')} let path='/account/prefs';let payload={};if(prefs){payload.prefs=prefs} -return http.patch(path,{'content-type':'application/json'},payload)},getSecurity:function(){let path='/account/security';let payload={};return http.get(path,{'content-type':'application/json'},payload)},getSessions:function(){let path='/account/sessions';let payload={};return http.get(path,{'content-type':'application/json'},payload)}};let auth={login:function(email,password,success,failure){if(email===undefined){throw new Error('Missing required parameter: "email"')} +return http.patch(path,{'content-type':'application/json',},payload)},getSecurity:function(){let path='/account/security';let payload={};return http.get(path,{'content-type':'application/json',},payload)},getSessions:function(){let path='/account/sessions';let payload={};return http.get(path,{'content-type':'application/json',},payload)}};let auth={login:function(email,password,success='',failure=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(password===undefined){throw new Error('Missing required parameter: "password"')} -if(success===undefined){throw new Error('Missing required parameter: "success"')} -if(failure===undefined){throw new Error('Missing required parameter: "failure"')} let path='/auth/login';let payload={};if(email){payload.email=email} if(password){payload.password=password} if(success){payload.success=success} if(failure){payload.failure=failure} -payload.project=config.project;return iframe('post',path,payload)},logout:function(){let path='/auth/logout';let payload={};return http.delete(path,{'content-type':'application/json'},payload)},logoutBySession:function(id){if(id===undefined){throw new Error('Missing required parameter: "id"')} -let path='/auth/logout/{id}'.replace(new RegExp('{id}','g'),id);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},oauth:function(provider,success='',failure=''){if(provider===undefined){throw new Error('Missing required parameter: "provider"')} +payload.project=config.project;return iframe('post',path,payload)},logout:function(){let path='/auth/logout';let payload={};return http.delete(path,{'content-type':'application/json',},payload)},logoutBySession:function(id){if(id===undefined){throw new Error('Missing required parameter: "id"')} +let path='/auth/logout/{id}'.replace(new RegExp('{id}','g'),id);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},oauth:function(provider,success,failure){if(provider===undefined){throw new Error('Missing required parameter: "provider"')} +if(success===undefined){throw new Error('Missing required parameter: "success"')} +if(failure===undefined){throw new Error('Missing required parameter: "failure"')} let path='/auth/oauth/{provider}'.replace(new RegExp('{provider}','g'),provider);let payload={};if(success){payload.success=success} if(failure){payload.failure=failure} -return http.get(path,{'content-type':'application/json'},payload)},recovery:function(email,reset){if(email===undefined){throw new Error('Missing required parameter: "email"')} +payload.project=config.project;return iframe('get',path,payload)},recovery:function(email,reset){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(reset===undefined){throw new Error('Missing required parameter: "reset"')} let path='/auth/recovery';let payload={};if(email){payload.email=email} if(reset){payload.reset=reset} -return http.post(path,{'content-type':'application/json'},payload)},recoveryReset:function(userId,token,passwordA,passwordB){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +return http.post(path,{'content-type':'application/json',},payload)},recoveryReset:function(userId,token,passwordA,passwordB){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} if(token===undefined){throw new Error('Missing required parameter: "token"')} if(passwordA===undefined){throw new Error('Missing required parameter: "passwordA"')} if(passwordB===undefined){throw new Error('Missing required parameter: "passwordB"')} @@ -47,7 +47,7 @@ let path='/auth/recovery/reset';let payload={};if(userId){payload.userId=userId} if(token){payload.token=token} if(passwordA){payload['password-a']=passwordA} if(passwordB){payload['password-b']=passwordB} -return http.put(path,{'content-type':'application/json'},payload)},register:function(email,password,confirm,success='',failure='',name=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} +return http.put(path,{'content-type':'application/json',},payload)},register:function(email,password,confirm,success='',failure='',name=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(password===undefined){throw new Error('Missing required parameter: "password"')} if(confirm===undefined){throw new Error('Missing required parameter: "confirm"')} let path='/auth/register';let payload={};if(email){payload.email=email} @@ -60,49 +60,54 @@ payload.project=config.project;return iframe('post',path,payload)},confirm:funct if(token===undefined){throw new Error('Missing required parameter: "token"')} let path='/auth/register/confirm';let payload={};if(userId){payload.userId=userId} if(token){payload.token=token} -return http.post(path,{'content-type':'application/json'},payload)},confirmResend:function(confirm){if(confirm===undefined){throw new Error('Missing required parameter: "confirm"')} +return http.post(path,{'content-type':'application/json',},payload)},confirmResend:function(confirm){if(confirm===undefined){throw new Error('Missing required parameter: "confirm"')} let path='/auth/register/confirm/resend';let payload={};if(confirm){payload.confirm=confirm} -return http.post(path,{'content-type':'application/json'},payload)}};let avatars={getBrowser:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"')} +return http.post(path,{'content-type':'application/json',},payload)}};let avatars={getBrowser:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"')} let path='/avatars/browsers/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload.width=width} if(height){payload.height=height} if(quality){payload.quality=quality} -return http.get(path,{'content-type':'application/json'},payload)},getCreditCard:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"')} +return http.get(path,{'content-type':'application/json',},payload)},getCreditCard:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"')} let path='/avatars/credit-cards/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload.width=width} if(height){payload.height=height} if(quality){payload.quality=quality} -return http.get(path,{'content-type':'application/json'},payload)},getFavicon:function(url){if(url===undefined){throw new Error('Missing required parameter: "url"')} +return http.get(path,{'content-type':'application/json',},payload)},getFavicon:function(url){if(url===undefined){throw new Error('Missing required parameter: "url"')} let path='/avatars/favicon';let payload={};if(url){payload.url=url} -return http.get(path,{'content-type':'application/json'},payload)},getFlag:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"')} +return http.get(path,{'content-type':'application/json',},payload)},getFlag:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"')} let path='/avatars/flags/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload.width=width} if(height){payload.height=height} if(quality){payload.quality=quality} -return http.get(path,{'content-type':'application/json'},payload)},getImage:function(url,width=400,height=400){if(url===undefined){throw new Error('Missing required parameter: "url"')} +return http.get(path,{'content-type':'application/json',},payload)},getImage:function(url,width=400,height=400){if(url===undefined){throw new Error('Missing required parameter: "url"')} let path='/avatars/image';let payload={};if(url){payload.url=url} if(width){payload.width=width} if(height){payload.height=height} -return http.get(path,{'content-type':'application/json'},payload)},getQR:function(text,size=400,margin=1,download=0){if(text===undefined){throw new Error('Missing required parameter: "text"')} +return http.get(path,{'content-type':'application/json',},payload)},getQR:function(text,size=400,margin=1,download=0){if(text===undefined){throw new Error('Missing required parameter: "text"')} let path='/avatars/qr';let payload={};if(text){payload.text=text} if(size){payload.size=size} if(margin){payload.margin=margin} if(download){payload.download=download} -return http.get(path,{'content-type':'application/json'},payload)}};let database={listCollections:function(search='',limit=25,offset=0,orderType='ASC'){let path='/database';let payload={};if(search){payload.search=search} +return http.get(path,{'content-type':'application/json',},payload)}};let database={listCollections:function(search='',limit=25,offset=0,orderType='ASC'){let path='/database';let payload={};if(search){payload.search=search} if(limit){payload.limit=limit} if(offset){payload.offset=offset} if(orderType){payload.orderType=orderType} -return http.get(path,{'content-type':'application/json'},payload)},createCollection:function(name,read=[],write=[],rules=[]){if(name===undefined){throw new Error('Missing required parameter: "name"')} +return http.get(path,{'content-type':'application/json',},payload)},createCollection:function(name,read,write,rules){if(name===undefined){throw new Error('Missing required parameter: "name"')} +if(read===undefined){throw new Error('Missing required parameter: "read"')} +if(write===undefined){throw new Error('Missing required parameter: "write"')} +if(rules===undefined){throw new Error('Missing required parameter: "rules"')} let path='/database';let payload={};if(name){payload.name=name} if(read){payload.read=read} if(write){payload.write=write} if(rules){payload.rules=rules} -return http.post(path,{'content-type':'application/json'},payload)},getCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} -let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateCollection:function(collectionId,name,read=[],write=[],rules=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} +return http.post(path,{'content-type':'application/json',},payload)},getCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} +let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateCollection:function(collectionId,name,read,write,rules=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} +if(read===undefined){throw new Error('Missing required parameter: "read"')} +if(write===undefined){throw new Error('Missing required parameter: "write"')} let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(name){payload.name=name} if(read){payload.read=read} if(write){payload.write=write} if(rules){payload.rules=rules} -return http.put(path,{'content-type':'application/json'},payload)},deleteCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} -let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},listDocuments:function(collectionId,filters=[],offset=0,limit=50,orderField='$uid',orderType='ASC',orderCast='string',search='',first=0,last=0){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} +return http.put(path,{'content-type':'application/json',},payload)},deleteCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} +let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},listDocuments:function(collectionId,filters=[],offset=0,limit=50,orderField='$uid',orderType='ASC',orderCast='string',search='',first=0,last=0){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} let path='/database/{collectionId}/documents'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(filters){payload.filters=filters} if(offset){payload.offset=offset} if(limit){payload.limit=limit} @@ -112,25 +117,29 @@ if(orderCast){payload['order-cast']=orderCast} if(search){payload.search=search} if(first){payload.first=first} if(last){payload.last=last} -return http.get(path,{'content-type':'application/json'},payload)},createDocument:function(collectionId,data,read=[],write=[],parentDocument='',parentProperty='',parentPropertyType='assign'){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} +return http.get(path,{'content-type':'application/json',},payload)},createDocument:function(collectionId,data,read,write,parentDocument='',parentProperty='',parentPropertyType='assign'){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} if(data===undefined){throw new Error('Missing required parameter: "data"')} +if(read===undefined){throw new Error('Missing required parameter: "read"')} +if(write===undefined){throw new Error('Missing required parameter: "write"')} let path='/database/{collectionId}/documents'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(data){payload.data=data} if(read){payload.read=read} if(write){payload.write=write} if(parentDocument){payload.parentDocument=parentDocument} if(parentProperty){payload.parentProperty=parentProperty} if(parentPropertyType){payload.parentPropertyType=parentPropertyType} -return http.post(path,{'content-type':'application/json'},payload)},getDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} +return http.post(path,{'content-type':'application/json',},payload)},getDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"')} -let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateDocument:function(collectionId,documentId,data,read=[],write=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} +let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateDocument:function(collectionId,documentId,data,read,write){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"')} if(data===undefined){throw new Error('Missing required parameter: "data"')} +if(read===undefined){throw new Error('Missing required parameter: "read"')} +if(write===undefined){throw new Error('Missing required parameter: "write"')} let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};if(data){payload.data=data} if(read){payload.read=read} if(write){payload.write=write} -return http.patch(path,{'content-type':'application/json'},payload)},deleteDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} +return http.patch(path,{'content-type':'application/json',},payload)},deleteDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"')} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"')} -let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)}};let locale={getLocale:function(){let path='/locale';let payload={};return http.get(path,{'content-type':'application/json'},payload)},getCountries:function(){let path='/locale/countries';let payload={};return http.get(path,{'content-type':'application/json'},payload)},getCountriesEU:function(){let path='/locale/countries/eu';let payload={};return http.get(path,{'content-type':'application/json'},payload)},getCountriesPhones:function(){let path='/locale/countries/phones';let payload={};return http.get(path,{'content-type':'application/json'},payload)},getCurrencies:function(){let path='/locale/currencies';let payload={};return http.get(path,{'content-type':'application/json'},payload)}};let projects={listProjects:function(){let path='/projects';let payload={};return http.get(path,{'content-type':'application/json'},payload)},createProject:function(name,teamId,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(name===undefined){throw new Error('Missing required parameter: "name"')} +let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)}};let locale={getLocale:function(){let path='/locale';let payload={};return http.get(path,{'content-type':'application/json',},payload)},getContinents:function(){let path='/locale/continents';let payload={};return http.get(path,{'content-type':'application/json',},payload)},getCountries:function(){let path='/locale/countries';let payload={};return http.get(path,{'content-type':'application/json',},payload)},getCountriesEU:function(){let path='/locale/countries/eu';let payload={};return http.get(path,{'content-type':'application/json',},payload)},getCountriesPhones:function(){let path='/locale/countries/phones';let payload={};return http.get(path,{'content-type':'application/json',},payload)},getCurrencies:function(){let path='/locale/currencies';let payload={};return http.get(path,{'content-type':'application/json',},payload)}};let projects={listProjects:function(){let path='/projects';let payload={};return http.get(path,{'content-type':'application/json',},payload)},createProject:function(name,teamId,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(name===undefined){throw new Error('Missing required parameter: "name"')} if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} let path='/projects';let payload={};if(name){payload.name=name} if(teamId){payload.teamId=teamId} @@ -143,8 +152,8 @@ if(legalState){payload.legalState=legalState} if(legalCity){payload.legalCity=legalCity} if(legalAddress){payload.legalAddress=legalAddress} if(legalTaxId){payload.legalTaxId=legalTaxId} -return http.post(path,{'content-type':'application/json'},payload)},getProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} -let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateProject:function(projectId,name,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.post(path,{'content-type':'application/json',},payload)},getProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateProject:function(projectId,name,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(name){payload.name=name} if(description){payload.description=description} @@ -156,30 +165,30 @@ if(legalState){payload.legalState=legalState} if(legalCity){payload.legalCity=legalCity} if(legalAddress){payload.legalAddress=legalAddress} if(legalTaxId){payload.legalTaxId=legalTaxId} -return http.patch(path,{'content-type':'application/json'},payload)},deleteProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} -let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},listKeys:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} -let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},createKey:function(projectId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.patch(path,{'content-type':'application/json',},payload)},deleteProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},listKeys:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},createKey:function(projectId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} if(scopes===undefined){throw new Error('Missing required parameter: "scopes"')} let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(name){payload.name=name} if(scopes){payload.scopes=scopes} -return http.post(path,{'content-type':'application/json'},payload)},getKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.post(path,{'content-type':'application/json',},payload)},getKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"')} -let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateKey:function(projectId,keyId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateKey:function(projectId,keyId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} if(scopes===undefined){throw new Error('Missing required parameter: "scopes"')} let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};if(name){payload.name=name} if(scopes){payload.scopes=scopes} -return http.put(path,{'content-type':'application/json'},payload)},deleteKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.put(path,{'content-type':'application/json',},payload)},deleteKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"')} -let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},updateProjectOAuth:function(projectId,provider,appId='',secret=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},updateProjectOAuth:function(projectId,provider,appId='',secret=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(provider===undefined){throw new Error('Missing required parameter: "provider"')} let path='/projects/{projectId}/oauth'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(provider){payload.provider=provider} if(appId){payload.appId=appId} if(secret){payload.secret=secret} -return http.patch(path,{'content-type':'application/json'},payload)},listPlatforms:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} -let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},createPlatform:function(projectId,type,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.patch(path,{'content-type':'application/json',},payload)},listPlatforms:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},createPlatform:function(projectId,type,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(type===undefined){throw new Error('Missing required parameter: "type"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(type){payload.type=type} @@ -187,19 +196,19 @@ if(name){payload.name=name} if(key){payload.key=key} if(store){payload.store=store} if(url){payload.url=url} -return http.post(path,{'content-type':'application/json'},payload)},getPlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.post(path,{'content-type':'application/json',},payload)},getPlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"')} -let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updatePlatform:function(projectId,platformId,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updatePlatform:function(projectId,platformId,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};if(name){payload.name=name} if(key){payload.key=key} if(store){payload.store=store} if(url){payload.url=url} -return http.put(path,{'content-type':'application/json'},payload)},deletePlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.put(path,{'content-type':'application/json',},payload)},deletePlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"')} -let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},listTasks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} -let path='/projects/{projectId}/tasks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},createTask:function(projectId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},listTasks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/tasks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},createTask:function(projectId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} if(status===undefined){throw new Error('Missing required parameter: "status"')} if(schedule===undefined){throw new Error('Missing required parameter: "schedule"')} @@ -215,9 +224,9 @@ if(httpUrl){payload.httpUrl=httpUrl} if(httpHeaders){payload.httpHeaders=httpHeaders} if(httpUser){payload.httpUser=httpUser} if(httpPass){payload.httpPass=httpPass} -return http.post(path,{'content-type':'application/json'},payload)},getTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.post(path,{'content-type':'application/json',},payload)},getTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"')} -let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateTask:function(projectId,taskId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateTask:function(projectId,taskId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} if(status===undefined){throw new Error('Missing required parameter: "status"')} @@ -234,11 +243,11 @@ if(httpUrl){payload.httpUrl=httpUrl} if(httpHeaders){payload.httpHeaders=httpHeaders} if(httpUser){payload.httpUser=httpUser} if(httpPass){payload.httpPass=httpPass} -return http.put(path,{'content-type':'application/json'},payload)},deleteTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.put(path,{'content-type':'application/json',},payload)},deleteTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"')} -let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},getProjectUsage:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} -let path='/projects/{projectId}/usage'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},listWebhooks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} -let path='/projects/{projectId}/webhooks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},createWebhook:function(projectId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},getProjectUsage:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/usage'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},listWebhooks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/webhooks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},createWebhook:function(projectId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} if(events===undefined){throw new Error('Missing required parameter: "events"')} if(url===undefined){throw new Error('Missing required parameter: "url"')} @@ -249,9 +258,9 @@ if(url){payload.url=url} if(security){payload.security=security} if(httpUser){payload.httpUser=httpUser} if(httpPass){payload.httpPass=httpPass} -return http.post(path,{'content-type':'application/json'},payload)},getWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.post(path,{'content-type':'application/json',},payload)},getWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"')} -let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateWebhook:function(projectId,webhookId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateWebhook:function(projectId,webhookId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} if(events===undefined){throw new Error('Missing required parameter: "events"')} @@ -263,46 +272,50 @@ if(url){payload.url=url} if(security){payload.security=security} if(httpUser){payload.httpUser=httpUser} if(httpPass){payload.httpPass=httpPass} -return http.put(path,{'content-type':'application/json'},payload)},deleteWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} +return http.put(path,{'content-type':'application/json',},payload)},deleteWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"')} -let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)}};let storage={listFiles:function(search='',limit=25,offset=0,orderType='ASC'){let path='/storage/files';let payload={};if(search){payload.search=search} +let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)}};let storage={listFiles:function(search='',limit=25,offset=0,orderType='ASC'){let path='/storage/files';let payload={};if(search){payload.search=search} if(limit){payload.limit=limit} if(offset){payload.offset=offset} if(orderType){payload.orderType=orderType} -return http.get(path,{'content-type':'application/json'},payload)},createFile:function(files,read=[],write=[],folderId=''){if(files===undefined){throw new Error('Missing required parameter: "files"')} +return http.get(path,{'content-type':'application/json',},payload)},createFile:function(files,read,write,folderId=''){if(files===undefined){throw new Error('Missing required parameter: "files"')} +if(read===undefined){throw new Error('Missing required parameter: "read"')} +if(write===undefined){throw new Error('Missing required parameter: "write"')} let path='/storage/files';let payload={};if(files){payload.files=files} if(read){payload.read=read} if(write){payload.write=write} if(folderId){payload.folderId=folderId} -return http.post(path,{'content-type':'multipart/form-data'},payload)},getFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} -let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateFile:function(fileId,read=[],write=[],folderId=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} +return http.post(path,{'content-type':'multipart/form-data',},payload)},getFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} +let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateFile:function(fileId,read,write,folderId=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} +if(read===undefined){throw new Error('Missing required parameter: "read"')} +if(write===undefined){throw new Error('Missing required parameter: "write"')} let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(read){payload.read=read} if(write){payload.write=write} if(folderId){payload.folderId=folderId} -return http.put(path,{'content-type':'application/json'},payload)},deleteFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} -let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},getFileDownload:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} -let path='/storage/files/{fileId}/download'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},getFilePreview:function(fileId,width=0,height=0,quality=100,background='',output=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} +return http.put(path,{'content-type':'application/json',},payload)},deleteFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} +let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},getFileDownload:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} +let path='/storage/files/{fileId}/download'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},getFilePreview:function(fileId,width=0,height=0,quality=100,background='',output=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} let path='/storage/files/{fileId}/preview'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(width){payload.width=width} if(height){payload.height=height} if(quality){payload.quality=quality} if(background){payload.background=background} if(output){payload.output=output} -return http.get(path,{'content-type':'application/json'},payload)},getFileView:function(fileId,as=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} +return http.get(path,{'content-type':'application/json',},payload)},getFileView:function(fileId,as=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"')} let path='/storage/files/{fileId}/view'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(as){payload.as=as} -return http.get(path,{'content-type':'application/json'},payload)}};let teams={listTeams:function(search='',limit=25,offset=0,orderType='ASC'){let path='/teams';let payload={};if(search){payload.search=search} +return http.get(path,{'content-type':'application/json',},payload)}};let teams={listTeams:function(search='',limit=25,offset=0,orderType='ASC'){let path='/teams';let payload={};if(search){payload.search=search} if(limit){payload.limit=limit} if(offset){payload.offset=offset} if(orderType){payload.orderType=orderType} -return http.get(path,{'content-type':'application/json'},payload)},createTeam:function(name,roles=["owner"]){if(name===undefined){throw new Error('Missing required parameter: "name"')} +return http.get(path,{'content-type':'application/json',},payload)},createTeam:function(name,roles=["owner"]){if(name===undefined){throw new Error('Missing required parameter: "name"')} let path='/teams';let payload={};if(name){payload.name=name} if(roles){payload.roles=roles} -return http.post(path,{'content-type':'application/json'},payload)},getTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} -let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateTeam:function(teamId,name){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} +return http.post(path,{'content-type':'application/json',},payload)},getTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} +let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateTeam:function(teamId,name){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} if(name===undefined){throw new Error('Missing required parameter: "name"')} let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};if(name){payload.name=name} -return http.put(path,{'content-type':'application/json'},payload)},deleteTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} -let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},getTeamMembers:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} -let path='/teams/{teamId}/members'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},createTeamMembership:function(teamId,email,roles,redirect,name=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} +return http.put(path,{'content-type':'application/json',},payload)},deleteTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} +let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},getTeamMembers:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} +let path='/teams/{teamId}/members'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},createTeamMembership:function(teamId,email,roles,redirect,name=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} if(email===undefined){throw new Error('Missing required parameter: "email"')} if(roles===undefined){throw new Error('Missing required parameter: "roles"')} if(redirect===undefined){throw new Error('Missing required parameter: "redirect"')} @@ -310,13 +323,13 @@ let path='/teams/{teamId}/memberships'.replace(new RegExp('{teamId}','g'),teamId if(name){payload.name=name} if(roles){payload.roles=roles} if(redirect){payload.redirect=redirect} -return http.post(path,{'content-type':'application/json'},payload)},deleteTeamMembership:function(teamId,inviteId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} +return http.post(path,{'content-type':'application/json',},payload)},deleteTeamMembership:function(teamId,inviteId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"')} -let path='/teams/{teamId}/memberships/{inviteId}'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},createTeamMembershipResend:function(teamId,inviteId,redirect){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} +let path='/teams/{teamId}/memberships/{inviteId}'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},createTeamMembershipResend:function(teamId,inviteId,redirect){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"')} if(redirect===undefined){throw new Error('Missing required parameter: "redirect"')} let path='/teams/{teamId}/memberships/{inviteId}/resend'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};if(redirect){payload.redirect=redirect} -return http.post(path,{'content-type':'application/json'},payload)},updateTeamMembershipStatus:function(teamId,inviteId,userId,secret,success='',failure=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} +return http.post(path,{'content-type':'application/json',},payload)},updateTeamMembershipStatus:function(teamId,inviteId,userId,secret,success='',failure=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"')} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"')} if(userId===undefined){throw new Error('Missing required parameter: "userId"')} if(secret===undefined){throw new Error('Missing required parameter: "secret"')} @@ -328,23 +341,23 @@ payload.project=config.project;return iframe('patch',path,payload)}};let users={ if(limit){payload.limit=limit} if(offset){payload.offset=offset} if(orderType){payload.orderType=orderType} -return http.get(path,{'content-type':'application/json'},payload)},createUser:function(email,password,name=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} +return http.get(path,{'content-type':'application/json',},payload)},createUser:function(email,password,name=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(password===undefined){throw new Error('Missing required parameter: "password"')} let path='/users';let payload={};if(email){payload.email=email} if(password){payload.password=password} if(name){payload.name=name} -return http.post(path,{'content-type':'application/json'},payload)},getUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} -let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},getUserLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} -let path='/users/{userId}/logs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},getUserPrefs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} -let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},updateUserPrefs:function(userId,prefs){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +return http.post(path,{'content-type':'application/json',},payload)},getUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},getUserLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +let path='/users/{userId}/logs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},getUserPrefs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateUserPrefs:function(userId,prefs){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} if(prefs===undefined){throw new Error('Missing required parameter: "prefs"')} let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};if(prefs){payload.prefs=prefs} -return http.patch(path,{'content-type':'application/json'},payload)},getUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} -let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload)},deleteUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} -let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.delete(path,{'content-type':'application/json'},payload)},deleteUserSession:function(userId,sessionId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +return http.patch(path,{'content-type':'application/json',},payload)},getUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},deleteUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},deleteUserSession:function(userId,sessionId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} if(sessionId===undefined){throw new Error('Missing required parameter: "sessionId"')} let path='/users/{userId}/sessions/:session'.replace(new RegExp('{userId}','g'),userId);let payload={};if(sessionId){payload.sessionId=sessionId} -return http.delete(path,{'content-type':'application/json'},payload)},updateUserStatus:function(userId,status){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +return http.delete(path,{'content-type':'application/json',},payload)},updateUserStatus:function(userId,status){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} if(status===undefined){throw new Error('Missing required parameter: "status"')} let path='/users/{userId}/status'.replace(new RegExp('{userId}','g'),userId);let payload={};if(status){payload.status=status} -return http.patch(path,{'content-type':'application/json'},payload)}};return{setEndpoint:setEndpoint,setProject:setProject,setKey:setKey,setLocale:setLocale,setMode:setMode,account:account,auth:auth,avatars:avatars,database:database,locale:locale,projects:projects,storage:storage,teams:teams,users:users}};if(typeof module!=="undefined"){module.exports=window.Appwrite}})((typeof window!=="undefined")?window:{}) \ No newline at end of file +return http.patch(path,{'content-type':'application/json',},payload)}};return{setEndpoint:setEndpoint,setProject:setProject,setKey:setKey,setLocale:setLocale,setMode:setMode,account:account,auth:auth,avatars:avatars,database:database,locale:locale,projects:projects,storage:storage,teams:teams,users:users}};if(typeof module!=="undefined"){module.exports=window.Appwrite}})((typeof window!=="undefined")?window:{}) \ No newline at end of file diff --git a/app/sdks/node/README.md b/app/sdks/node/README.md index 286b14bc9d..93a34a291c 100644 --- a/app/sdks/node/README.md +++ b/app/sdks/node/README.md @@ -1,9 +1,9 @@ # Appwrite SDK for NodeJS ![License](https://img.shields.io/github/license/appwrite/sdk-for-node.svg?v=1) -![Version](https://img.shields.io/badge/api%20version-0.2.0-blue.svg?v=1) +![Version](https://img.shields.io/badge/api%20version-0.3.0-blue.svg?v=1) -**This SDK is compatible with Appwrite server version 0.2.0. For older versions, please check previous releases.** +**This SDK is compatible with Appwrite server version 0.3.0. For older versions, please check previous releases.** Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) diff --git a/app/sdks/node/docs/examples/auth/login.md b/app/sdks/node/docs/examples/auth/login.md index f71a562e09..1033b6f30f 100644 --- a/app/sdks/node/docs/examples/auth/login.md +++ b/app/sdks/node/docs/examples/auth/login.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = auth.login('email@example.com', 'password', 'https://example.com', 'https://example.com'); +let promise = auth.login('email@example.com', 'password'); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/docs/examples/auth/oauth.md b/app/sdks/node/docs/examples/auth/oauth.md index e2e5886847..4a2230c686 100644 --- a/app/sdks/node/docs/examples/auth/oauth.md +++ b/app/sdks/node/docs/examples/auth/oauth.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = auth.oauth('bitbucket'); +let promise = auth.oauth('bitbucket', 'https://example.com', 'https://example.com'); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/docs/examples/database/create-collection.md b/app/sdks/node/docs/examples/database/create-collection.md index 912dab3e48..c7ea8d43e1 100644 --- a/app/sdks/node/docs/examples/database/create-collection.md +++ b/app/sdks/node/docs/examples/database/create-collection.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = database.createCollection('[NAME]'); +let promise = database.createCollection('[NAME]', [], [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/docs/examples/database/create-document.md b/app/sdks/node/docs/examples/database/create-document.md index 458e6e97d4..9a15f133d5 100644 --- a/app/sdks/node/docs/examples/database/create-document.md +++ b/app/sdks/node/docs/examples/database/create-document.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = database.createDocument('[COLLECTION_ID]', '{}'); +let promise = database.createDocument('[COLLECTION_ID]', '{}', [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/docs/examples/database/update-collection.md b/app/sdks/node/docs/examples/database/update-collection.md index fd3480d1e0..d393606e8f 100644 --- a/app/sdks/node/docs/examples/database/update-collection.md +++ b/app/sdks/node/docs/examples/database/update-collection.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = database.updateCollection('[COLLECTION_ID]', '[NAME]'); +let promise = database.updateCollection('[COLLECTION_ID]', '[NAME]', [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/docs/examples/database/update-document.md b/app/sdks/node/docs/examples/database/update-document.md index 1284e7b646..b281187da4 100644 --- a/app/sdks/node/docs/examples/database/update-document.md +++ b/app/sdks/node/docs/examples/database/update-document.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = database.updateDocument('[COLLECTION_ID]', '[DOCUMENT_ID]', '{}'); +let promise = database.updateDocument('[COLLECTION_ID]', '[DOCUMENT_ID]', '{}', [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/docs/examples/locale/get-continents.md b/app/sdks/node/docs/examples/locale/get-continents.md new file mode 100644 index 0000000000..3c2143cf06 --- /dev/null +++ b/app/sdks/node/docs/examples/locale/get-continents.md @@ -0,0 +1,19 @@ +const sdk = require('node-appwrite'); + +// Init SDK +let client = new sdk.Client(); + +let locale = new sdk.Locale(client); + +client + .setProject('') + .setKey('') +; + +let promise = locale.getContinents(); + +promise.then(function (response) { + console.log(response); +}, function (error) { + console.log(error); +}); \ No newline at end of file diff --git a/app/sdks/node/docs/examples/projects/create-webhook.md b/app/sdks/node/docs/examples/projects/create-webhook.md index 656f6568db..8135e8d66e 100644 --- a/app/sdks/node/docs/examples/projects/create-webhook.md +++ b/app/sdks/node/docs/examples/projects/create-webhook.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = projects.createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 1); +let promise = projects.createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 0); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/docs/examples/storage/create-file.md b/app/sdks/node/docs/examples/storage/create-file.md index f9da6bb145..f0c9d4c5a8 100644 --- a/app/sdks/node/docs/examples/storage/create-file.md +++ b/app/sdks/node/docs/examples/storage/create-file.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = storage.createFile(document.getElementById('uploader').files[0]); +let promise = storage.createFile(document.getElementById('uploader').files[0], [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/docs/examples/storage/update-file.md b/app/sdks/node/docs/examples/storage/update-file.md index d5bd4de646..3741785996 100644 --- a/app/sdks/node/docs/examples/storage/update-file.md +++ b/app/sdks/node/docs/examples/storage/update-file.md @@ -10,7 +10,7 @@ client .setKey('') ; -let promise = storage.updateFile('[FILE_ID]'); +let promise = storage.updateFile('[FILE_ID]', [], []); promise.then(function (response) { console.log(response); diff --git a/app/sdks/node/lib/client.js b/app/sdks/node/lib/client.js index f3329fe080..782fcc29d8 100644 --- a/app/sdks/node/lib/client.js +++ b/app/sdks/node/lib/client.js @@ -7,7 +7,7 @@ class Client { this.endpoint = 'https://appwrite.io/v1'; this.headers = { 'content-type': '', - 'x-sdk-version': 'appwrite:nodejs:1.0.26', + 'x-sdk-version': 'appwrite:nodejs:1.0.30', }; this.selfSigned = false; } diff --git a/app/sdks/node/lib/services/account.js b/app/sdks/node/lib/services/account.js index 05eee7c34e..313e9ce78c 100644 --- a/app/sdks/node/lib/services/account.js +++ b/app/sdks/node/lib/services/account.js @@ -13,8 +13,10 @@ class Account extends Service { async get() { let path = '/account'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -29,8 +31,10 @@ class Account extends Service { async delete() { let path = '/account'; - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -50,8 +54,10 @@ class Account extends Service { async updateEmail(email, password) { let path = '/account/email'; - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'email': email, 'password': password }); @@ -69,8 +75,10 @@ class Account extends Service { async updateName(name) { let path = '/account/name'; - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'name': name }); } @@ -89,8 +97,10 @@ class Account extends Service { async updatePassword(password, oldPassword) { let path = '/account/password'; - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'password': password, 'old-password': oldPassword }); @@ -107,8 +117,10 @@ class Account extends Service { async getPrefs() { let path = '/account/prefs'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -125,8 +137,10 @@ class Account extends Service { async updatePrefs(prefs) { let path = '/account/prefs'; - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'prefs': prefs }); } @@ -143,8 +157,10 @@ class Account extends Service { async getSecurity() { let path = '/account/security'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -160,8 +176,10 @@ class Account extends Service { async getSessions() { let path = '/account/sessions'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } } diff --git a/app/sdks/node/lib/services/auth.js b/app/sdks/node/lib/services/auth.js index f31d24b01f..03c2cf1e26 100644 --- a/app/sdks/node/lib/services/auth.js +++ b/app/sdks/node/lib/services/auth.js @@ -10,9 +10,9 @@ class Auth extends Service { * redirect URL\'s back to your app when login is completed. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * When accessing this route using Javascript from the browser, success and * failure parameter URLs are required. Appwrite server will respond with a @@ -27,11 +27,13 @@ class Auth extends Service { * @throws Exception * @return {} */ - async login(email, password, success, failure) { + async login(email, password, success = '', failure = '') { let path = '/auth/login'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'email': email, 'password': password, 'success': success, @@ -43,7 +45,7 @@ class Auth extends Service { * Logout Current Session * * Use this endpoint to log out the currently logged in user from his account. - * When succeed this endpoint will delete the user session and remove the + * When successful this endpoint will delete the user session and remove the * session secret cookie from the user client. * * @throws Exception @@ -52,8 +54,10 @@ class Auth extends Service { async logout() { let path = '/auth/logout'; - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -71,8 +75,10 @@ class Auth extends Service { async logoutBySession(id) { let path = '/auth/logout/{id}'.replace(new RegExp('{id}', 'g'), id); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -85,11 +91,13 @@ class Auth extends Service { * @throws Exception * @return {} */ - async oauth(provider, success = '', failure = '') { + async oauth(provider, success, failure) { let path = '/auth/oauth/{provider}'.replace(new RegExp('{provider}', 'g'), provider); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'success': success, 'failure': failure }); @@ -113,8 +121,10 @@ class Auth extends Service { async recovery(email, reset) { let path = '/auth/recovery'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'email': email, 'reset': reset }); @@ -129,9 +139,9 @@ class Auth extends Service { * /auth/recovery endpoint. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param string userId * @param string token @@ -143,8 +153,10 @@ class Auth extends Service { async recoveryReset(userId, token, passwordA, passwordB) { let path = '/auth/recovery/reset'; - return await this.client.call('put', path, {'content-type': 'application/json'}, - { + return await this.client.call('put', path, { + 'content-type': 'application/json', + }, + { 'userId': userId, 'token': token, 'password-a': passwordA, @@ -156,7 +168,7 @@ class Auth extends Service { * Register User * * Use this endpoint to allow a new user to register an account in your - * project. Use the success and failure URL's to redirect users back to your + * project. Use the success and failure URLs to redirect users back to your * application after signup completes. * * If registration completes successfully user will be sent with a @@ -166,9 +178,9 @@ class Auth extends Service { * /auth/confirm endpoint to complete the account confirmation. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * When accessing this route using Javascript from the browser, success and * failure parameter URLs are required. Appwrite server will respond with a @@ -188,8 +200,10 @@ class Auth extends Service { async register(email, password, confirm, success = '', failure = '', name = '') { let path = '/auth/register'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'email': email, 'password': password, 'confirm': confirm, @@ -215,8 +229,10 @@ class Auth extends Service { async confirm(userId, token) { let path = '/auth/register/confirm'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'userId': userId, 'token': token }); @@ -226,13 +242,13 @@ class Auth extends Service { * Resend Confirmation * * This endpoint allows the user to request your app to resend him his email - * confirmation message. The redirect arguments acts the same way as in + * confirmation message. The redirect arguments act the same way as in * /auth/register endpoint. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param string confirm * @throws Exception @@ -241,8 +257,10 @@ class Auth extends Service { async confirmResend(confirm) { let path = '/auth/register/confirm/resend'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'confirm': confirm }); } diff --git a/app/sdks/node/lib/services/avatars.js b/app/sdks/node/lib/services/avatars.js index 49b682e7eb..ef2295c2ae 100644 --- a/app/sdks/node/lib/services/avatars.js +++ b/app/sdks/node/lib/services/avatars.js @@ -5,8 +5,8 @@ class Avatars extends Service { /** * Get Browser Icon * - * You can use this endpoint to show different browser icons to your users, - * The code argument receives the browser code as appear in your user + * 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 * /account/sessions endpoint. Use width, height and quality arguments to * change the output settings. * @@ -20,8 +20,10 @@ class Avatars extends Service { async getBrowser(code, width = 100, height = 100, quality = 100) { let path = '/avatars/browsers/{code}'.replace(new RegExp('{code}', 'g'), code); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'width': width, 'height': height, 'quality': quality @@ -31,7 +33,7 @@ class Avatars extends Service { /** * Get Credit Card Icon * - * Need to display your users with your billing method or there payment + * Need to display your users with your billing method or their payment * methods? 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. @@ -46,8 +48,10 @@ class Avatars extends Service { async getCreditCard(code, width = 100, height = 100, quality = 100) { let path = '/avatars/credit-cards/{code}'.replace(new RegExp('{code}', 'g'), code); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'width': width, 'height': height, 'quality': quality @@ -67,8 +71,10 @@ class Avatars extends Service { async getFavicon(url) { let path = '/avatars/favicon'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'url': url }); } @@ -77,7 +83,7 @@ class Avatars extends Service { * Get Country Flag * * You can use this endpoint to show different country flags icons to your - * users, The code argument receives the a 2 letter country code. Use width, + * users. The code argument receives the 2 letter country code. Use width, * height and quality arguments to change the output settings. * * @param string code @@ -90,8 +96,10 @@ class Avatars extends Service { async getFlag(code, width = 100, height = 100, quality = 100) { let path = '/avatars/flags/{code}'.replace(new RegExp('{code}', 'g'), code); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'width': width, 'height': height, 'quality': quality @@ -103,7 +111,7 @@ class Avatars extends Service { * * 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 cases, you want to make sure a 3rd party + * remote images in your app or in case you want to make sure a 3rd party * image is properly served using a TLS protocol. * * @param string url @@ -115,8 +123,10 @@ class Avatars extends Service { async getImage(url, width = 400, height = 400) { let path = '/avatars/image'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'url': url, 'width': width, 'height': height @@ -139,8 +149,10 @@ class Avatars extends Service { async getQR(text, size = 400, margin = 1, download = 0) { let path = '/avatars/qr'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'text': text, 'size': size, 'margin': margin, diff --git a/app/sdks/node/lib/services/database.js b/app/sdks/node/lib/services/database.js index c75bd69dba..1668def2fe 100644 --- a/app/sdks/node/lib/services/database.js +++ b/app/sdks/node/lib/services/database.js @@ -20,8 +20,10 @@ class Database extends Service { async listCollections(search = '', limit = 25, offset = 0, orderType = 'ASC') { let path = '/database'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'search': search, 'limit': limit, 'offset': offset, @@ -41,11 +43,13 @@ class Database extends Service { * @throws Exception * @return {} */ - async createCollection(name, read = [], write = [], rules = []) { + async createCollection(name, read, write, rules) { let path = '/database'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'read': read, 'write': write, @@ -66,8 +70,10 @@ class Database extends Service { async getCollection(collectionId) { let path = '/database/{collectionId}'.replace(new RegExp('{collectionId}', 'g'), collectionId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -84,11 +90,13 @@ class Database extends Service { * @throws Exception * @return {} */ - async updateCollection(collectionId, name, read = [], write = [], rules = []) { + async updateCollection(collectionId, name, read, write, rules = []) { let path = '/database/{collectionId}'.replace(new RegExp('{collectionId}', 'g'), collectionId); - return await this.client.call('put', path, {'content-type': 'application/json'}, - { + return await this.client.call('put', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'read': read, 'write': write, @@ -109,8 +117,10 @@ class Database extends Service { async deleteCollection(collectionId) { let path = '/database/{collectionId}'.replace(new RegExp('{collectionId}', 'g'), collectionId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -138,8 +148,10 @@ class Database extends Service { async listDocuments(collectionId, filters = [], offset = 0, limit = 50, orderField = '$uid', orderType = 'ASC', orderCast = 'string', search = '', first = 0, last = 0) { let path = '/database/{collectionId}/documents'.replace(new RegExp('{collectionId}', 'g'), collectionId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'filters': filters, 'offset': offset, 'limit': limit, @@ -167,11 +179,13 @@ class Database extends Service { * @throws Exception * @return {} */ - async createDocument(collectionId, data, read = [], write = [], parentDocument = '', parentProperty = '', parentPropertyType = 'assign') { + async createDocument(collectionId, data, read, write, parentDocument = '', parentProperty = '', parentPropertyType = 'assign') { let path = '/database/{collectionId}/documents'.replace(new RegExp('{collectionId}', 'g'), collectionId); - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'data': data, 'read': read, 'write': write, @@ -195,8 +209,10 @@ class Database extends Service { async getDocument(collectionId, documentId) { let path = '/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}', 'g'), collectionId).replace(new RegExp('{documentId}', 'g'), documentId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -211,11 +227,13 @@ class Database extends Service { * @throws Exception * @return {} */ - async updateDocument(collectionId, documentId, data, read = [], write = []) { + async updateDocument(collectionId, documentId, data, read, write) { let path = '/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}', 'g'), collectionId).replace(new RegExp('{documentId}', 'g'), documentId); - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'data': data, 'read': read, 'write': write @@ -237,8 +255,10 @@ class Database extends Service { async deleteDocument(collectionId, documentId) { let path = '/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}', 'g'), collectionId).replace(new RegExp('{documentId}', 'g'), documentId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } } diff --git a/app/sdks/node/lib/services/locale.js b/app/sdks/node/lib/services/locale.js index 0a9ffad1a9..8a37c24882 100644 --- a/app/sdks/node/lib/services/locale.js +++ b/app/sdks/node/lib/services/locale.js @@ -7,7 +7,7 @@ class Locale extends Service { * * 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 + * suggested currency. You can use the locale header to get the data in a * supported language. * * @throws Exception @@ -16,15 +16,36 @@ class Locale extends Service { async getLocale() { let path = '/locale'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } /** * List Countries * - * List of all countries. You can use the locale header to get the data in + * List of all continents. You can use the locale header to get the data in a + * supported language. + * + * @throws Exception + * @return {} + */ + async getContinents() { + let path = '/locale/continents'; + + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { + }); + } + + /** + * List Countries + * + * List of all countries. You can use the locale header to get the data in a * supported language. * * @throws Exception @@ -33,8 +54,10 @@ class Locale extends Service { async getCountries() { let path = '/locale/countries'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -42,7 +65,7 @@ class Locale extends Service { * List EU Countries * * List of all countries that are currently members of the EU. You can use the - * locale header to get the data in supported language. UK brexit date is + * locale header to get the data in a supported language. UK brexit date is * currently set to 2019-10-31 and will be updated if and when needed. * * @throws Exception @@ -51,8 +74,10 @@ class Locale extends Service { async getCountriesEU() { let path = '/locale/countries/eu'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -60,7 +85,7 @@ class Locale extends Service { * List Countries Phone Codes * * List of all countries phone codes. You can use the locale header to get the - * data in supported language. + * data in a supported language. * * @throws Exception * @return {} @@ -68,8 +93,10 @@ class Locale extends Service { async getCountriesPhones() { let path = '/locale/countries/phones'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -78,7 +105,7 @@ class Locale extends Service { * * List of all currencies, including currency symol, name, plural, and decimal * digits for all major and minor currencies. You can use the locale header to - * get the data in supported language. + * get the data in a supported language. * * @throws Exception * @return {} @@ -86,8 +113,10 @@ class Locale extends Service { async getCurrencies() { let path = '/locale/currencies'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } } diff --git a/app/sdks/node/lib/services/projects.js b/app/sdks/node/lib/services/projects.js index 7995345636..58a03980a2 100644 --- a/app/sdks/node/lib/services/projects.js +++ b/app/sdks/node/lib/services/projects.js @@ -11,8 +11,10 @@ class Projects extends Service { async listProjects() { let path = '/projects'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -36,8 +38,10 @@ class Projects extends Service { async createProject(name, teamId, description = '', logo = '', url = '', legalName = '', legalCountry = '', legalState = '', legalCity = '', legalAddress = '', legalTaxId = '') { let path = '/projects'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'teamId': teamId, 'description': description, @@ -62,8 +66,10 @@ class Projects extends Service { async getProject(projectId) { let path = '/projects/{projectId}'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -87,8 +93,10 @@ class Projects extends Service { async updateProject(projectId, name, description = '', logo = '', url = '', legalName = '', legalCountry = '', legalState = '', legalCity = '', legalAddress = '', legalTaxId = '') { let path = '/projects/{projectId}'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'description': description, 'logo': logo, @@ -112,8 +120,10 @@ class Projects extends Service { async deleteProject(projectId) { let path = '/projects/{projectId}'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -127,8 +137,10 @@ class Projects extends Service { async listKeys(projectId) { let path = '/projects/{projectId}/keys'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -144,8 +156,10 @@ class Projects extends Service { async createKey(projectId, name, scopes) { let path = '/projects/{projectId}/keys'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'scopes': scopes }); @@ -162,8 +176,10 @@ class Projects extends Service { async getKey(projectId, keyId) { let path = '/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{keyId}', 'g'), keyId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -180,8 +196,10 @@ class Projects extends Service { async updateKey(projectId, keyId, name, scopes) { let path = '/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{keyId}', 'g'), keyId); - return await this.client.call('put', path, {'content-type': 'application/json'}, - { + return await this.client.call('put', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'scopes': scopes }); @@ -198,8 +216,10 @@ class Projects extends Service { async deleteKey(projectId, keyId) { let path = '/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{keyId}', 'g'), keyId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -216,8 +236,10 @@ class Projects extends Service { async updateProjectOAuth(projectId, provider, appId = '', secret = '') { let path = '/projects/{projectId}/oauth'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'provider': provider, 'appId': appId, 'secret': secret @@ -234,8 +256,10 @@ class Projects extends Service { async listPlatforms(projectId) { let path = '/projects/{projectId}/platforms'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -254,8 +278,10 @@ class Projects extends Service { async createPlatform(projectId, type, name, key = '', store = '', url = '') { let path = '/projects/{projectId}/platforms'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'type': type, 'name': name, 'key': key, @@ -275,8 +301,10 @@ class Projects extends Service { async getPlatform(projectId, platformId) { let path = '/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{platformId}', 'g'), platformId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -295,8 +323,10 @@ class Projects extends Service { async updatePlatform(projectId, platformId, name, key = '', store = '', url = '') { let path = '/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{platformId}', 'g'), platformId); - return await this.client.call('put', path, {'content-type': 'application/json'}, - { + return await this.client.call('put', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'key': key, 'store': store, @@ -315,8 +345,10 @@ class Projects extends Service { async deletePlatform(projectId, platformId) { let path = '/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{platformId}', 'g'), platformId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -330,8 +362,10 @@ class Projects extends Service { async listTasks(projectId) { let path = '/projects/{projectId}/tasks'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -354,8 +388,10 @@ class Projects extends Service { async createTask(projectId, name, status, schedule, security, httpMethod, httpUrl, httpHeaders = [], httpUser = '', httpPass = '') { let path = '/projects/{projectId}/tasks'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'status': status, 'schedule': schedule, @@ -379,8 +415,10 @@ class Projects extends Service { async getTask(projectId, taskId) { let path = '/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{taskId}', 'g'), taskId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -404,8 +442,10 @@ class Projects extends Service { async updateTask(projectId, taskId, name, status, schedule, security, httpMethod, httpUrl, httpHeaders = [], httpUser = '', httpPass = '') { let path = '/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{taskId}', 'g'), taskId); - return await this.client.call('put', path, {'content-type': 'application/json'}, - { + return await this.client.call('put', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'status': status, 'schedule': schedule, @@ -429,8 +469,10 @@ class Projects extends Service { async deleteTask(projectId, taskId) { let path = '/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{taskId}', 'g'), taskId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -444,8 +486,10 @@ class Projects extends Service { async getProjectUsage(projectId) { let path = '/projects/{projectId}/usage'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -459,8 +503,10 @@ class Projects extends Service { async listWebhooks(projectId) { let path = '/projects/{projectId}/webhooks'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -480,8 +526,10 @@ class Projects extends Service { async createWebhook(projectId, name, events, url, security, httpUser = '', httpPass = '') { let path = '/projects/{projectId}/webhooks'.replace(new RegExp('{projectId}', 'g'), projectId); - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'events': events, 'url': url, @@ -502,8 +550,10 @@ class Projects extends Service { async getWebhook(projectId, webhookId) { let path = '/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{webhookId}', 'g'), webhookId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -524,8 +574,10 @@ class Projects extends Service { async updateWebhook(projectId, webhookId, name, events, url, security, httpUser = '', httpPass = '') { let path = '/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{webhookId}', 'g'), webhookId); - return await this.client.call('put', path, {'content-type': 'application/json'}, - { + return await this.client.call('put', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'events': events, 'url': url, @@ -546,8 +598,10 @@ class Projects extends Service { async deleteWebhook(projectId, webhookId) { let path = '/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}', 'g'), projectId).replace(new RegExp('{webhookId}', 'g'), webhookId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } } diff --git a/app/sdks/node/lib/services/storage.js b/app/sdks/node/lib/services/storage.js index 7498022ddf..4d36ffb025 100644 --- a/app/sdks/node/lib/services/storage.js +++ b/app/sdks/node/lib/services/storage.js @@ -19,8 +19,10 @@ class Storage extends Service { async listFiles(search = '', limit = 25, offset = 0, orderType = 'ASC') { let path = '/storage/files'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'search': search, 'limit': limit, 'offset': offset, @@ -42,11 +44,13 @@ class Storage extends Service { * @throws Exception * @return {} */ - async createFile(files, read = [], write = [], folderId = '') { + async createFile(files, read, write, folderId = '') { let path = '/storage/files'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'multipart/form-data', + }, + { 'files': files, 'read': read, 'write': write, @@ -67,8 +71,10 @@ class Storage extends Service { async getFile(fileId) { let path = '/storage/files/{fileId}'.replace(new RegExp('{fileId}', 'g'), fileId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -85,11 +91,13 @@ class Storage extends Service { * @throws Exception * @return {} */ - async updateFile(fileId, read = [], write = [], folderId = '') { + async updateFile(fileId, read, write, folderId = '') { let path = '/storage/files/{fileId}'.replace(new RegExp('{fileId}', 'g'), fileId); - return await this.client.call('put', path, {'content-type': 'application/json'}, - { + return await this.client.call('put', path, { + 'content-type': 'application/json', + }, + { 'read': read, 'write': write, 'folderId': folderId @@ -109,8 +117,10 @@ class Storage extends Service { async deleteFile(fileId) { let path = '/storage/files/{fileId}'.replace(new RegExp('{fileId}', 'g'), fileId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -128,8 +138,10 @@ class Storage extends Service { async getFileDownload(fileId) { let path = '/storage/files/{fileId}/download'.replace(new RegExp('{fileId}', 'g'), fileId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -153,8 +165,10 @@ class Storage extends Service { async getFilePreview(fileId, width = 0, height = 0, quality = 100, background = '', output = '') { let path = '/storage/files/{fileId}/preview'.replace(new RegExp('{fileId}', 'g'), fileId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'width': width, 'height': height, 'quality': quality, @@ -177,8 +191,10 @@ class Storage extends Service { async getFileView(fileId, as = '') { let path = '/storage/files/{fileId}/view'.replace(new RegExp('{fileId}', 'g'), fileId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'as': as }); } diff --git a/app/sdks/node/lib/services/teams.js b/app/sdks/node/lib/services/teams.js index a1bc682322..181a060d7c 100644 --- a/app/sdks/node/lib/services/teams.js +++ b/app/sdks/node/lib/services/teams.js @@ -19,8 +19,10 @@ class Teams extends Service { async listTeams(search = '', limit = 25, offset = 0, orderType = 'ASC') { let path = '/teams'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'search': search, 'limit': limit, 'offset': offset, @@ -44,8 +46,10 @@ class Teams extends Service { async createTeam(name, roles = ["owner"]) { let path = '/teams'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'name': name, 'roles': roles }); @@ -64,8 +68,10 @@ class Teams extends Service { async getTeam(teamId) { let path = '/teams/{teamId}'.replace(new RegExp('{teamId}', 'g'), teamId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -83,8 +89,10 @@ class Teams extends Service { async updateTeam(teamId, name) { let path = '/teams/{teamId}'.replace(new RegExp('{teamId}', 'g'), teamId); - return await this.client.call('put', path, {'content-type': 'application/json'}, - { + return await this.client.call('put', path, { + 'content-type': 'application/json', + }, + { 'name': name }); } @@ -102,8 +110,10 @@ class Teams extends Service { async deleteTeam(teamId) { let path = '/teams/{teamId}'.replace(new RegExp('{teamId}', 'g'), teamId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -120,8 +130,10 @@ class Teams extends Service { async getTeamMembers(teamId) { let path = '/teams/{teamId}/members'.replace(new RegExp('{teamId}', 'g'), teamId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -153,8 +165,10 @@ class Teams extends Service { async createTeamMembership(teamId, email, roles, redirect, name = '') { let path = '/teams/{teamId}/memberships'.replace(new RegExp('{teamId}', 'g'), teamId); - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'email': email, 'name': name, 'roles': roles, @@ -176,8 +190,10 @@ class Teams extends Service { async deleteTeamMembership(teamId, inviteId) { let path = '/teams/{teamId}/memberships/{inviteId}'.replace(new RegExp('{teamId}', 'g'), teamId).replace(new RegExp('{inviteId}', 'g'), inviteId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -196,8 +212,10 @@ class Teams extends Service { async createTeamMembershipResend(teamId, inviteId, redirect) { let path = '/teams/{teamId}/memberships/{inviteId}/resend'.replace(new RegExp('{teamId}', 'g'), teamId).replace(new RegExp('{inviteId}', 'g'), inviteId); - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'redirect': redirect }); } @@ -233,8 +251,10 @@ class Teams extends Service { async updateTeamMembershipStatus(teamId, inviteId, userId, secret, success = '', failure = '') { let path = '/teams/{teamId}/memberships/{inviteId}/status'.replace(new RegExp('{teamId}', 'g'), teamId).replace(new RegExp('{inviteId}', 'g'), inviteId); - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'userId': userId, 'secret': secret, 'success': success, diff --git a/app/sdks/node/lib/services/users.js b/app/sdks/node/lib/services/users.js index 6367acad4b..85da0ae9b8 100644 --- a/app/sdks/node/lib/services/users.js +++ b/app/sdks/node/lib/services/users.js @@ -18,8 +18,10 @@ class Users extends Service { async listUsers(search = '', limit = 25, offset = 0, orderType = 'ASC') { let path = '/users'; - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { 'search': search, 'limit': limit, 'offset': offset, @@ -41,8 +43,10 @@ class Users extends Service { async createUser(email, password, name = '') { let path = '/users'; - return await this.client.call('post', path, {'content-type': 'application/json'}, - { + return await this.client.call('post', path, { + 'content-type': 'application/json', + }, + { 'email': email, 'password': password, 'name': name @@ -61,8 +65,10 @@ class Users extends Service { async getUser(userId) { let path = '/users/{userId}'.replace(new RegExp('{userId}', 'g'), userId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -78,8 +84,10 @@ class Users extends Service { async getUserLogs(userId) { let path = '/users/{userId}/logs'.replace(new RegExp('{userId}', 'g'), userId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -95,13 +103,15 @@ class Users extends Service { async getUserPrefs(userId) { let path = '/users/{userId}/prefs'.replace(new RegExp('{userId}', 'g'), userId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } /** - * Update Account Prefs + * Update User Prefs * * Update user preferences by its unique ID. You can pass only the specific * settings you wish to update. @@ -114,8 +124,10 @@ class Users extends Service { async updateUserPrefs(userId, prefs) { let path = '/users/{userId}/prefs'.replace(new RegExp('{userId}', 'g'), userId); - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'prefs': prefs }); } @@ -132,8 +144,10 @@ class Users extends Service { async getUserSessions(userId) { let path = '/users/{userId}/sessions'.replace(new RegExp('{userId}', 'g'), userId); - return await this.client.call('get', path, {'content-type': 'application/json'}, - { + return await this.client.call('get', path, { + 'content-type': 'application/json', + }, + { }); } @@ -149,8 +163,10 @@ class Users extends Service { async deleteUserSessions(userId) { let path = '/users/{userId}/sessions'.replace(new RegExp('{userId}', 'g'), userId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { }); } @@ -167,14 +183,16 @@ class Users extends Service { async deleteUserSession(userId, sessionId) { let path = '/users/{userId}/sessions/:session'.replace(new RegExp('{userId}', 'g'), userId); - return await this.client.call('delete', path, {'content-type': 'application/json'}, - { + return await this.client.call('delete', path, { + 'content-type': 'application/json', + }, + { 'sessionId': sessionId }); } /** - * Update user status + * Update User Status * * Update user status by its unique ID. * @@ -186,8 +204,10 @@ class Users extends Service { async updateUserStatus(userId, status) { let path = '/users/{userId}/status'.replace(new RegExp('{userId}', 'g'), userId); - return await this.client.call('patch', path, {'content-type': 'application/json'}, - { + return await this.client.call('patch', path, { + 'content-type': 'application/json', + }, + { 'status': status }); } diff --git a/app/sdks/node/package.json b/app/sdks/node/package.json index 0680dca105..f422da0649 100644 --- a/app/sdks/node/package.json +++ b/app/sdks/node/package.json @@ -2,7 +2,7 @@ "name": "node-appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)", - "version": "1.0.26", + "version": "1.0.30", "license": "BSD-3-Clause", "main": "index.js", "repository": { diff --git a/app/sdks/php/README.md b/app/sdks/php/README.md index 62f8ddf679..260f8f422a 100644 --- a/app/sdks/php/README.md +++ b/app/sdks/php/README.md @@ -1,9 +1,9 @@ # Appwrite SDK for PHP ![License](https://img.shields.io/github/license/appwrite/sdk-for-php.svg?v=1) -![Version](https://img.shields.io/badge/api%20version-0.2.0-blue.svg?v=1) +![Version](https://img.shields.io/badge/api%20version-0.3.0-blue.svg?v=1) -**This SDK is compatible with Appwrite server version 0.2.0. For older versions, please check previous releases.** +**This SDK is compatible with Appwrite server version 0.3.0. For older versions, please check previous releases.** Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) diff --git a/app/sdks/php/docs/auth.md b/app/sdks/php/docs/auth.md index 19fd6d4a0e..611b5519c5 100644 --- a/app/sdks/php/docs/auth.md +++ b/app/sdks/php/docs/auth.md @@ -8,7 +8,7 @@ POST https://appwrite.io/v1/auth/login ** Allow the user to login into his account by providing a valid email and password combination. Use the success and failure arguments to provide a redirect URL\'s back to your app when login is completed. -Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. +Please notice that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. When accessing this route using Javascript from the browser, success and failure parameter URLs are required. Appwrite server will respond with a 301 redirect status code and will set the user session cookie. This behavior is enforced because modern browsers are limiting 3rd party cookies in XHR of fetch requests to protect user privacy. ** @@ -27,7 +27,7 @@ When accessing this route using Javascript from the browser, success and failure DELETE https://appwrite.io/v1/auth/logout ``` -** Use this endpoint to log out the currently logged in user from his account. When succeed this endpoint will delete the user session and remove the session secret cookie from the user client. ** +** Use this endpoint to log out the currently logged in user from his account. When successful this endpoint will delete the user session and remove the session secret cookie from the user client. ** ## Logout Specific Session @@ -54,8 +54,8 @@ GET https://appwrite.io/v1/auth/oauth/{provider} | Field Name | Type | Description | Default | | --- | --- | --- | --- | | provider | string | **Required** OAuth Provider | | -| success | string | URL to redirect back to your app after a successful login attempt. | | -| failure | string | URL to redirect back to your app after a failed login attempt. | | +| success | string | **Required** URL to redirect back to your app after a successful login attempt. | | +| failure | string | **Required** URL to redirect back to your app after a failed login attempt. | | ## Password Recovery @@ -80,7 +80,7 @@ PUT https://appwrite.io/v1/auth/recovery/reset ** Use this endpoint to complete the user account password reset. Both the **userId** and **token** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the /auth/recovery endpoint. -Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. ** +Please notice that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. ** ### Parameters @@ -97,11 +97,11 @@ Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWA POST https://appwrite.io/v1/auth/register ``` -** Use this endpoint to allow a new user to register an account in your project. Use the success and failure URL's to redirect users back to your application after signup completes. +** Use this endpoint to allow a new user to register an account in your project. Use the success and failure URLs to redirect users back to your application after signup completes. If registration completes successfully user will be sent with a confirmation email in order to confirm he is the owner of the account email address. Use the confirmation parameter to redirect the user from the confirmation email back to your app. When the user is redirected, use the /auth/confirm endpoint to complete the account confirmation. -Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. +Please notice that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. When accessing this route using Javascript from the browser, success and failure parameter URLs are required. Appwrite server will respond with a 301 redirect status code and will set the user session cookie. This behavior is enforced because modern browsers are limiting 3rd party cookies in XHR of fetch requests to protect user privacy. ** @@ -137,9 +137,9 @@ POST https://appwrite.io/v1/auth/register/confirm POST https://appwrite.io/v1/auth/register/confirm/resend ``` -** This endpoint allows the user to request your app to resend him his email confirmation message. The redirect arguments acts the same way as in /auth/register endpoint. +** This endpoint allows the user to request your app to resend him his email confirmation message. The redirect arguments act the same way as in /auth/register endpoint. -Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. ** +Please notice that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. ** ### Parameters diff --git a/app/sdks/php/docs/avatars.md b/app/sdks/php/docs/avatars.md index 9c1c3018aa..1b2eae3af0 100644 --- a/app/sdks/php/docs/avatars.md +++ b/app/sdks/php/docs/avatars.md @@ -6,7 +6,7 @@ GET https://appwrite.io/v1/avatars/browsers/{code} ``` -** You can use this endpoint to show different browser icons to your users, The code argument receives the browser code as appear in your user /account/sessions endpoint. Use width, height and quality arguments to change the output settings. ** +** 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 /account/sessions endpoint. Use width, height and quality arguments to change the output settings. ** ### Parameters @@ -23,7 +23,7 @@ GET https://appwrite.io/v1/avatars/browsers/{code} GET https://appwrite.io/v1/avatars/credit-cards/{code} ``` -** Need to display your users with your billing method or there payment methods? 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. ** +** Need to display your users with your billing method or their payment methods? 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. ** ### Parameters @@ -54,7 +54,7 @@ GET https://appwrite.io/v1/avatars/favicon GET https://appwrite.io/v1/avatars/flags/{code} ``` -** You can use this endpoint to show different country flags icons to your users, The code argument receives the a 2 letter country code. Use width, height and quality arguments to change the output settings. ** +** 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. ** ### Parameters @@ -71,7 +71,7 @@ GET https://appwrite.io/v1/avatars/flags/{code} GET https://appwrite.io/v1/avatars/image ``` -** 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 cases, you want to make sure a 3rd party image is properly served using a TLS protocol. ** +** 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. ** ### Parameters diff --git a/app/sdks/php/docs/database.md b/app/sdks/php/docs/database.md index 3ab8bda823..27466663ff 100644 --- a/app/sdks/php/docs/database.md +++ b/app/sdks/php/docs/database.md @@ -30,9 +30,9 @@ POST https://appwrite.io/v1/database | Field Name | Type | Description | Default | | --- | --- | --- | --- | | name | string | Collection name. | | -| read | array | An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions). | [] | -| write | array | An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions). | [] | -| rules | array | Array of [rule objects](/docs/rules). Each rule define a collection field name, data type and validation | [] | +| read | array | An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | +| write | array | An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | +| rules | array | Array of [rule objects](/docs/rules). Each rule define a collection field name, data type and validation | | ## Get Collection @@ -62,8 +62,8 @@ PUT https://appwrite.io/v1/database/{collectionId} | --- | --- | --- | --- | | collectionId | string | **Required** Collection unique ID. | | | name | string | Collection name. | | -| read | array | An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions). | [] | -| write | array | An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions). | [] | +| read | array | An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | +| write | array | An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | | rules | array | Array of [rule objects](/docs/rules). Each rule define a collection field name, data type and validation | [] | ## Delete Collection @@ -117,8 +117,8 @@ POST https://appwrite.io/v1/database/{collectionId}/documents | --- | --- | --- | --- | | collectionId | string | **Required** Collection unique ID. | | | data | string | Document data as JSON string. | | -| read | array | An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions). | [] | -| write | array | An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions). | [] | +| read | array | An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | +| write | array | An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | | parentDocument | string | Parent document unique ID. Use when you want your new document to be a child of a parent document. | | | parentProperty | string | Parent document property name. Use when you want your new document to be a child of a parent document. | | | parentPropertyType | string | Parent document property connection type. You can set this value to **assign**, **append** or **prepend**, default value is assign. Use when you want your new document to be a child of a parent document. | assign | @@ -151,8 +151,8 @@ PATCH https://appwrite.io/v1/database/{collectionId}/documents/{documentId} | collectionId | string | **Required** Collection unique ID | | | documentId | string | **Required** Document unique ID | | | data | string | Document data as JSON string | | -| read | array | An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions). | [] | -| write | array | An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions). | [] | +| read | array | An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | +| write | array | An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | ## Delete Document diff --git a/app/sdks/php/docs/examples/auth/login.md b/app/sdks/php/docs/examples/auth/login.md index 6b50220268..f282a88e64 100644 --- a/app/sdks/php/docs/examples/auth/login.md +++ b/app/sdks/php/docs/examples/auth/login.md @@ -12,4 +12,4 @@ $client $auth = new Auth($client); -$result = $auth->login('email@example.com', 'password', 'https://example.com', 'https://example.com'); \ No newline at end of file +$result = $auth->login('email@example.com', 'password'); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/auth/oauth.md b/app/sdks/php/docs/examples/auth/oauth.md index 4bc0a4304f..25b8d17613 100644 --- a/app/sdks/php/docs/examples/auth/oauth.md +++ b/app/sdks/php/docs/examples/auth/oauth.md @@ -12,4 +12,4 @@ $client $auth = new Auth($client); -$result = $auth->oauth('bitbucket'); \ No newline at end of file +$result = $auth->oauth('bitbucket', 'https://example.com', 'https://example.com'); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/database/create-collection.md b/app/sdks/php/docs/examples/database/create-collection.md index dc964674c1..183d906905 100644 --- a/app/sdks/php/docs/examples/database/create-collection.md +++ b/app/sdks/php/docs/examples/database/create-collection.md @@ -12,4 +12,4 @@ $client $database = new Database($client); -$result = $database->createCollection('[NAME]'); \ No newline at end of file +$result = $database->createCollection('[NAME]', [], [], []); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/database/create-document.md b/app/sdks/php/docs/examples/database/create-document.md index fc40836c0d..84c4d7fd06 100644 --- a/app/sdks/php/docs/examples/database/create-document.md +++ b/app/sdks/php/docs/examples/database/create-document.md @@ -12,4 +12,4 @@ $client $database = new Database($client); -$result = $database->createDocument('[COLLECTION_ID]', '{}'); \ No newline at end of file +$result = $database->createDocument('[COLLECTION_ID]', '{}', [], []); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/database/update-collection.md b/app/sdks/php/docs/examples/database/update-collection.md index e6996105cd..2576449e5c 100644 --- a/app/sdks/php/docs/examples/database/update-collection.md +++ b/app/sdks/php/docs/examples/database/update-collection.md @@ -12,4 +12,4 @@ $client $database = new Database($client); -$result = $database->updateCollection('[COLLECTION_ID]', '[NAME]'); \ No newline at end of file +$result = $database->updateCollection('[COLLECTION_ID]', '[NAME]', [], []); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/database/update-document.md b/app/sdks/php/docs/examples/database/update-document.md index 510e38808e..2051d09772 100644 --- a/app/sdks/php/docs/examples/database/update-document.md +++ b/app/sdks/php/docs/examples/database/update-document.md @@ -12,4 +12,4 @@ $client $database = new Database($client); -$result = $database->updateDocument('[COLLECTION_ID]', '[DOCUMENT_ID]', '{}'); \ No newline at end of file +$result = $database->updateDocument('[COLLECTION_ID]', '[DOCUMENT_ID]', '{}', [], []); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/locale/get-continents.md b/app/sdks/php/docs/examples/locale/get-continents.md new file mode 100644 index 0000000000..22b1528c0a --- /dev/null +++ b/app/sdks/php/docs/examples/locale/get-continents.md @@ -0,0 +1,15 @@ +setProject('') + ->setKey('') +; + +$locale = new Locale($client); + +$result = $locale->getContinents(); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/projects/create-task.md b/app/sdks/php/docs/examples/projects/create-task.md index 436ebc6f06..fab9e27653 100644 --- a/app/sdks/php/docs/examples/projects/create-task.md +++ b/app/sdks/php/docs/examples/projects/create-task.md @@ -12,4 +12,4 @@ $client $projects = new Projects($client); -$result = $projects->createTask('[PROJECT_ID]', '[NAME]', 'play', '', 1, 'GET', 'https://example.com'); \ No newline at end of file +$result = $projects->createTask('[PROJECT_ID]', '[NAME]', 'play', '', 0, 'GET', 'https://example.com'); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/projects/create-webhook.md b/app/sdks/php/docs/examples/projects/create-webhook.md index 1bf92c8925..6eacda1fc0 100644 --- a/app/sdks/php/docs/examples/projects/create-webhook.md +++ b/app/sdks/php/docs/examples/projects/create-webhook.md @@ -12,4 +12,4 @@ $client $projects = new Projects($client); -$result = $projects->createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 1); \ No newline at end of file +$result = $projects->createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 0); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/projects/update-task.md b/app/sdks/php/docs/examples/projects/update-task.md index 0d9f3fb7a6..59308c5d6d 100644 --- a/app/sdks/php/docs/examples/projects/update-task.md +++ b/app/sdks/php/docs/examples/projects/update-task.md @@ -12,4 +12,4 @@ $client $projects = new Projects($client); -$result = $projects->updateTask('[PROJECT_ID]', '[TASK_ID]', '[NAME]', 'play', '', 1, 'GET', 'https://example.com'); \ No newline at end of file +$result = $projects->updateTask('[PROJECT_ID]', '[TASK_ID]', '[NAME]', 'play', '', 0, 'GET', 'https://example.com'); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/projects/update-webhook.md b/app/sdks/php/docs/examples/projects/update-webhook.md index 6f176a01fb..a7e42dcce2 100644 --- a/app/sdks/php/docs/examples/projects/update-webhook.md +++ b/app/sdks/php/docs/examples/projects/update-webhook.md @@ -12,4 +12,4 @@ $client $projects = new Projects($client); -$result = $projects->updateWebhook('[PROJECT_ID]', '[WEBHOOK_ID]', '[NAME]', [], '[URL]', 1); \ No newline at end of file +$result = $projects->updateWebhook('[PROJECT_ID]', '[WEBHOOK_ID]', '[NAME]', [], '[URL]', 0); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/storage/create-file.md b/app/sdks/php/docs/examples/storage/create-file.md index 88a37d8e86..225b9e2bec 100644 --- a/app/sdks/php/docs/examples/storage/create-file.md +++ b/app/sdks/php/docs/examples/storage/create-file.md @@ -12,4 +12,4 @@ $client $storage = new Storage($client); -$result = $storage->createFile(new \CURLFile('/path/to/file.png', 'image/png', 'file.png')); \ No newline at end of file +$result = $storage->createFile(new \CURLFile('/path/to/file.png', 'image/png', 'file.png'), [], []); \ No newline at end of file diff --git a/app/sdks/php/docs/examples/storage/update-file.md b/app/sdks/php/docs/examples/storage/update-file.md index 93dc6bb18a..637870a7a6 100644 --- a/app/sdks/php/docs/examples/storage/update-file.md +++ b/app/sdks/php/docs/examples/storage/update-file.md @@ -12,4 +12,4 @@ $client $storage = new Storage($client); -$result = $storage->updateFile('[FILE_ID]'); \ No newline at end of file +$result = $storage->updateFile('[FILE_ID]', [], []); \ No newline at end of file diff --git a/app/sdks/php/docs/locale.md b/app/sdks/php/docs/locale.md index 91956eee3b..16cce2f9c6 100644 --- a/app/sdks/php/docs/locale.md +++ b/app/sdks/php/docs/locale.md @@ -6,7 +6,15 @@ GET https://appwrite.io/v1/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 supported language. ** +** 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. ** + +## List Countries + +```http request +GET https://appwrite.io/v1/locale/continents +``` + +** List of all continents. You can use the locale header to get the data in a supported language. ** ## List Countries @@ -14,7 +22,7 @@ GET https://appwrite.io/v1/locale GET https://appwrite.io/v1/locale/countries ``` -** List of all countries. You can use the locale header to get the data in supported language. ** +** List of all countries. You can use the locale header to get the data in a supported language. ** ## List EU Countries @@ -22,7 +30,7 @@ GET https://appwrite.io/v1/locale/countries GET https://appwrite.io/v1/locale/countries/eu ``` -** List of all countries that are currently members of the EU. You can use the locale header to get the data in supported language. UK brexit date is currently set to 2019-10-31 and will be updated if and when needed. ** +** 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. UK brexit date is currently set to 2019-10-31 and will be updated if and when needed. ** ## List Countries Phone Codes @@ -30,7 +38,7 @@ GET https://appwrite.io/v1/locale/countries/eu GET https://appwrite.io/v1/locale/countries/phones ``` -** List of all countries phone codes. You can use the locale header to get the data in supported language. ** +** List of all countries phone codes. You can use the locale header to get the data in a supported language. ** ## List of currencies @@ -38,5 +46,5 @@ GET https://appwrite.io/v1/locale/countries/phones GET https://appwrite.io/v1/locale/currencies ``` -** List of all currencies, including currency symol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in supported language. ** +** List of all currencies, including currency symol, 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. ** diff --git a/app/sdks/php/docs/storage.md b/app/sdks/php/docs/storage.md index 177357eea1..f7833daf46 100644 --- a/app/sdks/php/docs/storage.md +++ b/app/sdks/php/docs/storage.md @@ -30,8 +30,8 @@ POST https://appwrite.io/v1/storage/files | Field Name | Type | Description | Default | | --- | --- | --- | --- | | files | file | Binary Files. | | -| read | array | An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions). | [] | -| write | array | An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions). | [] | +| read | array | An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | +| write | array | An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | | folderId | string | Folder to associate files with. | | ## Get File @@ -61,8 +61,8 @@ PUT https://appwrite.io/v1/storage/files/{fileId} | Field Name | Type | Description | Default | | --- | --- | --- | --- | | fileId | string | **Required** File unique ID. | | -| read | array | An array of strings with read permissions. [Learn more about permissions and roles](/docs/permissions). | [] | -| write | array | An array of strings with write permissions. [Learn more about permissions and roles](/docs/permissions). | [] | +| read | array | An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | +| write | array | An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions and roles](/docs/permissions) and get a full list of available permissions. | | | folderId | string | Folder to associate files with. | | ## Delete File diff --git a/app/sdks/php/docs/users.md b/app/sdks/php/docs/users.md index dba2aa35d0..fedcd71d54 100644 --- a/app/sdks/php/docs/users.md +++ b/app/sdks/php/docs/users.md @@ -75,7 +75,7 @@ GET https://appwrite.io/v1/users/{userId}/prefs | --- | --- | --- | --- | | userId | string | **Required** User unique ID. | | -## Update Account Prefs +## Update User Prefs ```http request PATCH https://appwrite.io/v1/users/{userId}/prefs @@ -133,7 +133,7 @@ DELETE https://appwrite.io/v1/users/{userId}/sessions/:session | userId | string | **Required** User unique ID. | | | sessionId | string | User unique session ID. | | -## Update user status +## Update User Status ```http request PATCH https://appwrite.io/v1/users/{userId}/status @@ -146,5 +146,5 @@ PATCH https://appwrite.io/v1/users/{userId}/status | Field Name | Type | Description | Default | | --- | --- | --- | --- | | userId | string | **Required** User unique ID. | | -| status | string | User Status code. To activate the user pass 1, to blocking the user pass 2 and for disabling the user pass 0 | | +| status | string | User Status code. To activate the user pass 1, to block the user pass 2 and for disabling the user pass 0 | | diff --git a/app/sdks/php/src/Appwrite/Client.php b/app/sdks/php/src/Appwrite/Client.php index 29240ec495..4f575b14aa 100644 --- a/app/sdks/php/src/Appwrite/Client.php +++ b/app/sdks/php/src/Appwrite/Client.php @@ -37,7 +37,7 @@ class Client */ protected $headers = [ 'content-type' => '', - 'x-sdk-version' => 'appwrite:php:1.0.9', + 'x-sdk-version' => 'appwrite:php:1.0.15', ]; /** diff --git a/app/sdks/php/src/Appwrite/Services/Account.php b/app/sdks/php/src/Appwrite/Services/Account.php index a1df7cb1ee..a6256e2ab4 100644 --- a/app/sdks/php/src/Appwrite/Services/Account.php +++ b/app/sdks/php/src/Appwrite/Services/Account.php @@ -16,13 +16,14 @@ class Account extends Service * @throws Exception * @return array */ - public function get() + public function get():array { $path = str_replace([], [], '/account'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -34,13 +35,14 @@ class Account extends Service * @throws Exception * @return array */ - public function delete() + public function delete():array { $path = str_replace([], [], '/account'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -52,12 +54,12 @@ class Account extends Service * mail is sent. For security measures, user password is required to complete * this request. * - * @param string $email - * @param string $password + * @param string $email + * @param string $password * @throws Exception * @return array */ - public function updateEmail($email, $password) + public function updateEmail(string $email, string $password):array { $path = str_replace([], [], '/account/email'); $params = []; @@ -66,6 +68,7 @@ class Account extends Service $params['password'] = $password; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -74,11 +77,11 @@ class Account extends Service * * Update currently logged in user account name. * - * @param string $name + * @param string $name * @throws Exception * @return array */ - public function updateName($name) + public function updateName(string $name):array { $path = str_replace([], [], '/account/name'); $params = []; @@ -86,6 +89,7 @@ class Account extends Service $params['name'] = $name; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -95,12 +99,12 @@ class Account extends Service * Update currently logged in user password. For validation, user is required * to pass the password twice. * - * @param string $password - * @param string $oldPassword + * @param string $password + * @param string $oldPassword * @throws Exception * @return array */ - public function updatePassword($password, $oldPassword) + public function updatePassword(string $password, string $oldPassword):array { $path = str_replace([], [], '/account/password'); $params = []; @@ -109,6 +113,7 @@ class Account extends Service $params['old-password'] = $oldPassword; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -120,13 +125,14 @@ class Account extends Service * @throws Exception * @return array */ - public function getPrefs() + public function getPrefs():array { $path = str_replace([], [], '/account/prefs'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -136,11 +142,11 @@ class Account extends Service * Update currently logged in user account preferences. You can pass only the * specific settings you wish to update. * - * @param string $prefs + * @param string $prefs * @throws Exception * @return array */ - public function updatePrefs($prefs) + public function updatePrefs(string $prefs):array { $path = str_replace([], [], '/account/prefs'); $params = []; @@ -148,6 +154,7 @@ class Account extends Service $params['prefs'] = $prefs; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -160,13 +167,14 @@ class Account extends Service * @throws Exception * @return array */ - public function getSecurity() + public function getSecurity():array { $path = str_replace([], [], '/account/security'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -179,13 +187,14 @@ class Account extends Service * @throws Exception * @return array */ - public function getSessions() + public function getSessions():array { $path = str_replace([], [], '/account/sessions'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/php/src/Appwrite/Services/Auth.php b/app/sdks/php/src/Appwrite/Services/Auth.php index dae305144c..ed3f7d2e1a 100644 --- a/app/sdks/php/src/Appwrite/Services/Auth.php +++ b/app/sdks/php/src/Appwrite/Services/Auth.php @@ -16,9 +16,9 @@ class Auth extends Service * redirect URL\'s back to your app when login is completed. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * When accessing this route using Javascript from the browser, success and * failure parameter URLs are required. Appwrite server will respond with a @@ -26,14 +26,14 @@ class Auth extends Service * behavior is enforced because modern browsers are limiting 3rd party cookies * in XHR of fetch requests to protect user privacy. * - * @param string $email - * @param string $password - * @param string $success - * @param string $failure + * @param string $email + * @param string $password + * @param string $success + * @param string $failure * @throws Exception * @return array */ - public function login($email, $password, $success, $failure) + public function login(string $email, string $password, string $success = '', string $failure = ''):array { $path = str_replace([], [], '/auth/login'); $params = []; @@ -44,6 +44,7 @@ class Auth extends Service $params['failure'] = $failure; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -51,19 +52,20 @@ class Auth extends Service * Logout Current Session * * Use this endpoint to log out the currently logged in user from his account. - * When succeed this endpoint will delete the user session and remove the + * When successful this endpoint will delete the user session and remove the * session secret cookie from the user client. * * @throws Exception * @return array */ - public function logout() + public function logout():array { $path = str_replace([], [], '/auth/logout'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -74,30 +76,31 @@ class Auth extends Service * account sessions across all his different devices. When using the option id * argument, only the session unique ID provider will be deleted. * - * @param string $id + * @param string $id * @throws Exception * @return array */ - public function logoutBySession($id) + public function logoutBySession(string $id):array { $path = str_replace(['{id}'], [$id], '/auth/logout/{id}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } /** * OAuth Login * - * @param string $provider - * @param string $success - * @param string $failure + * @param string $provider + * @param string $success + * @param string $failure * @throws Exception * @return array */ - public function oauth($provider, $success = '', $failure = '') + public function oauth(string $provider, string $success, string $failure):array { $path = str_replace(['{provider}'], [$provider], '/auth/oauth/{provider}'); $params = []; @@ -106,6 +109,7 @@ class Auth extends Service $params['failure'] = $failure; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -119,12 +123,12 @@ class Auth extends Service * submit a request to the /auth/password/reset endpoint to complete the * process. * - * @param string $email - * @param string $reset + * @param string $email + * @param string $reset * @throws Exception * @return array */ - public function recovery($email, $reset) + public function recovery(string $email, string $reset):array { $path = str_replace([], [], '/auth/recovery'); $params = []; @@ -133,6 +137,7 @@ class Auth extends Service $params['reset'] = $reset; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -145,18 +150,18 @@ class Auth extends Service * /auth/recovery endpoint. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * - * @param string $userId - * @param string $token - * @param string $passwordA - * @param string $passwordB + * @param string $userId + * @param string $token + * @param string $passwordA + * @param string $passwordB * @throws Exception * @return array */ - public function recoveryReset($userId, $token, $passwordA, $passwordB) + public function recoveryReset(string $userId, string $token, string $passwordA, string $passwordB):array { $path = str_replace([], [], '/auth/recovery/reset'); $params = []; @@ -167,6 +172,7 @@ class Auth extends Service $params['password-b'] = $passwordB; return $this->client->call(Client::METHOD_PUT, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -174,7 +180,7 @@ class Auth extends Service * Register User * * Use this endpoint to allow a new user to register an account in your - * project. Use the success and failure URL's to redirect users back to your + * project. Use the success and failure URLs to redirect users back to your * application after signup completes. * * If registration completes successfully user will be sent with a @@ -184,9 +190,9 @@ class Auth extends Service * /auth/confirm endpoint to complete the account confirmation. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * When accessing this route using Javascript from the browser, success and * failure parameter URLs are required. Appwrite server will respond with a @@ -194,16 +200,16 @@ class Auth extends Service * behavior is enforced because modern browsers are limiting 3rd party cookies * in XHR of fetch requests to protect user privacy. * - * @param string $email - * @param string $password - * @param string $confirm - * @param string $success - * @param string $failure - * @param string $name + * @param string $email + * @param string $password + * @param string $confirm + * @param string $success + * @param string $failure + * @param string $name * @throws Exception * @return array */ - public function register($email, $password, $confirm, $success = '', $failure = '', $name = '') + public function register(string $email, string $password, string $confirm, string $success = '', string $failure = '', string $name = ''):array { $path = str_replace([], [], '/auth/register'); $params = []; @@ -216,6 +222,7 @@ class Auth extends Service $params['name'] = $name; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -227,12 +234,12 @@ class Auth extends Service * query parameters to the redirect URL you have provided when sending your * request to the /auth/register endpoint. * - * @param string $userId - * @param string $token + * @param string $userId + * @param string $token * @throws Exception * @return array */ - public function confirm($userId, $token) + public function confirm(string $userId, string $token):array { $path = str_replace([], [], '/auth/register/confirm'); $params = []; @@ -241,6 +248,7 @@ class Auth extends Service $params['token'] = $token; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -248,19 +256,19 @@ class Auth extends Service * Resend Confirmation * * This endpoint allows the user to request your app to resend him his email - * confirmation message. The redirect arguments acts the same way as in + * confirmation message. The redirect arguments act the same way as in * /auth/register endpoint. * * Please notice that in order to avoid a [Redirect - * Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) - * the only valid redirect URL's are the once from domains you have set when - * added your platforms in the console interface. + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * - * @param string $confirm + * @param string $confirm * @throws Exception * @return array */ - public function confirmResend($confirm) + public function confirmResend(string $confirm):array { $path = str_replace([], [], '/auth/register/confirm/resend'); $params = []; @@ -268,6 +276,7 @@ class Auth extends Service $params['confirm'] = $confirm; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/php/src/Appwrite/Services/Avatars.php b/app/sdks/php/src/Appwrite/Services/Avatars.php index 8ee781814a..9eeccb56e1 100644 --- a/app/sdks/php/src/Appwrite/Services/Avatars.php +++ b/app/sdks/php/src/Appwrite/Services/Avatars.php @@ -11,19 +11,19 @@ class Avatars extends Service /** * Get Browser Icon * - * You can use this endpoint to show different browser icons to your users, - * The code argument receives the browser code as appear in your user + * 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 * /account/sessions endpoint. Use width, height and quality arguments to * change the output settings. * - * @param string $code - * @param integer $width - * @param integer $height - * @param integer $quality + * @param string $code + * @param int $width + * @param int $height + * @param int $quality * @throws Exception * @return array */ - public function getBrowser($code, $width = 100, $height = 100, $quality = 100) + public function getBrowser(string $code, int $width = 100, int $height = 100, int $quality = 100):array { $path = str_replace(['{code}'], [$code], '/avatars/browsers/{code}'); $params = []; @@ -33,25 +33,26 @@ class Avatars extends Service $params['quality'] = $quality; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Get Credit Card Icon * - * Need to display your users with your billing method or there payment + * Need to display your users with your billing method or their payment * methods? 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. * - * @param string $code - * @param integer $width - * @param integer $height - * @param integer $quality + * @param string $code + * @param int $width + * @param int $height + * @param int $quality * @throws Exception * @return array */ - public function getCreditCard($code, $width = 100, $height = 100, $quality = 100) + public function getCreditCard(string $code, int $width = 100, int $height = 100, int $quality = 100):array { $path = str_replace(['{code}'], [$code], '/avatars/credit-cards/{code}'); $params = []; @@ -61,6 +62,7 @@ class Avatars extends Service $params['quality'] = $quality; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -70,11 +72,11 @@ class Avatars extends Service * Use this endpoint to fetch the favorite icon (AKA favicon) of a any remote * website URL. * - * @param string $url + * @param string $url * @throws Exception * @return array */ - public function getFavicon($url) + public function getFavicon(string $url):array { $path = str_replace([], [], '/avatars/favicon'); $params = []; @@ -82,6 +84,7 @@ class Avatars extends Service $params['url'] = $url; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -89,17 +92,17 @@ class Avatars extends Service * Get Country Flag * * You can use this endpoint to show different country flags icons to your - * users, The code argument receives the a 2 letter country code. Use width, + * users. The code argument receives the 2 letter country code. Use width, * height and quality arguments to change the output settings. * - * @param string $code - * @param integer $width - * @param integer $height - * @param integer $quality + * @param string $code + * @param int $width + * @param int $height + * @param int $quality * @throws Exception * @return array */ - public function getFlag($code, $width = 100, $height = 100, $quality = 100) + public function getFlag(string $code, int $width = 100, int $height = 100, int $quality = 100):array { $path = str_replace(['{code}'], [$code], '/avatars/flags/{code}'); $params = []; @@ -109,6 +112,7 @@ class Avatars extends Service $params['quality'] = $quality; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -117,16 +121,16 @@ class Avatars extends Service * * 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 cases, you want to make sure a 3rd party + * remote images in your app or in case you want to make sure a 3rd party * image is properly served using a TLS protocol. * - * @param string $url - * @param integer $width - * @param integer $height + * @param string $url + * @param int $width + * @param int $height * @throws Exception * @return array */ - public function getImage($url, $width = 400, $height = 400) + public function getImage(string $url, int $width = 400, int $height = 400):array { $path = str_replace([], [], '/avatars/image'); $params = []; @@ -136,6 +140,7 @@ class Avatars extends Service $params['height'] = $height; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -145,14 +150,14 @@ class Avatars extends Service * 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. * - * @param string $text - * @param integer $size - * @param integer $margin - * @param integer $download + * @param string $text + * @param int $size + * @param int $margin + * @param int $download * @throws Exception * @return array */ - public function getQR($text, $size = 400, $margin = 1, $download = 0) + public function getQR(string $text, int $size = 400, int $margin = 1, int $download = 0):array { $path = str_replace([], [], '/avatars/qr'); $params = []; @@ -163,6 +168,7 @@ class Avatars extends Service $params['download'] = $download; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/php/src/Appwrite/Services/Database.php b/app/sdks/php/src/Appwrite/Services/Database.php index 1310909a54..f27c153e69 100644 --- a/app/sdks/php/src/Appwrite/Services/Database.php +++ b/app/sdks/php/src/Appwrite/Services/Database.php @@ -16,14 +16,14 @@ class Database extends Service * of the project collections. [Learn more about different API * modes](/docs/modes). * - * @param string $search - * @param integer $limit - * @param integer $offset - * @param string $orderType + * @param string $search + * @param int $limit + * @param int $offset + * @param string $orderType * @throws Exception * @return array */ - public function listCollections($search = '', $limit = 25, $offset = 0, $orderType = 'ASC') + public function listCollections(string $search = '', int $limit = 25, int $offset = 0, string $orderType = 'ASC'):array { $path = str_replace([], [], '/database'); $params = []; @@ -34,6 +34,7 @@ class Database extends Service $params['orderType'] = $orderType; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -42,14 +43,14 @@ class Database extends Service * * Create a new Collection. * - * @param string $name - * @param array $read - * @param array $write - * @param array $rules + * @param string $name + * @param array $read + * @param array $write + * @param array $rules * @throws Exception * @return array */ - public function createCollection($name, $read = [], $write = [], $rules = []) + public function createCollection(string $name, array $read, array $write, array $rules):array { $path = str_replace([], [], '/database'); $params = []; @@ -60,6 +61,7 @@ class Database extends Service $params['rules'] = $rules; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -69,17 +71,18 @@ class Database extends Service * Get collection by its unique ID. This endpoint response returns a JSON * object with the collection metadata. * - * @param string $collectionId + * @param string $collectionId * @throws Exception * @return array */ - public function getCollection($collectionId) + public function getCollection(string $collectionId):array { $path = str_replace(['{collectionId}'], [$collectionId], '/database/{collectionId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -88,15 +91,15 @@ class Database extends Service * * Update collection by its unique ID. * - * @param string $collectionId - * @param string $name - * @param array $read - * @param array $write - * @param array $rules + * @param string $collectionId + * @param string $name + * @param array $read + * @param array $write + * @param array $rules * @throws Exception * @return array */ - public function updateCollection($collectionId, $name, $read = [], $write = [], $rules = []) + public function updateCollection(string $collectionId, string $name, array $read, array $write, array $rules = []):array { $path = str_replace(['{collectionId}'], [$collectionId], '/database/{collectionId}'); $params = []; @@ -107,6 +110,7 @@ class Database extends Service $params['rules'] = $rules; return $this->client->call(Client::METHOD_PUT, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -116,17 +120,18 @@ class Database extends Service * Delete a collection by its unique ID. Only users with write permissions * have access to delete this resource. * - * @param string $collectionId + * @param string $collectionId * @throws Exception * @return array */ - public function deleteCollection($collectionId) + public function deleteCollection(string $collectionId):array { $path = str_replace(['{collectionId}'], [$collectionId], '/database/{collectionId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -138,20 +143,20 @@ class Database extends Service * of the project documents. [Learn more about different API * modes](/docs/modes). * - * @param string $collectionId - * @param array $filters - * @param integer $offset - * @param integer $limit - * @param string $orderField - * @param string $orderType - * @param string $orderCast - * @param string $search - * @param integer $first - * @param integer $last + * @param string $collectionId + * @param array $filters + * @param int $offset + * @param int $limit + * @param string $orderField + * @param string $orderType + * @param string $orderCast + * @param string $search + * @param int $first + * @param int $last * @throws Exception * @return array */ - public function listDocuments($collectionId, $filters = [], $offset = 0, $limit = 50, $orderField = '$uid', $orderType = 'ASC', $orderCast = 'string', $search = '', $first = 0, $last = 0) + public function listDocuments(string $collectionId, array $filters = [], int $offset = 0, int $limit = 50, string $orderField = '$uid', string $orderType = 'ASC', string $orderCast = 'string', string $search = '', int $first = 0, int $last = 0):array { $path = str_replace(['{collectionId}'], [$collectionId], '/database/{collectionId}/documents'); $params = []; @@ -167,6 +172,7 @@ class Database extends Service $params['last'] = $last; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -175,17 +181,17 @@ class Database extends Service * * Create a new Document. * - * @param string $collectionId - * @param string $data - * @param array $read - * @param array $write - * @param string $parentDocument - * @param string $parentProperty - * @param string $parentPropertyType + * @param string $collectionId + * @param string $data + * @param array $read + * @param array $write + * @param string $parentDocument + * @param string $parentProperty + * @param string $parentPropertyType * @throws Exception * @return array */ - public function createDocument($collectionId, $data, $read = [], $write = [], $parentDocument = '', $parentProperty = '', $parentPropertyType = 'assign') + public function createDocument(string $collectionId, string $data, array $read, array $write, string $parentDocument = '', string $parentProperty = '', string $parentPropertyType = 'assign'):array { $path = str_replace(['{collectionId}'], [$collectionId], '/database/{collectionId}/documents'); $params = []; @@ -198,6 +204,7 @@ class Database extends Service $params['parentPropertyType'] = $parentPropertyType; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -207,33 +214,34 @@ class Database extends Service * Get document by its unique ID. This endpoint response returns a JSON object * with the document data. * - * @param string $collectionId - * @param string $documentId + * @param string $collectionId + * @param string $documentId * @throws Exception * @return array */ - public function getDocument($collectionId, $documentId) + public function getDocument(string $collectionId, string $documentId):array { $path = str_replace(['{collectionId}', '{documentId}'], [$collectionId, $documentId], '/database/{collectionId}/documents/{documentId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Update Document * - * @param string $collectionId - * @param string $documentId - * @param string $data - * @param array $read - * @param array $write + * @param string $collectionId + * @param string $documentId + * @param string $data + * @param array $read + * @param array $write * @throws Exception * @return array */ - public function updateDocument($collectionId, $documentId, $data, $read = [], $write = []) + public function updateDocument(string $collectionId, string $documentId, string $data, array $read, array $write):array { $path = str_replace(['{collectionId}', '{documentId}'], [$collectionId, $documentId], '/database/{collectionId}/documents/{documentId}'); $params = []; @@ -243,6 +251,7 @@ class Database extends Service $params['write'] = $write; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -253,18 +262,19 @@ class Database extends Service * documents, his attributes and relations to other documents. Child documents * **will not** be deleted. * - * @param string $collectionId - * @param string $documentId + * @param string $collectionId + * @param string $documentId * @throws Exception * @return array */ - public function deleteDocument($collectionId, $documentId) + public function deleteDocument(string $collectionId, string $documentId):array { $path = str_replace(['{collectionId}', '{documentId}'], [$collectionId, $documentId], '/database/{collectionId}/documents/{documentId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/php/src/Appwrite/Services/Locale.php b/app/sdks/php/src/Appwrite/Services/Locale.php index 1ae5ae0427..c2e5e0ec14 100644 --- a/app/sdks/php/src/Appwrite/Services/Locale.php +++ b/app/sdks/php/src/Appwrite/Services/Locale.php @@ -13,38 +13,60 @@ class Locale extends Service * * 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 + * suggested currency. You can use the locale header to get the data in a * supported language. * * @throws Exception * @return array */ - public function getLocale() + public function getLocale():array { $path = str_replace([], [], '/locale'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * List Countries * - * List of all countries. You can use the locale header to get the data in + * List of all continents. You can use the locale header to get the data in a * supported language. * * @throws Exception * @return array */ - public function getCountries() + public function getContinents():array + { + $path = str_replace([], [], '/locale/continents'); + $params = []; + + + return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', + ], $params); + } + + /** + * List Countries + * + * List of all countries. You can use the locale header to get the data in a + * supported language. + * + * @throws Exception + * @return array + */ + public function getCountries():array { $path = str_replace([], [], '/locale/countries'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -52,19 +74,20 @@ class Locale extends Service * List EU Countries * * List of all countries that are currently members of the EU. You can use the - * locale header to get the data in supported language. UK brexit date is + * locale header to get the data in a supported language. UK brexit date is * currently set to 2019-10-31 and will be updated if and when needed. * * @throws Exception * @return array */ - public function getCountriesEU() + public function getCountriesEU():array { $path = str_replace([], [], '/locale/countries/eu'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -72,18 +95,19 @@ class Locale extends Service * List Countries Phone Codes * * List of all countries phone codes. You can use the locale header to get the - * data in supported language. + * data in a supported language. * * @throws Exception * @return array */ - public function getCountriesPhones() + public function getCountriesPhones():array { $path = str_replace([], [], '/locale/countries/phones'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -92,18 +116,19 @@ class Locale extends Service * * List of all currencies, including currency symol, name, plural, and decimal * digits for all major and minor currencies. You can use the locale header to - * get the data in supported language. + * get the data in a supported language. * * @throws Exception * @return array */ - public function getCurrencies() + public function getCurrencies():array { $path = str_replace([], [], '/locale/currencies'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/php/src/Appwrite/Services/Projects.php b/app/sdks/php/src/Appwrite/Services/Projects.php index af68cf4e9a..701c3cc523 100644 --- a/app/sdks/php/src/Appwrite/Services/Projects.php +++ b/app/sdks/php/src/Appwrite/Services/Projects.php @@ -14,34 +14,35 @@ class Projects extends Service * @throws Exception * @return array */ - public function listProjects() + public function listProjects():array { $path = str_replace([], [], '/projects'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Create Project * - * @param string $name - * @param string $teamId - * @param string $description - * @param string $logo - * @param string $url - * @param string $legalName - * @param string $legalCountry - * @param string $legalState - * @param string $legalCity - * @param string $legalAddress - * @param string $legalTaxId + * @param string $name + * @param string $teamId + * @param string $description + * @param string $logo + * @param string $url + * @param string $legalName + * @param string $legalCountry + * @param string $legalState + * @param string $legalCity + * @param string $legalAddress + * @param string $legalTaxId * @throws Exception * @return array */ - public function createProject($name, $teamId, $description = '', $logo = '', $url = '', $legalName = '', $legalCountry = '', $legalState = '', $legalCity = '', $legalAddress = '', $legalTaxId = '') + public function createProject(string $name, string $teamId, string $description = '', string $logo = '', string $url = '', string $legalName = '', string $legalCountry = '', string $legalState = '', string $legalCity = '', string $legalAddress = '', string $legalTaxId = ''):array { $path = str_replace([], [], '/projects'); $params = []; @@ -59,44 +60,46 @@ class Projects extends Service $params['legalTaxId'] = $legalTaxId; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Get Project * - * @param string $projectId + * @param string $projectId * @throws Exception * @return array */ - public function getProject($projectId) + public function getProject(string $projectId):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Update Project * - * @param string $projectId - * @param string $name - * @param string $description - * @param string $logo - * @param string $url - * @param string $legalName - * @param string $legalCountry - * @param string $legalState - * @param string $legalCity - * @param string $legalAddress - * @param string $legalTaxId + * @param string $projectId + * @param string $name + * @param string $description + * @param string $logo + * @param string $url + * @param string $legalName + * @param string $legalCountry + * @param string $legalState + * @param string $legalCity + * @param string $legalAddress + * @param string $legalTaxId * @throws Exception * @return array */ - public function updateProject($projectId, $name, $description = '', $logo = '', $url = '', $legalName = '', $legalCountry = '', $legalState = '', $legalCity = '', $legalAddress = '', $legalTaxId = '') + public function updateProject(string $projectId, string $name, string $description = '', string $logo = '', string $url = '', string $legalName = '', string $legalCountry = '', string $legalState = '', string $legalCity = '', string $legalAddress = '', string $legalTaxId = ''):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}'); $params = []; @@ -113,53 +116,56 @@ class Projects extends Service $params['legalTaxId'] = $legalTaxId; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Delete Project * - * @param string $projectId + * @param string $projectId * @throws Exception * @return array */ - public function deleteProject($projectId) + public function deleteProject(string $projectId):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } /** * List Keys * - * @param string $projectId + * @param string $projectId * @throws Exception * @return array */ - public function listKeys($projectId) + public function listKeys(string $projectId):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/keys'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Create Key * - * @param string $projectId - * @param string $name - * @param array $scopes + * @param string $projectId + * @param string $name + * @param array $scopes * @throws Exception * @return array */ - public function createKey($projectId, $name, $scopes) + public function createKey(string $projectId, string $name, array $scopes):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/keys'); $params = []; @@ -168,38 +174,40 @@ class Projects extends Service $params['scopes'] = $scopes; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Get Key * - * @param string $projectId - * @param string $keyId + * @param string $projectId + * @param string $keyId * @throws Exception * @return array */ - public function getKey($projectId, $keyId) + public function getKey(string $projectId, string $keyId):array { $path = str_replace(['{projectId}', '{keyId}'], [$projectId, $keyId], '/projects/{projectId}/keys/{keyId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Update Key * - * @param string $projectId - * @param string $keyId - * @param string $name - * @param array $scopes + * @param string $projectId + * @param string $keyId + * @param string $name + * @param array $scopes * @throws Exception * @return array */ - public function updateKey($projectId, $keyId, $name, $scopes) + public function updateKey(string $projectId, string $keyId, string $name, array $scopes):array { $path = str_replace(['{projectId}', '{keyId}'], [$projectId, $keyId], '/projects/{projectId}/keys/{keyId}'); $params = []; @@ -208,38 +216,40 @@ class Projects extends Service $params['scopes'] = $scopes; return $this->client->call(Client::METHOD_PUT, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Delete Key * - * @param string $projectId - * @param string $keyId + * @param string $projectId + * @param string $keyId * @throws Exception * @return array */ - public function deleteKey($projectId, $keyId) + public function deleteKey(string $projectId, string $keyId):array { $path = str_replace(['{projectId}', '{keyId}'], [$projectId, $keyId], '/projects/{projectId}/keys/{keyId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Update Project OAuth * - * @param string $projectId - * @param string $provider - * @param string $appId - * @param string $secret + * @param string $projectId + * @param string $provider + * @param string $appId + * @param string $secret * @throws Exception * @return array */ - public function updateProjectOAuth($projectId, $provider, $appId = '', $secret = '') + public function updateProjectOAuth(string $projectId, string $provider, string $appId = '', string $secret = ''):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/oauth'); $params = []; @@ -249,39 +259,41 @@ class Projects extends Service $params['secret'] = $secret; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } /** * List Platforms * - * @param string $projectId + * @param string $projectId * @throws Exception * @return array */ - public function listPlatforms($projectId) + public function listPlatforms(string $projectId):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/platforms'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Create Platform * - * @param string $projectId - * @param string $type - * @param string $name - * @param string $key - * @param string $store - * @param string $url + * @param string $projectId + * @param string $type + * @param string $name + * @param string $key + * @param string $store + * @param string $url * @throws Exception * @return array */ - public function createPlatform($projectId, $type, $name, $key = '', $store = '', $url = '') + public function createPlatform(string $projectId, string $type, string $name, string $key = '', string $store = '', string $url = ''):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/platforms'); $params = []; @@ -293,40 +305,42 @@ class Projects extends Service $params['url'] = $url; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Get Platform * - * @param string $projectId - * @param string $platformId + * @param string $projectId + * @param string $platformId * @throws Exception * @return array */ - public function getPlatform($projectId, $platformId) + public function getPlatform(string $projectId, string $platformId):array { $path = str_replace(['{projectId}', '{platformId}'], [$projectId, $platformId], '/projects/{projectId}/platforms/{platformId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Update Platform * - * @param string $projectId - * @param string $platformId - * @param string $name - * @param string $key - * @param string $store - * @param string $url + * @param string $projectId + * @param string $platformId + * @param string $name + * @param string $key + * @param string $store + * @param string $url * @throws Exception * @return array */ - public function updatePlatform($projectId, $platformId, $name, $key = '', $store = '', $url = '') + public function updatePlatform(string $projectId, string $platformId, string $name, string $key = '', string $store = '', string $url = ''):array { $path = str_replace(['{projectId}', '{platformId}'], [$projectId, $platformId], '/projects/{projectId}/platforms/{platformId}'); $params = []; @@ -337,61 +351,64 @@ class Projects extends Service $params['url'] = $url; return $this->client->call(Client::METHOD_PUT, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Delete Platform * - * @param string $projectId - * @param string $platformId + * @param string $projectId + * @param string $platformId * @throws Exception * @return array */ - public function deletePlatform($projectId, $platformId) + public function deletePlatform(string $projectId, string $platformId):array { $path = str_replace(['{projectId}', '{platformId}'], [$projectId, $platformId], '/projects/{projectId}/platforms/{platformId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } /** * List Tasks * - * @param string $projectId + * @param string $projectId * @throws Exception * @return array */ - public function listTasks($projectId) + public function listTasks(string $projectId):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/tasks'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Create Task * - * @param string $projectId - * @param string $name - * @param string $status - * @param string $schedule - * @param integer $security - * @param string $httpMethod - * @param string $httpUrl - * @param array $httpHeaders - * @param string $httpUser - * @param string $httpPass + * @param string $projectId + * @param string $name + * @param string $status + * @param string $schedule + * @param int $security + * @param string $httpMethod + * @param string $httpUrl + * @param array $httpHeaders + * @param string $httpUser + * @param string $httpPass * @throws Exception * @return array */ - public function createTask($projectId, $name, $status, $schedule, $security, $httpMethod, $httpUrl, $httpHeaders = [], $httpUser = '', $httpPass = '') + public function createTask(string $projectId, string $name, string $status, string $schedule, int $security, string $httpMethod, string $httpUrl, array $httpHeaders = [], string $httpUser = '', string $httpPass = ''):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/tasks'); $params = []; @@ -407,45 +424,47 @@ class Projects extends Service $params['httpPass'] = $httpPass; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Get Task * - * @param string $projectId - * @param string $taskId + * @param string $projectId + * @param string $taskId * @throws Exception * @return array */ - public function getTask($projectId, $taskId) + public function getTask(string $projectId, string $taskId):array { $path = str_replace(['{projectId}', '{taskId}'], [$projectId, $taskId], '/projects/{projectId}/tasks/{taskId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Update Task * - * @param string $projectId - * @param string $taskId - * @param string $name - * @param string $status - * @param string $schedule - * @param integer $security - * @param string $httpMethod - * @param string $httpUrl - * @param array $httpHeaders - * @param string $httpUser - * @param string $httpPass + * @param string $projectId + * @param string $taskId + * @param string $name + * @param string $status + * @param string $schedule + * @param int $security + * @param string $httpMethod + * @param string $httpUrl + * @param array $httpHeaders + * @param string $httpUser + * @param string $httpPass * @throws Exception * @return array */ - public function updateTask($projectId, $taskId, $name, $status, $schedule, $security, $httpMethod, $httpUrl, $httpHeaders = [], $httpUser = '', $httpPass = '') + public function updateTask(string $projectId, string $taskId, string $name, string $status, string $schedule, int $security, string $httpMethod, string $httpUrl, array $httpHeaders = [], string $httpUser = '', string $httpPass = ''):array { $path = str_replace(['{projectId}', '{taskId}'], [$projectId, $taskId], '/projects/{projectId}/tasks/{taskId}'); $params = []; @@ -461,75 +480,79 @@ class Projects extends Service $params['httpPass'] = $httpPass; return $this->client->call(Client::METHOD_PUT, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Delete Task * - * @param string $projectId - * @param string $taskId + * @param string $projectId + * @param string $taskId * @throws Exception * @return array */ - public function deleteTask($projectId, $taskId) + public function deleteTask(string $projectId, string $taskId):array { $path = str_replace(['{projectId}', '{taskId}'], [$projectId, $taskId], '/projects/{projectId}/tasks/{taskId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Get Project * - * @param string $projectId + * @param string $projectId * @throws Exception * @return array */ - public function getProjectUsage($projectId) + public function getProjectUsage(string $projectId):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/usage'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * List Webhooks * - * @param string $projectId + * @param string $projectId * @throws Exception * @return array */ - public function listWebhooks($projectId) + public function listWebhooks(string $projectId):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/webhooks'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Create Webhook * - * @param string $projectId - * @param string $name - * @param array $events - * @param string $url - * @param integer $security - * @param string $httpUser - * @param string $httpPass + * @param string $projectId + * @param string $name + * @param array $events + * @param string $url + * @param int $security + * @param string $httpUser + * @param string $httpPass * @throws Exception * @return array */ - public function createWebhook($projectId, $name, $events, $url, $security, $httpUser = '', $httpPass = '') + public function createWebhook(string $projectId, string $name, array $events, string $url, int $security, string $httpUser = '', string $httpPass = ''):array { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/webhooks'); $params = []; @@ -542,42 +565,44 @@ class Projects extends Service $params['httpPass'] = $httpPass; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Get Webhook * - * @param string $projectId - * @param string $webhookId + * @param string $projectId + * @param string $webhookId * @throws Exception * @return array */ - public function getWebhook($projectId, $webhookId) + public function getWebhook(string $projectId, string $webhookId):array { $path = str_replace(['{projectId}', '{webhookId}'], [$projectId, $webhookId], '/projects/{projectId}/webhooks/{webhookId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Update Webhook * - * @param string $projectId - * @param string $webhookId - * @param string $name - * @param array $events - * @param string $url - * @param integer $security - * @param string $httpUser - * @param string $httpPass + * @param string $projectId + * @param string $webhookId + * @param string $name + * @param array $events + * @param string $url + * @param int $security + * @param string $httpUser + * @param string $httpPass * @throws Exception * @return array */ - public function updateWebhook($projectId, $webhookId, $name, $events, $url, $security, $httpUser = '', $httpPass = '') + public function updateWebhook(string $projectId, string $webhookId, string $name, array $events, string $url, int $security, string $httpUser = '', string $httpPass = ''):array { $path = str_replace(['{projectId}', '{webhookId}'], [$projectId, $webhookId], '/projects/{projectId}/webhooks/{webhookId}'); $params = []; @@ -590,24 +615,26 @@ class Projects extends Service $params['httpPass'] = $httpPass; return $this->client->call(Client::METHOD_PUT, $path, [ + 'content-type' => 'application/json', ], $params); } /** * Delete Webhook * - * @param string $projectId - * @param string $webhookId + * @param string $projectId + * @param string $webhookId * @throws Exception * @return array */ - public function deleteWebhook($projectId, $webhookId) + public function deleteWebhook(string $projectId, string $webhookId):array { $path = str_replace(['{projectId}', '{webhookId}'], [$projectId, $webhookId], '/projects/{projectId}/webhooks/{webhookId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/php/src/Appwrite/Services/Storage.php b/app/sdks/php/src/Appwrite/Services/Storage.php index e22622ebed..f2104150c6 100644 --- a/app/sdks/php/src/Appwrite/Services/Storage.php +++ b/app/sdks/php/src/Appwrite/Services/Storage.php @@ -15,14 +15,14 @@ class Storage extends Service * your results. On admin mode, this endpoint will return a list of all of the * project files. [Learn more about different API modes](/docs/modes). * - * @param string $search - * @param integer $limit - * @param integer $offset - * @param string $orderType + * @param string $search + * @param int $limit + * @param int $offset + * @param string $orderType * @throws Exception * @return array */ - public function listFiles($search = '', $limit = 25, $offset = 0, $orderType = 'ASC') + public function listFiles(string $search = '', int $limit = 25, int $offset = 0, string $orderType = 'ASC'):array { $path = str_replace([], [], '/storage/files'); $params = []; @@ -33,6 +33,7 @@ class Storage extends Service $params['orderType'] = $orderType; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -43,14 +44,14 @@ class Storage extends Service * assigned to read and write access unless he has passed custom values for * read and write arguments. * - * @param \CurlFile $files - * @param array $read - * @param array $write - * @param string $folderId + * @param \CurlFile $files + * @param array $read + * @param array $write + * @param string $folderId * @throws Exception * @return array */ - public function createFile($files, $read = [], $write = [], $folderId = '') + public function createFile(\CurlFile $files, array $read, array $write, string $folderId = ''):array { $path = str_replace([], [], '/storage/files'); $params = []; @@ -71,17 +72,18 @@ class Storage extends Service * Get file by its unique ID. This endpoint response returns a JSON object * with the file metadata. * - * @param string $fileId + * @param string $fileId * @throws Exception * @return array */ - public function getFile($fileId) + public function getFile(string $fileId):array { $path = str_replace(['{fileId}'], [$fileId], '/storage/files/{fileId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -91,14 +93,14 @@ class Storage extends Service * Update file by its unique ID. Only users with write permissions have access * to update this resource. * - * @param string $fileId - * @param array $read - * @param array $write - * @param string $folderId + * @param string $fileId + * @param array $read + * @param array $write + * @param string $folderId * @throws Exception * @return array */ - public function updateFile($fileId, $read = [], $write = [], $folderId = '') + public function updateFile(string $fileId, array $read, array $write, string $folderId = ''):array { $path = str_replace(['{fileId}'], [$fileId], '/storage/files/{fileId}'); $params = []; @@ -108,6 +110,7 @@ class Storage extends Service $params['folderId'] = $folderId; return $this->client->call(Client::METHOD_PUT, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -117,17 +120,18 @@ class Storage extends Service * Delete a file by its unique ID. Only users with write permissions have * access to delete this resource. * - * @param string $fileId + * @param string $fileId * @throws Exception * @return array */ - public function deleteFile($fileId) + public function deleteFile(string $fileId):array { $path = str_replace(['{fileId}'], [$fileId], '/storage/files/{fileId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -138,17 +142,18 @@ class Storage extends Service * 'Content-Disposition: attachment' header that tells the browser to start * downloading the file to user downloads directory. * - * @param string $fileId + * @param string $fileId * @throws Exception * @return array */ - public function getFileDownload($fileId) + public function getFileDownload(string $fileId):array { $path = str_replace(['{fileId}'], [$fileId], '/storage/files/{fileId}/download'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -160,16 +165,16 @@ class Storage extends Service * and spreadsheets will return file icon image. You can also pass query * string arguments for cutting and resizing your preview image. * - * @param string $fileId - * @param integer $width - * @param integer $height - * @param integer $quality - * @param string $background - * @param string $output + * @param string $fileId + * @param int $width + * @param int $height + * @param int $quality + * @param string $background + * @param string $output * @throws Exception * @return array */ - public function getFilePreview($fileId, $width = 0, $height = 0, $quality = 100, $background = '', $output = '') + public function getFilePreview(string $fileId, int $width = 0, int $height = 0, int $quality = 100, string $background = '', string $output = ''):array { $path = str_replace(['{fileId}'], [$fileId], '/storage/files/{fileId}/preview'); $params = []; @@ -181,6 +186,7 @@ class Storage extends Service $params['output'] = $output; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -190,12 +196,12 @@ class Storage extends Service * Get file content by its unique ID. This endpoint is similar to the download * method but returns with no 'Content-Disposition: attachment' header. * - * @param string $fileId - * @param string $as + * @param string $fileId + * @param string $as * @throws Exception * @return array */ - public function getFileView($fileId, $as = '') + public function getFileView(string $fileId, string $as = ''):array { $path = str_replace(['{fileId}'], [$fileId], '/storage/files/{fileId}/view'); $params = []; @@ -203,6 +209,7 @@ class Storage extends Service $params['as'] = $as; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/php/src/Appwrite/Services/Teams.php b/app/sdks/php/src/Appwrite/Services/Teams.php index 2c331b4c79..4addaa03d1 100644 --- a/app/sdks/php/src/Appwrite/Services/Teams.php +++ b/app/sdks/php/src/Appwrite/Services/Teams.php @@ -15,14 +15,14 @@ class Teams extends Service * filter your results. On admin mode, this endpoint will return a list of all * of the project teams. [Learn more about different API modes](/docs/modes). * - * @param string $search - * @param integer $limit - * @param integer $offset - * @param string $orderType + * @param string $search + * @param int $limit + * @param int $offset + * @param string $orderType * @throws Exception * @return array */ - public function listTeams($search = '', $limit = 25, $offset = 0, $orderType = 'ASC') + public function listTeams(string $search = '', int $limit = 25, int $offset = 0, string $orderType = 'ASC'):array { $path = str_replace([], [], '/teams'); $params = []; @@ -33,6 +33,7 @@ class Teams extends Service $params['orderType'] = $orderType; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -44,12 +45,12 @@ class Teams extends Service * who will be able add new owners and update or delete the team from your * project. * - * @param string $name - * @param array $roles + * @param string $name + * @param array $roles * @throws Exception * @return array */ - public function createTeam($name, $roles = ["owner"]) + public function createTeam(string $name, array $roles = ["owner"]):array { $path = str_replace([], [], '/teams'); $params = []; @@ -58,6 +59,7 @@ class Teams extends Service $params['roles'] = $roles; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -67,17 +69,18 @@ class Teams extends Service * Get team by its unique ID. All team members have read access for this * resource. * - * @param string $teamId + * @param string $teamId * @throws Exception * @return array */ - public function getTeam($teamId) + public function getTeam(string $teamId):array { $path = str_replace(['{teamId}'], [$teamId], '/teams/{teamId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -87,12 +90,12 @@ class Teams extends Service * Update team by its unique ID. Only team owners have write access for this * resource. * - * @param string $teamId - * @param string $name + * @param string $teamId + * @param string $name * @throws Exception * @return array */ - public function updateTeam($teamId, $name) + public function updateTeam(string $teamId, string $name):array { $path = str_replace(['{teamId}'], [$teamId], '/teams/{teamId}'); $params = []; @@ -100,6 +103,7 @@ class Teams extends Service $params['name'] = $name; return $this->client->call(Client::METHOD_PUT, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -109,17 +113,18 @@ class Teams extends Service * Delete team by its unique ID. Only team owners have write access for this * resource. * - * @param string $teamId + * @param string $teamId * @throws Exception * @return array */ - public function deleteTeam($teamId) + public function deleteTeam(string $teamId):array { $path = str_replace(['{teamId}'], [$teamId], '/teams/{teamId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -129,17 +134,18 @@ class Teams extends Service * Get team members by the team unique ID. All team members have read access * for this list of resources. * - * @param string $teamId + * @param string $teamId * @throws Exception * @return array */ - public function getTeamMembers($teamId) + public function getTeamMembers(string $teamId):array { $path = str_replace(['{teamId}'], [$teamId], '/teams/{teamId}/members'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -160,15 +166,15 @@ class Teams extends Service * the only valid redirect URL's are the once from domains you have set when * added your platforms in the console interface. * - * @param string $teamId - * @param string $email - * @param array $roles - * @param string $redirect - * @param string $name + * @param string $teamId + * @param string $email + * @param array $roles + * @param string $redirect + * @param string $name * @throws Exception * @return array */ - public function createTeamMembership($teamId, $email, $roles, $redirect, $name = '') + public function createTeamMembership(string $teamId, string $email, array $roles, string $redirect, string $name = ''):array { $path = str_replace(['{teamId}'], [$teamId], '/teams/{teamId}/memberships'); $params = []; @@ -179,6 +185,7 @@ class Teams extends Service $params['redirect'] = $redirect; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -188,18 +195,19 @@ class Teams extends Service * This endpoint allows a user to leave a team or for a team owner to delete * the membership of any other team member. * - * @param string $teamId - * @param string $inviteId + * @param string $teamId + * @param string $inviteId * @throws Exception * @return array */ - public function deleteTeamMembership($teamId, $inviteId) + public function deleteTeamMembership(string $teamId, string $inviteId):array { $path = str_replace(['{teamId}', '{inviteId}'], [$teamId, $inviteId], '/teams/{teamId}/memberships/{inviteId}'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -209,13 +217,13 @@ class Teams extends Service * Use this endpoint to resend your invitation email for a user to join a * team. * - * @param string $teamId - * @param string $inviteId - * @param string $redirect + * @param string $teamId + * @param string $inviteId + * @param string $redirect * @throws Exception * @return array */ - public function createTeamMembershipResend($teamId, $inviteId, $redirect) + public function createTeamMembershipResend(string $teamId, string $inviteId, string $redirect):array { $path = str_replace(['{teamId}', '{inviteId}'], [$teamId, $inviteId], '/teams/{teamId}/memberships/{inviteId}/resend'); $params = []; @@ -223,6 +231,7 @@ class Teams extends Service $params['redirect'] = $redirect; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -245,16 +254,16 @@ class Teams extends Service * browsers who don't allow to set 3rd party HTTP cookies needed for saving * the account session token. * - * @param string $teamId - * @param string $inviteId - * @param string $userId - * @param string $secret - * @param string $success - * @param string $failure + * @param string $teamId + * @param string $inviteId + * @param string $userId + * @param string $secret + * @param string $success + * @param string $failure * @throws Exception * @return array */ - public function updateTeamMembershipStatus($teamId, $inviteId, $userId, $secret, $success = '', $failure = '') + public function updateTeamMembershipStatus(string $teamId, string $inviteId, string $userId, string $secret, string $success = '', string $failure = ''):array { $path = str_replace(['{teamId}', '{inviteId}'], [$teamId, $inviteId], '/teams/{teamId}/memberships/{inviteId}/status'); $params = []; @@ -265,6 +274,7 @@ class Teams extends Service $params['failure'] = $failure; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/php/src/Appwrite/Services/Users.php b/app/sdks/php/src/Appwrite/Services/Users.php index 89d97f1893..aca2a1edb1 100644 --- a/app/sdks/php/src/Appwrite/Services/Users.php +++ b/app/sdks/php/src/Appwrite/Services/Users.php @@ -14,14 +14,14 @@ class Users extends Service * Get a list of all the project users. You can use the query params to filter * your results. * - * @param string $search - * @param integer $limit - * @param integer $offset - * @param string $orderType + * @param string $search + * @param int $limit + * @param int $offset + * @param string $orderType * @throws Exception * @return array */ - public function listUsers($search = '', $limit = 25, $offset = 0, $orderType = 'ASC') + public function listUsers(string $search = '', int $limit = 25, int $offset = 0, string $orderType = 'ASC'):array { $path = str_replace([], [], '/users'); $params = []; @@ -32,6 +32,7 @@ class Users extends Service $params['orderType'] = $orderType; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -40,13 +41,13 @@ class Users extends Service * * Create a new user. * - * @param string $email - * @param string $password - * @param string $name + * @param string $email + * @param string $password + * @param string $name * @throws Exception * @return array */ - public function createUser($email, $password, $name = '') + public function createUser(string $email, string $password, string $name = ''):array { $path = str_replace([], [], '/users'); $params = []; @@ -56,6 +57,7 @@ class Users extends Service $params['name'] = $name; return $this->client->call(Client::METHOD_POST, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -64,17 +66,18 @@ class Users extends Service * * Get user by its unique ID. * - * @param string $userId + * @param string $userId * @throws Exception * @return array */ - public function getUser($userId) + public function getUser(string $userId):array { $path = str_replace(['{userId}'], [$userId], '/users/{userId}'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -83,17 +86,18 @@ class Users extends Service * * Get user activity logs list by its unique ID. * - * @param string $userId + * @param string $userId * @throws Exception * @return array */ - public function getUserLogs($userId) + public function getUserLogs(string $userId):array { $path = str_replace(['{userId}'], [$userId], '/users/{userId}/logs'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -102,32 +106,33 @@ class Users extends Service * * Get user preferences by its unique ID. * - * @param string $userId + * @param string $userId * @throws Exception * @return array */ - public function getUserPrefs($userId) + public function getUserPrefs(string $userId):array { $path = str_replace(['{userId}'], [$userId], '/users/{userId}/prefs'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } /** - * Update Account Prefs + * Update User Prefs * * Update user preferences by its unique ID. You can pass only the specific * settings you wish to update. * - * @param string $userId - * @param string $prefs + * @param string $userId + * @param string $prefs * @throws Exception * @return array */ - public function updateUserPrefs($userId, $prefs) + public function updateUserPrefs(string $userId, string $prefs):array { $path = str_replace(['{userId}'], [$userId], '/users/{userId}/prefs'); $params = []; @@ -135,6 +140,7 @@ class Users extends Service $params['prefs'] = $prefs; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -143,17 +149,18 @@ class Users extends Service * * Get user sessions list by its unique ID. * - * @param string $userId + * @param string $userId * @throws Exception * @return array */ - public function getUserSessions($userId) + public function getUserSessions(string $userId):array { $path = str_replace(['{userId}'], [$userId], '/users/{userId}/sessions'); $params = []; return $this->client->call(Client::METHOD_GET, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -162,17 +169,18 @@ class Users extends Service * * Delete all user sessions by its unique ID. * - * @param string $userId + * @param string $userId * @throws Exception * @return array */ - public function deleteUserSessions($userId) + public function deleteUserSessions(string $userId):array { $path = str_replace(['{userId}'], [$userId], '/users/{userId}/sessions'); $params = []; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } @@ -181,12 +189,12 @@ class Users extends Service * * Delete user sessions by its unique ID. * - * @param string $userId - * @param string $sessionId + * @param string $userId + * @param string $sessionId * @throws Exception * @return array */ - public function deleteUserSession($userId, $sessionId) + public function deleteUserSession(string $userId, string $sessionId):array { $path = str_replace(['{userId}'], [$userId], '/users/{userId}/sessions/:session'); $params = []; @@ -194,20 +202,21 @@ class Users extends Service $params['sessionId'] = $sessionId; return $this->client->call(Client::METHOD_DELETE, $path, [ + 'content-type' => 'application/json', ], $params); } /** - * Update user status + * Update User Status * * Update user status by its unique ID. * - * @param string $userId - * @param string $status + * @param string $userId + * @param string $status * @throws Exception * @return array */ - public function updateUserStatus($userId, $status) + public function updateUserStatus(string $userId, string $status):array { $path = str_replace(['{userId}'], [$userId], '/users/{userId}/status'); $params = []; @@ -215,6 +224,7 @@ class Users extends Service $params['status'] = $status; return $this->client->call(Client::METHOD_PATCH, $path, [ + 'content-type' => 'application/json', ], $params); } diff --git a/app/sdks/python/README.md b/app/sdks/python/README.md index 16f76cf3be..dbd772bf76 100644 --- a/app/sdks/python/README.md +++ b/app/sdks/python/README.md @@ -1,7 +1,7 @@ # Appwrite SDK for Python ![License](https://img.shields.io/github/license/appwrite/sdk-for-python.svg?v=1) -![Version](https://img.shields.io/badge/api%20version-0.2.0-blue.svg?v=1) +![Version](https://img.shields.io/badge/api%20version-0.3.0-blue.svg?v=1) **WORK IN PROGRESS - NOT READY FOR USAGE - Want to help us improve this client SDK? Send a pull request to Appwrite [SDK generator repository](https://github.com/appwrite/sdk-generator).** diff --git a/app/sdks/python/appwrite/client.py b/app/sdks/python/appwrite/client.py index 835c3ba011..d2a9f1a042 100644 --- a/app/sdks/python/appwrite/client.py +++ b/app/sdks/python/appwrite/client.py @@ -7,7 +7,7 @@ class Client: self._endpoint = 'https://appwrite.io/v1' self._global_headers = { 'content-type': '', - 'x-sdk-version': 'appwrite:python:1.0.0', + 'x-sdk-version': 'appwrite:python:1.0.3', } def set_self_signed(self, status=True): diff --git a/app/sdks/python/appwrite/services/account.py b/app/sdks/python/appwrite/services/account.py index 4ea82c47d7..53394a3e15 100644 --- a/app/sdks/python/appwrite/services/account.py +++ b/app/sdks/python/appwrite/services/account.py @@ -10,6 +10,7 @@ class Account(Service): path = '/account' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def delete(self): @@ -19,6 +20,7 @@ class Account(Service): path = '/account' return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def update_email(self, email, password): @@ -30,6 +32,7 @@ class Account(Service): params['password'] = password return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) def update_name(self, name): @@ -40,6 +43,7 @@ class Account(Service): params['name'] = name return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) def update_password(self, password, old_password): @@ -51,6 +55,7 @@ class Account(Service): params['old-password'] = old_password return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) def get_prefs(self): @@ -60,6 +65,7 @@ class Account(Service): path = '/account/prefs' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def update_prefs(self, prefs): @@ -70,6 +76,7 @@ class Account(Service): params['prefs'] = prefs return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) def get_security(self): @@ -79,6 +86,7 @@ class Account(Service): path = '/account/security' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_sessions(self): @@ -88,4 +96,5 @@ class Account(Service): path = '/account/sessions' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/appwrite/services/auth.py b/app/sdks/python/appwrite/services/auth.py index 0e8cc6ea19..c7a8341869 100644 --- a/app/sdks/python/appwrite/services/auth.py +++ b/app/sdks/python/appwrite/services/auth.py @@ -3,7 +3,7 @@ from ..service import Service class Auth(Service): - def login(self, email, password, success, failure): + def login(self, email, password, success='', failure=''): """Login User""" params = {} @@ -14,6 +14,7 @@ class Auth(Service): params['failure'] = failure return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def logout(self): @@ -23,6 +24,7 @@ class Auth(Service): path = '/auth/logout' return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def logout_by_session(self, id): @@ -33,9 +35,10 @@ class Auth(Service): path.replace('{id}', id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) - def oauth(self, provider, success='', failure=''): + def oauth(self, provider, success, failure): """OAuth Login""" params = {} @@ -45,6 +48,7 @@ class Auth(Service): params['failure'] = failure return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def recovery(self, email, reset): @@ -56,6 +60,7 @@ class Auth(Service): params['reset'] = reset return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def recovery_reset(self, user_id, token, password_a, password_b): @@ -69,6 +74,7 @@ class Auth(Service): params['password-b'] = password_b return self.client.call('put', path, { + 'content-type': 'application/json', }, params) def register(self, email, password, confirm, success='', failure='', name=''): @@ -84,6 +90,7 @@ class Auth(Service): params['name'] = name return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def confirm(self, user_id, token): @@ -95,6 +102,7 @@ class Auth(Service): params['token'] = token return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def confirm_resend(self, confirm): @@ -105,4 +113,5 @@ class Auth(Service): params['confirm'] = confirm return self.client.call('post', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/appwrite/services/avatars.py b/app/sdks/python/appwrite/services/avatars.py index f6e463abc1..2f68663b65 100644 --- a/app/sdks/python/appwrite/services/avatars.py +++ b/app/sdks/python/appwrite/services/avatars.py @@ -14,6 +14,7 @@ class Avatars(Service): params['quality'] = quality return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_credit_card(self, code, width=100, height=100, quality=100): @@ -27,6 +28,7 @@ class Avatars(Service): params['quality'] = quality return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_favicon(self, url): @@ -37,6 +39,7 @@ class Avatars(Service): params['url'] = url return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_flag(self, code, width=100, height=100, quality=100): @@ -50,6 +53,7 @@ class Avatars(Service): params['quality'] = quality return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_image(self, url, width=400, height=400): @@ -62,6 +66,7 @@ class Avatars(Service): params['height'] = height return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_q_r(self, text, size=400, margin=1, download=0): @@ -75,4 +80,5 @@ class Avatars(Service): params['download'] = download return self.client.call('get', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/appwrite/services/database.py b/app/sdks/python/appwrite/services/database.py index d0facb82fe..55bd54f9f5 100644 --- a/app/sdks/python/appwrite/services/database.py +++ b/app/sdks/python/appwrite/services/database.py @@ -14,12 +14,10 @@ class Database(Service): params['orderType'] = order_type return self.client.call('get', path, { + 'content-type': 'application/json', }, params) - def create_collection(self, name, readstring(4) ""[]"" -=[], writestring(4) ""[]"" -=[], rulesstring(4) ""[]"" -=[]): + def create_collection(self, name, read, write, rules): """Create Collection""" params = {} @@ -30,6 +28,7 @@ class Database(Service): params['rules'] = rules return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_collection(self, collection_id): @@ -40,11 +39,10 @@ class Database(Service): path.replace('{collectionId}', collection_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) - def update_collection(self, collection_id, name, readstring(4) ""[]"" -=[], writestring(4) ""[]"" -=[], rulesstring(4) ""[]"" + def update_collection(self, collection_id, name, read, write, rulesstring(4) ""[]"" =[]): """Update Collection""" @@ -57,6 +55,7 @@ class Database(Service): params['rules'] = rules return self.client.call('put', path, { + 'content-type': 'application/json', }, params) def delete_collection(self, collection_id): @@ -67,6 +66,7 @@ class Database(Service): path.replace('{collectionId}', collection_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def list_documents(self, collection_id, filtersstring(4) ""[]"" @@ -87,11 +87,10 @@ class Database(Service): params['last'] = last return self.client.call('get', path, { + 'content-type': 'application/json', }, params) - def create_document(self, collection_id, data, readstring(4) ""[]"" -=[], writestring(4) ""[]"" -=[], parent_document='', parent_property='', parent_property_type='assign'): + def create_document(self, collection_id, data, read, write, parent_document='', parent_property='', parent_property_type='assign'): """Create Document""" params = {} @@ -105,6 +104,7 @@ class Database(Service): params['parentPropertyType'] = parent_property_type return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_document(self, collection_id, document_id): @@ -116,11 +116,10 @@ class Database(Service): path.replace('{documentId}', document_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) - def update_document(self, collection_id, document_id, data, readstring(4) ""[]"" -=[], writestring(4) ""[]"" -=[]): + def update_document(self, collection_id, document_id, data, read, write): """Update Document""" params = {} @@ -132,6 +131,7 @@ class Database(Service): params['write'] = write return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) def delete_document(self, collection_id, document_id): @@ -143,4 +143,5 @@ class Database(Service): path.replace('{documentId}', document_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/appwrite/services/locale.py b/app/sdks/python/appwrite/services/locale.py index fef156bef7..514d38e1a2 100644 --- a/app/sdks/python/appwrite/services/locale.py +++ b/app/sdks/python/appwrite/services/locale.py @@ -10,6 +10,17 @@ class Locale(Service): path = '/locale' return self.client.call('get', path, { + 'content-type': 'application/json', + }, params) + + def get_continents(self): + """List Countries""" + + params = {} + path = '/locale/continents' + + return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_countries(self): @@ -19,6 +30,7 @@ class Locale(Service): path = '/locale/countries' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_countries_e_u(self): @@ -28,6 +40,7 @@ class Locale(Service): path = '/locale/countries/eu' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_countries_phones(self): @@ -37,6 +50,7 @@ class Locale(Service): path = '/locale/countries/phones' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_currencies(self): @@ -46,4 +60,5 @@ class Locale(Service): path = '/locale/currencies' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/appwrite/services/projects.py b/app/sdks/python/appwrite/services/projects.py index 5dc676ed52..303ca7e43c 100644 --- a/app/sdks/python/appwrite/services/projects.py +++ b/app/sdks/python/appwrite/services/projects.py @@ -10,6 +10,7 @@ class Projects(Service): path = '/projects' return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def create_project(self, name, team_id, description='', logo='', url='', legal_name='', legal_country='', legal_state='', legal_city='', legal_address='', legal_tax_id=''): @@ -30,6 +31,7 @@ class Projects(Service): params['legalTaxId'] = legal_tax_id return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_project(self, project_id): @@ -40,6 +42,7 @@ class Projects(Service): path.replace('{projectId}', project_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def update_project(self, project_id, name, description='', logo='', url='', legal_name='', legal_country='', legal_state='', legal_city='', legal_address='', legal_tax_id=''): @@ -60,6 +63,7 @@ class Projects(Service): params['legalTaxId'] = legal_tax_id return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) def delete_project(self, project_id): @@ -70,6 +74,7 @@ class Projects(Service): path.replace('{projectId}', project_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def list_keys(self, project_id): @@ -80,6 +85,7 @@ class Projects(Service): path.replace('{projectId}', project_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def create_key(self, project_id, name, scopes): @@ -92,6 +98,7 @@ class Projects(Service): params['scopes'] = scopes return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_key(self, project_id, key_id): @@ -103,6 +110,7 @@ class Projects(Service): path.replace('{keyId}', key_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def update_key(self, project_id, key_id, name, scopes): @@ -116,6 +124,7 @@ class Projects(Service): params['scopes'] = scopes return self.client.call('put', path, { + 'content-type': 'application/json', }, params) def delete_key(self, project_id, key_id): @@ -127,6 +136,7 @@ class Projects(Service): path.replace('{keyId}', key_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def update_project_o_auth(self, project_id, provider, app_id='', secret=''): @@ -140,6 +150,7 @@ class Projects(Service): params['secret'] = secret return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) def list_platforms(self, project_id): @@ -150,6 +161,7 @@ class Projects(Service): path.replace('{projectId}', project_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def create_platform(self, project_id, type, name, key='', store='', url=''): @@ -165,6 +177,7 @@ class Projects(Service): params['url'] = url return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_platform(self, project_id, platform_id): @@ -176,6 +189,7 @@ class Projects(Service): path.replace('{platformId}', platform_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def update_platform(self, project_id, platform_id, name, key='', store='', url=''): @@ -191,6 +205,7 @@ class Projects(Service): params['url'] = url return self.client.call('put', path, { + 'content-type': 'application/json', }, params) def delete_platform(self, project_id, platform_id): @@ -202,6 +217,7 @@ class Projects(Service): path.replace('{platformId}', platform_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def list_tasks(self, project_id): @@ -212,6 +228,7 @@ class Projects(Service): path.replace('{projectId}', project_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def create_task(self, project_id, name, status, schedule, security, http_method, http_url, http_headers={}, http_user='', http_pass=''): @@ -231,6 +248,7 @@ class Projects(Service): params['httpPass'] = http_pass return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_task(self, project_id, task_id): @@ -242,6 +260,7 @@ class Projects(Service): path.replace('{taskId}', task_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def update_task(self, project_id, task_id, name, status, schedule, security, http_method, http_url, http_headers={}, http_user='', http_pass=''): @@ -262,6 +281,7 @@ class Projects(Service): params['httpPass'] = http_pass return self.client.call('put', path, { + 'content-type': 'application/json', }, params) def delete_task(self, project_id, task_id): @@ -273,6 +293,7 @@ class Projects(Service): path.replace('{taskId}', task_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def get_project_usage(self, project_id): @@ -283,6 +304,7 @@ class Projects(Service): path.replace('{projectId}', project_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def list_webhooks(self, project_id): @@ -293,6 +315,7 @@ class Projects(Service): path.replace('{projectId}', project_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def create_webhook(self, project_id, name, events, url, security, http_user='', http_pass=''): @@ -309,6 +332,7 @@ class Projects(Service): params['httpPass'] = http_pass return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_webhook(self, project_id, webhook_id): @@ -320,6 +344,7 @@ class Projects(Service): path.replace('{webhookId}', webhook_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def update_webhook(self, project_id, webhook_id, name, events, url, security, http_user='', http_pass=''): @@ -337,6 +362,7 @@ class Projects(Service): params['httpPass'] = http_pass return self.client.call('put', path, { + 'content-type': 'application/json', }, params) def delete_webhook(self, project_id, webhook_id): @@ -348,4 +374,5 @@ class Projects(Service): path.replace('{webhookId}', webhook_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/appwrite/services/storage.py b/app/sdks/python/appwrite/services/storage.py index 0a0ac9b55e..b15084bf20 100644 --- a/app/sdks/python/appwrite/services/storage.py +++ b/app/sdks/python/appwrite/services/storage.py @@ -14,11 +14,10 @@ class Storage(Service): params['orderType'] = order_type return self.client.call('get', path, { + 'content-type': 'application/json', }, params) - def create_file(self, files, readstring(4) ""[]"" -=[], writestring(4) ""[]"" -=[], folder_id=''): + def create_file(self, files, read, write, folder_id=''): """Create File""" params = {} @@ -40,11 +39,10 @@ class Storage(Service): path.replace('{fileId}', file_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) - def update_file(self, file_id, readstring(4) ""[]"" -=[], writestring(4) ""[]"" -=[], folder_id=''): + def update_file(self, file_id, read, write, folder_id=''): """Update File""" params = {} @@ -55,6 +53,7 @@ class Storage(Service): params['folderId'] = folder_id return self.client.call('put', path, { + 'content-type': 'application/json', }, params) def delete_file(self, file_id): @@ -65,6 +64,7 @@ class Storage(Service): path.replace('{fileId}', file_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def get_file_download(self, file_id): @@ -75,6 +75,7 @@ class Storage(Service): path.replace('{fileId}', file_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_file_preview(self, file_id, width=0, height=0, quality=100, background='', output=''): @@ -90,6 +91,7 @@ class Storage(Service): params['output'] = output return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_file_view(self, file_id, as=''): @@ -101,4 +103,5 @@ class Storage(Service): params['as'] = as return self.client.call('get', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/appwrite/services/teams.py b/app/sdks/python/appwrite/services/teams.py index f7e5f62cee..85ae8f43ed 100644 --- a/app/sdks/python/appwrite/services/teams.py +++ b/app/sdks/python/appwrite/services/teams.py @@ -14,6 +14,7 @@ class Teams(Service): params['orderType'] = order_type return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def create_team(self, name, rolesstring(13) ""[\"owner\"]"" @@ -26,6 +27,7 @@ class Teams(Service): params['roles'] = roles return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_team(self, team_id): @@ -36,6 +38,7 @@ class Teams(Service): path.replace('{teamId}', team_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def update_team(self, team_id, name): @@ -47,6 +50,7 @@ class Teams(Service): params['name'] = name return self.client.call('put', path, { + 'content-type': 'application/json', }, params) def delete_team(self, team_id): @@ -57,6 +61,7 @@ class Teams(Service): path.replace('{teamId}', team_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def get_team_members(self, team_id): @@ -67,6 +72,7 @@ class Teams(Service): path.replace('{teamId}', team_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def create_team_membership(self, team_id, email, roles, redirect, name=''): @@ -81,6 +87,7 @@ class Teams(Service): params['redirect'] = redirect return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def delete_team_membership(self, team_id, invite_id): @@ -92,6 +99,7 @@ class Teams(Service): path.replace('{inviteId}', invite_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def create_team_membership_resend(self, team_id, invite_id, redirect): @@ -104,6 +112,7 @@ class Teams(Service): params['redirect'] = redirect return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def update_team_membership_status(self, team_id, invite_id, user_id, secret, success='', failure=''): @@ -119,4 +128,5 @@ class Teams(Service): params['failure'] = failure return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/appwrite/services/users.py b/app/sdks/python/appwrite/services/users.py index abafb6aa1f..0f15828bd4 100644 --- a/app/sdks/python/appwrite/services/users.py +++ b/app/sdks/python/appwrite/services/users.py @@ -14,6 +14,7 @@ class Users(Service): params['orderType'] = order_type return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def create_user(self, email, password, name=''): @@ -26,6 +27,7 @@ class Users(Service): params['name'] = name return self.client.call('post', path, { + 'content-type': 'application/json', }, params) def get_user(self, user_id): @@ -36,6 +38,7 @@ class Users(Service): path.replace('{userId}', user_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_user_logs(self, user_id): @@ -46,6 +49,7 @@ class Users(Service): path.replace('{userId}', user_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def get_user_prefs(self, user_id): @@ -56,10 +60,11 @@ class Users(Service): path.replace('{userId}', user_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def update_user_prefs(self, user_id, prefs): - """Update Account Prefs""" + """Update User Prefs""" params = {} path = '/users/{userId}/prefs' @@ -67,6 +72,7 @@ class Users(Service): params['prefs'] = prefs return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) def get_user_sessions(self, user_id): @@ -77,6 +83,7 @@ class Users(Service): path.replace('{userId}', user_id) return self.client.call('get', path, { + 'content-type': 'application/json', }, params) def delete_user_sessions(self, user_id): @@ -87,6 +94,7 @@ class Users(Service): path.replace('{userId}', user_id) return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def delete_user_session(self, user_id, session_id): @@ -98,10 +106,11 @@ class Users(Service): params['sessionId'] = session_id return self.client.call('delete', path, { + 'content-type': 'application/json', }, params) def update_user_status(self, user_id, status): - """Update user status""" + """Update User Status""" params = {} path = '/users/{userId}/status' @@ -109,4 +118,5 @@ class Users(Service): params['status'] = status return self.client.call('patch', path, { + 'content-type': 'application/json', }, params) diff --git a/app/sdks/python/setup.py b/app/sdks/python/setup.py index 055dd5ad58..119a1591ba 100644 --- a/app/sdks/python/setup.py +++ b/app/sdks/python/setup.py @@ -3,7 +3,7 @@ from distutils.core import setup setup( name = 'appwrite', packages = ['appwrite'], - version = '1.0.0', + version = '1.0.3', license='BSD-3-Clause', description = 'Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)', author = 'Appwrite Team', @@ -11,7 +11,7 @@ setup( maintainer = 'Appwrite Team', maintainer_email = 'team@appwrite.io', url = 'https://appwrite.io/support', - download_url='https://github.com/appwrite/sdk-for-python/archive/1.0.0.tar.gz', + download_url='https://github.com/appwrite/sdk-for-python/archive/1.0.3.tar.gz', # keywords = ['SOME', 'MEANINGFULL', 'KEYWORDS'], install_requires=[ 'requests', diff --git a/app/sdks/ruby/Gemfile b/app/sdks/ruby/Gemfile new file mode 100644 index 0000000000..cd8aa9e04c --- /dev/null +++ b/app/sdks/ruby/Gemfile @@ -0,0 +1,3 @@ +source 'https://rubygems.org' + +gemspec \ No newline at end of file diff --git a/app/sdks/ruby/README.md b/app/sdks/ruby/README.md index 600f40a33d..9c5bd449ad 100644 --- a/app/sdks/ruby/README.md +++ b/app/sdks/ruby/README.md @@ -1,7 +1,7 @@ # Appwrite SDK for Ruby ![License](https://img.shields.io/github/license/appwrite/sdk-for-ruby.svg?v=1) -![Version](https://img.shields.io/badge/api%20version-0.2.0-blue.svg?v=1) +![Version](https://img.shields.io/badge/api%20version-0.3.0-blue.svg?v=1) **WORK IN PROGRESS - NOT READY FOR USAGE - Want to help us improve this client SDK? Send a pull request to Appwrite [SDK generator repository](https://github.com/appwrite/sdk-generator).** diff --git a/app/sdks/ruby/appwrite.gemspec b/app/sdks/ruby/appwrite.gemspec new file mode 100644 index 0000000000..c28a7a8e96 --- /dev/null +++ b/app/sdks/ruby/appwrite.gemspec @@ -0,0 +1,11 @@ +Gem::Specification.new do |s| + + s.name = 'appwrite' + s.version = '1.0.7' + s.summary = "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)" + s.author = 'Appwrite Team' + s.homepage = 'https://appwrite.io/support' + s.email = 'team@appwrite.io' + s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR) + +end \ No newline at end of file diff --git a/app/sdks/ruby/lib/appwrite.rb b/app/sdks/ruby/lib/appwrite.rb index 75f6a9a603..7f12c9aedf 100644 --- a/app/sdks/ruby/lib/appwrite.rb +++ b/app/sdks/ruby/lib/appwrite.rb @@ -12,15 +12,3 @@ require_relative 'appwrite/services/projects' require_relative 'appwrite/services/storage' require_relative 'appwrite/services/teams' require_relative 'appwrite/services/users' - -module Appwrite - -end - -client = Appwrite::Client.new() - -client - .set_endpoint('https://www.walla.co.il') - .add_header('x', 'y') - .add_header('z', 'i') - .call('get', '/info', {}, {'test': 'xxx'}) \ No newline at end of file diff --git a/app/sdks/ruby/lib/appwrite/client.rb b/app/sdks/ruby/lib/appwrite/client.rb index f2694fe0f5..23fad2cff4 100644 --- a/app/sdks/ruby/lib/appwrite/client.rb +++ b/app/sdks/ruby/lib/appwrite/client.rb @@ -1,27 +1,28 @@ require 'net/http' require 'uri' require 'json' +require 'cgi' module Appwrite class Client - METHOD_GET = 'GET' - METHOD_POST = 'POST' - METHOD_PUT = 'PUT' - METHOD_PATCH = 'PATCH' - METHOD_DELETE = 'DELETE' - METHOD_HEAD = 'HEAD' - METHOD_OPTIONS = 'OPTIONS' - METHOD_CONNECT = 'CONNECT' - METHOD_TRACE = 'TRACE' + METHOD_GET = 'get' + METHOD_POST = 'post' + METHOD_PUT = 'put' + METHOD_PATCH = 'patch' + METHOD_DELETE = 'delete' + METHOD_HEAD = 'head' + METHOD_OPTIONS = 'options' + METHOD_CONNECT = 'connect' + METHOD_TRACE = 'trace' def initialize() @headers = { - 'content-type': '', - 'user-agent': RUBY_PLATFORM + ':ruby-' + RUBY_VERSION, - 'x-sdk-version': 'appwrite:ruby:1.0.1' + 'content-type' => '', + 'user-agent' => RUBY_PLATFORM + ':ruby-' + RUBY_VERSION, + 'x-sdk-version' => 'appwrite:ruby:1.0.7' } - @endpoint = 'https://appwrite.test/v1'; + @endpoint = 'https://appwrite.io/v1'; end def set_project(value) @@ -61,30 +62,47 @@ module Appwrite end def call(method, path = '', headers = {}, params = {}) - uri = URI.parse(@endpoint + path + ((method == METHOD_GET) ? '?' + URI.encode_www_form(params) : '')) + uri = URI.parse(@endpoint + path + ((method == METHOD_GET) ? '?' + encode(params) : '')) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = (uri.scheme == 'https') + payload = '' headers = @headers.merge(headers) - case headers[:'content-type'][0, headers[:'content-type'].index(';') || headers[:'content-type'].length] - when 'application/json' - params = params.to_json - else - params = URI.encode_www_form(params) + if (method != METHOD_GET) + case headers['content-type'][0, headers['content-type'].index(';') || headers['content-type'].length] + when 'application/json' + payload = params.to_json + else + payload = encode(params) + end end begin - response = http.send_request(method.upcase, uri.request_uri, '', @headers) + response = http.send_request(method.upcase, uri.request_uri, payload, headers) rescue => error raise 'Request Failed: ' + error.message end - puts response['content-type'] + return JSON.parse(response.body); end protected private + + def encode(value, key = nil) + case value + when Hash then value.map { |k,v| encode(v, append_key(key,k)) }.join('&') + when Array then value.map { |v| encode(v, "#{key}[]") }.join('&') + when nil then '' + else + "#{key}=#{CGI.escape(value.to_s)}" + end + end + + def append_key(root_key, key) + root_key.nil? ? key : "#{root_key}[#{key.to_s}]" + end end end \ No newline at end of file diff --git a/app/sdks/ruby/lib/appwrite/services/account.rb b/app/sdks/ruby/lib/appwrite/services/account.rb index ff46256104..8f2a8b3e2a 100644 --- a/app/sdks/ruby/lib/appwrite/services/account.rb +++ b/app/sdks/ruby/lib/appwrite/services/account.rb @@ -8,6 +8,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -18,6 +19,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -30,6 +32,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end @@ -41,6 +44,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end @@ -53,6 +57,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end @@ -63,6 +68,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -74,6 +80,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end @@ -84,6 +91,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -94,6 +102,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/sdks/ruby/lib/appwrite/services/auth.rb b/app/sdks/ruby/lib/appwrite/services/auth.rb index 540080a5b8..6cb2fb9289 100644 --- a/app/sdks/ruby/lib/appwrite/services/auth.rb +++ b/app/sdks/ruby/lib/appwrite/services/auth.rb @@ -1,7 +1,7 @@ module Appwrite class Auth < Service - def login(email:, password:, success:, failure:) + def login(email:, password:, success: '', failure: '') path = '/auth/login' params = { @@ -12,6 +12,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -22,6 +23,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -33,10 +35,11 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end - def oauth(provider:, success: '', failure: '') + def oauth(provider:, success:, failure:) path = '/auth/oauth/{provider}' .gsub('{provider}', provider) @@ -46,6 +49,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -58,6 +62,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -72,6 +77,7 @@ module Appwrite } return @client.call('put', path, { + 'content-type' => 'application/json', }, params); end @@ -88,6 +94,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -100,6 +107,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -111,6 +119,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/sdks/ruby/lib/appwrite/services/avatars.rb b/app/sdks/ruby/lib/appwrite/services/avatars.rb index 7a712865d5..2c8e8ee723 100644 --- a/app/sdks/ruby/lib/appwrite/services/avatars.rb +++ b/app/sdks/ruby/lib/appwrite/services/avatars.rb @@ -12,6 +12,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -26,6 +27,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -37,6 +39,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -51,6 +54,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -64,6 +68,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -78,6 +83,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/sdks/ruby/lib/appwrite/services/database.rb b/app/sdks/ruby/lib/appwrite/services/database.rb index 20668f2c8c..cf1171248d 100644 --- a/app/sdks/ruby/lib/appwrite/services/database.rb +++ b/app/sdks/ruby/lib/appwrite/services/database.rb @@ -12,10 +12,11 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end - def create_collection(name:, read: [], write: [], rules: []) + def create_collection(name:, read:, write:, rules:) path = '/database' params = { @@ -26,6 +27,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -37,10 +39,11 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end - def update_collection(collection_id:, name:, read: [], write: [], rules: []) + def update_collection(collection_id:, name:, read:, write:, rules: []) path = '/database/{collectionId}' .gsub('{collection_id}', collection_id) @@ -52,6 +55,7 @@ module Appwrite } return @client.call('put', path, { + 'content-type' => 'application/json', }, params); end @@ -63,6 +67,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -83,10 +88,11 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end - def create_document(collection_id:, data:, read: [], write: [], parent_document: '', parent_property: '', parent_property_type: 'assign') + def create_document(collection_id:, data:, read:, write:, parent_document: '', parent_property: '', parent_property_type: 'assign') path = '/database/{collectionId}/documents' .gsub('{collection_id}', collection_id) @@ -100,6 +106,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -112,10 +119,11 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end - def update_document(collection_id:, document_id:, data:, read: [], write: []) + def update_document(collection_id:, document_id:, data:, read:, write:) path = '/database/{collectionId}/documents/{documentId}' .gsub('{collection_id}', collection_id) .gsub('{document_id}', document_id) @@ -127,6 +135,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end @@ -139,6 +148,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/sdks/ruby/lib/appwrite/services/locale.rb b/app/sdks/ruby/lib/appwrite/services/locale.rb index af9316cbbc..a5c708c764 100644 --- a/app/sdks/ruby/lib/appwrite/services/locale.rb +++ b/app/sdks/ruby/lib/appwrite/services/locale.rb @@ -8,6 +8,18 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', + }, params); + end + + def get_continents() + path = '/locale/continents' + + params = { + } + + return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -18,6 +30,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -28,6 +41,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -38,6 +52,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -48,6 +63,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/sdks/ruby/lib/appwrite/services/projects.rb b/app/sdks/ruby/lib/appwrite/services/projects.rb index 25a5da8b5d..9988708e92 100644 --- a/app/sdks/ruby/lib/appwrite/services/projects.rb +++ b/app/sdks/ruby/lib/appwrite/services/projects.rb @@ -8,6 +8,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -29,6 +30,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -40,6 +42,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -61,6 +64,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end @@ -72,6 +76,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -83,6 +88,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -96,6 +102,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -108,6 +115,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -122,6 +130,7 @@ module Appwrite } return @client.call('put', path, { + 'content-type' => 'application/json', }, params); end @@ -134,6 +143,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -148,6 +158,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end @@ -159,6 +170,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -175,6 +187,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -187,6 +200,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -203,6 +217,7 @@ module Appwrite } return @client.call('put', path, { + 'content-type' => 'application/json', }, params); end @@ -215,6 +230,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -226,6 +242,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -246,6 +263,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -258,6 +276,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -279,6 +298,7 @@ module Appwrite } return @client.call('put', path, { + 'content-type' => 'application/json', }, params); end @@ -291,6 +311,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -302,6 +323,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -313,6 +335,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -330,6 +353,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -342,6 +366,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -360,6 +385,7 @@ module Appwrite } return @client.call('put', path, { + 'content-type' => 'application/json', }, params); end @@ -372,6 +398,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/sdks/ruby/lib/appwrite/services/storage.rb b/app/sdks/ruby/lib/appwrite/services/storage.rb index 9a3e765422..3401611c8d 100644 --- a/app/sdks/ruby/lib/appwrite/services/storage.rb +++ b/app/sdks/ruby/lib/appwrite/services/storage.rb @@ -12,10 +12,11 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end - def create_file(files:, read: [], write: [], folder_id: '') + def create_file(files:, read:, write:, folder_id: '') path = '/storage/files' params = { @@ -26,6 +27,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'multipart/form-data', }, params); end @@ -37,10 +39,11 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end - def update_file(file_id:, read: [], write: [], folder_id: '') + def update_file(file_id:, read:, write:, folder_id: '') path = '/storage/files/{fileId}' .gsub('{file_id}', file_id) @@ -51,6 +54,7 @@ module Appwrite } return @client.call('put', path, { + 'content-type' => 'application/json', }, params); end @@ -62,6 +66,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -73,6 +78,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -89,6 +95,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -101,6 +108,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/sdks/ruby/lib/appwrite/services/teams.rb b/app/sdks/ruby/lib/appwrite/services/teams.rb index 2cb59b9205..109786e542 100644 --- a/app/sdks/ruby/lib/appwrite/services/teams.rb +++ b/app/sdks/ruby/lib/appwrite/services/teams.rb @@ -12,6 +12,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -24,6 +25,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -35,6 +37,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -47,6 +50,7 @@ module Appwrite } return @client.call('put', path, { + 'content-type' => 'application/json', }, params); end @@ -58,6 +62,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -69,6 +74,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -84,6 +90,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -96,6 +103,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -109,6 +117,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -125,6 +134,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/sdks/ruby/lib/appwrite/services/users.rb b/app/sdks/ruby/lib/appwrite/services/users.rb index b2ffc4fd0e..99927523f0 100644 --- a/app/sdks/ruby/lib/appwrite/services/users.rb +++ b/app/sdks/ruby/lib/appwrite/services/users.rb @@ -12,6 +12,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -25,6 +26,7 @@ module Appwrite } return @client.call('post', path, { + 'content-type' => 'application/json', }, params); end @@ -36,6 +38,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -47,6 +50,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -58,6 +62,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -70,6 +75,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end @@ -81,6 +87,7 @@ module Appwrite } return @client.call('get', path, { + 'content-type' => 'application/json', }, params); end @@ -92,6 +99,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -104,6 +112,7 @@ module Appwrite } return @client.call('delete', path, { + 'content-type' => 'application/json', }, params); end @@ -116,6 +125,7 @@ module Appwrite } return @client.call('patch', path, { + 'content-type' => 'application/json', }, params); end diff --git a/app/tasks/sdks.php b/app/tasks/sdks.php index 313b0fb776..08c308882e 100644 --- a/app/tasks/sdks.php +++ b/app/tasks/sdks.php @@ -13,10 +13,11 @@ use Appwrite\SDK\Language\Node; use Appwrite\SDK\Language\Python; use Appwrite\SDK\Language\Ruby; use Appwrite\SDK\Language\Dart; +use Appwrite\SDK\Language\Go; $cli = new CLI(); -$version = '0.2.0'; // Server version +$version = '0.3.0'; // Server version $warning = '**This SDK is compatible with Appwrite server version ' . $version . '. For older versions, please check previous releases.**'; $cli @@ -38,7 +39,7 @@ $cli $clients = [ 'php' => [ - 'version' => '1.0.9', + 'version' => '1.0.15', 'result' => __DIR__.'/../sdks/php/', 'gitURL' => 'https://github.com/appwrite/sdk-for-php.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-php.git', @@ -49,7 +50,7 @@ $cli 'platform' => 'server', ], 'js' => [ - 'version' => '1.0.23', + 'version' => '1.0.27', 'result' => __DIR__.'/../sdks/js/', 'gitURL' => 'https://github.com/appwrite/sdk-for-js.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-js.git', @@ -60,7 +61,7 @@ $cli 'platform' => 'client', ], 'node' => [ - 'version' => '1.0.26', + 'version' => '1.0.30', 'result' => __DIR__.'/../sdks/node/', 'gitURL' => 'https://github.com/appwrite/sdk-for-node.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-node.git', @@ -71,7 +72,7 @@ $cli 'platform' => 'server', ], 'python' => [ - 'version' => '1.0.0', + 'version' => '1.0.3', 'result' => __DIR__.'/../sdks/python/', 'gitURL' => 'https://github.com/appwrite/sdk-for-python.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-python.git', @@ -82,7 +83,7 @@ $cli 'platform' => 'server', ], 'ruby' => [ - 'version' => '1.0.1', + 'version' => '1.0.7', 'result' => __DIR__.'/../sdks/ruby/', 'gitURL' => 'https://github.com/appwrite/sdk-for-ruby.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-ruby.git', @@ -93,7 +94,7 @@ $cli 'platform' => 'server', ], 'dart' => [ - 'version' => '0.0.2', + 'version' => '0.0.5', 'result' => __DIR__.'/../sdks/dart/', 'gitURL' => 'https://github.com/appwrite/sdk-for-dart', 'gitRepo' => 'git@github.com:appwrite/sdk-for-dart.git', @@ -103,6 +104,17 @@ $cli 'readme' => false, 'platform' => 'client', ], + 'go' => [ + 'version' => '0.0.4', + 'result' => __DIR__.'/../sdks/go/', + 'gitURL' => 'https://github.com/appwrite/sdk-for-go', + 'gitRepo' => 'git@github.com:appwrite/sdk-for-go.git', + 'gitRepoName' => 'sdk-for-go', + 'gitUserName' => 'appwrite', + 'warning' => '**WORK IN PROGRESS - NOT READY FOR USAGE - Want to help us improve this client SDK? Send a pull request to Appwrite [SDK generator repository](https://github.com/appwrite/sdk-generator).**', + 'readme' => false, + 'platform' => 'server', + ], ]; foreach ($clients as $name => $client) { @@ -150,6 +162,10 @@ $cli ->setPackageName('appwrite') ; break; + break; + case 'go': + $language = new Go(); + break; default: throw new Exception('Language not supported'); break; diff --git a/app/views/console/home/index.phtml b/app/views/console/home/index.phtml index 20b8399392..6c1f122932 100644 --- a/app/views/console/home/index.phtml +++ b/app/views/console/home/index.phtml @@ -180,7 +180,7 @@ $graph = $this->getParam('graph', false);

After adding your new website, install our JS SDK to integrate with your code and read our getting started tutorial.

-
+
npm install appwrite
diff --git a/app/views/console/users/index.phtml b/app/views/console/users/index.phtml index 2b4fcea50a..f16b9df458 100644 --- a/app/views/console/users/index.phtml +++ b/app/views/console/users/index.phtml @@ -36,7 +36,7 @@ $providers = $this->getParam('providers', []); - +
@@ -352,7 +352,7 @@ $providers = $this->getParam('providers', []);

To complete set up, add this OAuth redirect URI to your app configuration.

- +
diff --git a/app/views/console/users/view.phtml b/app/views/console/users/view.phtml index 7a484a97c9..10dbb32530 100644 --- a/app/views/console/users/view.phtml +++ b/app/views/console/users/view.phtml @@ -53,7 +53,7 @@ data-success="trigger" data-success-param-trigger-events="user-prefs-load"> -
+
@@ -74,7 +74,7 @@
-
+
No user preferences found
diff --git a/composer.lock b/composer.lock index 8412ef11f0..213db786f8 100644 --- a/composer.lock +++ b/composer.lock @@ -12,12 +12,12 @@ "source": { "type": "git", "url": "https://github.com/appwrite/sdk-for-php.git", - "reference": "ac310ede83c8520c038fdab6e646322eb634d9e3" + "reference": "d4a07ef5204fbc1d046dd8d852165e08a27293ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-for-php/zipball/ac310ede83c8520c038fdab6e646322eb634d9e3", - "reference": "ac310ede83c8520c038fdab6e646322eb634d9e3", + "url": "https://api.github.com/repos/appwrite/sdk-for-php/zipball/d4a07ef5204fbc1d046dd8d852165e08a27293ad", + "reference": "d4a07ef5204fbc1d046dd8d852165e08a27293ad", "shasum": "" }, "require": { @@ -39,7 +39,7 @@ "BSD-3-Clause" ], "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)", - "time": "2019-10-09T10:26:29+00:00" + "time": "2019-10-21T18:01:17+00:00" }, { "name": "appwrite/php-clamav", @@ -47,12 +47,12 @@ "source": { "type": "git", "url": "https://github.com/appwrite/php-clamav.git", - "reference": "f59dee89963a868bd2675ba47132a92f981acebb" + "reference": "38cb3c5e23fd9c843d3cd1159a78c5ae2c9c91a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/php-clamav/zipball/f59dee89963a868bd2675ba47132a92f981acebb", - "reference": "f59dee89963a868bd2675ba47132a92f981acebb", + "url": "https://api.github.com/repos/appwrite/php-clamav/zipball/38cb3c5e23fd9c843d3cd1159a78c5ae2c9c91a2", + "reference": "38cb3c5e23fd9c843d3cd1159a78c5ae2c9c91a2", "shasum": "" }, "require": { @@ -84,7 +84,7 @@ "clamav", "php" ], - "time": "2019-09-08T17:36:32+00:00" + "time": "2019-10-27T18:41:06+00:00" }, { "name": "appwrite/sdk-generator", @@ -92,18 +92,18 @@ "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator", - "reference": "45d82c2c53c38926a45c5e153aaa4794860954a0" + "reference": "cd5376697e78c75bff0019c4fdb86a68271297a9" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", "matthiasmullie/minify": "^1.3", - "php": ">=7.2.0", - "twig/twig": "^2.0" + "php": ">=7.0.0", + "twig/twig": "^2.12" }, "require-dev": { - "phpunit/phpunit": "3.7.35" + "phpunit/phpunit": "^7.0" }, "type": "library", "autoload": { @@ -122,7 +122,7 @@ } ], "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", - "time": "2019-10-09 14:12:31" + "time": "2019-11-02 08:48:07" }, { "name": "bacon/bacon-qr-code", @@ -268,16 +268,16 @@ }, { "name": "colinmollenhour/credis", - "version": "1.10.1", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/colinmollenhour/credis.git", - "reference": "c1cab895f2331a1877738b282d0d8b1ff6d4c92d" + "reference": "ee56982176ebcb8ad6acd51b7cddbc6b0a9de1dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/c1cab895f2331a1877738b282d0d8b1ff6d4c92d", - "reference": "c1cab895f2331a1877738b282d0d8b1ff6d4c92d", + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/ee56982176ebcb8ad6acd51b7cddbc6b0a9de1dd", + "reference": "ee56982176ebcb8ad6acd51b7cddbc6b0a9de1dd", "shasum": "" }, "require": { @@ -304,7 +304,7 @@ ], "description": "Credis is a lightweight interface to the Redis key-value store which wraps the phpredis library when available for better performance.", "homepage": "https://github.com/colinmollenhour/credis", - "time": "2019-03-05T16:29:14+00:00" + "time": "2019-10-25T19:28:45+00:00" }, { "name": "composer/ca-bundle", @@ -312,12 +312,12 @@ "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527" + "reference": "2655f9fa49d8996622b9d7371481648467573ac0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527", - "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/2655f9fa49d8996622b9d7371481648467573ac0", + "reference": "2655f9fa49d8996622b9d7371481648467573ac0", "shasum": "" }, "require": { @@ -328,7 +328,7 @@ "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8", "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0" + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" }, "type": "library", "extra": { @@ -360,7 +360,7 @@ "ssl", "tls" ], - "time": "2019-08-30T08:44:50+00:00" + "time": "2019-11-01T11:58:05+00:00" }, { "name": "dasprid/enum", @@ -558,18 +558,18 @@ "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "a7010cc9b52ecfa00051bb26e4ae025958fe9851" + "reference": "df36d8dae3979cf927d5bbbed6f0427f39aadfec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a7010cc9b52ecfa00051bb26e4ae025958fe9851", - "reference": "a7010cc9b52ecfa00051bb26e4ae025958fe9851", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/df36d8dae3979cf927d5bbbed6f0427f39aadfec", + "reference": "df36d8dae3979cf927d5bbbed6f0427f39aadfec", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", + "guzzlehttp/psr7": "^1.6.1", "php": ">=5.5" }, "require-dev": { @@ -583,7 +583,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "6.5-dev" } }, "autoload": { @@ -616,7 +616,7 @@ "rest", "web service" ], - "time": "2019-08-23T22:16:30+00:00" + "time": "2019-10-30T11:22:04+00:00" }, { "name": "guzzlehttp/promises", @@ -1236,12 +1236,12 @@ "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "c4421fcac1edd5a324fda73e589a5cf96e52ffd0" + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/c4421fcac1edd5a324fda73e589a5cf96e52ffd0", - "reference": "c4421fcac1edd5a324fda73e589a5cf96e52ffd0", + "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", "shasum": "" }, "require": { @@ -1275,7 +1275,7 @@ "psr", "psr-3" ], - "time": "2018-11-21T13:42:00+00:00" + "time": "2019-11-01T11:05:21+00:00" }, { "name": "ralouphie/getallheaders", @@ -1440,12 +1440,12 @@ "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "23419a940881f50525515726eec7507792ace5e0" + "reference": "d073fed7f1979689a25d161423c90ecccaf87c4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/23419a940881f50525515726eec7507792ace5e0", - "reference": "23419a940881f50525515726eec7507792ace5e0", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/d073fed7f1979689a25d161423c90ecccaf87c4f", + "reference": "d073fed7f1979689a25d161423c90ecccaf87c4f", "shasum": "" }, "require": { @@ -1499,7 +1499,7 @@ "keywords": [ "templating" ], - "time": "2019-10-05T16:44:39+00:00" + "time": "2019-10-23T15:56:47+00:00" }, { "name": "utopia-php/abuse", @@ -1649,12 +1649,12 @@ "source": { "type": "git", "url": "https://github.com/utopia-php/framework.git", - "reference": "5ac8c91de53166ca7c03c82b55ed717a66362876" + "reference": "315b97b6558346348e2c3f56a826dcfb6c455791" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/framework/zipball/5ac8c91de53166ca7c03c82b55ed717a66362876", - "reference": "5ac8c91de53166ca7c03c82b55ed717a66362876", + "url": "https://api.github.com/repos/utopia-php/framework/zipball/315b97b6558346348e2c3f56a826dcfb6c455791", + "reference": "315b97b6558346348e2c3f56a826dcfb6c455791", "shasum": "" }, "require": { @@ -1685,7 +1685,7 @@ "php", "upf" ], - "time": "2019-08-15T06:36:30+00:00" + "time": "2019-10-16T14:30:55+00:00" }, { "name": "utopia-php/locale", @@ -1788,12 +1788,12 @@ "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "7c71fc2932158d00f24f10635bf3b3b8b6ee5b68" + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/7c71fc2932158d00f24f10635bf3b3b8b6ee5b68", - "reference": "7c71fc2932158d00f24f10635bf3b3b8b6ee5b68", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", "shasum": "" }, "require": { @@ -1836,7 +1836,7 @@ "constructor", "instantiate" ], - "time": "2019-07-02T13:37:32+00:00" + "time": "2019-10-21T16:45:58+00:00" }, { "name": "myclabs/deep-copy", @@ -1892,12 +1892,12 @@ "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "8c8bd1bb1a22f311b1b4886662b989d0d02aab77" + "reference": "6008a32fa23816a6ac71889c80da7d58c056c2bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/8c8bd1bb1a22f311b1b4886662b989d0d02aab77", - "reference": "8c8bd1bb1a22f311b1b4886662b989d0d02aab77", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/6008a32fa23816a6ac71889c80da7d58c056c2bb", + "reference": "6008a32fa23816a6ac71889c80da7d58c056c2bb", "shasum": "" }, "require": { @@ -1943,7 +1943,7 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2019-07-09T12:18:04+00:00" + "time": "2019-10-11T06:20:36+00:00" }, { "name": "phar-io/version", @@ -2269,12 +2269,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "7f0f29702170e2786b2df813af970135765de6fc" + "reference": "ee5d93c00b87b36e206f1e8407dfe3306f5fcb4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/7f0f29702170e2786b2df813af970135765de6fc", - "reference": "7f0f29702170e2786b2df813af970135765de6fc", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/ee5d93c00b87b36e206f1e8407dfe3306f5fcb4d", + "reference": "ee5d93c00b87b36e206f1e8407dfe3306f5fcb4d", "shasum": "" }, "require": { @@ -2311,7 +2311,7 @@ "filesystem", "iterator" ], - "time": "2019-07-02T07:44:20+00:00" + "time": "2019-10-23T09:07:44+00:00" }, { "name": "phpunit/php-text-template", @@ -2360,12 +2360,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "37d2894f3650acccb6e57207e63eb9699c1a82a6" + "reference": "190db5a4b930a73afbba041cd3015aeb10d444d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/37d2894f3650acccb6e57207e63eb9699c1a82a6", - "reference": "37d2894f3650acccb6e57207e63eb9699c1a82a6", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/190db5a4b930a73afbba041cd3015aeb10d444d4", + "reference": "190db5a4b930a73afbba041cd3015aeb10d444d4", "shasum": "" }, "require": { @@ -2401,7 +2401,7 @@ "keywords": [ "timer" ], - "time": "2019-07-02T07:42:03+00:00" + "time": "2019-10-23T09:04:52+00:00" }, { "name": "phpunit/php-token-stream", @@ -2409,12 +2409,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "36bdcb91de0484f77e256fd3d6119dcf7171c164" + "reference": "5bc2030589cad93e6c73ce3ccee3f5e960604a0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/36bdcb91de0484f77e256fd3d6119dcf7171c164", - "reference": "36bdcb91de0484f77e256fd3d6119dcf7171c164", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5bc2030589cad93e6c73ce3ccee3f5e960604a0d", + "reference": "5bc2030589cad93e6c73ce3ccee3f5e960604a0d", "shasum": "" }, "require": { @@ -2450,7 +2450,7 @@ "keywords": [ "tokenizer" ], - "time": "2019-10-05T05:20:56+00:00" + "time": "2019-10-23T09:04:36+00:00" }, { "name": "phpunit/phpunit", @@ -2458,12 +2458,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "316afa6888d2562e04aeb67ea7f2017a0eb41661" + "reference": "fdc3245bc472bb1e23168b10aa0bd18716a58106" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/316afa6888d2562e04aeb67ea7f2017a0eb41661", - "reference": "316afa6888d2562e04aeb67ea7f2017a0eb41661", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fdc3245bc472bb1e23168b10aa0bd18716a58106", + "reference": "fdc3245bc472bb1e23168b10aa0bd18716a58106", "shasum": "" }, "require": { @@ -2534,7 +2534,7 @@ "testing", "xunit" ], - "time": "2019-09-14T09:08:39+00:00" + "time": "2019-11-01T16:39:44+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -2542,12 +2542,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e860800beea5ea4c8590df866338c09c20d3a48" + "reference": "5872e3737247e650995ac60e98611f69bfe8c556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e860800beea5ea4c8590df866338c09c20d3a48", - "reference": "5e860800beea5ea4c8590df866338c09c20d3a48", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5872e3737247e650995ac60e98611f69bfe8c556", + "reference": "5872e3737247e650995ac60e98611f69bfe8c556", "shasum": "" }, "require": { @@ -2579,7 +2579,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2019-07-02T07:44:03+00:00" + "time": "2019-10-23T09:08:24+00:00" }, { "name": "sebastian/comparator", @@ -2587,12 +2587,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "9a1267ac19ecd74163989bcb3e01c5c9587f9e3b" + "reference": "c57ba51c28b64ef8a4b14b40bceb2c5ca19e9406" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/9a1267ac19ecd74163989bcb3e01c5c9587f9e3b", - "reference": "9a1267ac19ecd74163989bcb3e01c5c9587f9e3b", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c57ba51c28b64ef8a4b14b40bceb2c5ca19e9406", + "reference": "c57ba51c28b64ef8a4b14b40bceb2c5ca19e9406", "shasum": "" }, "require": { @@ -2619,6 +2619,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -2630,10 +2634,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -2643,7 +2643,7 @@ "compare", "equality" ], - "time": "2019-07-02T07:45:15+00:00" + "time": "2019-10-28T09:22:49+00:00" }, { "name": "sebastian/diff", @@ -2651,12 +2651,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "d7e7810940c78f3343420f76adf92dc437b7a557" + "reference": "2ce6675fe77612cce2a49d0cecb4e7afead64323" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/d7e7810940c78f3343420f76adf92dc437b7a557", - "reference": "d7e7810940c78f3343420f76adf92dc437b7a557", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/2ce6675fe77612cce2a49d0cecb4e7afead64323", + "reference": "2ce6675fe77612cce2a49d0cecb4e7afead64323", "shasum": "" }, "require": { @@ -2682,13 +2682,13 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", @@ -2699,7 +2699,7 @@ "unidiff", "unified diff" ], - "time": "2019-07-02T07:43:30+00:00" + "time": "2019-10-23T09:06:00+00:00" }, { "name": "sebastian/environment", @@ -2707,12 +2707,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "520187a48d1fd3714dd4ebfd8eb914a4d69d26a7" + "reference": "0f73ef4aa2d8a5e00393c06729012a50845e9e4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/520187a48d1fd3714dd4ebfd8eb914a4d69d26a7", - "reference": "520187a48d1fd3714dd4ebfd8eb914a4d69d26a7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0f73ef4aa2d8a5e00393c06729012a50845e9e4c", + "reference": "0f73ef4aa2d8a5e00393c06729012a50845e9e4c", "shasum": "" }, "require": { @@ -2752,7 +2752,7 @@ "environment", "hhvm" ], - "time": "2019-09-07T09:51:27+00:00" + "time": "2019-10-23T09:05:42+00:00" }, { "name": "sebastian/exporter", @@ -2760,12 +2760,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "10b761abeab7ea48c2b89f16a7fca10d2f544d25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/10b761abeab7ea48c2b89f16a7fca10d2f544d25", + "reference": "10b761abeab7ea48c2b89f16a7fca10d2f544d25", "shasum": "" }, "require": { @@ -2819,7 +2819,7 @@ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "time": "2019-10-23T09:05:12+00:00" }, { "name": "sebastian/global-state", @@ -2878,12 +2878,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "63e5a3e0881ebf28c9fbb2a2e12b77d373850c12" + "reference": "6096279595e26594a68c03571fba1d7c0253f19a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/63e5a3e0881ebf28c9fbb2a2e12b77d373850c12", - "reference": "63e5a3e0881ebf28c9fbb2a2e12b77d373850c12", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/6096279595e26594a68c03571fba1d7c0253f19a", + "reference": "6096279595e26594a68c03571fba1d7c0253f19a", "shasum": "" }, "require": { @@ -2917,7 +2917,7 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2019-07-02T07:43:46+00:00" + "time": "2019-10-23T09:08:54+00:00" }, { "name": "sebastian/object-reflector", @@ -2925,12 +2925,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "3053ae3e6286fdf98769f18ec10894dbc6260a34" + "reference": "aff2a6b4fffc8e9f0f1de6388f3d7bd0f729dddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/3053ae3e6286fdf98769f18ec10894dbc6260a34", - "reference": "3053ae3e6286fdf98769f18ec10894dbc6260a34", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/aff2a6b4fffc8e9f0f1de6388f3d7bd0f729dddc", + "reference": "aff2a6b4fffc8e9f0f1de6388f3d7bd0f729dddc", "shasum": "" }, "require": { @@ -2962,7 +2962,7 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2019-07-02T07:44:36+00:00" + "time": "2019-10-23T09:07:29+00:00" }, { "name": "sebastian/recursion-context", @@ -2970,12 +2970,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "a58220ae18565f6004bbe15321efc4470bfe02fd" + "reference": "f95dcff26fa9fd4df1960c503d4180ec2f8172fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/a58220ae18565f6004bbe15321efc4470bfe02fd", - "reference": "a58220ae18565f6004bbe15321efc4470bfe02fd", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f95dcff26fa9fd4df1960c503d4180ec2f8172fd", + "reference": "f95dcff26fa9fd4df1960c503d4180ec2f8172fd", "shasum": "" }, "require": { @@ -3000,14 +3000,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -3015,7 +3015,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2019-07-02T07:43:54+00:00" + "time": "2019-10-23T09:08:39+00:00" }, { "name": "sebastian/resource-operations", @@ -3023,12 +3023,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "d67fc89d3107c396d161411b620619f3e7a7c270" + "reference": "89893975fe3fcc2e60214471761af5e91cc7a933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/d67fc89d3107c396d161411b620619f3e7a7c270", - "reference": "d67fc89d3107c396d161411b620619f3e7a7c270", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/89893975fe3fcc2e60214471761af5e91cc7a933", + "reference": "89893975fe3fcc2e60214471761af5e91cc7a933", "shasum": "" }, "require": { @@ -3057,7 +3057,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2019-07-02T07:42:50+00:00" + "time": "2019-10-23T09:09:44+00:00" }, { "name": "sebastian/version", diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index f256c7f16a..ba33f29c12 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -20,7 +20,7 @@ function setEnvironmentVariable() { } # Grep for variables that look like MySQL (APP_) -for _curVar in `env | grep _APP_ | awk -F = '{print $1}'`;do +for _curVar in $(env | grep _APP_ | awk -F = '{print $1}');do # awk has split them by the equals sign # Pass the name and value to our function setEnvironmentVariable ${_curVar} ${!_curVar} @@ -30,4 +30,4 @@ echo newrelic.license = \"$_APP_NEWRELIC_KEY\" > /etc/php/7.3/fpm/conf.d/newreli echo newrelic.license = \"$_APP_NEWRELIC_KEY\" > /etc/php/7.3/cli/conf.d/newrelic.ini # Start supervisord and services -/usr/bin/supervisord -n -c /etc/supervisord.conf \ No newline at end of file +/usr/bin/supervisord -n -c /etc/supervisord.conf diff --git a/docker/supervisord.conf b/docker/supervisord.conf old mode 100755 new mode 100644 diff --git a/docs/references/auth/confirm-resend.md b/docs/references/auth/confirm-resend.md index 420f9bc113..30712ace16 100644 --- a/docs/references/auth/confirm-resend.md +++ b/docs/references/auth/confirm-resend.md @@ -1,3 +1,3 @@ -This endpoint allows the user to request your app to resend him his email confirmation message. The redirect arguments acts the same way as in /auth/register endpoint. +This endpoint allows the user to request your app to resend him his email confirmation message. The redirect arguments act the same way as in /auth/register endpoint. -Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. \ No newline at end of file +Please notice that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. \ No newline at end of file diff --git a/docs/references/auth/login.md b/docs/references/auth/login.md index 5c8f1e7a4a..f2689efbbd 100644 --- a/docs/references/auth/login.md +++ b/docs/references/auth/login.md @@ -1,5 +1,5 @@ Allow the user to login into his account by providing a valid email and password combination. Use the success and failure arguments to provide a redirect URL\'s back to your app when login is completed. -Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. +Please notice that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. When accessing this route using Javascript from the browser, success and failure parameter URLs are required. Appwrite server will respond with a 301 redirect status code and will set the user session cookie. This behavior is enforced because modern browsers are limiting 3rd party cookies in XHR of fetch requests to protect user privacy. \ No newline at end of file diff --git a/docs/references/auth/logout.md b/docs/references/auth/logout.md index 534b191187..d1393d5f64 100644 --- a/docs/references/auth/logout.md +++ b/docs/references/auth/logout.md @@ -1 +1 @@ -Use this endpoint to log out the currently logged in user from his account. When succeed this endpoint will delete the user session and remove the session secret cookie from the user client. \ No newline at end of file +Use this endpoint to log out the currently logged in user from his account. When successful this endpoint will delete the user session and remove the session secret cookie from the user client. \ No newline at end of file diff --git a/docs/references/auth/recovery-reset.md b/docs/references/auth/recovery-reset.md index 8d1336450a..b7b7819c88 100644 --- a/docs/references/auth/recovery-reset.md +++ b/docs/references/auth/recovery-reset.md @@ -1,3 +1,3 @@ Use this endpoint to complete the user account password reset. Both the **userId** and **token** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the /auth/recovery endpoint. -Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. \ No newline at end of file +Please notice that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. \ No newline at end of file diff --git a/docs/references/auth/register.md b/docs/references/auth/register.md index 4c6768f1a4..3f975995f9 100644 --- a/docs/references/auth/register.md +++ b/docs/references/auth/register.md @@ -1,7 +1,7 @@ -Use this endpoint to allow a new user to register an account in your project. Use the success and failure URL's to redirect users back to your application after signup completes. +Use this endpoint to allow a new user to register an account in your project. Use the success and failure URLs to redirect users back to your application after signup completes. If registration completes successfully user will be sent with a confirmation email in order to confirm he is the owner of the account email address. Use the confirmation parameter to redirect the user from the confirmation email back to your app. When the user is redirected, use the /auth/confirm endpoint to complete the account confirmation. -Please notice that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. +Please notice that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. When accessing this route using Javascript from the browser, success and failure parameter URLs are required. Appwrite server will respond with a 301 redirect status code and will set the user session cookie. This behavior is enforced because modern browsers are limiting 3rd party cookies in XHR of fetch requests to protect user privacy. \ No newline at end of file diff --git a/docs/references/avatars/get-browser.md b/docs/references/avatars/get-browser.md index 8b1032d59a..8bc41911e8 100644 --- a/docs/references/avatars/get-browser.md +++ b/docs/references/avatars/get-browser.md @@ -1 +1 @@ -You can use this endpoint to show different browser icons to your users, The code argument receives the browser code as appear in your user /account/sessions endpoint. Use width, height and quality arguments to change the output settings. \ No newline at end of file +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 /account/sessions endpoint. Use width, height and quality arguments to change the output settings. \ No newline at end of file diff --git a/docs/references/avatars/get-credit-card.md b/docs/references/avatars/get-credit-card.md index c94b1cabbe..e0b3e97ace 100644 --- a/docs/references/avatars/get-credit-card.md +++ b/docs/references/avatars/get-credit-card.md @@ -1 +1 @@ -Need to display your users with your billing method or there payment methods? 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. \ No newline at end of file +Need to display your users with your billing method or their payment methods? 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. \ No newline at end of file diff --git a/docs/references/avatars/get-flag.md b/docs/references/avatars/get-flag.md index 81cdb1bbac..ba7f230e14 100644 --- a/docs/references/avatars/get-flag.md +++ b/docs/references/avatars/get-flag.md @@ -1 +1 @@ -You can use this endpoint to show different country flags icons to your users, The code argument receives the a 2 letter country code. Use width, height and quality arguments to change the output settings. \ No newline at end of file +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. \ No newline at end of file diff --git a/docs/references/avatars/get-image.md b/docs/references/avatars/get-image.md index 981d10675c..508ece8a34 100644 --- a/docs/references/avatars/get-image.md +++ b/docs/references/avatars/get-image.md @@ -1 +1 @@ -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 cases, you want to make sure a 3rd party image is properly served using a TLS protocol. \ No newline at end of file +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. \ No newline at end of file diff --git a/docs/references/locale/get-continents.md b/docs/references/locale/get-continents.md new file mode 100644 index 0000000000..92b74b3617 --- /dev/null +++ b/docs/references/locale/get-continents.md @@ -0,0 +1 @@ +List of all continents. You can use the locale header to get the data in a supported language. \ No newline at end of file diff --git a/docs/references/locale/get-countries-eu.md b/docs/references/locale/get-countries-eu.md index b42d5bbc32..2dcf03a3ee 100644 --- a/docs/references/locale/get-countries-eu.md +++ b/docs/references/locale/get-countries-eu.md @@ -1 +1 @@ -List of all countries that are currently members of the EU. You can use the locale header to get the data in supported language. UK brexit date is currently set to 2019-10-31 and will be updated if and when needed. \ No newline at end of file +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. UK brexit date is currently set to 2019-10-31 and will be updated if and when needed. \ No newline at end of file diff --git a/docs/references/locale/get-countries-phones.md b/docs/references/locale/get-countries-phones.md index 6aeecfcaa0..7375097479 100644 --- a/docs/references/locale/get-countries-phones.md +++ b/docs/references/locale/get-countries-phones.md @@ -1 +1 @@ -List of all countries phone codes. You can use the locale header to get the data in supported language. \ No newline at end of file +List of all countries phone codes. You can use the locale header to get the data in a supported language. \ No newline at end of file diff --git a/docs/references/locale/get-countries.md b/docs/references/locale/get-countries.md index c708dce6dc..d53a52b854 100644 --- a/docs/references/locale/get-countries.md +++ b/docs/references/locale/get-countries.md @@ -1 +1 @@ -List of all countries. You can use the locale header to get the data in supported language. \ No newline at end of file +List of all countries. You can use the locale header to get the data in a supported language. \ No newline at end of file diff --git a/docs/references/locale/get-currencies.md b/docs/references/locale/get-currencies.md index 4214d9c555..e6c525cc95 100644 --- a/docs/references/locale/get-currencies.md +++ b/docs/references/locale/get-currencies.md @@ -1 +1 @@ -List of all currencies, including currency symol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in supported language. \ No newline at end of file +List of all currencies, including currency symol, 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. \ No newline at end of file diff --git a/docs/references/locale/get-locale.md b/docs/references/locale/get-locale.md index d7a1e22849..7b10b43c57 100644 --- a/docs/references/locale/get-locale.md +++ b/docs/references/locale/get-locale.md @@ -1 +1 @@ -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 supported language. \ No newline at end of file +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. \ No newline at end of file diff --git a/docs/tutorials/add-oauth-provider.md b/docs/tutorials/add-oauth-provider.md index bbb20e138f..b97222b09a 100644 --- a/docs/tutorials/add-oauth-provider.md +++ b/docs/tutorials/add-oauth-provider.md @@ -39,7 +39,7 @@ Create a new class that extends the basic OAuth provider abstract class in this Note that the class name should start with a capital letter as PHP FIG standards suggest. -Once a new class is created, you can start to implement your new provider's login flow. The best way to do this corrrectly is to have a look at another provider's implementation and try to follow the same standards. +Once a new class is created, you can start to implement your new provider's login flow. The best way to do this correctly is to have a look at another provider's implementation and try to follow the same standards. Please mention in your documentation what resources or API docs you used to implement the provider's OAuth protocol. @@ -49,4 +49,8 @@ After you finished adding your new provider to Appwrite you should be able to se Add credentials and check both a successful and a failed login (where the user rejects integration on provider page). +You can test your OAuth provider by trying to login using the [OAuth method](https://appwrite.io/docs/auth#oauth) when integrating the Appwrite JS SDK in a demo app. + +Pass your new adapter name as the provider parameter. If login is successful, you will be redirected to your success URL parameter. Otherwise, you will be redirected to your failure URL. + If everything goes well, just submit a pull request and be ready to respond to any feedback which can arise during our code review. diff --git a/docs/tutorials/environment-variables.md b/docs/tutorials/environment-variables.md index 7df7697455..842601a614 100644 --- a/docs/tutorials/environment-variables.md +++ b/docs/tutorials/environment-variables.md @@ -6,11 +6,11 @@ Appwrite environment variables allow you to edit your server setup configuration ### _APP_ENV -Set your server running environment. By default the var is set to 'development'. When deploying to production, change it to: 'production'. +Set your server running environment. By default, the var is set to 'development'. When deploying to production, change it to: 'production'. ### _APP_OPTIONS_ABUSE -Allows you to disable abuse checks and API rate limiting. By default set to 'enabled'. To cancel the abuse checking, set to 'disabled'. It is not recommended to disable this check-in a production environment. +Allows you to disable abuse checks and API rate limiting. By default, set to 'enabled'. To cancel the abuse checking, set to 'disabled'. It is not recommended to disable this check-in a production environment. ### _APP_OPENSSL_KEY_V1 @@ -28,7 +28,7 @@ To enable this option, pass a list of allowed email domains separated by a comma ### _APP_CONSOLE_WHITELIST_IPS -This last option allows you to restrict access to Appwrite console for users sharing the same set op IP addresses. This option is very useful for team working with a VPN service or a company IP. +This last option allows you to restrict access to Appwrite console for users sharing the same set of IP addresses. This option is very useful for team working with a VPN service or a company IP. To enable/activate this option, pass a list of allowed IP addresses separated by a comma. @@ -108,7 +108,7 @@ SMTP server TCP port. Default value is: '25' ### _APP_SMTP_SECURE -SMTP secure connection protocol. Empty by default, Change to 'tls' if running on a secure connection. +SMTP secure connection protocol. Empty by default, change to 'tls' if running on a secure connection. ### _APP_SMTP_USERNAME diff --git a/public/dist/scripts/app-all.js b/public/dist/scripts/app-all.js index f1343292ea..62fbcbf8c8 100644 --- a/public/dist/scripts/app-all.js +++ b/public/dist/scripts/app-all.js @@ -17,35 +17,35 @@ request.setRequestHeader(key,headers[key]);}} request.onload=function(){if(4===request.readyState&&399>=request.status){let data=request.response;let contentType=this.getResponseHeader('content-type')||'';contentType=contentType.substring(0,contentType.indexOf(';'));switch(contentType){case'application/json':data=JSON.parse(data);break;} resolve(data);}else{reject(new Error(request.statusText));}};if(progress){request.addEventListener('progress',progress);request.upload.addEventListener('progress',progress,false);} request.onerror=function(){reject(new Error("Network Error"));};request.send(params);})};return{'get':function(path,headers={},params={}){return call('GET',path+((Object.keys(params).length>0)?'?'+buildQuery(params):''),headers,{});},'post':function(path,headers={},params={},progress=null){return call('POST',path,headers,params,progress);},'put':function(path,headers={},params={},progress=null){return call('PUT',path,headers,params,progress);},'patch':function(path,headers={},params={},progress=null){return call('PATCH',path,headers,params,progress);},'delete':function(path,headers={},params={},progress=null){return call('DELETE',path,headers,params,progress);},'addGlobalParam':addGlobalParam,'addGlobalHeader':addGlobalHeader}}(window.document);let iframe=function(method,url,params){let form=document.createElement('form');form.setAttribute('method',method);form.setAttribute('action',config.endpoint+url);for(let key in params){if(params.hasOwnProperty(key)){let hiddenField=document.createElement("input");hiddenField.setAttribute("type","hidden");hiddenField.setAttribute("name",key);hiddenField.setAttribute("value",params[key]);form.appendChild(hiddenField);}} -document.body.appendChild(form);return form.submit();};let account={get:function(){let path='/account';let payload={};return http.get(path,{'content-type':'application/json'},payload);},delete:function(){let path='/account';let payload={};return http.delete(path,{'content-type':'application/json'},payload);},updateEmail:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"');} +document.body.appendChild(form);return form.submit();};let account={get:function(){let path='/account';let payload={};return http.get(path,{'content-type':'application/json',},payload);},delete:function(){let path='/account';let payload={};return http.delete(path,{'content-type':'application/json',},payload);},updateEmail:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} let path='/account/email';let payload={};if(email){payload['email']=email;} if(password){payload['password']=password;} -return http.patch(path,{'content-type':'application/json'},payload);},updateName:function(name){if(name===undefined){throw new Error('Missing required parameter: "name"');} +return http.patch(path,{'content-type':'application/json',},payload);},updateName:function(name){if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/account/name';let payload={};if(name){payload['name']=name;} -return http.patch(path,{'content-type':'application/json'},payload);},updatePassword:function(password,oldPassword){if(password===undefined){throw new Error('Missing required parameter: "password"');} +return http.patch(path,{'content-type':'application/json',},payload);},updatePassword:function(password,oldPassword){if(password===undefined){throw new Error('Missing required parameter: "password"');} if(oldPassword===undefined){throw new Error('Missing required parameter: "oldPassword"');} let path='/account/password';let payload={};if(password){payload['password']=password;} if(oldPassword){payload['old-password']=oldPassword;} -return http.patch(path,{'content-type':'application/json'},payload);},getPrefs:function(){let path='/account/prefs';let payload={};return http.get(path,{'content-type':'application/json'},payload);},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');} +return http.patch(path,{'content-type':'application/json',},payload);},getPrefs:function(){let path='/account/prefs';let payload={};return http.get(path,{'content-type':'application/json',},payload);},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');} let path='/account/prefs';let payload={};if(prefs){payload['prefs']=prefs;} -return http.patch(path,{'content-type':'application/json'},payload);},getSecurity:function(){let path='/account/security';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getSessions:function(){let path='/account/sessions';let payload={};return http.get(path,{'content-type':'application/json'},payload);}};let auth={login:function(email,password,success,failure){if(email===undefined){throw new Error('Missing required parameter: "email"');} +return http.patch(path,{'content-type':'application/json',},payload);},getSecurity:function(){let path='/account/security';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getSessions:function(){let path='/account/sessions';let payload={};return http.get(path,{'content-type':'application/json',},payload);}};let auth={login:function(email,password,success='',failure=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} -if(success===undefined){throw new Error('Missing required parameter: "success"');} -if(failure===undefined){throw new Error('Missing required parameter: "failure"');} let path='/auth/login';let payload={};if(email){payload['email']=email;} if(password){payload['password']=password;} if(success){payload['success']=success;} if(failure){payload['failure']=failure;} -return http.post(path,{'content-type':'application/json'},payload);},logout:function(){let path='/auth/logout';let payload={};return http.delete(path,{'content-type':'application/json'},payload);},logoutBySession:function(id){if(id===undefined){throw new Error('Missing required parameter: "id"');} -let path='/auth/logout/{id}'.replace(new RegExp('{id}','g'),id);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},oauth:function(provider,success='',failure=''){if(provider===undefined){throw new Error('Missing required parameter: "provider"');} +payload['project']=config.project;return iframe('post',path,payload);},logout:function(){let path='/auth/logout';let payload={};return http.delete(path,{'content-type':'application/json',},payload);},logoutBySession:function(id){if(id===undefined){throw new Error('Missing required parameter: "id"');} +let path='/auth/logout/{id}'.replace(new RegExp('{id}','g'),id);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},oauth:function(provider,success,failure){if(provider===undefined){throw new Error('Missing required parameter: "provider"');} +if(success===undefined){throw new Error('Missing required parameter: "success"');} +if(failure===undefined){throw new Error('Missing required parameter: "failure"');} let path='/auth/oauth/{provider}'.replace(new RegExp('{provider}','g'),provider);let payload={};if(success){payload['success']=success;} if(failure){payload['failure']=failure;} -return http.get(path,{'content-type':'application/json'},payload);},recovery:function(email,reset){if(email===undefined){throw new Error('Missing required parameter: "email"');} +payload['project']=config.project;return iframe('get',path,payload);},recovery:function(email,reset){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(reset===undefined){throw new Error('Missing required parameter: "reset"');} let path='/auth/recovery';let payload={};if(email){payload['email']=email;} if(reset){payload['reset']=reset;} -return http.post(path,{'content-type':'application/json'},payload);},recoveryReset:function(userId,token,passwordA,passwordB){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +return http.post(path,{'content-type':'application/json',},payload);},recoveryReset:function(userId,token,passwordA,passwordB){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(token===undefined){throw new Error('Missing required parameter: "token"');} if(passwordA===undefined){throw new Error('Missing required parameter: "passwordA"');} if(passwordB===undefined){throw new Error('Missing required parameter: "passwordB"');} @@ -53,7 +53,7 @@ let path='/auth/recovery/reset';let payload={};if(userId){payload['userId']=user if(token){payload['token']=token;} if(passwordA){payload['password-a']=passwordA;} if(passwordB){payload['password-b']=passwordB;} -return http.put(path,{'content-type':'application/json'},payload);},register:function(email,password,confirm,success='',failure='',name=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} +return http.put(path,{'content-type':'application/json',},payload);},register:function(email,password,confirm,success='',failure='',name=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} if(confirm===undefined){throw new Error('Missing required parameter: "confirm"');} let path='/auth/register';let payload={};if(email){payload['email']=email;} @@ -62,53 +62,56 @@ if(confirm){payload['confirm']=confirm;} if(success){payload['success']=success;} if(failure){payload['failure']=failure;} if(name){payload['name']=name;} -return http.post(path,{'content-type':'application/json'},payload);},confirm:function(userId,token){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +payload['project']=config.project;return iframe('post',path,payload);},confirm:function(userId,token){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(token===undefined){throw new Error('Missing required parameter: "token"');} let path='/auth/register/confirm';let payload={};if(userId){payload['userId']=userId;} if(token){payload['token']=token;} -return http.post(path,{'content-type':'application/json'},payload);},confirmResend:function(confirm){if(confirm===undefined){throw new Error('Missing required parameter: "confirm"');} +return http.post(path,{'content-type':'application/json',},payload);},confirmResend:function(confirm){if(confirm===undefined){throw new Error('Missing required parameter: "confirm"');} let path='/auth/register/confirm/resend';let payload={};if(confirm){payload['confirm']=confirm;} -return http.post(path,{'content-type':'application/json'},payload);}};let avatars={getBrowser:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} +return http.post(path,{'content-type':'application/json',},payload);}};let avatars={getBrowser:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} let path='/avatars/browsers/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload['width']=width;} if(height){payload['height']=height;} if(quality){payload['quality']=quality;} -return http.get(path,{'content-type':'application/json'},payload);},getCreditCard:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} +return http.get(path,{'content-type':'application/json',},payload);},getCreditCard:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} let path='/avatars/credit-cards/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload['width']=width;} if(height){payload['height']=height;} if(quality){payload['quality']=quality;} -return http.get(path,{'content-type':'application/json'},payload);},getFavicon:function(url){if(url===undefined){throw new Error('Missing required parameter: "url"');} +return http.get(path,{'content-type':'application/json',},payload);},getFavicon:function(url){if(url===undefined){throw new Error('Missing required parameter: "url"');} let path='/avatars/favicon';let payload={};if(url){payload['url']=url;} -return http.get(path,{'content-type':'application/json'},payload);},getFlag:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} +return http.get(path,{'content-type':'application/json',},payload);},getFlag:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} let path='/avatars/flags/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload['width']=width;} if(height){payload['height']=height;} if(quality){payload['quality']=quality;} -return http.get(path,{'content-type':'application/json'},payload);},getImage:function(url,width=400,height=400){if(url===undefined){throw new Error('Missing required parameter: "url"');} +return http.get(path,{'content-type':'application/json',},payload);},getImage:function(url,width=400,height=400){if(url===undefined){throw new Error('Missing required parameter: "url"');} let path='/avatars/image';let payload={};if(url){payload['url']=url;} if(width){payload['width']=width;} if(height){payload['height']=height;} -return http.get(path,{'content-type':'application/json'},payload);},getQR:function(text,size=400,margin=1,download=0){if(text===undefined){throw new Error('Missing required parameter: "text"');} +return http.get(path,{'content-type':'application/json',},payload);},getQR:function(text,size=400,margin=1,download=0){if(text===undefined){throw new Error('Missing required parameter: "text"');} let path='/avatars/qr';let payload={};if(text){payload['text']=text;} if(size){payload['size']=size;} if(margin){payload['margin']=margin;} if(download){payload['download']=download;} -return http.get(path,{'content-type':'application/json'},payload);}};let database={listCollections:function(search='',limit=25,offset=0,orderType='ASC'){let path='/database';let payload={};if(search){payload['search']=search;} +return http.get(path,{'content-type':'application/json',},payload);}};let database={listCollections:function(search='',limit=25,offset=0,orderType='ASC'){let path='/database';let payload={};if(search){payload['search']=search;} if(limit){payload['limit']=limit;} if(offset){payload['offset']=offset;} if(orderType){payload['orderType']=orderType;} -return http.get(path,{'content-type':'application/json'},payload);},createCollection:function(name,read=[],write=[],rules=[]){if(name===undefined){throw new Error('Missing required parameter: "name"');} +return http.get(path,{'content-type':'application/json',},payload);},createCollection:function(name,read,write,rules){if(name===undefined){throw new Error('Missing required parameter: "name"');} +if(read===undefined){throw new Error('Missing required parameter: "read"');} +if(write===undefined){throw new Error('Missing required parameter: "write"');} +if(rules===undefined){throw new Error('Missing required parameter: "rules"');} let path='/database';let payload={};if(name){payload['name']=name;} if(read){payload['read']=read;} if(write){payload['write']=write;} if(rules){payload['rules']=rules;} -return http.post(path,{'content-type':'application/json'},payload);},getCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} -let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateCollection:function(collectionId,name,read=[],write=[],rules=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.post(path,{'content-type':'application/json',},payload);},getCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateCollection:function(collectionId,name,read=[],write=[],rules=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(name){payload['name']=name;} if(read){payload['read']=read;} if(write){payload['write']=write;} if(rules){payload['rules']=rules;} -return http.put(path,{'content-type':'application/json'},payload);},deleteCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} -let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},listDocuments:function(collectionId,filters=[],offset=0,limit=50,orderField='$uid',orderType='ASC',orderCast='string',search='',first=0,last=0){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},listDocuments:function(collectionId,filters=[],offset=0,limit=50,orderField='$uid',orderType='ASC',orderCast='string',search='',first=0,last=0){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} let path='/database/{collectionId}/documents'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(filters){payload['filters']=filters;} if(offset){payload['offset']=offset;} if(limit){payload['limit']=limit;} @@ -118,7 +121,7 @@ if(orderCast){payload['order-cast']=orderCast;} if(search){payload['search']=search;} if(first){payload['first']=first;} if(last){payload['last']=last;} -return http.get(path,{'content-type':'application/json'},payload);},createDocument:function(collectionId,data,read=[],write=[],parentDocument='',parentProperty='',parentPropertyType='assign'){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.get(path,{'content-type':'application/json',},payload);},createDocument:function(collectionId,data,read=[],write=[],parentDocument='',parentProperty='',parentPropertyType='assign'){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(data===undefined){throw new Error('Missing required parameter: "data"');} let path='/database/{collectionId}/documents'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(data){payload['data']=data;} if(read){payload['read']=read;} @@ -126,17 +129,17 @@ if(write){payload['write']=write;} if(parentDocument){payload['parentDocument']=parentDocument;} if(parentProperty){payload['parentProperty']=parentProperty;} if(parentPropertyType){payload['parentPropertyType']=parentPropertyType;} -return http.post(path,{'content-type':'application/json'},payload);},getDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.post(path,{'content-type':'application/json',},payload);},getDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"');} -let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateDocument:function(collectionId,documentId,data,read=[],write=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateDocument:function(collectionId,documentId,data,read=[],write=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"');} if(data===undefined){throw new Error('Missing required parameter: "data"');} let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};if(data){payload['data']=data;} if(read){payload['read']=read;} if(write){payload['write']=write;} -return http.patch(path,{'content-type':'application/json'},payload);},deleteDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.patch(path,{'content-type':'application/json',},payload);},deleteDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"');} -let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);}};let locale={getLocale:function(){let path='/locale';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getCountries:function(){let path='/locale/countries';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getCountriesEU:function(){let path='/locale/countries/eu';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getCountriesPhones:function(){let path='/locale/countries/phones';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getCurrencies:function(){let path='/locale/currencies';let payload={};return http.get(path,{'content-type':'application/json'},payload);}};let projects={listProjects:function(){let path='/projects';let payload={};return http.get(path,{'content-type':'application/json'},payload);},createProject:function(name,teamId,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(name===undefined){throw new Error('Missing required parameter: "name"');} +let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);}};let locale={getLocale:function(){let path='/locale';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getCountries:function(){let path='/locale/countries';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getCountriesEU:function(){let path='/locale/countries/eu';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getCountriesPhones:function(){let path='/locale/countries/phones';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getCurrencies:function(){let path='/locale/currencies';let payload={};return http.get(path,{'content-type':'application/json',},payload);}};let projects={listProjects:function(){let path='/projects';let payload={};return http.get(path,{'content-type':'application/json',},payload);},createProject:function(name,teamId,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(name===undefined){throw new Error('Missing required parameter: "name"');} if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} let path='/projects';let payload={};if(name){payload['name']=name;} if(teamId){payload['teamId']=teamId;} @@ -149,8 +152,8 @@ if(legalState){payload['legalState']=legalState;} if(legalCity){payload['legalCity']=legalCity;} if(legalAddress){payload['legalAddress']=legalAddress;} if(legalTaxId){payload['legalTaxId']=legalTaxId;} -return http.post(path,{'content-type':'application/json'},payload);},getProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateProject:function(projectId,name,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateProject:function(projectId,name,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(name){payload['name']=name;} if(description){payload['description']=description;} @@ -162,30 +165,30 @@ if(legalState){payload['legalState']=legalState;} if(legalCity){payload['legalCity']=legalCity;} if(legalAddress){payload['legalAddress']=legalAddress;} if(legalTaxId){payload['legalTaxId']=legalTaxId;} -return http.patch(path,{'content-type':'application/json'},payload);},deleteProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},listKeys:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createKey:function(projectId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.patch(path,{'content-type':'application/json',},payload);},deleteProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},listKeys:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createKey:function(projectId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(scopes===undefined){throw new Error('Missing required parameter: "scopes"');} let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(name){payload['name']=name;} if(scopes){payload['scopes']=scopes;} -return http.post(path,{'content-type':'application/json'},payload);},getKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"');} -let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateKey:function(projectId,keyId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateKey:function(projectId,keyId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(scopes===undefined){throw new Error('Missing required parameter: "scopes"');} let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};if(name){payload['name']=name;} if(scopes){payload['scopes']=scopes;} -return http.put(path,{'content-type':'application/json'},payload);},deleteKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"');} -let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},updateProjectOAuth:function(projectId,provider,appId='',secret=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},updateProjectOAuth:function(projectId,provider,appId='',secret=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(provider===undefined){throw new Error('Missing required parameter: "provider"');} let path='/projects/{projectId}/oauth'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(provider){payload['provider']=provider;} if(appId){payload['appId']=appId;} if(secret){payload['secret']=secret;} -return http.patch(path,{'content-type':'application/json'},payload);},listPlatforms:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createPlatform:function(projectId,type,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.patch(path,{'content-type':'application/json',},payload);},listPlatforms:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createPlatform:function(projectId,type,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(type===undefined){throw new Error('Missing required parameter: "type"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(type){payload['type']=type;} @@ -193,19 +196,19 @@ if(name){payload['name']=name;} if(key){payload['key']=key;} if(store){payload['store']=store;} if(url){payload['url']=url;} -return http.post(path,{'content-type':'application/json'},payload);},getPlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getPlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"');} -let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updatePlatform:function(projectId,platformId,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updatePlatform:function(projectId,platformId,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};if(name){payload['name']=name;} if(key){payload['key']=key;} if(store){payload['store']=store;} if(url){payload['url']=url;} -return http.put(path,{'content-type':'application/json'},payload);},deletePlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.put(path,{'content-type':'application/json',},payload);},deletePlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"');} -let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},listTasks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/tasks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createTask:function(projectId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},listTasks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/tasks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createTask:function(projectId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(status===undefined){throw new Error('Missing required parameter: "status"');} if(schedule===undefined){throw new Error('Missing required parameter: "schedule"');} @@ -221,9 +224,9 @@ if(httpUrl){payload['httpUrl']=httpUrl;} if(httpHeaders){payload['httpHeaders']=httpHeaders;} if(httpUser){payload['httpUser']=httpUser;} if(httpPass){payload['httpPass']=httpPass;} -return http.post(path,{'content-type':'application/json'},payload);},getTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"');} -let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateTask:function(projectId,taskId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateTask:function(projectId,taskId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(status===undefined){throw new Error('Missing required parameter: "status"');} @@ -240,11 +243,11 @@ if(httpUrl){payload['httpUrl']=httpUrl;} if(httpHeaders){payload['httpHeaders']=httpHeaders;} if(httpUser){payload['httpUser']=httpUser;} if(httpPass){payload['httpPass']=httpPass;} -return http.put(path,{'content-type':'application/json'},payload);},deleteTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"');} -let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},getProjectUsage:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/usage'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},listWebhooks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/webhooks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createWebhook:function(projectId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},getProjectUsage:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/usage'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},listWebhooks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/webhooks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createWebhook:function(projectId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(events===undefined){throw new Error('Missing required parameter: "events"');} if(url===undefined){throw new Error('Missing required parameter: "url"');} @@ -255,9 +258,9 @@ if(url){payload['url']=url;} if(security){payload['security']=security;} if(httpUser){payload['httpUser']=httpUser;} if(httpPass){payload['httpPass']=httpPass;} -return http.post(path,{'content-type':'application/json'},payload);},getWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"');} -let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateWebhook:function(projectId,webhookId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateWebhook:function(projectId,webhookId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(events===undefined){throw new Error('Missing required parameter: "events"');} @@ -269,46 +272,46 @@ if(url){payload['url']=url;} if(security){payload['security']=security;} if(httpUser){payload['httpUser']=httpUser;} if(httpPass){payload['httpPass']=httpPass;} -return http.put(path,{'content-type':'application/json'},payload);},deleteWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"');} -let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);}};let storage={listFiles:function(search='',limit=25,offset=0,orderType='ASC'){let path='/storage/files';let payload={};if(search){payload['search']=search;} +let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);}};let storage={listFiles:function(search='',limit=25,offset=0,orderType='ASC'){let path='/storage/files';let payload={};if(search){payload['search']=search;} if(limit){payload['limit']=limit;} if(offset){payload['offset']=offset;} if(orderType){payload['orderType']=orderType;} -return http.get(path,{'content-type':'application/json'},payload);},createFile:function(files,read=[],write=[],folderId=''){if(files===undefined){throw new Error('Missing required parameter: "files"');} +return http.get(path,{'content-type':'application/json',},payload);},createFile:function(files,read=[],write=[],folderId=''){if(files===undefined){throw new Error('Missing required parameter: "files"');} let path='/storage/files';let payload={};if(files){payload['files']=files;} if(read){payload['read']=read;} if(write){payload['write']=write;} if(folderId){payload['folderId']=folderId;} -return http.post(path,{'content-type':'multipart/form-data'},payload);},getFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} -let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateFile:function(fileId,read=[],write=[],folderId=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +return http.post(path,{'content-type':'multipart/form-data',},payload);},getFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateFile:function(fileId,read=[],write=[],folderId=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(read){payload['read']=read;} if(write){payload['write']=write;} if(folderId){payload['folderId']=folderId;} -return http.put(path,{'content-type':'application/json'},payload);},deleteFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} -let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},getFileDownload:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} -let path='/storage/files/{fileId}/download'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},getFilePreview:function(fileId,width=0,height=0,quality=100,background='',output=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},getFileDownload:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +let path='/storage/files/{fileId}/download'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getFilePreview:function(fileId,width=0,height=0,quality=100,background='',output=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} let path='/storage/files/{fileId}/preview'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(width){payload['width']=width;} if(height){payload['height']=height;} if(quality){payload['quality']=quality;} if(background){payload['background']=background;} if(output){payload['output']=output;} -return http.get(path,{'content-type':'application/json'},payload);},getFileView:function(fileId,as=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +return http.get(path,{'content-type':'application/json',},payload);},getFileView:function(fileId,as=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} let path='/storage/files/{fileId}/view'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(as){payload['as']=as;} -return http.get(path,{'content-type':'application/json'},payload);}};let teams={listTeams:function(search='',limit=25,offset=0,orderType='ASC'){let path='/teams';let payload={};if(search){payload['search']=search;} +return http.get(path,{'content-type':'application/json',},payload);}};let teams={listTeams:function(search='',limit=25,offset=0,orderType='ASC'){let path='/teams';let payload={};if(search){payload['search']=search;} if(limit){payload['limit']=limit;} if(offset){payload['offset']=offset;} if(orderType){payload['orderType']=orderType;} -return http.get(path,{'content-type':'application/json'},payload);},createTeam:function(name,roles=["owner"]){if(name===undefined){throw new Error('Missing required parameter: "name"');} +return http.get(path,{'content-type':'application/json',},payload);},createTeam:function(name,roles=["owner"]){if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/teams';let payload={};if(name){payload['name']=name;} if(roles){payload['roles']=roles;} -return http.post(path,{'content-type':'application/json'},payload);},getTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} -let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateTeam:function(teamId,name){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +return http.post(path,{'content-type':'application/json',},payload);},getTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateTeam:function(teamId,name){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};if(name){payload['name']=name;} -return http.put(path,{'content-type':'application/json'},payload);},deleteTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} -let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},getTeamMembers:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} -let path='/teams/{teamId}/members'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createTeamMembership:function(teamId,email,roles,redirect,name=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},getTeamMembers:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +let path='/teams/{teamId}/members'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createTeamMembership:function(teamId,email,roles,redirect,name=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(email===undefined){throw new Error('Missing required parameter: "email"');} if(roles===undefined){throw new Error('Missing required parameter: "roles"');} if(redirect===undefined){throw new Error('Missing required parameter: "redirect"');} @@ -316,13 +319,13 @@ let path='/teams/{teamId}/memberships'.replace(new RegExp('{teamId}','g'),teamId if(name){payload['name']=name;} if(roles){payload['roles']=roles;} if(redirect){payload['redirect']=redirect;} -return http.post(path,{'content-type':'application/json'},payload);},deleteTeamMembership:function(teamId,inviteId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +return http.post(path,{'content-type':'application/json',},payload);},deleteTeamMembership:function(teamId,inviteId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"');} -let path='/teams/{teamId}/memberships/{inviteId}'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},createTeamMembershipResend:function(teamId,inviteId,redirect){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +let path='/teams/{teamId}/memberships/{inviteId}'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},createTeamMembershipResend:function(teamId,inviteId,redirect){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"');} if(redirect===undefined){throw new Error('Missing required parameter: "redirect"');} let path='/teams/{teamId}/memberships/{inviteId}/resend'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};if(redirect){payload['redirect']=redirect;} -return http.post(path,{'content-type':'application/json'},payload);},updateTeamMembershipStatus:function(teamId,inviteId,userId,secret,success='',failure=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +return http.post(path,{'content-type':'application/json',},payload);},updateTeamMembershipStatus:function(teamId,inviteId,userId,secret,success='',failure=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"');} if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(secret===undefined){throw new Error('Missing required parameter: "secret"');} @@ -330,30 +333,30 @@ let path='/teams/{teamId}/memberships/{inviteId}/status'.replace(new RegExp('{te if(secret){payload['secret']=secret;} if(success){payload['success']=success;} if(failure){payload['failure']=failure;} -return http.patch(path,{'content-type':'application/json'},payload);}};let users={listUsers:function(search='',limit=25,offset=0,orderType='ASC'){let path='/users';let payload={};if(search){payload['search']=search;} +payload['project']=config.project;return iframe('patch',path,payload);}};let users={listUsers:function(search='',limit=25,offset=0,orderType='ASC'){let path='/users';let payload={};if(search){payload['search']=search;} if(limit){payload['limit']=limit;} if(offset){payload['offset']=offset;} if(orderType){payload['orderType']=orderType;} -return http.get(path,{'content-type':'application/json'},payload);},createUser:function(email,password,name=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} +return http.get(path,{'content-type':'application/json',},payload);},createUser:function(email,password,name=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} let path='/users';let payload={};if(email){payload['email']=email;} if(password){payload['password']=password;} if(name){payload['name']=name;} -return http.post(path,{'content-type':'application/json'},payload);},getUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},getUserLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}/logs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},getUserPrefs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateUserPrefs:function(userId,prefs){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +return http.post(path,{'content-type':'application/json',},payload);},getUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getUserLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}/logs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getUserPrefs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateUserPrefs:function(userId,prefs){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');} let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};if(prefs){payload['prefs']=prefs;} -return http.patch(path,{'content-type':'application/json'},payload);},getUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},deleteUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},deleteUserSession:function(userId,sessionId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +return http.patch(path,{'content-type':'application/json',},payload);},getUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},deleteUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},deleteUserSession:function(userId,sessionId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(sessionId===undefined){throw new Error('Missing required parameter: "sessionId"');} let path='/users/{userId}/sessions/:session'.replace(new RegExp('{userId}','g'),userId);let payload={};if(sessionId){payload['sessionId']=sessionId;} -return http.delete(path,{'content-type':'application/json'},payload);},updateUserStatus:function(userId,status){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +return http.delete(path,{'content-type':'application/json',},payload);},updateUserStatus:function(userId,status){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(status===undefined){throw new Error('Missing required parameter: "status"');} let path='/users/{userId}/status'.replace(new RegExp('{userId}','g'),userId);let payload={};if(status){payload['status']=status;} -return http.patch(path,{'content-type':'application/json'},payload);}};return{setEndpoint:setEndpoint,setProject:setProject,setKey:setKey,setLocale:setLocale,setMode:setMode,account:account,auth:auth,avatars:avatars,database:database,locale:locale,projects:projects,storage:storage,teams:teams,users:users};};if(typeof module!=="undefined"){module.exports=window.Appwrite;}})((typeof window!=="undefined")?window:{});console.log('promise sdk');(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Chart=f()}})(function(){var define,module,exports;return(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=thresh&&u'+ units[u]+"");}).add("statsTotal",function($value){if(!$value){return 0;} -$value=abbreviate($value,1,false,false);return $value==="0"?"N/A":$value;});function abbreviate(number,maxPlaces,forcePlaces,forceLetter){number=Number(number);forceLetter=forceLetter||false;if(forceLetter!==false){return annotate(number,maxPlaces,forcePlaces,forceLetter);} +$value=abbreviate($value,1,false,false);return $value==="0"?"N/A":$value;}).add("isEmptyObject",function($value){return((Object.keys($value).length===0&&$value.constructor===Object)||$value.length===0)});function abbreviate(number,maxPlaces,forcePlaces,forceLetter){number=Number(number);forceLetter=forceLetter||false;if(forceLetter!==false){return annotate(number,maxPlaces,forcePlaces,forceLetter);} let abbr;if(number>=1e12){abbr="T";}else if(number>=1e9){abbr="B";}else if(number>=1e6){abbr="M";}else if(number>=1e3){abbr="K";}else{abbr="";} return annotate(number,maxPlaces,forcePlaces,abbr);} function annotate(number,maxPlaces,forcePlaces,abbr){let rounded=0;switch(abbr){case"T":rounded=number/1e12;break;case"B":rounded=number/1e9;break;case"M":rounded=number/1e6;break;case"K":rounded=number/1e3;break;case"":rounded=number;break;} @@ -2564,7 +2567,7 @@ if(maxPlaces!==false){let test=new RegExp("\\.\\d{"+(maxPlaces+1)+",}$");if(test if(forcePlaces!==false){rounded=Number(rounded).toFixed(forcePlaces);} return rounded+abbr;} window.ls.container.get("view").add({selector:"data-acl",controller:function(element,document,router,alerts){document.body.classList.remove("console");document.body.classList.remove("home");document.body.classList.add(router.getCurrent().view.scope);if(!router.getCurrent().view.project){document.body.classList.add("hide-nav");document.body.classList.remove("show-nav");}else{document.body.classList.add("show-nav");document.body.classList.remove("hide-nav");} -if("/console"===router.getCurrent().path){document.body.classList.add("index");}else{document.body.classList.remove("index");}}}).add({selector:"data-cookie-policy",controller:function(element,alerts,cookie,env){if(!cookie.get("cookie-alert")){let text=element.dataset["cookiePolicy"]||"";alerts.add({text:text,class:"cookie-alert",link:env.HOME+"/policy/cookies",callback:function(){cookie.set("cookie-alert","true",365*10);}},0);}}}).add({selector:"data-ls-ui-alerts",controller:function(element,window,view){window.document.addEventListener("alerted",function(){view.render(element);},true);}}).add({selector:"data-ls-ui-alerts-delete",controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset["message"]);let remove=function(){alerts.remove(message);};element.addEventListener("click",remove);}}).add({selector:"data-forms-headers",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+":"+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(":");key.value=split[0]||"";value.value=split[1]||"";key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:"data-prism",controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement("i");copy.className="icon-docs copy";copy.title="Copy to Clipboard";copy.addEventListener("click",function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand("copy");alerts.add({text:"Copied to clipboard",class:""},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:"error"},3000);} +if("/console"===router.getCurrent().path){document.body.classList.add("index");}else{document.body.classList.remove("index");}}}).add({selector:"data-cookie-policy",controller:function(element,alerts,cookie,env){if(!cookie.get("cookie-alert")){let text=element.dataset["cookiePolicy"]||"";alerts.add({text:text,class:"cookie-alert",link:env.HOME+"/policy/cookies",callback:function(){cookie.set("cookie-alert","true",365*10);}},0);}}}).add({selector:"data-ls-ui-alerts",controller:function(element,window,view){window.document.addEventListener("alerted",function(){view.render(element);},true);}}).add({selector:"data-ls-ui-alerts-delete",controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset["message"]);let remove=function(){alerts.remove(message);};element.addEventListener("click",remove);}}).add({selector:"data-forms-headers",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+":"+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(":");key.value=split[0]||"";value.value=split[1]||"";key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:"data-prism",controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement("i");copy.className="icon-docs copy";copy.title="Copy to Clipboard";copy.textContent="Click to Copy";copy.addEventListener("click",function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand("copy");alerts.add({text:"Copied to clipboard",class:""},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:"error"},3000);} window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:"data-code-example",controller:function(window,document,element,cookie){let prefix=element.dataset["codeExample"]||"unknown";element.addEventListener("change",function(){select(element.value);});let select=function(value){for(let i=0;i=sum){element.disabled=true;}else{element.disabled=false;element.value=offset+limit;}};check();for(let i=0;i=request.status){let data=request.response;let contentType=this.getResponseHeader('content-type')||'';contentType=contentType.substring(0,contentType.indexOf(';'));switch(contentType){case'application/json':data=JSON.parse(data);break;} resolve(data);}else{reject(new Error(request.statusText));}};if(progress){request.addEventListener('progress',progress);request.upload.addEventListener('progress',progress,false);} request.onerror=function(){reject(new Error("Network Error"));};request.send(params);})};return{'get':function(path,headers={},params={}){return call('GET',path+((Object.keys(params).length>0)?'?'+buildQuery(params):''),headers,{});},'post':function(path,headers={},params={},progress=null){return call('POST',path,headers,params,progress);},'put':function(path,headers={},params={},progress=null){return call('PUT',path,headers,params,progress);},'patch':function(path,headers={},params={},progress=null){return call('PATCH',path,headers,params,progress);},'delete':function(path,headers={},params={},progress=null){return call('DELETE',path,headers,params,progress);},'addGlobalParam':addGlobalParam,'addGlobalHeader':addGlobalHeader}}(window.document);let iframe=function(method,url,params){let form=document.createElement('form');form.setAttribute('method',method);form.setAttribute('action',config.endpoint+url);for(let key in params){if(params.hasOwnProperty(key)){let hiddenField=document.createElement("input");hiddenField.setAttribute("type","hidden");hiddenField.setAttribute("name",key);hiddenField.setAttribute("value",params[key]);form.appendChild(hiddenField);}} -document.body.appendChild(form);return form.submit();};let account={get:function(){let path='/account';let payload={};return http.get(path,{'content-type':'application/json'},payload);},delete:function(){let path='/account';let payload={};return http.delete(path,{'content-type':'application/json'},payload);},updateEmail:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"');} +document.body.appendChild(form);return form.submit();};let account={get:function(){let path='/account';let payload={};return http.get(path,{'content-type':'application/json',},payload);},delete:function(){let path='/account';let payload={};return http.delete(path,{'content-type':'application/json',},payload);},updateEmail:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} let path='/account/email';let payload={};if(email){payload['email']=email;} if(password){payload['password']=password;} -return http.patch(path,{'content-type':'application/json'},payload);},updateName:function(name){if(name===undefined){throw new Error('Missing required parameter: "name"');} +return http.patch(path,{'content-type':'application/json',},payload);},updateName:function(name){if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/account/name';let payload={};if(name){payload['name']=name;} -return http.patch(path,{'content-type':'application/json'},payload);},updatePassword:function(password,oldPassword){if(password===undefined){throw new Error('Missing required parameter: "password"');} +return http.patch(path,{'content-type':'application/json',},payload);},updatePassword:function(password,oldPassword){if(password===undefined){throw new Error('Missing required parameter: "password"');} if(oldPassword===undefined){throw new Error('Missing required parameter: "oldPassword"');} let path='/account/password';let payload={};if(password){payload['password']=password;} if(oldPassword){payload['old-password']=oldPassword;} -return http.patch(path,{'content-type':'application/json'},payload);},getPrefs:function(){let path='/account/prefs';let payload={};return http.get(path,{'content-type':'application/json'},payload);},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');} +return http.patch(path,{'content-type':'application/json',},payload);},getPrefs:function(){let path='/account/prefs';let payload={};return http.get(path,{'content-type':'application/json',},payload);},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');} let path='/account/prefs';let payload={};if(prefs){payload['prefs']=prefs;} -return http.patch(path,{'content-type':'application/json'},payload);},getSecurity:function(){let path='/account/security';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getSessions:function(){let path='/account/sessions';let payload={};return http.get(path,{'content-type':'application/json'},payload);}};let auth={login:function(email,password,success,failure){if(email===undefined){throw new Error('Missing required parameter: "email"');} +return http.patch(path,{'content-type':'application/json',},payload);},getSecurity:function(){let path='/account/security';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getSessions:function(){let path='/account/sessions';let payload={};return http.get(path,{'content-type':'application/json',},payload);}};let auth={login:function(email,password,success='',failure=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} -if(success===undefined){throw new Error('Missing required parameter: "success"');} -if(failure===undefined){throw new Error('Missing required parameter: "failure"');} let path='/auth/login';let payload={};if(email){payload['email']=email;} if(password){payload['password']=password;} if(success){payload['success']=success;} if(failure){payload['failure']=failure;} -return http.post(path,{'content-type':'application/json'},payload);},logout:function(){let path='/auth/logout';let payload={};return http.delete(path,{'content-type':'application/json'},payload);},logoutBySession:function(id){if(id===undefined){throw new Error('Missing required parameter: "id"');} -let path='/auth/logout/{id}'.replace(new RegExp('{id}','g'),id);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},oauth:function(provider,success='',failure=''){if(provider===undefined){throw new Error('Missing required parameter: "provider"');} +payload['project']=config.project;return iframe('post',path,payload);},logout:function(){let path='/auth/logout';let payload={};return http.delete(path,{'content-type':'application/json',},payload);},logoutBySession:function(id){if(id===undefined){throw new Error('Missing required parameter: "id"');} +let path='/auth/logout/{id}'.replace(new RegExp('{id}','g'),id);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},oauth:function(provider,success,failure){if(provider===undefined){throw new Error('Missing required parameter: "provider"');} +if(success===undefined){throw new Error('Missing required parameter: "success"');} +if(failure===undefined){throw new Error('Missing required parameter: "failure"');} let path='/auth/oauth/{provider}'.replace(new RegExp('{provider}','g'),provider);let payload={};if(success){payload['success']=success;} if(failure){payload['failure']=failure;} -return http.get(path,{'content-type':'application/json'},payload);},recovery:function(email,reset){if(email===undefined){throw new Error('Missing required parameter: "email"');} +payload['project']=config.project;return iframe('get',path,payload);},recovery:function(email,reset){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(reset===undefined){throw new Error('Missing required parameter: "reset"');} let path='/auth/recovery';let payload={};if(email){payload['email']=email;} if(reset){payload['reset']=reset;} -return http.post(path,{'content-type':'application/json'},payload);},recoveryReset:function(userId,token,passwordA,passwordB){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +return http.post(path,{'content-type':'application/json',},payload);},recoveryReset:function(userId,token,passwordA,passwordB){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(token===undefined){throw new Error('Missing required parameter: "token"');} if(passwordA===undefined){throw new Error('Missing required parameter: "passwordA"');} if(passwordB===undefined){throw new Error('Missing required parameter: "passwordB"');} @@ -53,7 +53,7 @@ let path='/auth/recovery/reset';let payload={};if(userId){payload['userId']=user if(token){payload['token']=token;} if(passwordA){payload['password-a']=passwordA;} if(passwordB){payload['password-b']=passwordB;} -return http.put(path,{'content-type':'application/json'},payload);},register:function(email,password,confirm,success='',failure='',name=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} +return http.put(path,{'content-type':'application/json',},payload);},register:function(email,password,confirm,success='',failure='',name=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} if(confirm===undefined){throw new Error('Missing required parameter: "confirm"');} let path='/auth/register';let payload={};if(email){payload['email']=email;} @@ -62,53 +62,56 @@ if(confirm){payload['confirm']=confirm;} if(success){payload['success']=success;} if(failure){payload['failure']=failure;} if(name){payload['name']=name;} -return http.post(path,{'content-type':'application/json'},payload);},confirm:function(userId,token){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +payload['project']=config.project;return iframe('post',path,payload);},confirm:function(userId,token){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(token===undefined){throw new Error('Missing required parameter: "token"');} let path='/auth/register/confirm';let payload={};if(userId){payload['userId']=userId;} if(token){payload['token']=token;} -return http.post(path,{'content-type':'application/json'},payload);},confirmResend:function(confirm){if(confirm===undefined){throw new Error('Missing required parameter: "confirm"');} +return http.post(path,{'content-type':'application/json',},payload);},confirmResend:function(confirm){if(confirm===undefined){throw new Error('Missing required parameter: "confirm"');} let path='/auth/register/confirm/resend';let payload={};if(confirm){payload['confirm']=confirm;} -return http.post(path,{'content-type':'application/json'},payload);}};let avatars={getBrowser:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} +return http.post(path,{'content-type':'application/json',},payload);}};let avatars={getBrowser:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} let path='/avatars/browsers/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload['width']=width;} if(height){payload['height']=height;} if(quality){payload['quality']=quality;} -return http.get(path,{'content-type':'application/json'},payload);},getCreditCard:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} +return http.get(path,{'content-type':'application/json',},payload);},getCreditCard:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} let path='/avatars/credit-cards/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload['width']=width;} if(height){payload['height']=height;} if(quality){payload['quality']=quality;} -return http.get(path,{'content-type':'application/json'},payload);},getFavicon:function(url){if(url===undefined){throw new Error('Missing required parameter: "url"');} +return http.get(path,{'content-type':'application/json',},payload);},getFavicon:function(url){if(url===undefined){throw new Error('Missing required parameter: "url"');} let path='/avatars/favicon';let payload={};if(url){payload['url']=url;} -return http.get(path,{'content-type':'application/json'},payload);},getFlag:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} +return http.get(path,{'content-type':'application/json',},payload);},getFlag:function(code,width=100,height=100,quality=100){if(code===undefined){throw new Error('Missing required parameter: "code"');} let path='/avatars/flags/{code}'.replace(new RegExp('{code}','g'),code);let payload={};if(width){payload['width']=width;} if(height){payload['height']=height;} if(quality){payload['quality']=quality;} -return http.get(path,{'content-type':'application/json'},payload);},getImage:function(url,width=400,height=400){if(url===undefined){throw new Error('Missing required parameter: "url"');} +return http.get(path,{'content-type':'application/json',},payload);},getImage:function(url,width=400,height=400){if(url===undefined){throw new Error('Missing required parameter: "url"');} let path='/avatars/image';let payload={};if(url){payload['url']=url;} if(width){payload['width']=width;} if(height){payload['height']=height;} -return http.get(path,{'content-type':'application/json'},payload);},getQR:function(text,size=400,margin=1,download=0){if(text===undefined){throw new Error('Missing required parameter: "text"');} +return http.get(path,{'content-type':'application/json',},payload);},getQR:function(text,size=400,margin=1,download=0){if(text===undefined){throw new Error('Missing required parameter: "text"');} let path='/avatars/qr';let payload={};if(text){payload['text']=text;} if(size){payload['size']=size;} if(margin){payload['margin']=margin;} if(download){payload['download']=download;} -return http.get(path,{'content-type':'application/json'},payload);}};let database={listCollections:function(search='',limit=25,offset=0,orderType='ASC'){let path='/database';let payload={};if(search){payload['search']=search;} +return http.get(path,{'content-type':'application/json',},payload);}};let database={listCollections:function(search='',limit=25,offset=0,orderType='ASC'){let path='/database';let payload={};if(search){payload['search']=search;} if(limit){payload['limit']=limit;} if(offset){payload['offset']=offset;} if(orderType){payload['orderType']=orderType;} -return http.get(path,{'content-type':'application/json'},payload);},createCollection:function(name,read=[],write=[],rules=[]){if(name===undefined){throw new Error('Missing required parameter: "name"');} +return http.get(path,{'content-type':'application/json',},payload);},createCollection:function(name,read,write,rules){if(name===undefined){throw new Error('Missing required parameter: "name"');} +if(read===undefined){throw new Error('Missing required parameter: "read"');} +if(write===undefined){throw new Error('Missing required parameter: "write"');} +if(rules===undefined){throw new Error('Missing required parameter: "rules"');} let path='/database';let payload={};if(name){payload['name']=name;} if(read){payload['read']=read;} if(write){payload['write']=write;} if(rules){payload['rules']=rules;} -return http.post(path,{'content-type':'application/json'},payload);},getCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} -let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateCollection:function(collectionId,name,read=[],write=[],rules=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.post(path,{'content-type':'application/json',},payload);},getCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateCollection:function(collectionId,name,read=[],write=[],rules=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(name){payload['name']=name;} if(read){payload['read']=read;} if(write){payload['write']=write;} if(rules){payload['rules']=rules;} -return http.put(path,{'content-type':'application/json'},payload);},deleteCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} -let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},listDocuments:function(collectionId,filters=[],offset=0,limit=50,orderField='$uid',orderType='ASC',orderCast='string',search='',first=0,last=0){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteCollection:function(collectionId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +let path='/database/{collectionId}'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},listDocuments:function(collectionId,filters=[],offset=0,limit=50,orderField='$uid',orderType='ASC',orderCast='string',search='',first=0,last=0){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} let path='/database/{collectionId}/documents'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(filters){payload['filters']=filters;} if(offset){payload['offset']=offset;} if(limit){payload['limit']=limit;} @@ -118,7 +121,7 @@ if(orderCast){payload['order-cast']=orderCast;} if(search){payload['search']=search;} if(first){payload['first']=first;} if(last){payload['last']=last;} -return http.get(path,{'content-type':'application/json'},payload);},createDocument:function(collectionId,data,read=[],write=[],parentDocument='',parentProperty='',parentPropertyType='assign'){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.get(path,{'content-type':'application/json',},payload);},createDocument:function(collectionId,data,read=[],write=[],parentDocument='',parentProperty='',parentPropertyType='assign'){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(data===undefined){throw new Error('Missing required parameter: "data"');} let path='/database/{collectionId}/documents'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(data){payload['data']=data;} if(read){payload['read']=read;} @@ -126,17 +129,17 @@ if(write){payload['write']=write;} if(parentDocument){payload['parentDocument']=parentDocument;} if(parentProperty){payload['parentProperty']=parentProperty;} if(parentPropertyType){payload['parentPropertyType']=parentPropertyType;} -return http.post(path,{'content-type':'application/json'},payload);},getDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.post(path,{'content-type':'application/json',},payload);},getDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"');} -let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateDocument:function(collectionId,documentId,data,read=[],write=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateDocument:function(collectionId,documentId,data,read=[],write=[]){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"');} if(data===undefined){throw new Error('Missing required parameter: "data"');} let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};if(data){payload['data']=data;} if(read){payload['read']=read;} if(write){payload['write']=write;} -return http.patch(path,{'content-type':'application/json'},payload);},deleteDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} +return http.patch(path,{'content-type':'application/json',},payload);},deleteDocument:function(collectionId,documentId){if(collectionId===undefined){throw new Error('Missing required parameter: "collectionId"');} if(documentId===undefined){throw new Error('Missing required parameter: "documentId"');} -let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);}};let locale={getLocale:function(){let path='/locale';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getCountries:function(){let path='/locale/countries';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getCountriesEU:function(){let path='/locale/countries/eu';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getCountriesPhones:function(){let path='/locale/countries/phones';let payload={};return http.get(path,{'content-type':'application/json'},payload);},getCurrencies:function(){let path='/locale/currencies';let payload={};return http.get(path,{'content-type':'application/json'},payload);}};let projects={listProjects:function(){let path='/projects';let payload={};return http.get(path,{'content-type':'application/json'},payload);},createProject:function(name,teamId,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(name===undefined){throw new Error('Missing required parameter: "name"');} +let path='/database/{collectionId}/documents/{documentId}'.replace(new RegExp('{collectionId}','g'),collectionId).replace(new RegExp('{documentId}','g'),documentId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);}};let locale={getLocale:function(){let path='/locale';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getCountries:function(){let path='/locale/countries';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getCountriesEU:function(){let path='/locale/countries/eu';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getCountriesPhones:function(){let path='/locale/countries/phones';let payload={};return http.get(path,{'content-type':'application/json',},payload);},getCurrencies:function(){let path='/locale/currencies';let payload={};return http.get(path,{'content-type':'application/json',},payload);}};let projects={listProjects:function(){let path='/projects';let payload={};return http.get(path,{'content-type':'application/json',},payload);},createProject:function(name,teamId,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(name===undefined){throw new Error('Missing required parameter: "name"');} if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} let path='/projects';let payload={};if(name){payload['name']=name;} if(teamId){payload['teamId']=teamId;} @@ -149,8 +152,8 @@ if(legalState){payload['legalState']=legalState;} if(legalCity){payload['legalCity']=legalCity;} if(legalAddress){payload['legalAddress']=legalAddress;} if(legalTaxId){payload['legalTaxId']=legalTaxId;} -return http.post(path,{'content-type':'application/json'},payload);},getProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateProject:function(projectId,name,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateProject:function(projectId,name,description='',logo='',url='',legalName='',legalCountry='',legalState='',legalCity='',legalAddress='',legalTaxId=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(name){payload['name']=name;} if(description){payload['description']=description;} @@ -162,30 +165,30 @@ if(legalState){payload['legalState']=legalState;} if(legalCity){payload['legalCity']=legalCity;} if(legalAddress){payload['legalAddress']=legalAddress;} if(legalTaxId){payload['legalTaxId']=legalTaxId;} -return http.patch(path,{'content-type':'application/json'},payload);},deleteProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},listKeys:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createKey:function(projectId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.patch(path,{'content-type':'application/json',},payload);},deleteProject:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},listKeys:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createKey:function(projectId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(scopes===undefined){throw new Error('Missing required parameter: "scopes"');} let path='/projects/{projectId}/keys'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(name){payload['name']=name;} if(scopes){payload['scopes']=scopes;} -return http.post(path,{'content-type':'application/json'},payload);},getKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"');} -let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateKey:function(projectId,keyId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateKey:function(projectId,keyId,name,scopes){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(scopes===undefined){throw new Error('Missing required parameter: "scopes"');} let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};if(name){payload['name']=name;} if(scopes){payload['scopes']=scopes;} -return http.put(path,{'content-type':'application/json'},payload);},deleteKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteKey:function(projectId,keyId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(keyId===undefined){throw new Error('Missing required parameter: "keyId"');} -let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},updateProjectOAuth:function(projectId,provider,appId='',secret=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/keys/{keyId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{keyId}','g'),keyId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},updateProjectOAuth:function(projectId,provider,appId='',secret=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(provider===undefined){throw new Error('Missing required parameter: "provider"');} let path='/projects/{projectId}/oauth'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(provider){payload['provider']=provider;} if(appId){payload['appId']=appId;} if(secret){payload['secret']=secret;} -return http.patch(path,{'content-type':'application/json'},payload);},listPlatforms:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createPlatform:function(projectId,type,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.patch(path,{'content-type':'application/json',},payload);},listPlatforms:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createPlatform:function(projectId,type,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(type===undefined){throw new Error('Missing required parameter: "type"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/projects/{projectId}/platforms'.replace(new RegExp('{projectId}','g'),projectId);let payload={};if(type){payload['type']=type;} @@ -193,19 +196,19 @@ if(name){payload['name']=name;} if(key){payload['key']=key;} if(store){payload['store']=store;} if(url){payload['url']=url;} -return http.post(path,{'content-type':'application/json'},payload);},getPlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getPlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"');} -let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updatePlatform:function(projectId,platformId,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updatePlatform:function(projectId,platformId,name,key='',store='',url=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};if(name){payload['name']=name;} if(key){payload['key']=key;} if(store){payload['store']=store;} if(url){payload['url']=url;} -return http.put(path,{'content-type':'application/json'},payload);},deletePlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.put(path,{'content-type':'application/json',},payload);},deletePlatform:function(projectId,platformId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(platformId===undefined){throw new Error('Missing required parameter: "platformId"');} -let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},listTasks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/tasks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createTask:function(projectId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/platforms/{platformId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{platformId}','g'),platformId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},listTasks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/tasks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createTask:function(projectId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(status===undefined){throw new Error('Missing required parameter: "status"');} if(schedule===undefined){throw new Error('Missing required parameter: "schedule"');} @@ -221,9 +224,9 @@ if(httpUrl){payload['httpUrl']=httpUrl;} if(httpHeaders){payload['httpHeaders']=httpHeaders;} if(httpUser){payload['httpUser']=httpUser;} if(httpPass){payload['httpPass']=httpPass;} -return http.post(path,{'content-type':'application/json'},payload);},getTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"');} -let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateTask:function(projectId,taskId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateTask:function(projectId,taskId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders=[],httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(status===undefined){throw new Error('Missing required parameter: "status"');} @@ -240,11 +243,11 @@ if(httpUrl){payload['httpUrl']=httpUrl;} if(httpHeaders){payload['httpHeaders']=httpHeaders;} if(httpUser){payload['httpUser']=httpUser;} if(httpPass){payload['httpPass']=httpPass;} -return http.put(path,{'content-type':'application/json'},payload);},deleteTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteTask:function(projectId,taskId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(taskId===undefined){throw new Error('Missing required parameter: "taskId"');} -let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},getProjectUsage:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/usage'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},listWebhooks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} -let path='/projects/{projectId}/webhooks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createWebhook:function(projectId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/tasks/{taskId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{taskId}','g'),taskId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},getProjectUsage:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/usage'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},listWebhooks:function(projectId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/webhooks'.replace(new RegExp('{projectId}','g'),projectId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createWebhook:function(projectId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(events===undefined){throw new Error('Missing required parameter: "events"');} if(url===undefined){throw new Error('Missing required parameter: "url"');} @@ -255,9 +258,9 @@ if(url){payload['url']=url;} if(security){payload['security']=security;} if(httpUser){payload['httpUser']=httpUser;} if(httpPass){payload['httpPass']=httpPass;} -return http.post(path,{'content-type':'application/json'},payload);},getWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.post(path,{'content-type':'application/json',},payload);},getWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"');} -let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateWebhook:function(projectId,webhookId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateWebhook:function(projectId,webhookId,name,events,url,security,httpUser='',httpPass=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} if(events===undefined){throw new Error('Missing required parameter: "events"');} @@ -269,46 +272,46 @@ if(url){payload['url']=url;} if(security){payload['security']=security;} if(httpUser){payload['httpUser']=httpUser;} if(httpPass){payload['httpPass']=httpPass;} -return http.put(path,{'content-type':'application/json'},payload);},deleteWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteWebhook:function(projectId,webhookId){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"');} if(webhookId===undefined){throw new Error('Missing required parameter: "webhookId"');} -let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);}};let storage={listFiles:function(search='',limit=25,offset=0,orderType='ASC'){let path='/storage/files';let payload={};if(search){payload['search']=search;} +let path='/projects/{projectId}/webhooks/{webhookId}'.replace(new RegExp('{projectId}','g'),projectId).replace(new RegExp('{webhookId}','g'),webhookId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);}};let storage={listFiles:function(search='',limit=25,offset=0,orderType='ASC'){let path='/storage/files';let payload={};if(search){payload['search']=search;} if(limit){payload['limit']=limit;} if(offset){payload['offset']=offset;} if(orderType){payload['orderType']=orderType;} -return http.get(path,{'content-type':'application/json'},payload);},createFile:function(files,read=[],write=[],folderId=''){if(files===undefined){throw new Error('Missing required parameter: "files"');} +return http.get(path,{'content-type':'application/json',},payload);},createFile:function(files,read=[],write=[],folderId=''){if(files===undefined){throw new Error('Missing required parameter: "files"');} let path='/storage/files';let payload={};if(files){payload['files']=files;} if(read){payload['read']=read;} if(write){payload['write']=write;} if(folderId){payload['folderId']=folderId;} -return http.post(path,{'content-type':'multipart/form-data'},payload);},getFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} -let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateFile:function(fileId,read=[],write=[],folderId=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +return http.post(path,{'content-type':'multipart/form-data',},payload);},getFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateFile:function(fileId,read=[],write=[],folderId=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(read){payload['read']=read;} if(write){payload['write']=write;} if(folderId){payload['folderId']=folderId;} -return http.put(path,{'content-type':'application/json'},payload);},deleteFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} -let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},getFileDownload:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} -let path='/storage/files/{fileId}/download'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},getFilePreview:function(fileId,width=0,height=0,quality=100,background='',output=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteFile:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +let path='/storage/files/{fileId}'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},getFileDownload:function(fileId){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +let path='/storage/files/{fileId}/download'.replace(new RegExp('{fileId}','g'),fileId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getFilePreview:function(fileId,width=0,height=0,quality=100,background='',output=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} let path='/storage/files/{fileId}/preview'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(width){payload['width']=width;} if(height){payload['height']=height;} if(quality){payload['quality']=quality;} if(background){payload['background']=background;} if(output){payload['output']=output;} -return http.get(path,{'content-type':'application/json'},payload);},getFileView:function(fileId,as=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} +return http.get(path,{'content-type':'application/json',},payload);},getFileView:function(fileId,as=''){if(fileId===undefined){throw new Error('Missing required parameter: "fileId"');} let path='/storage/files/{fileId}/view'.replace(new RegExp('{fileId}','g'),fileId);let payload={};if(as){payload['as']=as;} -return http.get(path,{'content-type':'application/json'},payload);}};let teams={listTeams:function(search='',limit=25,offset=0,orderType='ASC'){let path='/teams';let payload={};if(search){payload['search']=search;} +return http.get(path,{'content-type':'application/json',},payload);}};let teams={listTeams:function(search='',limit=25,offset=0,orderType='ASC'){let path='/teams';let payload={};if(search){payload['search']=search;} if(limit){payload['limit']=limit;} if(offset){payload['offset']=offset;} if(orderType){payload['orderType']=orderType;} -return http.get(path,{'content-type':'application/json'},payload);},createTeam:function(name,roles=["owner"]){if(name===undefined){throw new Error('Missing required parameter: "name"');} +return http.get(path,{'content-type':'application/json',},payload);},createTeam:function(name,roles=["owner"]){if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/teams';let payload={};if(name){payload['name']=name;} if(roles){payload['roles']=roles;} -return http.post(path,{'content-type':'application/json'},payload);},getTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} -let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateTeam:function(teamId,name){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +return http.post(path,{'content-type':'application/json',},payload);},getTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateTeam:function(teamId,name){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(name===undefined){throw new Error('Missing required parameter: "name"');} let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};if(name){payload['name']=name;} -return http.put(path,{'content-type':'application/json'},payload);},deleteTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} -let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},getTeamMembers:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} -let path='/teams/{teamId}/members'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},createTeamMembership:function(teamId,email,roles,redirect,name=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +return http.put(path,{'content-type':'application/json',},payload);},deleteTeam:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +let path='/teams/{teamId}'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},getTeamMembers:function(teamId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +let path='/teams/{teamId}/members'.replace(new RegExp('{teamId}','g'),teamId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},createTeamMembership:function(teamId,email,roles,redirect,name=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(email===undefined){throw new Error('Missing required parameter: "email"');} if(roles===undefined){throw new Error('Missing required parameter: "roles"');} if(redirect===undefined){throw new Error('Missing required parameter: "redirect"');} @@ -316,13 +319,13 @@ let path='/teams/{teamId}/memberships'.replace(new RegExp('{teamId}','g'),teamId if(name){payload['name']=name;} if(roles){payload['roles']=roles;} if(redirect){payload['redirect']=redirect;} -return http.post(path,{'content-type':'application/json'},payload);},deleteTeamMembership:function(teamId,inviteId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +return http.post(path,{'content-type':'application/json',},payload);},deleteTeamMembership:function(teamId,inviteId){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"');} -let path='/teams/{teamId}/memberships/{inviteId}'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},createTeamMembershipResend:function(teamId,inviteId,redirect){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +let path='/teams/{teamId}/memberships/{inviteId}'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},createTeamMembershipResend:function(teamId,inviteId,redirect){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"');} if(redirect===undefined){throw new Error('Missing required parameter: "redirect"');} let path='/teams/{teamId}/memberships/{inviteId}/resend'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);let payload={};if(redirect){payload['redirect']=redirect;} -return http.post(path,{'content-type':'application/json'},payload);},updateTeamMembershipStatus:function(teamId,inviteId,userId,secret,success='',failure=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} +return http.post(path,{'content-type':'application/json',},payload);},updateTeamMembershipStatus:function(teamId,inviteId,userId,secret,success='',failure=''){if(teamId===undefined){throw new Error('Missing required parameter: "teamId"');} if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"');} if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(secret===undefined){throw new Error('Missing required parameter: "secret"');} @@ -330,30 +333,30 @@ let path='/teams/{teamId}/memberships/{inviteId}/status'.replace(new RegExp('{te if(secret){payload['secret']=secret;} if(success){payload['success']=success;} if(failure){payload['failure']=failure;} -return http.patch(path,{'content-type':'application/json'},payload);}};let users={listUsers:function(search='',limit=25,offset=0,orderType='ASC'){let path='/users';let payload={};if(search){payload['search']=search;} +payload['project']=config.project;return iframe('patch',path,payload);}};let users={listUsers:function(search='',limit=25,offset=0,orderType='ASC'){let path='/users';let payload={};if(search){payload['search']=search;} if(limit){payload['limit']=limit;} if(offset){payload['offset']=offset;} if(orderType){payload['orderType']=orderType;} -return http.get(path,{'content-type':'application/json'},payload);},createUser:function(email,password,name=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} +return http.get(path,{'content-type':'application/json',},payload);},createUser:function(email,password,name=''){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} let path='/users';let payload={};if(email){payload['email']=email;} if(password){payload['password']=password;} if(name){payload['name']=name;} -return http.post(path,{'content-type':'application/json'},payload);},getUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},getUserLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}/logs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},getUserPrefs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},updateUserPrefs:function(userId,prefs){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +return http.post(path,{'content-type':'application/json',},payload);},getUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getUserLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}/logs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getUserPrefs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updateUserPrefs:function(userId,prefs){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');} let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};if(prefs){payload['prefs']=prefs;} -return http.patch(path,{'content-type':'application/json'},payload);},getUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json'},payload);},deleteUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} -let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.delete(path,{'content-type':'application/json'},payload);},deleteUserSession:function(userId,sessionId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +return http.patch(path,{'content-type':'application/json',},payload);},getUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},deleteUserSessions:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +let path='/users/{userId}/sessions'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},deleteUserSession:function(userId,sessionId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(sessionId===undefined){throw new Error('Missing required parameter: "sessionId"');} let path='/users/{userId}/sessions/:session'.replace(new RegExp('{userId}','g'),userId);let payload={};if(sessionId){payload['sessionId']=sessionId;} -return http.delete(path,{'content-type':'application/json'},payload);},updateUserStatus:function(userId,status){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} +return http.delete(path,{'content-type':'application/json',},payload);},updateUserStatus:function(userId,status){if(userId===undefined){throw new Error('Missing required parameter: "userId"');} if(status===undefined){throw new Error('Missing required parameter: "status"');} let path='/users/{userId}/status'.replace(new RegExp('{userId}','g'),userId);let payload={};if(status){payload['status']=status;} -return http.patch(path,{'content-type':'application/json'},payload);}};return{setEndpoint:setEndpoint,setProject:setProject,setKey:setKey,setLocale:setLocale,setMode:setMode,account:account,auth:auth,avatars:avatars,database:database,locale:locale,projects:projects,storage:storage,teams:teams,users:users};};if(typeof module!=="undefined"){module.exports=window.Appwrite;}})((typeof window!=="undefined")?window:{});console.log('promise sdk');(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Chart=f()}})(function(){var define,module,exports;return(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=thresh&&u'+ units[u]+"");}).add("statsTotal",function($value){if(!$value){return 0;} -$value=abbreviate($value,1,false,false);return $value==="0"?"N/A":$value;});function abbreviate(number,maxPlaces,forcePlaces,forceLetter){number=Number(number);forceLetter=forceLetter||false;if(forceLetter!==false){return annotate(number,maxPlaces,forcePlaces,forceLetter);} +$value=abbreviate($value,1,false,false);return $value==="0"?"N/A":$value;}).add("isEmptyObject",function($value){return((Object.keys($value).length===0&&$value.constructor===Object)||$value.length===0)});function abbreviate(number,maxPlaces,forcePlaces,forceLetter){number=Number(number);forceLetter=forceLetter||false;if(forceLetter!==false){return annotate(number,maxPlaces,forcePlaces,forceLetter);} let abbr;if(number>=1e12){abbr="T";}else if(number>=1e9){abbr="B";}else if(number>=1e6){abbr="M";}else if(number>=1e3){abbr="K";}else{abbr="";} return annotate(number,maxPlaces,forcePlaces,abbr);} function annotate(number,maxPlaces,forcePlaces,abbr){let rounded=0;switch(abbr){case"T":rounded=number/1e12;break;case"B":rounded=number/1e9;break;case"M":rounded=number/1e6;break;case"K":rounded=number/1e3;break;case"":rounded=number;break;} @@ -293,7 +293,7 @@ if(maxPlaces!==false){let test=new RegExp("\\.\\d{"+(maxPlaces+1)+",}$");if(test if(forcePlaces!==false){rounded=Number(rounded).toFixed(forcePlaces);} return rounded+abbr;} window.ls.container.get("view").add({selector:"data-acl",controller:function(element,document,router,alerts){document.body.classList.remove("console");document.body.classList.remove("home");document.body.classList.add(router.getCurrent().view.scope);if(!router.getCurrent().view.project){document.body.classList.add("hide-nav");document.body.classList.remove("show-nav");}else{document.body.classList.add("show-nav");document.body.classList.remove("hide-nav");} -if("/console"===router.getCurrent().path){document.body.classList.add("index");}else{document.body.classList.remove("index");}}}).add({selector:"data-cookie-policy",controller:function(element,alerts,cookie,env){if(!cookie.get("cookie-alert")){let text=element.dataset["cookiePolicy"]||"";alerts.add({text:text,class:"cookie-alert",link:env.HOME+"/policy/cookies",callback:function(){cookie.set("cookie-alert","true",365*10);}},0);}}}).add({selector:"data-ls-ui-alerts",controller:function(element,window,view){window.document.addEventListener("alerted",function(){view.render(element);},true);}}).add({selector:"data-ls-ui-alerts-delete",controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset["message"]);let remove=function(){alerts.remove(message);};element.addEventListener("click",remove);}}).add({selector:"data-forms-headers",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+":"+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(":");key.value=split[0]||"";value.value=split[1]||"";key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:"data-prism",controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement("i");copy.className="icon-docs copy";copy.title="Copy to Clipboard";copy.addEventListener("click",function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand("copy");alerts.add({text:"Copied to clipboard",class:""},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:"error"},3000);} +if("/console"===router.getCurrent().path){document.body.classList.add("index");}else{document.body.classList.remove("index");}}}).add({selector:"data-cookie-policy",controller:function(element,alerts,cookie,env){if(!cookie.get("cookie-alert")){let text=element.dataset["cookiePolicy"]||"";alerts.add({text:text,class:"cookie-alert",link:env.HOME+"/policy/cookies",callback:function(){cookie.set("cookie-alert","true",365*10);}},0);}}}).add({selector:"data-ls-ui-alerts",controller:function(element,window,view){window.document.addEventListener("alerted",function(){view.render(element);},true);}}).add({selector:"data-ls-ui-alerts-delete",controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset["message"]);let remove=function(){alerts.remove(message);};element.addEventListener("click",remove);}}).add({selector:"data-forms-headers",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+":"+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(":");key.value=split[0]||"";value.value=split[1]||"";key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:"data-prism",controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement("i");copy.className="icon-docs copy";copy.title="Copy to Clipboard";copy.textContent="Click to Copy";copy.addEventListener("click",function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand("copy");alerts.add({text:"Copied to clipboard",class:""},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:"error"},3000);} window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:"data-code-example",controller:function(window,document,element,cookie){let prefix=element.dataset["codeExample"]||"unknown";element.addEventListener("change",function(){select(element.value);});let select=function(value){for(let i=0;i=sum){element.disabled=true;}else{element.disabled=false;element.value=offset+limit;}};check();for(let i=0;i*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-square{height:0;overflow:hidden;padding-top:56%;position:relative;width:100%}.ratio-square>*{position:absolute;top:0;left:0;width:100%;height:100%}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}*{font-family:Poppins,sans-serif,Arial;-webkit-font-smoothing:antialiased;font-weight:300}h1,h2,h3,h4,h5,h6{margin:0}h4,h5,h6{font-weight:400}.link,a{color:#1e849e;text-decoration:none;border-left:2px solid transparent;border-right:2px solid transparent;border-bottom:solid 1px transparent}.link:hover,a:hover{border-bottom:dotted 1px #1e849e}.link.disabled,a.disabled{opacity:.5}.link.disabled:hover,a.disabled:hover{border-bottom:none}.link.tag:hover,a.tag:hover{border-bottom:none;opacity:.9}b,strong{font-weight:500}p{margin:0 0 20px 0;line-height:26px}small{font-size:16px;color:#818181}.text-size-small{font-size:13px}.text-size-normal{font-size:16px}.text-one-liner{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-bold{font-weight:400!important}.text-danger{color:#f53d3d}.text-success{color:#1bbf61}.text-upper{text-transform:uppercase}.text-warning{color:#ffed4d}.text-focus{color:#f02e65}.text-fade{color:#818181}.text-disclaimer{font-size:11px;color:#818181}.text-fade-extra{color:#818181;opacity:.5}.text-line-high-large{line-height:30px}.text-line-high-xl{line-height:40px}.text-sign{margin:5px 0;font-size:25px;width:25px;height:25px;line-height:25px;display:inline-block}.text-align-center{text-align:center}.text-align-start{text-align:left}.text-align-end{text-align:right}.text-align-left{text-align:left}.text-align-right{text-align:right}.text-dir-ltr{direction:ltr;display:inline-block}.text-dir-rtl{direction:rtl;display:inline-block}.icon-dot-3:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}table{width:calc(100% + 60px);border-collapse:collapse;margin:-30px;border-radius:10px;overflow:hidden;position:relative;table-layout:fixed}table thead{box-shadow:0 0 2px rgba(0,0,0,.25);border-bottom:solid 1px #f1f3f5;font-size:14px}table thead th{position:sticky;top:0}table.small{font-size:14px}table.open-end tbody tr:last-child{border-bottom:none;font-weight:700;background:#f7fbf7}table.full tbody td,table.full tbody th{vertical-align:top;white-space:normal;overflow:auto;line-height:24px;padding-top:20px;padding-bottom:20px;height:auto}table .avatar{width:30px;height:30px}table tr{border-bottom:solid 1px #f1f3f5}table tr:last-child{border-bottom:none}table tr:nth-child(even){background:#fbfbfb}table th{text-align:left;font-weight:400}table th i{color:#818181;font-size:10px;display:inline-block;vertical-align:top;line-height:16px;padding:0 3px}table td,table th{height:65px;padding:0 15px;line-height:50px}table td:first-child,table th:first-child{padding-left:30px}table td:last-child,table th:last-child{padding-right:30px}@media only screen and (max-width:550px){table td:first-child,table th:first-child{width:auto}}table td,table th{overflow:hidden;white-space:nowrap}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){table.vertical{display:block;overflow:hidden;padding-top:12px}table.vertical .hide{display:none}table.vertical tbody,table.vertical td,table.vertical th,table.vertical thead,table.vertical tr{width:100%;display:block}table.vertical th,table.vertical tr{padding-top:12px;padding-bottom:12px}table.vertical th:first-child,table.vertical tr:first-child{padding-top:0}table.vertical td,table.vertical th{padding:5px 20px!important;text-overflow:ellipsis;white-space:normal;height:40px;line-height:40px}table.vertical td:first-child,table.vertical td:last-child,table.vertical th:first-child,table.vertical th:last-child{padding:0 10px}table.vertical td:last-child,table.vertical th:last-child{padding-bottom:0}table.vertical td p,table.vertical th p{display:inline-block;width:calc(100% - 40px)}table.vertical td:before{content:attr(data-title);margin-right:4px;font-weight:400}table.vertical thead{display:none}}.zone{max-width:910px;margin:0 auto 40px auto}.zone.xxxl{max-width:calc(100% - 100px)}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.zone.xxxl{max-width:100%}}.zone.xxl{max-width:1100px}.zone.xl{max-width:910px}.zone.large{max-width:700px}.zone.medium{max-width:550px}.zone.small{max-width:320px}.row{position:relative;margin:0 -50px;padding-left:50px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.row{margin:0 -30px;padding-left:30px}}.row.force-ltr>.col{float:left}.row.force-rtl>.col{float:right}.row.force-reverse>.col{float:right}.row.wide{margin:0 -100px;padding-left:100px}.row.wide>.span-1{width:calc(8.33333333% * 1 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-2{width:calc(8.33333333% * 2 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-3{width:calc(8.33333333% * 3 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-4{width:calc(8.33333333% * 4 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-5{width:calc(8.33333333% * 5 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-6{width:calc(8.33333333% * 6 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-7{width:calc(8.33333333% * 7 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-8{width:calc(8.33333333% * 8 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-9{width:calc(8.33333333% * 9 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-10{width:calc(8.33333333% * 10 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-11{width:calc(8.33333333% * 11 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-12{width:calc(8.33333333% * 12 - 100px);box-sizing:content-box;padding-right:100px}.row.thin{margin:0 -20px;padding-left:20px}.row.thin>.span-1{width:calc(8.33333333% * 1 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-2{width:calc(8.33333333% * 2 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-3{width:calc(8.33333333% * 3 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-4{width:calc(8.33333333% * 4 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-5{width:calc(8.33333333% * 5 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-6{width:calc(8.33333333% * 6 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-7{width:calc(8.33333333% * 7 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-8{width:calc(8.33333333% * 8 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-9{width:calc(8.33333333% * 9 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-10{width:calc(8.33333333% * 10 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-11{width:calc(8.33333333% * 11 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-12{width:calc(8.33333333% * 12 - 20px);box-sizing:content-box;padding-right:20px}.row:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.row .col{float:left;box-sizing:border-box}.row .col.sticky-top{position:sticky;top:0}.row .col.sticky-bottom{position:sticky;bottom:0}.row .span-1{width:calc(8.33333333% * 1 - 40px);box-sizing:content-box;padding-right:40px}.row .span-2{width:calc(8.33333333% * 2 - 40px);box-sizing:content-box;padding-right:40px}.row .span-3{width:calc(8.33333333% * 3 - 40px);box-sizing:content-box;padding-right:40px}.row .span-4{width:calc(8.33333333% * 4 - 40px);box-sizing:content-box;padding-right:40px}.row .span-5{width:calc(8.33333333% * 5 - 40px);box-sizing:content-box;padding-right:40px}.row .span-6{width:calc(8.33333333% * 6 - 40px);box-sizing:content-box;padding-right:40px}.row .span-7{width:calc(8.33333333% * 7 - 40px);box-sizing:content-box;padding-right:40px}.row .span-8{width:calc(8.33333333% * 8 - 40px);box-sizing:content-box;padding-right:40px}.row .span-9{width:calc(8.33333333% * 9 - 40px);box-sizing:content-box;padding-right:40px}.row .span-10{width:calc(8.33333333% * 10 - 40px);box-sizing:content-box;padding-right:40px}.row .span-11{width:calc(8.33333333% * 11 - 40px);box-sizing:content-box;padding-right:40px}.row .span-12{width:calc(8.33333333% * 12 - 40px);box-sizing:content-box;padding-right:40px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.row.responsive{width:100%;padding:0;margin:0}.row.responsive>.span-1,.row.responsive>.span-10,.row.responsive>.span-11,.row.responsive>.span-12,.row.responsive>.span-2,.row.responsive>.span-3,.row.responsive>.span-4,.row.responsive>.span-5,.row.responsive>.span-6,.row.responsive>.span-7,.row.responsive>.span-8,.row.responsive>.span-9{width:calc(8.33333333% * 12 - 0px)!important;box-sizing:content-box!important;padding-right:0!important;width:100%!important}}.tiles{position:relative}.tiles:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.tiles li{margin-right:50px!important;float:left;width:calc(33% - 33px)}.tiles li .photo-title{width:calc(100% + 30px);height:15px;margin:-15px -15px 10px -15px;border-radius:10px 10px 0 0;background:#f1f3f5;border-bottom:solid 1px #f1f3f5}.tiles li:nth-child(3n){margin-right:0!important}@media only screen and (max-width:550px){.tiles li{width:100%;margin-right:0!important}}@font-face{font-family:fontello;src:url(data:application/octet-stream;base64,d09GRgABAAAAAFOgAA8AAAAAgfQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABWAAAADsAAABUIIslek9TLzIAAAGUAAAAQwAAAFY+UFQBY21hcAAAAdgAAAKxAAAHpH+PHuxjdnQgAAAEjAAAABMAAAAgBzP+pGZwZ20AAASgAAAFkAAAC3CKkZBZZ2FzcAAACjAAAAAIAAAACAAAABBnbHlmAAAKOAAAQqUAAGLi7VuK5mhlYWQAAEzgAAAAMwAAADYVIVKIaGhlYQAATRQAAAAgAAAAJAgaBJRobXR4AABNNAAAAMEAAAGQXMf/nGxvY2EAAE34AAAAygAAAMqKk3GubWF4cAAATsQAAAAgAAAAIAJQDRRuYW1lAABO5AAAAXcAAALNzJ0fIXBvc3QAAFBcAAACxQAAA/s98MKvcHJlcAAAUyQAAAB6AAAAhuVBK7x4nGNgZGBg4GIwYLBjYHJx8wlh4MtJLMljkGJgYYAAkDwymzEnMz2RgQPGA8qxgGkOIGaDiAIAJjsFSAB4nGNgZK5lnMDAysDAVMW0h4GBoQdCMz5gMGRkAooysDIzYAUBaa4pDA4vGD4dYw76n8UQxdzIcAwozAiSAwD63AzZAHic3dTLbpVVAMXx/ym13iqIqNRaLlUQr2iroNYLqFDlpiKCd0D7BJ32IZg06QQGvAAJA8amkzamTd+gEwZNVhjtfR6Asj72CvMy9Jz8mp4v50u+7q61gCeAbfauDcJAoeff6N3z1d7D69t45uH1wd6//jzFfn9vVNPlWrlebpelslrWynq5W0fqWB2vk3W2ztX5eqPerLfqYl2r63Wj3u9P9Kf6C/3lzU0Qj+5d2eq9j/nq+bmXH73/28K7u3fAZzDokxriSZ7iaZ/HswzzHNvZwfPs5AV28SIv8TK7GeEVRnmVMfawl30+rXFe43UOcJA3OMSbvMXbvONzfY/DvM8HTDDJh3zEEY7yMZ/wqZ/1Mz7nC77kGMf5iq/5hhOcZJpv+Y5TnOYMZznH9/zAj5znJy7wMxe5xC/8ym/8zh/8yV9c5gpX+Zt/mPGfMfTYp/f/eQ13Pwbv5NNMl8Wmy7rC/28UXTcUXT8UXW8UzgUKJwSFs4LCqUHR9UnhJKHonk7hdKFwzlA4cSicPRROIQrnEYWTicIZReG0onBuUTjBKJxlFE41CucbhZOOwplH4fSjcA9QuBEo3A0UbgkK9wWFm4PCHULhNqFwr1C4YSjcNRRuHQr3D4WbiKLbQIXbicI9ReHGonB3UbjFKNxnFG42CncchduOwr1H4QVA4S1A4VVA4X1A4aVA4c1A4fVA4R1B4UVB4W1B4ZVB4b1B4eVB4Q1C4TVC4V1C4YXyujfeKsr1xqtFud14vyhLjZeMstJ40yirjdeNstZ45yjrjRePcrfx9lFHGq8gdazxHlLHGy8jdbLxRlJnG68lda7xblLnGy8o9UbjLaXebLyq1FuN95W62HhpqWuNN5e63nh9qRuNd5h6v/Ei059ovM30pxqvNP2FxntNf7lh5gGv2IS+AAAAeJxjYEADEhDI3PjfCoQBEyID2wB4nK1WaXfTRhQdeUmchCwlCy1qYcTEabBGJmzBgAlBsmMgXZytlaCLFDvpvvGJ3+Bf82Tac+g3flrvGy8kkLTncJqTo3fnzdXM22USWpLYC+uRlJsvxdTWJo3sPAnphk3LUXwoO3shZYrJ3wVREK2W2rcdh0REIlC1rrBEEPseWZpkfOhRRsu2pFdNyi096S5b40G9Vd9+GjrKsTuhpGYzdGg9siVVGFWiSKY9UtKmZaj6K0krvL/CzFfNUMKITiJpvBnG0EjeG2e0ymg1tuMoimyy3ChSJJrhQRR5lNUS5+SKCQzKB82Q8sqnEeXD/Iis2KOcVrBLttP8vi95p3c5P7Ffb1G25EAfyI7s4Ox0JV+EW1th3LST7ShUEXbXd0Js2exU/2aP8ppGA7crMr3QjGCpfIUQKz+hzP4hWS2cT/mSR6NaspETQetlTuxLPoHW44gpcc0YWdDd0QkR1P2SMwz2mD4e/PHeKZYLEwJ4HMt6RyWcCBMpYXM0SdowcmAlZYsqqfWumDjldVrEW8J+7drRl85o41B3YjxbDx1bOVHJ8WhSp5lMndpJzaMpDaKUdCZ4zK8DKD+iSV5tYzWJlUfTOGbGhEQiAi3cS1NBLDuxpCkEzaMZvbkbprl2LVqkyQP13KP39OZWuLnTU9oO9LNGf1anYjrYC9PpaeQv8Wna5SJF6frpGX5M4kHWAjKRLTbDlIMHb/0O0svXlhyF1wbY7u3zK6h91kTwpAH7G9AeT9UpCUyFmFWIVkBirWtZlsnVrBapyNR3Q5pWvqzTBIpyHBfHvoxx/V8zM5aYEr7fidOzIy49c+1LCNMcfJt1PZrXqcVyAXFmeU6nWZbv6zTH8gOd5lme1+kIS1unoyw/1GmB5Uc6HWN5QQuadN/BkIsw5AIOkDCEpQNDWF6CISwVDGG5CENYFmEIyyUYwvJjGMJyGYawvKxl1dRTSePamVgGbEJgYo4eucxF5WoquVRCu2hUakOeEm6VVBTPqn9loF488oY5sBZIl8iaXzHOlY9G5fjWFS1vGjtXwLHqbx+O9jnxUtaLhT8F/9XWVCW9Ys3Dk6vwG4aebCeqNql4dE2Xz1U9uv5fVFRYC/QbSIVYKMqybHBnIoSPOp2GaqCVQ8xszDy063XLmp/D/TcxQhZQ/fg3FBoL3INOWUlZ7eCs1dfbstw7g3I4EyxJMTfz+lb4IiOz0n6RWcqej3wecAWMSmXYagOtFbzZJzEPmd4kzwRxW1E2SNrYzgSJDRzzgHnznQQmYeqqDeRO4YYN+AVhbsF5J1yieqMsh+5F7PMopPxbp+JE9qhojMCz2Rthr+9Cym9xDCQ0+aV+DFQVoakYNRXQNFJuqAZfxtm6bULGDvQjKnbDsqziw8cW95WSbRmEfKSI1aOjn9Zeok6q3H5mFJfvnb4FwSA1MX9733RxkMq7WskyR20DU7calVPXmkPjVYfq5lH1vePsEzlrmm66Jx56X9Oq28HFXCyw9m0O0lImF9T1YYUNosvFpVDqZTRJ77gHGBYY0O9Qio3/q/rYfJ4rVYXRcSTfTtS30edgDPwP2H9H9QPQ92Pocg0uz/eaE59u9OFsma6iF+un6Dcwa625WboG3NB0A+IhR62OuMoNfKcGcXqkuRzpIeBj3RXiAcAmgMXgE921jOZTAKP5jDk+wOfMYdBkDoMt5jDYZs4awA5zGOwyh8Eecxh8wZx1gC+ZwyBkDoOIOQyeMCcAeMocBl8xh8HXzGHwDXPuA3zLHAYxcxgkzGGwr+nWMMwtXtBdoLZBVaADU09Y3MPiUFNlyP6OF4b9vUHM/sEgpv6o6faQ+hMvDPVng5j6i0FM/VXTnSH1N14Y6u8GMfUPg5j6TL8Yy2UGv4x8lwoHlF1sPufvifcP28VAuQABAAH//wAPeJy1fA1gW9V97/mfc790JV1dSVdXsizL+pYty7ItyZJjO47iOLZxnBCMSZPUOCYkaYjzBYTw0UBpoBRaRrqMpgw6mnRAGR8dBNYxxtqupR2jvI6yLnTr9vq5jnYt2+voXkvjm/c/V7JjKN26vfck3XvPufece6/O+X/8/v/zP4dQQs49SV9kLhIgUZKuJYgI4gEGIMABIlDhAKGEHiCE7PIHvd5gURLDHWlDSsYTmd7yEAuaxWoxypghJQpQiQJ9cbTHSvWMqqHcUOcFL07khjMR5diRp28Qjj5269rBzZsHu6c3DbbB+HhmaHoTfH7zTTc9cTM9Qgg9Z537KvsRfZ1o+B471j3h3ri5liRMENjlIhAKlMA+ArAfX4oK00QQ6LsIFei6ZnxlJrAD/2GhLTUvkJZw0PDqDolo4JZEowOKpsw0wL+SZZlKKR2MV4dgAIqtYJbiRZM9G9Npjhqxs39XFnJUj7E96tnTmhAzHignorEKTBspeCMUsgZD4SI8Hwrtb7vViCSiqRC2FlHOnTv3c/ZD5iQe0kq6yCpyIdlGDpD3kcO1q6+/7soLxldLiuOKy+ba4zFJELdsvmhjU8irK5St6OtxKCAREMY84NBAER3KnBtEFwhMFGadwFSgwOisDEAITOMByCYJCJCJG997zdX75nfuuPTdl0yvn8xkgpkgfgxdbOmoBgwpm0xkqr3lSrVUNLPL8sFGXm7ksRFM4Nexl7O8fLye74Dz9ZdfD8Yb9Rv5UiOfXFb/mKrMyy74D/dss6os+GQVXBJ9XXadfejXX4P/IHd4sRKeeHnZI75qn5HmFVW1JpeVoTfyU/W0tf6dK/zV+SKE88wv2Bb6PAmRGtlYW+8C7JGxOHbBKGGyJDNpH6ESSJRToyiBOE+IKIhE2EdkIlFZmiOYEaeJKAqbMSFM5tO5rN9MGooY6QBDBimRWQnJRuuVcGcGwax6G12QzayCIcBeq2S95Qz2WjlT6YLFkyb9qNP6mjNqvOkxwNTeNKJO6HI+P7vmNP4n4K+qKKfTFShnnpZUShfPrJmFWc1pvawanlOmdgbrntJM6sATf2Rdt2ZWVZwOyS0rUEnB7VhboIrQODOL9G7LEbYV6V0he8ja2vDOLZOrBSIMqBRIua1ZFxiwMd4KByTA8yhSANkBGIoZRhmKGbpr5t0XX3TBeEcuEfP7ZNHswDdMaGAWK2mkJQ9Ishk0DVmDbKILM/jljdGbzWRlKYH7TBn5t5rpggLwZlsFlWrjZAl5ulLFLydsZO9gtVIMNm4m4wmUWwNT103RTYc2QUSRd6tOf5skeja6ZXl9U9ghC/oRxaU3By+UdGnUFESlTfUou/Cfq+JuRQum62WV9aGwQ2HeI9jMnkjwQtEjjxuC4KgXVmF2YHr68PT0dfy6Hg00FyVNCmwEcdCtTEZ0VX6PwzUoSrWoqEmuoifS7AGXbJdtCsc6ZZdsbFxW1DkgimsijaJhHamSNyg597/Z7fSLKG/W1yYK+VyMiqLUBIJo+igTnNjTwhiRROmA3RFEYMJi6wMKeVucoPgkm/m9JlOmmfQm2mSxuQObO2BoLJvImqViFdu3fliJTVmAcjUKwQwn1GKwUpXkCrs93ZvbdN3Dl33sRn/opu0DMz6/JxRaNZXJp/NNI58/KO6ZuLB3ZSUwUKb7K9ngBR+5bUeNXkTXw2iFSe7twzRAmzbM5S7eIQaMdbthhStWS0n4/3A7dz87xloIQz5yEp00oa6YqI3xN2dAZvE8FVEycu6SUFaqLoVJsixN2wlJ3ux0IPPJkz5vtCXSbAa8Tb4mr8/LP7qbc168N760lYtGIl00NSjQSpBn2LGzt7AbrScXXqEFuJCnz95y8CCEzASNdsdo6rmDB+njB60nD1p/eMA60nfllYl8ChKFWLXvynrf/Av9Or2NpEi01pxo0mUBW32MAdevXJLvMiKGIYghVK9I60jiMt9lyqsgy3cVpOEq35l4OWjSr3sm9bz+wAO4m9T5UT+f93geeMBz0OSJBx/0/GpBT4EXaMix4/RL2JI9pFDrKGTSoYBHcyvAXCjM6JiA/Mk4YcAByl8x15ZMxL2GKAY7wMv1RW8ywKWU14HSSeb6I+sACVkwU6nab9xQJi34xgbzoVg5xgULrMbvkYQoU1m0brJukt1iUqAi/Lav2387SllFvUGCNutnWPTMGewBDyjWzyHVLuLrDFufxaLtkibCBo/nyr1cLH9vl6DX6R8F0SD8BDFEsGbw14Yx++U5fuk1KJcpjcbN1LUUHVDfdEacbzrxKW9oJvylhmn8RUyz3mdP0iCbIgYp1boxL+H9kF8OclJEFT0nIkdRmBK5DN0koBylE0lOTf64zTXYNlILlOSkF7+9XIyXijT4ru7EA+Zdj95116HLpti632lr2/OgtRkefvCG3Vc1nsl2oBztJS21cG8+GfYq0lv+SHtmgIqBDpRaHtCgC5YUt1xveSSYAnBdYDc/19UtSDlc7qEQZQNhTUt6+ps+mmsZa8nD3eF+LaVpzXffHdY9KU9f89256FhL7qPhPj3p0ZvuBkXrD6/EOpc82pKDfOTRS/DsSqy0adOvu0AE+z+cYgXUBV7SjjpytLamF+nZgVKe0DHikBwHFC7CDxCZySiHEKRN885FDMfIHMdtmzlum1w5mCwlE8X0ipBPRQyTLmc0GkVRvnhchjGCpSgHb/b/ZagZGq2S7cVdnXtM+qIRNWgoHPotI+ajZiQ0GjPPfiUYhZj5uquSPJaouF83Y59xhI4ZnmNIe8eCfu+balR909eCmtAX8wlh12LijqfMWMzEHbS2tbVGYcpsaNs8VlHf9HJSFLEd+tkj7P2kDflrmKwj0+Tm2o3NKhWwb1TsVbeKOlEA1IiIGCQVJHWeONyy2yHv84BK3A7VPYeiTnHJyhyX8U7R5ZxjnNqwfahrXANR5NKauMkF6ydH1uTaL9o4Ob1+enxszbqRdbVV/dVysdDZ3pPrCSVLbYZXbOoAM2Bgg/eWfdVeu3FQZ5aKUUAwGJADZpC3FScUCdtSzwiSbvqxRetYcSWU8aKcLZo+BCi+ir9YKYBGTfaui60fIyP/+F9P01IgRiPBlwNRmvCX4eNXSc0eVENaWLQOfezMGeuVM2e+sjsQiwU+jrtcDMrv/wx91npOePqW+Xvpib87Qe+lTdfc/QXrdQrm558G1Q+sFMthF7UloATMu9cR9kTznrC48IEzUDhDX7G++grcH8U7Rc2Pm9Go+XvPWNYzzwB9ZuEL956xb2nLuW+w1+j30cZJcVpMInpJNVEE1AIdSwCsRd7CPqkrDgTZcxIw1ChTeGC8eRmZJCQeC5p4g4CR7pVR/qV7F6mv18tlCZdSSS8kJLk8JJZ6RaCv74gaCz4jGjEhFqu41KO076F7pqkeGdx42xRMWk8P9k09Z0SRJDNIi0XNZQ3BzNSdSmR6Yma48PE3rbNkUR68hvZZhMRrUa8t0xCzoSxgXCIDCQbcThKBiIAmjZjIIvMzWxdHaRDtM+w6RJMo25zWAx41lwjfdWNifKjgN/K10eSNd91sPaheqMJGj1qpbEy/90MQyiUCRqotDHf+7GbrSdV+/i+YD+VRkrTXMnXIgE8/KNpNxLkWmwiVA7ZRspRGduUWom0cJJcE03Igy9VBMMCZ1BczX4uZ88hCr9k8+Fo0OI8JnvljfvaHJp4N/LBxlrPbazEC586hjB+Av0QZ761pS0IxUOTSPW3bJFz61Rl+wPBYLo9BXTYbq4+ihEc0zBnUSXi38v+2FXF83Uar1sptiJUUJBjUfYu0wEEFmltzb4dHmV78lmx7eJnpw00d9jbTiC0XUzy/xdDP/ostLpjXg6/063M7xuykvQd9nL+/x96DNqaZ/AKmSYNOPk/vYSOoq1D3wVt1XzDIW8dBTVv7ZVH71dWzadC7rFehXVUvRS1obXc64X5sqUtV+oj1DetVO6nCJ/AI9zudl6rRxnMOLT7H8dbnRHz2cxoatuqAOnIJ8gftwdtHnJfiI9qsb9g3w5uqcIV1Wf3p0A5t9QK8IGnYFHU7y43UhxrYRI7l1M/NBsL2YQ8BEdH84F6CKcIYN6aYMNle9iYN3abDUjmTZXG08gOlYCntbfSTt1z1o6mEXRH0I5E8QeGwdc1hoE/0PgUXN9pf+4AY1eBrWlT8gAb9aM1BwPpnNOnm3239m90n4E4koKwZ4PNYLyVIg54Os5O2DWSQAn/jDL5xW9bHqMAJB4U9d1Us96vYRhDsiiQ7Qz4RxfOiaksvtiGq+XTd6MlwruZWiwcCwYotp880FBrssm4J9JsDgQAcMafhd93NRy/cffz47thok8Px+3tpbl3coy4psX+3bjGMlcaACUeq0/9gptfNwvGXP0KxyXzy7I2DtKnTUBdp6gqUm18kGRKpNTXbfe0GMrLU36lE0oYihobGata2yZDKMxWucRGB0FXcFisPUa5g2Gu3/eD2bG7/7zSnVA0bhDKX4DZkQ5c9m3fAxluf23H7D26D2csemBMuyygCuFRAE5N5RM1UIhF/rnh8+oJb5/rmHkCFSM7tYTp2ObcCPMRPgqQZORglu9/jZtjUY9HmcFPQDPi8DrIW6UUgHGSIyNyzSDsMpvCfsE0SR7cThDhVh4K3khG4ccke8AZZ3FvypuOB+CoQ5XRVlAE3VvXLftwmGfzswoXX4XbrOlDgDsW6MwhHQtZLeZjqfGTtD0aD06unT8ApsJ6EDdZl37z47ksyl/z11PwUlC946QL43aL1uSI8p1nv1RZp5gXWSX+G/yGGmO9kTdXwtbxIN3Rs3RPmxs21IpdHQHc6QUZ2ozLhooghNL+MCCqIkiDOEUlRpGkiScpmokjKZHOtxCuh4Nr3X6i1pRZPxJtCQPId8d5Eb0skFGuK6R63UxYFRoIQdHGvWUIKlMoov7lQS2QDpd4hhJkFYAnJQFO9nGEN01passrR8IaPbpg62qK5Eymn42h3T26i0NrZOVQotO7fNlPp66vMbPuH2ZlKtVqZmaV7pi/sj0STrXBDybW22j3Rbs0XVhUKQ1001tdbL8hrzP7DtpnePltOnFtAHbkN+S5AEqS71ikjEkeptMzNQJFeKWN0GmET28wx/GQgGDQMznJQRkZLeNDMwp1koFQsonQMIk0nCnQIkHTp/1BLKJq+fxPuSqr6oso9KuqdV335tRf2Szc898azN8Ezulp0Or93k9NZVFuxhIoF1l3z/KFDz/+I7wg7971zJ4RWliEuG4VUsIeQLpEkuS+IodmKoAMFHp3GA+UqhpJJbK94c9jndQe0QKDIXSJpk2uSbIaL7yDjzZ2QouCv8B6QgvV3r7Bv1XbfuHDsplJvDXqHzqz6g0ShMNJN89eL5ckKSOOiziaenf+TS2fmKczPLxzDi90jBbjF7c+UaV/K6z3tcJy229VCAv0IvRlRfJKkavG3+Gwom0aRy4Eoo5PBFcESt139mSq3q3jnN+wssRLwLuGkoIjvF40JNMQ2ZHyKrp3+jN7v+8xpNmIk9LPf1hMG3Ozr89EJNBVjmiLNbVfV7XOzqmF9RI/FdDhoqC+o6iLfPMvuYRcgLhogM+ShWrgfHOK7xigR/E4KMhvb1EEdoxKV6ei6J1TkowoRmUMQdxKQkTd2opBmosLmiIMQ2cGtDiKDIF9GqCTZdCJtJhKVkJf6eEUmOvbxmkhb+37Tqltq2pbNwWCkLYgy2qhbMJzWZAQ0rYDKCKFKV4PkUGIuEmKDBrMFygGD7bFqxatLlms1u+gZqOtwOWgfWad+SC/oJtruNGYqmiaYfv1qT6c+pVvXeq5G+39K1w95CijeVCEadGiyU1BUH7zRPVX4YOHqQk9P9we7DnV1TXXd1rWUezToOaT7TKZLHnxpQRVMb8FzyOO5SIdPmPrVumfKk8eb4j01zYGgDeETczi91l3DXRd1dV/d9cHunh68zW2FqULXocLt9VxDt3+CfYS1oKZsJZtrl8gAIowpgDCa0lEOuYCiiucSS5hHi3C/jOpIEok0p2BBEKfxIMJmgplJMwCkORxoNVs1twuluSQQAwxH3cdvqyY5kMRvvBe4n8o2W7IoxwyTXn/1A/Tk4UhQPHgA5fW0+MAh7s5pCsUSrOWBHzwg4vkrvw3TwZarP2mdjhUjNBEIcWXvw/f/W1ag30P9Y5AQUmEMubqNdKKlVyH9ZIisIeNo8W0gF6HVt7d2BZpkw6trQysH+1f0VUo93V2d+VxbNpNKJmKt0UhzGLWV4U/jPxtzAlFlCbEnIL6ZdShUpFSc4keRbiKYmwAyffFFGzesXzcxuhYNOa/ToaCIJh7QXPX/zP3ECHuSHDOUxGxSDsrBaraKm53An4y/rNwKVX4Ct9IqmpVXQX0LdgFWSVeTfgRNcslfTTLwNTf7pA9aE7c5/eGwH8b9h33rDzUNboit37Bh3+Tk+s7169fvW79+8q4Ob3hD6/r1G1onV2T6Y3j2ySbv5CF37+Rkq/8a33rr1rbu3d51oM9fcqU6QL8XzoQXNtIn8DDv9W54+v2D67HO5N7G3To3TE5O5i5p3vAmJlrX9/fHJjdsyN3sXf9UrTS54U+xRrVt4X9desUVdGUXyqufn/sM+zFTsDeS5No/itpqYN0TTmT+doIy6QA2ogTSAe62gQNo8KH8upzYph6KMrKFi5X1zbW2dy6LcO1tRbfUvC0tLcmWpNfvTfi9ZkUVIx3pul+GSzzbJ1+Sufs5zp3P2VJWTJcQWrAXfD4pIqTMsy+bKSGi5u7f/shpRWiDfJsinH5ke7d11jr70Ge/rOZ99xrhsHFvd2jvUWX/fuXomTfeAIImELNl82toltTpjusTVOIy4ksizNq+FDbFjTNA4wxzk+l0PJ5uSyPJxVPxlJHNhRwor72ZaroSND0QR51SQfEsM5TV/MVR2GACaSZeLeFGVdjd4nI2fY8e/36TU2uBPU7arDRZf9Ek9WR7i1LYeqFZyPpB6PiHdmAGHHW7nnU2x127d+stzc5nXe5zJEpD32oKfTtMI9/9M/wQ1ISLtiV7G5JLojVWIlXy+dqfpZqTrMkJDtbkmI2KLQjyERYyOquCEoaQWwnNEtl0y1PE9BNzKhEMtApu4ge3fzYC4OMuOzIb98Y8guRySVP1lOTaZOgac0muiXK5uzuVisUikVBIUQSBkHIVEUtvd6m7VOxJdaW6Cp35jlw7tls6lowlE/FIa6Q12hJqDtUhpuH3eXUPyh3FqaDoEWRBRinFCPOmERlXA8leP25x3KDUy52ASRE35o17Ac+VGtdROnlLiKUAz/PvmbGxMXhj3HK9ih94/MyZY9Z99JbxV8fHXx0bOzNm3Wfdx3zWfX+FpR4fx8/Cl87wDz8PO63vjvHq0TNjZ2AnL2HdiwYCbg29+UX2GquhBKuSK8nu2s55ACeiemhHMSP1oATflKVMEMeIE5wHiITwRBLR1kL8jIIY2eCgCiDbDTvnQJjKhGk8CGyzgpKaTe7ft+eKd2+e2jhcWzlYLnV3lQKVkAspDSQ5W2CLXqQBKNb1mT3MJXVBQcxWqlHBdhFwZeY9f1XjPnuNIlPRZdWHaJWbGOJSDTiU6DCUaLhg3sh9wjd+mH5VfEr0qN3RaDjrLoTawil3vMOlR8P50DFVk0+L9uVjzflY2OVr0kMpX3uwMpyp127OpQzdG464UqlCpdZWr0BHyzvb9UzYRW0n9cKXFLyFS5pHLASqapoZo7yjKZozDIpXxdMi/LhRQE8kmhMr08WRQFc4ZIJd2xdLNSVXDoVr3fmEi9Ur2P1j8/Vh1CotJE/W1GoJ7BIYk/gYBxKWPXRIRWHOBrl0WuYe6M0c4dpqMNeWToWbAi1mi1PlSlCxFUKUGRpLFFh5iPnroNEwqyaawIZkq4iiBvDGzCMHN7W1bTr4yDOLiZmZo0efOXp0RunPCcMztVpBU3R6uDixcSgyODVRLE5MDUaGNk4ULd9Np2/C3xnFpWr5oaGtQ4XuRfud3oL8LSNP52pZkXHPCloj+xAj7ScCgD1Iz19fgMmkP13x22a7P96LZjAExfMGeyVo97Mpc9fRU9AyfXga4OWYufBD23fkvfulE9SHyQf3DkzTjStPWZ+1vUcwjJhk76677961N4r64RzajaeYG/FbnBRrXa1ok3Nri47ZdM0d1yBwQwnFJvf0cEsB2GQwiUxetxQQZRvYbojd+BhkkhsIQpQGEYKZ9JbjLx/HH0Tz/cbndrx34/HdNTq4964H7to7CGs/F4Cj7zlOT7x4j3SndW9LLvC5tUN7PvLJu/b3C8O7Tqx/747PBWze3MOeZxejZAyTYfKBmovwkIaxtmYkMESxGiqygoyIB1HPTmxfIJfjXxGYYnupQGQw96votestFej8f1ZjS83VmvC1md6k3+dAyCqWuQ+vnEC0VC2m4xlvuUCRJwO6yFEGJyDu3+sdEqrlSpUHhXAPsxxF2ooyWHDEu8HX3+aw7qRnPhouT+2dKofpQ7mWN7ED32zJRQrdKR+99Qoxlo+Je46CmejunlO64w5Hez/8wcPQHhnsSyT6BiPWqw+35AampwdyLaHi9Ozt66eP66ozGEU85lT149MbbpubKvMxQt7HQhdqaS8pomUwQjbxuIva3gs17GIY84LD6ThAUFYf0EGhygGPrdllqPuS9rlUymMvpHmCIFKqI0+t7urUbFen23Z1zl66dcum6amN6yYuQFy3aqh/RVPAaELAFNd92GZQd3yWud+jWqwi0oSGC5A7h4tRNCv58HQxKgShzoJFExMFGKKmyF2nmSyadHyUFXm0mF0qsm5r/7rOGqwVcsPxTJrRW6bWWKGRjSC49FimPy6lCuMbR5vadSXRl4npGix8mY84I6vcYYfZPH0DrBkqrFuxtZMhHBhpE9aONa7PspF8/ktmGNwBfYP17uENG4ajfcN95YwZioSpqYdVambKfcMReqw+im39y5ab6A2fuU669a87CjDCVm/QA+5QCBqX6/EAdND2hYVIppbk3ggCDc6325MsOdeDQb+PW49Ql0zFStXgkTnYXCxjcz08Xn/Pu3xfcaQyGfkl38M/fhh+Un/WwMqstdFnmj54Irvy8MMP23z0GdRx/MkxROSP/FEae50jQR5UNCAhHcgi9vg+F/a6LJJ5AYgiE2UeMYXTqVyOL4pSVZ5zg9PhcE7hwenYQpBuEBsO/se1ZcU5/+urb6lF42hExzvjiCnaMwj9W5rD+JIhX6o34dW4hAnE/ajduGYD21NuBkvFIMpDJiNC64CEvzeOtjWSUm82HoAXrD5VmDupB4KaL/I/w4bLlzs5J6hW/wMRSEW0yD2RE/BpSZCmF3xbVfg0jO6A1N5we2fYpYViG/daf78Dtlcq4YUP7di8YXr6oR31Masn2Ra737wohabJPnJ5bc4HaI6MEZXKsrqTuJ0alUR3PYyF1H3kKDRtFxMCRTqH2Fl2ueRpfpRdW4hLdq2PNe/ZObtl6iLbAkKE1Twdu9hv4Nfn4Z7axViPaoMNqvWQsqKZTuDf1oCHamjUlPBr8IgNlPVFs4LfIeBhH0M0U8Fv2Y7+KCDpSGBHd0gJzGUzOi9TiWElFNSLsR7rbv7MUXrTs0dWRfMRGmtLWD8QsgPGSMEbybkkRaD8I6muXETvHs5NqhP5WtkdyavnLzlzLXphNLMRHmHizVcXreKhm0WGyUM9QHoO3SSxxZiPgXfzB91Ej34oEI3motFdgqQ4+X1HMhuljZmRUFsk55RUgX8Uqr7jJeuTN/fY95duusa+/2Lapvfj7B6Ws/ssSC6ojXJcKlABxmTuSGQC3Sdy/CAQ283EcYN0Hjf4fKoDiC/oC2puh1f1ItRTQKkjB6IjC+nEzwcDY3wwMBCUs1546bOgWT+1brV+CtpnT7zyinXm619/5kTxEZZbPAtHQDv70tchZ1+ke9/Aq+Dj4zcNzL+BJGuxIocDSDSoges+ukaw4XAtHsswBNBpw/YqozTtohm7K3kPo33CUbod2hM06+RAAwYiRZs2ejFvu02qCBODRe5sQU5iPpfkXFEueaLe8EClY+zejma/iphfZtDSGtG6PYqgGrpqyFRXYpkoolnQcvsnwSc6JVmNRmMuWQ/RuSyj93u6tUgsIohKwGjO3zPeUYkEdV9M85TLK5ySi7JsqxH10JCuOGPRqCoqTmbC+v05F0WFG0slAGFUxa8i3ECbh9iYZOodbCBuAQ3YkYNXk/tr961O0xbfBZ0p5m+hYzGIhsHXEvXNxVtpi9/RMt0M/qagmzkUv2NbyHQxJeCVmSgo4qyhS0zwOBHUIOSa1VTKSCRCpuwEiWxGazkyedXBfXves+vyuUvfveni9ZNrR1YNrRwcqDNquaerHYF3PNbKo2bCTaGG1dP46AlUeIjOknzLLjvC244MQR3eh4cSmdVSsQLLylcb14KNa9XzPkMUh0tRJIsDiDYKHDt16kunT39pcQ/3PfXUmdOn4bFTp8489dTzLillB+/x/X32qTOnTvlUJWmH9yUV9dV85OzrLblcy3g5nUqXz1RSyXQFxlpyF546dSp1+vTp1KmF50+9yXep09B9yr7bKV7byuC1U6fml53KL/TyW9GvtOQq6XI5Xanvc3bM0nH2OPIm79M2RPTdpEzurN2BGsRBHCKKVzQbnYq6zwDV7VTd88Ttcbo982jAay4NXPuI5AeHKDlmBR8qVadCnHNe8OjIYR5tlrgodU0Rl4t7hlx0Io6GLBDEHT3dDcM1nYq1xdvqRmuj73xuPuIhkWZoDtT9RQE7shDN/ORSk5fQZi0F0txOXbQY/PFsPIg2K9/Y9mhnZ3QysbC+eSre2RmfS1BPYuGn8JcLXw7G4vlY7BJa7bIi3/jwh7/84Q/TciFmHW8t/O7vdsZgf7zzmve//5q/sP4eUtZ7Yx0x/FkTP31/MplsxEz8gn0f5YOEvLCCDJFxkGuB2tCAzhUvEco8SGRsNRoMDbduN+FOD1nYR7hBQXYiI6GYE+YUzEgiSNsI95/xWEvuqxbpZPOiR6heXobfoELwv/WgWs/yKgIPTv7P6mzZsqVmEjKyZuVgT6E9E202/dgSkuHgsrCaRcIP2L4ZE/Gjf1kAQjVeDHLHk5TN4ClJ9hpmMF6soLGMBU0WhGQvyNlGABn8a+2SWi8EHI7nHT7cUrNrrO41s7Nr4OVk1MHkZkV1u6zudJkHe76cLospJVQ9Zd1xih4onSrpef0S/c9WX7K6tQLHF29hfXZP/QbDs6AJfimiCKycbtxjVMY7KHDspHXHSSiUT5U9nkv0vK23nmR+7GuD5BClr69NtCfRlr4I9ZOGaiGPSFwYa4QqEkYFNH7ro1pzCPQlxCZ42CxjKWmyo6NjW8eWURRcbe3VuMLD6BA9I4YuCMkEShwudBjH0zSL9ks2IRsmP2vUwQPLVHt1XjRbSVWLJg9p5/GOaMXI/JDIyAkZKu3pV4KeTKaci7XpqFaDmcJIBY3M/qFMpFMCsP4aHBsMAW0oAVnRiIYjjFZBu8BddGcnRosxX7iQatl0CNpqW2fKTdubBg6C709r6VDCp6LtNdAyEyjDCUFL1bqy/RzwRA62dEa1sMV6qabIuqlFxBRNhUQ014QC8CBwLZGfyLYUowldM/Zf3Le1ghpGAGlx7PZJOoBt20/6ar06Nmehw4WIm4418YAXTGCL1tH42wIbVvSWu7dHBdHsCFTrXpaKbyVgo1WRwlA2r0LrhiMr7uWUJeqhUgBhqiQnuJZOIqqVVVc+5dHRBOp3J/KquqZ7vLW5r61CFe9GQ2QiFahnBKlGAMcslaWQpA971mcipQ3dguqS/elP3g8JQ1MkSvsFPs4kmBFkANUdVKOOKevlwsUFU1WZJ9RKOQTn41S/OPdpdjkrkHa0+VprEZeTouHXiGmtj1R3d+U7moIMxV06CtyZJGW4p1taHKkegOCQELSHLhFF+M2GzKOtkmBINfd9sbDadnRPJOpq9SumZqaC5TE1c+i6RzYq2Ntq39yOlGbW8vla/sfFob5QmzTiikX239rmisQu7NE7W7SwpBWv2zzkkgR16jG8EbjMQq1QqC2OZX2abWUacsFKchGZq13aj1bmusEBBGwXgCywsQmQRxC2YeMBHxQhIiPzKFMQfs87sMNRkogoUwRZFqbxIMibiSzIk6uG8h3jo0MXrbqoXOpYmV/Zmgi3qdzO4oZFoD5ozyFVtbdSraBGxR92MY9mMXhDBLEVGHIMMgwygRGUq6YfbVc7Dli2TX1KM/IsA99QODZR3ZhrB5rVPIJLdCqCGMkA82dae2UtPz92dLavb/boXTfPVWBN/oObd2/6+MERWjt0z+a92344OTh81b1IWCKVfIVosmlqaLBbLGZcVHI7J5krh3+6PRltFirW3/bN3HrnrTP9tDJ38/iVM0c7+hkb2X/yoZN7x2nvuu9efnjTvYeGFn1o98BLDRumv1ZFlIcWC6fx6UaSwGaRcfA56bfhb9D0hf3h5QCYjx/5+VgKN77jv5LYX6jVZmo1uLNQG948bB/t/Eu1rcPDW2vL9/x1zp099xF2L8vjO/mRTrfXtrmA0WQiFBREGeGvLImSbPtZJVGYV4A4AOEZ5aYVn1Awp4LtLsPDor8sYPD3zqRi0eYmoz3QrmsOv+qvv7uT6/UK8fHQShJMSAEJOxehHENolUU+RarnSCyIvc5D/b78WdAl698Rub8ugeunuQJNxDKFp6N7y77ukKbmwt3Rw3162XS5UmGWo9bP6yVVBPm+E93hSCwf61/4dLkcSmVOzvUXwonEPbtJI3aMx4+08tHjJgVFDtiuNj6Sws5HvwR6e1O2/e81ONS3Q1rPR9bV41c50GevmbLsUb8zO2xda2ubO4Znv6N6ZNmkdy2cDDqY+p0Z+/ztfD/zHZWqjTgi7IBj9HGikgDprOUE7sM5gIqfsgNvMYfswZ5Jn9fvxU3nkzH8cYRG2d5iJZuE80kfXPj8h2duhW/xSPBG6nHr9J3Pw4Gjs7BhMWX3+8/P3cpeY8P2vKYM9+emU8l4jIsNO5RpLccz5IAIKBX51AjGhCnJ9qfzWKHJ1lbd05ppzYQCnqjektDteRHJrGxHFjN79MZfx29LDQa9WQ+KtgDbvOPImafLk3vVGH04pb2sm6a+kOd7+vHxh45+aIZKJ05sKJ+Etoz2czVh3RnSrTY9FNLhG3rIGvzkycFbHzmzyZav//vcd9k3mc+OUeG+HC5aWX36EY9GbSiOplA9ZKRLqIcn82gg3KLccOfuMNS0KbYIJtmW8X5fWJ+czkR9RUpHnjny7Cuq8vnrIDEezeeH8nm6v/vItCRElFyhf1wLT0y8+JHDP0pML3woX8vlanm7bX95bjf9HNpOEr5ZkfO5z00FkdmOzjEuJgUmztk8IFDsDXzTKa4bN3O1MFnsyaSD3oRXQsoLItqVslI1jrIO3zPG1QAD7myQ+Og7NYOlSkNTZDOxr0F4dHz0q9ZPx6drkvIYTD2iCm214W7rNkERNOpwUqfWujk0FdrcFBC8blTYutW/f/fuHKVfHb99623j1z322HWDezZN74WnhZgSlTx+wePP37B19nCyRW4xzYTv+YZeeBXp9h9JE3JQmrc8J51oS3MY5QMPxYIRxs3nA3wSzy5v2BuwuWhIqHoTXMfxARcvDwQVvWbQmwEv4sIKvCwaEzOfnN32ydlRF8o7TM/NnpwbdVufe2x+P7zx8P699BpRy8RMWNgeimZU1aWkEgal94eiKafTGtJWwJ/3W5PwBa3fWrViMe6ePUjvQe5qqYU99ZjAt6hfI2gwPmnAntqUXYpdqAcwsAd1K4ao0vpRY64C7LcnK1AkVSvm8YBZn7vwIBzgkxfsdjkofJetR5uqEzXm/fWYqVGPg8LIuidCPGZKBZSoEoJ0Ac1qQZ5DElFESbnMiYiBOUQeuwHgmCYOhz1A6gAeM2VXkom07zevtaXW2oIW1+CKck9bOhGLdLZ0Nple3aXW7avGeHzQniwR4EGhVbm3PqDBBVvAtmirfLgDr0lYzBS9ZRvB8zSC+oowunorzNR6P27NrZ6B37Mz9MrVM2d/+rXJClwcCywcC8Qgyt6Imgt/EOuGWIBeGYjRJ7YOW3dj4Y9/fKaG22qYXz0zs9qa+1FlEkr20Ij1UTN6BewNxLpbrU/zW9jteoXwBXaRHQ+b55FUyEHIUOdxIpLbnB1uOX0+3LJU7u3tLS2G/fLxGj5EZ0+h9L5Vjov1v2bw+ZUV4c9D/l9+1BsOe4V5Xzgf9v3yJ75w2Cf4fWHr5UzEur45k2mGDza3scwtvhCEvbdgWeuzC5/gVehlWPYRLFHJZOr0B2/Q4wStxqdUETo7wA57th8chB9omjUdSiRCcJ0aVa1/140opVFDX9IN1Eefs7FCshZDdMo4S3G5tosr2OWQoD5tFKVtAu8cX0zAM1ufts5ufZo+V1v48vAw7a8tHus68J/YZ2g72jhNNdO9LH67zhc+zheOZVwRdDTCetij1nb+vtsbwbJtPD7WNeOEY9blTif8njOqziA/fgNPO2d4xGydDz9DR+vPsmfEjpGl+UVBw35WmvtEl0J0G9G57NEZvJ31DesbjRjd+3lE7v3O+RlVhXbrVVXl1+F+VW0E59af5YOfIK2EaoG32xC9JXuyzdvmkPKQ74Wt9oAdfWgxzLse3x17i56WiJusqg06UUO7UE9yzxWwMTR5eDDnCI/V59FBs/ZTeSwn2cSfOiHLslt2+wydT1BKxwPZaiCe7o33BuVedmxh+7e+Re8/ewu9/1vfet+Bhz918FsHDzz0MO8FZcl/6kGJkiVVMkw2kEvJFeT9tZtSMQmfNdOdiYZU7ipcXwj7qCiRSwYrTBB3j60d6kOi58Pl9kuSfYo9NM4HkDgqn0cOAj5wLvAIsXkiy/uJDTgIxxsOG29wAfKene/aNLluoL/Uk4xHsi1Z4gGPygFoQs5kK1W0rwIG2lgZ2d73lvkZsK8hMMIz/vqIEZYsFfm1IJ/vKMkVLlmk+i34BXtsjufxzEqoMNsO4JgrW/m2aXTnKxMzg5IwVNH3G4PGcDFTUGBjxOzvm95w3f7JTeE9J48KWmYwHNVCs2364YzeXyxcJ9ETn71q64hrRNKi5l0wd0KoDYdq3TvUHWHNR7VNe/sr++HnanlyIp/J67qkd/cJ2xPhqw7vObp/bqgYgm4tF4kOaamwVQ5tNtRQJF8wlL23aie0gqAd39RdVFOTc0+kJj5ylGrb4ZXbXzLzPqlPOH7YMNXcwo9VxZfYWMu5Tp6PGX8NMUGWrCKTtQvaACQvtnK1gAArjl3BZ0CCxIOwkdU54ObBl/ONGSBzbx+a6m9O91bSpfp0rre4WxCV2vnlvhbbOen3Gnxa1hKHZRtzzZhvyc1yh6yqsnXtkoNFVVKKesaMOLdbd4u6UJMk2Ludz0lr8RgweXrJs2KXW3KrnFaQOf/O+h6f4IAVJakmanZFe/Zana6ft8dyLiZbyTayAyl6P7maXEf21N6TijYH0JTY6UY4vgft+DEQZYFPRqIgcHnPGWyeMAkYJ2UUppx4RZA5RYv7Of7gthQsoSkgV1915cHRkb5qT3e+oyVCLoaL6xF4dYtS4lohOyRkkUizGcnDwyALaP1zwo6yIHcpJLiDvwt4RCv34uNGK6Uq0j1KkQLwkWWGVWXJDFYyv7KrliWjUsVEBR4/9OWrHni/R2uJFfsSYZoPNOmDgUB5f68SrXmajHwo0deNcM8VziQ0Z8zldClUYYIrJElyoi3jcoOuvf+BQ1+4G9mcgmoITlk1JFVVI4Lb4U6DV/Bm/P4Y+KiPOQ89f82d3+5gmnq40sS0aH68e013aZVoam6PR/KFpVWl7jVd44WITo2MKIWCPpOBoEqMSVHNHQgrlBUjVNVYx7fvvOb5Qwv3CNjuguRhTskVEDRZMwS36nJIoktCAeIGp8y0un/n3C/OPclCaFsZXP5qPLJi2USMvqwtf015yaRCsoUMp0PmcXitn9iG1DHV+onPH6IvBunjJp60tgdV5jzm5HOZ/N784hy2PTY/tZIEYtASGSQHa/uSKOFawEGyMSqLfFoDimwmzbqQHhwicfCJVCgTZY69VUVQ55AWqVOhfEwUoD4myunGCZPlMpDyYHlwYEWlt7urkG9vS6cS8XBQw39NkAS0ZQjKViWNeJClEdJApeSBEsilYLW3PuXIi3iqAt6kPQnJy07bCscOFLG+hjtT/76nYvJpRpn42Kc+Zd33qU/te+JMNPhDiJo082o0+Bo9sqSnTiIMvtaseL6vmzHzj4PXfgpu/NQXnvghn5tk3XfMrFgb6C2voRaz7q3PT/46+yH9JxtLxEmO9JMJsq02MzI4wFRnOU8VR7OfGyhjiFRUyanO8vUAGF8PwEEU6lCWTTYSuT6tD6/Onter46O1VX2VtD8QNPnIqYsv7MAHTHnURe9SmEBD7XKBZC/dsPxCcjk+exteOzO0dWjpx3yqsrCVB0PRh2TX2Z+801lYnqnla3RwZpDWftpp38L65+VrLJDFk3u57OM7MM8vr2C33R72Q8T0rYjo16P23UdupMFadeuWS5jhuXY/1YwD4Na6QVbe05Vjqm8sQpm4qkVjTkFCNcpjXBxj20AN+lGija57woVmwOXEY3gOBED1eR0q2gLMyYSdSInYxDuJobmNaTSGNT+4Fc09i70m+xSkWR/xOnxe3ieS6JC2Id4V2TR3NTqp6Jx9O9RpXvdEGh+149c9yslXgfh/96wcPmvn+Wf5VO++/18Pq+16p+c49/2/fhAf88hv2BCLvff6q6+av+LyyzZcuuHSmXdPXbTxwnUXrBmOrYytHBxINZteX8ifTAT5cCOPnc9W6z4tOWuv9dCbkLJ2RKUcBX8gaS9PUy1zz32WDxOb9vBwqVdcxhwle10Te2Y2yg5JzlZLAfE/4ZG/GcoPplojMT00oAlaSFUdKcfAs72RBLwoRBJtqOXdTUaXuxJr68sUMjDG1r+Vjf50EEAMtk0OsA2/lpMqnUVI9zTpelJolXytbgWVcvSSntVSDoa3GGpLIRoKuTUdYvFIrNAWKYSjnsTpBrMpqgv+ta9vTWcQtVZu7DvfeGd+o0txHjNkL2xd94QD6aqprCMfeYGIhU4qkF2zVHUIYysA1jbXx9rsAvQdC/wHlbdsqd++QByKqjh2ElXdz+fuidMS5TM1nAxhB59FoSh2PCCfjiQok41nlpbX4uFwXCxSkXvs6lXpO1b1/TceWOuqV1D3/YY1OOW2ANmze/vcxRehZO4t9cSihs8jS4zMwAy3/v2ZLrCdlwi/K9ViVQ6iOpalgB2S0Dhrf/kUHlTT2YwHkA6DZrUOzfkXkSYva2e405777DmayiAosi1qLGDb1AjpqOxJtEz4uwqrva1egHgq7pRBYU1GoqdnoLs11KwaDpegCJSp/lCfAl1XdaxRGW0y25kCosJciifQnrv+oktvXeN2ODT6pqqc/QonTNarqPQMQA8wga8ao7SLmjx88vfWdsT9YV1Fq6s11v6ufN/GnnjaZaBE7paogghEcCN4ZIrH45Scr+xbmQun4q3p8vSaznc9e4VmnP2XFL95yqbJc+fO/Q0dRP2pkRZuizdWcFi+Qkljtm8585alMjJ1RZe1WXfZ9N+3Lu7w1snA/+ZR+VIPatQA8wXNNCP2yg9qw+/2EttCz2GKj8lM1MYSfM7JmOygoIjYTPskpDqRHOTqWuHqmjfdNFEUcTMRFXGSkPZsPBZpNg2v7uZAhseDq2Kgw+9Neqv1VXxshYxZ7EG0IaSAN4kWRLYUSKLYKppffOb5/gIU+vpn+uiH/7jQnSy4pWcAngFnKDOY2HYIfrbwKm1/tL1SmapUrJr1RWgbGM60eCPWV771oQebN/rCMR1uQvy2NDfOTyKI3ypkDRmurWoxeMzyGBfQzCHNiTzYZWmWs8wpXVYUeRrNVU7psjK5uha0IUdTU30lBo3HWWUQdfA4LB6Iw6epIsyoBzBiH/BL9UjRKMN/tHw23fWBg3ddZQhaJCxok7MTHiES1q0f5PrztG0oA7HcYBvN9xV+q3/2trtuRzzRN3fr8aPbKxcsm2735pppunGtFna49HxfX96jqeF/jObsipHG8VE+WZRXvXV2UCjvOrJ+2WS8RtzNL4RuegSRWNCebzBAxtBO2kbmybXkFnKMfIL8PnmKR2qMg91UUdIsRptnw8GAxymKpqGpgj0/vMnrdggspLsU7qmgl/llCj6JEjTq51oh0tISmcJDpGUzaYm0TJ48efoPH/nUyd8/+fufPPWJj997z0ePH7vzjttuufnGG649dOX++d07t2+b2bJpauP6ibGR1UMDfaXGpxirr+GFlIOcj8B3eTq7LI0YD3kA0ygP0r+mTPA3OB986z3/szK9PO/n0SJv8/mdcfQ68DfuuNGBv/F6jg46rKjDAd91WPc5Kg78NS6cUXhOGWvk6odX60Ws79aPxxYPeMchTIyd3cZea2s9u41H4LBT0dyX7Vq31ff1qn/7K6fu+ZV0fQ8B+1Tj97xdyGFdDG9YLr7xZ8AbSGMNOfEngkmfRRssRVbwdX0KXtsOY7C0ZE5vuS0b9PHRdNvxtmzqPV/GxwDGfQUF4BPSudG76JhbWvWHe+dgM1/pyTorSSCIuhCRpG9+U4KRl6kmJRQJvkZdclJWYC+W0KSIKH7zm6IYwSSWXotZELlfQJDwki78/TcljW5Y6JIV5kBhT1/GG6hUs45Zv6xX+ubfY2l8hHVW1BvretGv2PE4cdJWS8t8jRY7BsdeBoLYc1b5ui6beOGJwajXdvSjYEOdxl0h/P8UxEVyoNveXFO+ZT7VPzE8GvXoUsgzWttQyZgavQUldD/sXLgt2f4e6rEu7p6dGCm06TKa37n86PhcFzyu1f0a3CY9wXysZI/ntZNhsoMkaq2bVg3GiGgv5vEWeDm0sthDuRVpcjcCvlUUggUeT4qiawj8ttaVERvaYYLcrPRrDK9m+OhJJrsKzFg1CpJfYnwiCp4p0C6Kwm+IcdRZsSc7w18ItdaArplGLjqk7K8mc8Cmdo28z9nmavvkvaFwwqmXPT3ve2/RU+wRVCHi7z60d6CprZByal6mHoGhIy6q7PR0sVDIf+cLH75IcSkgtUqaSHVfQmkeveKvH9qUcMDVybzfUSg4nEpMHaw1eUYypXHHJrgMlZocbhYkn0c3qKR7ZGosfFXry7S5msPUIapG1F/Z5xAvvpgZUeqftf7VG/EpowHPKkkPybnHE9uzWlj3MTWsBnqaOpx8fqPQiEs8Pzerp1bwuGRBgLUqqkGBjNSJ3PaXk12KQojm5nOg6rOfbE+5N+0FWyQ0jjdat/CNnbJE+CVucevuXqjC/dZvw4B1wrpgFK6EH1lr4Zo63e1hv8VWYw9XuB+vE0TBCZJYCQJCPsbXzRH5KgoMZS7wpSAkWZS4Pc0QFv7KYh1xr5lNZPJJPqSbDtYxFHdKYzJgmMHiEKSDthuUxe2o8yqPuzdlNBWCqJGDfAYfHVgRf3jPu+7edGjOMTJ1966xw8PQGTsmO0z1A9bP3QatgCh3R9MV6M8YP/6ewwo63vfcVTuObLr7XTsfjl8QPbLuPcdh4gZPbUzwg9PnhqdULZKCcjpbEU6Nj/mt+vwPe+6Ci2RIN7mkNuVCwLvWDpGtz7t2yCLjS0jw8SVBIE634Jz1oFmsuafx4NY2YSdoE23ZfEe2u60rk4rzCPMmO07T5yv6+EKQIAaSDbd8sjfIZyMu+/LQyri9mpLIHZw8WaUhGhwz9bOP6SaMHTs2ht/xY3FPCM5uC3ni7Abd/OXXTC+bOtNYnuQYSsvHz2+GJ5XCC/OmNsaXMbF9V+cQk4zba8pUaiUf9qAfsN/4WAUCKuw9Yk83m337DKFAOplN1xf2iDfiVwqMry4RlBFEaWDw+CQEG0l4HO6Wdz13/eb7Dw3T0YOf3PSp664Z2TV+wzj+uqfKbbr4b3BfOnH9Z/eOXHXy0yevGrny4JqJG07cMBHJVPIBLmMMm/582BdvX7+TI4M/JJ8jf0W+Rf6FnAMPio0uWEWdq0f5lBo7FH4F9EEP+SH5Dvld8tukiXgRaPHgh3Zogzj5W/I1cgd5P0quOJ7n61I0gZf8Jflzcj25EvVID9rREqIwB/AwwT8hT5IryGXkArKae4lw+wX5OflfZAu5CKneQBn4B+QU3j2AXOrkMhlTChmrm1yIQJxGIODc2QYkE/Exhm8xl23xM5oK64heqDiXbvYyIRFCmScJ8lyyycOkmOliDkVyzEVBNRR1Oh50M4UYTsWYIwGAwDQJBGALgQCsb65dZj/CcAb2/f96xpbV77L5eSUgzoASdEIHpCEJLdCMl/3cLQp8OaIF8kvyM/Jv5Cfkn8k/ku+RfyDfJH9D/pr8D/IV8iXyRfJn5E/JHyGme5w8Sh5EdPd75D7yUfI75LfIh8kHEPPdSN5LriFXk32IAXeSy8ml5N3kEsSE68k6shZx80rEiL2kRDpJByLpJNoozdjWfuwR2UaUgFs775O3OCz5aAEPa+aLkyFU4pM4bHvtv5KXe/979X5dHt52P+//5f39jfry2/7nfzdPX7eX2Fmo1NdUs+O1f4Pd+G9a8PwOoqrCx1HquxT3laT+s9QxO8ljyxtnf8MkmzK1s3P1tZ1O8vVVl97kY0upE0tPOrFkGP/pUupjy1KLr/Wxd7jLwsr6crV8gCjzm9Z56b/8mCWc8G6Uk5o9X3Uluap2YIWLIafn4qi4mn1UFBhf06AdhDBaUqPOxsJ/RD5gDx8JBHhwG+GjcXMOe07+NB4Wl2kpdLZGdQ+QSm/nysLKTDqab80HTU+L3qLIRFtc8YAvBcgtTMj2RsH/1my1nqWLF6MgL10tDwE8fusPhq964fsv7mfDP/jAr0sfev4wrWcOPQ8Pdndtywxn8Letq9uaxlyW57KYO1O/RHNDbZijt+DZsfpFfuDzEy1srx9he/HVS/kYQQmlCrZZiLutgwjk2Iq+3tZosyTJbWkqSu0pbBdx7C0BgbLE5Dknj/sUJPEdIgPzHcmEzwuku6ujlC9lM4lcMldf7dShEB10V2NSsEa5Tc6CCb6CSLCagaq9uIiB1mUWbRXZrDYW+EsHK2XMGvDGrmdunxSmb/7885+/eVqYvP2ZXXu27S3MFvbNWZG9ur63BI/vmduHJ/Zu27M4QRAu31sq7dXZ1MZbn3vhuVs3Ng5jJbvCwofq9b9u/Vn9xKs3PXGzcN0zh6/Zu+3r/FaLa+B9CfHCTWRDbd2W6TLCyyBftZjbItg0gkOmjRWNCFCJ05Ntlqj2UjqMB9hN3nD9wQPzO+e2bb7kwg0TI4fMlXNOMdQhJjJ22HK1zCOdbZ8aGq8eMOzpZbabuV6g1y7Qm/VWz08ykzJVe0muYqW+HJLtxglyR1z9Vvb6LW+/7l+6NXu0aXtxe5NbB1845vAhVVq3mzIEHImoAS5PeHfPbMit+cwoXuPrjApUEZVEyASXFt7dPWdqmi8cUQ2QPXCbJoNfLUQ0LbSjay6kaUYoIRvgd8QiPnBdKAght0+nkuRc83cuBJDfvtAlCbpPCwG/4tUFQXavaYUve9wa3lDVkWVp43KYXxZdG56nVHKd3uCSqMtcdsG9fuGnw3gzn66Flo0V6ohL0oiaVvCVT0rtVFbiINKWgNuFfM7GBFTXo5KLOYXFBXWoiD04T5YmVJL9KiiyrGAXKoq8yQGyIk94vYRUe4s9nR1t2VQCeaTJa3gNvw8f56m6ecwh17lLetePBieaobB0gm+IFdOBZGMakbiUgjtMzdD5UDp8WHDDJ+6iA6ZmZ/H3E7dgDX1JVU6huri2fqSfsKbxivW5+lJwLfCay7oObrdcdh08sxq3x1yP31hfTeBGW1jatrRwLdKxiEitXOtxqg7G7GHbxWWwBZtwpwRYMqgJn1wqEtHrFUWzQwzwlcnAH/f6Qbj2l3eMsa13nZ17E1bL42zr2dfpgOWCYVhtfe78HIAX2cV4l7W14SR2gR8QbI9FAHgQDYdmPP5B4PEPhDvS+UxOLMHjH7goYTC5dmRgBZ//1ZaW8PFevuS/PaDPg8AzWVkT+bpZ9mrb9RWgbVjO51kIVduxGTD4xDwpicZ0bmJuf//me2aN7tpcf2bC61EVDc1bnyw6Qk0tvv7ORKYbiqnWMsJGCW64/MAJTdd0t6MlH3JRcXDPxv4oTNy1pbJrbrRAU62r2kN9ZndbhEmbvaWbL7sy1d+1EQqJ9IfGCpHu/tpgeG7vRw40FcJhwVMER36o39ZVf4z0KRIf4rYIaeMranI/LZ/P5tXUt4ygp5IGXSSpRDaN5qLXXuFaNIMIPhshHgaRmZ9790UT1mtu1WEtuHjsnw5RSEHOOkOv1cPuf4cO67uhv/sjh6FIUKD0PQtXaj4QbhHDbnrEpYFyjK6wIh+FtQtPaTpV3ks7qdXdBpdBRmcfA+7Dtc4dR52RQzpQUM8aJMzf3FAQ847Yqw4fYEsRZb6gz2/yxQr8Du5WSscZUou/UoSgKckO4MlgPzxrRVRFgH44+Iz1twcs64AQof/YJyiqFcFrPCvCCwsvwjY55Hps4UV2p/UIbHJZ9z/mCsnWKTR1N7nq6+DvxvacJibJcg+MoatsKeZsKbo7lYw0+7z21At/JSOLGl/Oyl51hhZX4WsBElOBonyNMnrPlGj6rKjuUrQjEOVBD//kcLsGb0zB1rdqj+vhaJOp/Imka0LmaUVk4ivvc/dfiuz6dgX1fwDea0A5AAAAeJxjYGRgYABi4b8Pq+L5bb4ycDO/AIow3JjXXgKj/z/+b8XyiLkRyOVgYAKJAgCNAQ50AHicY2BkYGAO+p/FwMDy6P/j/49ZHjEARVBACgCxVAe1eJxVULsNAjEMDUkGIOwBNwCTnMQcNwBiiJRXI7EBDS01E0CB6ZEOxMc855zLUTw58nt+z44jY+zRGHfjryNmV+MtaBWhr3bZY+hvAVIE4fpZ8Up+2UP4KTCXHn+85YvbICv7LETDD3dFLxRPuxYennj7ijllk/pGyQQn87vxDqgrfg6ayO/EtZpx4s7u+ZX38mfgYMzkjtnZ/z1JE0eZAb400tTl5nRXJXvq7Xke8E3iy7+S/LPmN6qn0v8BCIRlXQAAAAAAAAAARACsAZoCJALmA1YDtAP+BGYEjgTIBSoFrgZyBtAHEAdYB34H5AgYCE4IpgkOCVoJwApiCrQLDgtcDDwMnA1mDdwOPg74D8gQLhB2EMYRaBIsEmoTCBPiFDgUwBWwFkgXPhfsGGIYwhlqGbQaLhpyGrAbEhteG84cIhxaHQYdYh2AHbAd5h4cHkYegh9oH+4g3CEQIaYiRCP8JUYliiXwJnwnnigQKFopDClMKcYqOiqMLSAtuC5SLyYvti/uMHYw0jEeMXEAAAABAAAAZAFAABQAAAAAAAIAUgBiAHMAAAESC3AAAAAAeJx1kMtOwkAUhv+RiwqJGk3cOisDMZZL4gISEhIMbHRDDFtTSmlLSodMBxJew3fwYXwJn8WfdjAGYpvpfOebM2dOB8A1viGQP08cOQucMcr5BKfoWS7QP1sukl8sl1DFm+Uy/bvlCh4QWK7iBh+sIIrnjBb4tCxwJS4tn+BC3Fku0D9aLpJ7lku4Fa+Wy/Se5QomIrVcxb34GqjVVkdBaGRtUJftZqsjp1upqKLEjaW7NqHSqezLuUqMH8fK8dRyz2M/WMeu3of7eeLrNFKJbDnNvRr5ia9d48921dNN0DZmLudaLeXQZsiVVgvfM05ozKrbaPw9DwMorLCFRsSrCmEgUaOtc26jiRY6pCkzJDPzrAgJXMQ0LtbcEWYrKeM+x5xRQuszIyY78PhdHvkxKeD+mFX00ephPCHtzogyL9mXw+4Os0akJMt0Mzv77T3Fhqe1aQ137brUWVcSw4MakvexW1vQePROdiuGtosG33/+7wfseIRVAHicbZLnl900EMXf3XV9m02A0FvoJIBDCb0l9N6S0CEgyWNbx7LkVVnv/veMX06+oU86OqM7d353Nnub22e7+f/TYg/7yJCjQIkKNbY4wBkc4izO4S7cjXtwHvfiPtyPB/AgHsLDeASP4jE8jgt4Ak/iKTyNZ/AsnsPzuIhLeAEv4iU0uIyX8QpexWu4gtfxBt7EW3gb7+BdvIf38QE+xFVcw0f4GJ/gU3yGz/EFvsRX+Brf4Ft8h+/xA37ET7iOG7iJn/ELfsVv+B1/4E/8hb9xC//gXwhIKLSgTZYC+aJzpiWfGR1iblyv7b5yfRkXHSP5A+GjVoYaYWKhhFVkssFNVLVusU2rfdUJRdK5sRKB63UYizQbJ9o6RDcvIqqhoJPZ+ZgPxGLZbFLgkvVvNpFNtaEuNm4mu/W6H25fc22lOykWT1YNpXITV8bDEIUa3TH5zrilOkoUonZ268ZGac8m23IR3mrbZ5PQhieyYznSaaPtcR69CMPO9Wqu7I0IgUJx5JVrqQxD6jpD+3RKmXFqLAJ7VUMmyZh8pRQqfhZru1p6TZ0SgWpt2VHvxZSr9VM+D85SpYQh2wqfz17bmFGrYyaZcaGjMFoVnkspVssgYhDznLcuNlfOaNu5O2NUx7olbjcdHCUXqdlxKWetYvJUzqzP0WRGTHO9kt8R2+MEFEuuQZWrd31MzFqc5rPgAepdXmthyex3iCdtU6johH/ZnkpLcXF+rFZqDZ3Es72OQ5J3PBWdNpxv1joVDtZdaWQybORwd7dpkuSprZPlXWIJygJHvhNjADYPkzZUcRjSCd9mK/QiDJpMW0sdZVqRlIu2bDNsl4HIsC3eECnsWPTO9YbOyaQNa/UNW1kptSIKyTlwl45kcqcFbxi330ptnUpG+LBlFc9MPIl65jTYY4jFxJbSVPCARsgqkqE1xM3mP2RoMMMAAAB4nGPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGVidNjEwMmiBGJu5mBg5ICw+BjCLzWkX0wGgNCeQze60i8EBwmZmcNmowtgRGLHBoSNiI3OKy0Y1EG8XRwMDI4tDR3JIBEhJJBBs5mFi5NHawfi/dQNL70YmBhcADHYj9AAA) format('woff'),url(data:application/octet-stream;base64,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b250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADkAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAGYAbwBuAHQAZQBsAGwAbwBSAGUAZwB1AGwAYQByAGYAbwBuAHQAZQBsAGwAbwBmAG8AbgB0AGUAbABsAG8AVgBlAHIAcwBpAG8AbgAgADEALgAwAGYAbwBuAHQAZQBsAGwAbwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUABHVzZXIGZm9sZGVyBGxpc3QFbG9naW4DY29nB3R3aXR0ZXILYXJ0aWNsZS1hbHQGY2FuY2VsBGhvbWUIZG93bi1kaXIIZmFjZWJvb2sIYXN0ZXJpc2sGdXBsb2FkCXN0b3B3YXRjaAZleHBvcnQFaGVhcnQEcGx1cwZ1cC1kaXIEbWVudQlsZWZ0LW9wZW4KcmlnaHQtb3BlbgVpbmJveAZ3cmVuY2gHY29tbWVudA1zdGFja292ZXJmbG93CHF1ZXN0aW9uCm9rLWNpcmNsZWQHd2FybmluZwRtYWlsBGxpbmsHa2V5LWludgV0cmFzaAhkb3dubG9hZAdnbGFzc2VzBnFyY29kZQdzaHVmZmxlA2V5ZQRsb2NrBnNlYXJjaARiZWxsBXVzZXJzCGxvY2F0aW9uCWJyaWVmY2FzZQlp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) format('truetype')}[class*=" icon-"]:before,[class^=icon-]:before{font-family:fontello;font-style:normal;font-weight:400;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.icon-user:before{content:'\e800'}.icon-folder:before{content:'\e801'}.icon-list:before{content:'\e802'}.icon-login:before{content:'\e803'}.icon-cog:before{content:'\e804'}.icon-twitter:before{content:'\e805'}.icon-article-alt:before{content:'\e806'}.icon-cancel:before{content:'\e807'}.icon-home:before{content:'\e808'}.icon-down-dir:before{content:'\e809'}.icon-facebook:before{content:'\e80a'}.icon-asterisk:before{content:'\e80b'}.icon-upload:before{content:'\e80c'}.icon-stopwatch:before{content:'\e80d'}.icon-export:before{content:'\e80e'}.icon-heart:before{content:'\e80f'}.icon-plus:before{content:'\e810'}.icon-up-dir:before{content:'\e811'}.icon-menu:before{content:'\e812'}.icon-left-open:before{content:'\e813'}.icon-right-open:before{content:'\e814'}.icon-inbox:before{content:'\e815'}.icon-wrench:before{content:'\e816'}.icon-comment:before{content:'\e817'}.icon-stackoverflow:before{content:'\e818'}.icon-question:before{content:'\e819'}.icon-ok-circled:before{content:'\e81a'}.icon-warning:before{content:'\e81b'}.icon-mail:before{content:'\e81c'}.icon-link:before{content:'\e81d'}.icon-key-inv:before{content:'\e81e'}.icon-trash:before{content:'\e81f'}.icon-download:before{content:'\e820'}.icon-glasses:before{content:'\e821'}.icon-qrcode:before{content:'\e822'}.icon-shuffle:before{content:'\e823'}.icon-eye:before{content:'\e824'}.icon-lock:before{content:'\e825'}.icon-search:before{content:'\e826'}.icon-bell:before{content:'\e827'}.icon-users:before{content:'\e828'}.icon-location:before{content:'\e829'}.icon-briefcase:before{content:'\e82a'}.icon-instagram:before{content:'\e82b'}.icon-clock:before{content:'\e82c'}.icon-phone:before{content:'\e82d'}.icon-calendar:before{content:'\e82e'}.icon-print:before{content:'\e82f'}.icon-edit:before{content:'\e830'}.icon-bold:before{content:'\e831'}.icon-italic:before{content:'\e832'}.icon-rocket:before{content:'\e833'}.icon-whatsapp:before{content:'\e834'}.icon-dot-3:before{content:'\e835'}.icon-info-circled:before{content:'\e836'}.icon-videocam:before{content:'\e837'}.icon-quote-right:before{content:'\e838'}.icon-picture:before{content:'\e839'}.icon-palette:before{content:'\e83a'}.icon-lamp:before{content:'\e83b'}.icon-book-open:before{content:'\e83c'}.icon-ok:before{content:'\e83d'}.icon-chat-alt:before{content:'\e83e'}.icon-archive:before{content:'\e83f'}.icon-play:before{content:'\e840'}.icon-pause:before{content:'\e841'}.icon-down-open:before{content:'\e842'}.icon-up-open:before{content:'\e843'}.icon-minus:before{content:'\e844'}.icon-exchange:before{content:'\e845'}.icon-network:before{content:'\e846'}.icon-link-ext:before{content:'\f08e'}.icon-github-circled:before{content:'\f09b'}.icon-filter:before{content:'\f0b0'}.icon-docs:before{content:'\f0c5'}.icon-list-bullet:before{content:'\f0ca'}.icon-list-numbered:before{content:'\f0cb'}.icon-underline:before{content:'\f0cd'}.icon-sort:before{content:'\f0dc'}.icon-linkedin:before{content:'\f0e1'}.icon-smile:before{content:'\f118'}.icon-keyboard:before{content:'\f11c'}.icon-code:before{content:'\f121'}.icon-shield:before{content:'\f132'}.icon-bitbucket:before{content:'\f171'}.icon-windows:before{content:'\f17a'}.icon-wheelchair:before{content:'\f193'}.icon-bank:before{content:'\f19c'}.icon-google:before{content:'\f1a0'}.icon-building-filled:before{content:'\f1ad'}.icon-database:before{content:'\f1c0'}.icon-lifebuoy:before{content:'\f1cd'}.icon-header:before{content:'\f1dc'}.icon-binoculars:before{content:'\f1e5'}.icon-chart-area:before{content:'\f1fe'}.icon-pinterest:before{content:'\f231'}.icon-medium:before{content:'\f23a'}.icon-gitlab:before{content:'\f296'}.icon-telegram:before{content:'\f2c6'}.datalist-polyfill{list-style:none;display:none;background:#fff;box-shadow:0 2px 2px #999;position:absolute;left:0;top:0;margin:0;padding:0;max-height:300px;overflow-y:auto}.datalist-polyfill:empty{display:none!important}.datalist-polyfill>li{padding:3px;font:13px "Lucida Grande",Sans-Serif}.datalist-polyfill__active{background:#3875d7;color:#fff}date-input-polyfill{z-index:1000!important;max-width:320px!important;width:320px!important}date-input-polyfill .monthSelect-wrapper,date-input-polyfill .yearSelect-wrapper{height:50px;line-height:50px;padding:0;width:40%!important;margin-bottom:10px!important}date-input-polyfill .monthSelect-wrapper select,date-input-polyfill .yearSelect-wrapper select{padding:0 12px;height:50px;line-height:50px;box-sizing:border-box}date-input-polyfill .yearSelect-wrapper{width:35%!important}date-input-polyfill table{width:100%!important;max-width:100%!important;padding:0 12px 12px 12px!important;box-sizing:border-box;margin:0}date-input-polyfill table td:first-child,date-input-polyfill table td:last-child,date-input-polyfill table th:first-child,date-input-polyfill table th:last-child{width:32px!important;padding:4px!important}date-input-polyfill select{margin-bottom:10px}date-input-polyfill button{width:25%!important;height:50px!important;line-height:50px!important;margin-bottom:10px!important;background:inherit;position:relative;color:inherit;padding:inherit;box-sizing:inherit;border-radius:inherit;font-size:inherit;box-shadow:none;border:none;border-bottom:none!important}::placeholder{color:#868686;text-align:left}::-webkit-input-placeholder{text-align:left}input:-moz-placeholder{text-align:left}.button,button{display:inline-block;background:#f02e65;border-radius:26px;border:none;color:#fff;height:52px;line-height:52px;padding:0 25px;cursor:pointer;font-size:16px;box-sizing:border-box;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.button:focus,.button:hover,button:focus,button:hover{background:#c52653;border-bottom:none}.button.fly,button.fly{position:fixed;z-index:2;bottom:30px;right:30px}.button.fill,button.fill{display:block;width:100%;text-align:center;padding:0 10px!important}.button.fill-aligned,button.fill-aligned{display:block;width:100%;text-align:left;padding:0 20px!important}.button.icon,button.icon{padding-right:30px!important}.button.icon-reduce,button.icon-reduce{padding-left:15px!important}.button.reverse,button.reverse{background:0 0;height:50px;line-height:48px;padding:0 23px;color:#f02e65;border:solid 2px #f02e65}.button.reverse:focus,.button.reverse:hover,button.reverse:focus,button.reverse:hover{color:#c52653;border-color:#c52653}.button.round,button.round{width:52px;padding:0}.button.round.small,button.round.small{font-size:12px;width:30px;height:30px;line-height:30px}.button.white,button.white{background:#fff;color:#f02e65}.button.white.reverse,button.white.reverse{color:#fff;background:0 0;border:solid 2px #fff}.button.trans,button.trans{background:0 0!important}.button.trans.reverse,button.trans.reverse{background:0 0!important}.button.success,button.success{background:#1bbf61}.button.success.reverse,button.success.reverse{color:#1bbf61;background:#fff;border:solid 2px #1bbf61}.button.danger,button.danger{background:#f53d3d}.button.danger.reverse,button.danger.reverse{color:#f53d3d;background:#fff;border:solid 2px #f53d3d}.button .disabled,.button.disabled,.button:disabled,button .disabled,button.disabled,button:disabled{background:#818181;cursor:default}.button.link,button.link{background:0 0;border-radius:0;color:#1e849e;height:auto;line-height:normal;padding:0;padding-right:0!important}.button.link:hover,button.link:hover{border-bottom:dotted 1px #1e849e}.button.link:focus,button.link:focus{box-shadow:inherit}.button.strip,button.strip{background:0 0;height:auto;line-height:16px;color:inherit;padding:0 5px}.button.facebook,button.facebook{color:#fff!important;background:#4070b4!important}.button.twitter,button.twitter{color:#fff!important;background:#56c2ea!important}.button.linkedin,button.linkedin{color:#fff!important;background:#0076b5!important}.button.github,button.github{color:#fff!important;background:#7e7c7c!important}.button:focus,button:focus{outline:0}label{margin-bottom:15px;display:block;line-height:normal}.input,input[type=date],input[type=datetime-local],input[type=email],input[type=file],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px}.input[type=file],input[type=date][type=file],input[type=datetime-local][type=file],input[type=email][type=file],input[type=file][type=file],input[type=number][type=file],input[type=password][type=file],input[type=search][type=file],input[type=tel][type=file],input[type=text][type=file],input[type=url][type=file],select[type=file],textarea[type=file]{line-height:0;padding:15px;height:auto}.input[xtype=file],input[type=date][xtype=file],input[type=datetime-local][xtype=file],input[type=email][xtype=file],input[type=file][xtype=file],input[type=number][xtype=file],input[type=password][xtype=file],input[type=search][xtype=file],input[type=tel][xtype=file],input[type=text][xtype=file],input[type=url][xtype=file],select[xtype=file],textarea[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;left:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.input[xtype=file]:disabled,input[type=date][xtype=file]:disabled,input[type=datetime-local][xtype=file]:disabled,input[type=email][xtype=file]:disabled,input[type=file][xtype=file]:disabled,input[type=number][xtype=file]:disabled,input[type=password][xtype=file]:disabled,input[type=search][xtype=file]:disabled,input[type=tel][xtype=file]:disabled,input[type=text][xtype=file]:disabled,input[type=url][xtype=file]:disabled,select[xtype=file]:disabled,textarea[xtype=file]:disabled{opacity:0!important}.input:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=file]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{outline:0;border-color:#b3d7fd}.input:disabled,input[type=date]:disabled,input[type=datetime-local]:disabled,input[type=email]:disabled,input[type=file]:disabled,input[type=number]:disabled,input[type=password]:disabled,input[type=search]:disabled,input[type=tel]:disabled,input[type=text]:disabled,input[type=url]:disabled,select:disabled,textarea:disabled{background:#f1f3f5}.input.strip,input[type=date].strip,input[type=datetime-local].strip,input[type=email].strip,input[type=file].strip,input[type=number].strip,input[type=password].strip,input[type=search].strip,input[type=tel].strip,input[type=text].strip,input[type=url].strip,select.strip,textarea.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:right 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.input.strip:focus,input[type=date].strip:focus,input[type=datetime-local].strip:focus,input[type=email].strip:focus,input[type=file].strip:focus,input[type=number].strip:focus,input[type=password].strip:focus,input[type=search].strip:focus,input[type=tel].strip:focus,input[type=text].strip:focus,input[type=url].strip:focus,select.strip:focus,textarea.strip:focus{border-color:#b3d7fd}input[type=email],input[type=url]{direction:ltr}input[type=email]::placeholder,input[type=url]::placeholder{text-align:left;direction:ltr}select{background:0 0;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,");background-position:right 15px top 50%;background-repeat:no-repeat;background-color:#fff;width:calc(100% - 62px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:45px}select:-webkit-autofill{background-image:url("data:image/svg+xml;utf8,")!important;background-position:100% 50%!important;background-repeat:no-repeat!important}input[type=search],input[type=search].strip{background:0 0;-webkit-appearance:none;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAdZJREFUWIXt1s2LjWEYBvDfnDMzFpNIamZIFrMiJYMyFmKhZKfOwoiFr2LFn2BByG6WVrKwMcjWxgoLIlKIUk6RrzAjZWZ8LO731FlwvB+PUbjq6X0X7/VeV/d9P9fz8IdRL8Hpw3x8w0xaOz9GNxq4gJeZcGs1cRab0fU7xLfgMSYzoT3YgNXYhIO4iM+4iTWphGs4jikcFSXvhEGczr4/UFW8C2N4jXUFudvwCYeqGNgnSr6yJH8rpkWLCqMfE9hdUryFE3iC3qLEk7ij+kT34Q32FiHV8Qr7K4q3cArXihCGxd5elMjARnzBvE4f1dreV+AtnicycC/7/7K8BhaIvqXCO3zFwrwGZtCT0EAtW9N5DTSxWGR/CizNns/yEgbFEK5NZGCnaEPHE7e9Ai9wA6OJDIzistgJubFdxHB/RfFVYgCHixJruI5x5dNwDm6J47sUhkTvjpUw0Y1zeOrXR3hHjOA9zmBuTs4Arog4/yhuUZWwHPdFMh7280BZgiP4ILJ/UuymqRQmejPxphiquzgvKnMJDzOxB9glZqiRiecykbfHdawX98EhcdxO4BGu4nYm2EJDzEKPSMIdYrBnFYUq8d/EP2di1gey3cS4ErflvxffASbhcakIINaMAAAAAElFTkSuQmCC);background-position:left 15px top 50%;background-repeat:no-repeat;background-size:20px 20px;width:calc(100% - 60px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:45px}select[multiple]{min-height:75px;padding:5px 10px!important;padding-right:50px!important}select[multiple] option{padding:10px 4px;border-bottom:solid 1px #f1f1f1}select[multiple] option:last-child{border-bottom:none}textarea{min-height:75px;resize:vertical;line-height:32px;padding:5px 15px}textarea.tall{min-height:180px}fieldset{border:none;margin:0;padding:0}.counter{font-size:13px;float:right;margin-top:-20px}.file-preview{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAIElEQVQoU2NkYGAwZsAEZ9GFGIeIQix+wfQgyDODXSEAcUwGCrDSHgkAAAAASUVORK5CYII=)!important;border:solid 1px #e2e2e2;box-shadow:inset 0 0 3px #a0a0a0;border-radius:8px;width:calc(100% - 2px);max-height:180px;visibility:visible!important}.video-preview{padding-top:56%;position:relative;border-radius:10px;background:#e7e7e7;overflow:hidden;margin:0}.video-preview iframe{position:absolute;top:0;width:100%;height:100%;border:none}.map-preview{padding-top:50%;position:relative;margin-bottom:10px;border-radius:10px;background:#e7e7e7;overflow:hidden;box-shadow:0 0 30px rgba(218,218,218,.5)}.map-preview iframe{position:absolute;top:0;width:100%;height:100%;border:none}.tooltip{position:relative}.tooltip.large:hover:after{white-space:normal;width:280px}.tooltip:hover:after{white-space:nowrap;background:#333;border-radius:5px;bottom:26px;color:#fff;content:attr(data-tooltip);padding:5px 15px;position:absolute;font-size:13px;line-height:20px;z-index:98;left:20%;margin-left:-30px}.tooltip:hover:before{border:solid;border-color:#333 transparent;border-width:6px 6px 0 6px;bottom:20px;content:"";position:absolute;z-index:99;left:5px}.tooltip.down:hover:after{top:26px;bottom:inherit}.tooltip.down:hover:before{top:20px;border-width:0 6px 6px 6px;bottom:inherit}.tag{display:inline-block;background:#e7e7e7;color:#868686;border-radius:12px;line-height:24px;padding:0 8px;font-size:12px;box-shadow:none!important;border:none;height:auto;width:auto;white-space:nowrap;text-overflow:ellipsis}.tag:hover{border:none}.tag.green{background:#1bbf61;color:#fff}.tag.red{background:#f53d3d;color:#fff}.tag.yellow{background:#ffe28b;color:#494949}.tag.focus{background:#f02e65;color:#fff}.tag.dark{background:#6f6f6f;color:#e7e7e7}.tag.blue{background:#4abde8;color:#fff}.tag.link{background:#1e849e;color:#fff}input[type=checkbox]{width:26px;height:16px;position:relative;-webkit-appearance:none;border-radius:0;border:none;background:0 0;vertical-align:middle}input[type=checkbox]:after{content:"";display:block;width:20px;height:20px;background:#fff;top:-5px;border-radius:50%;position:absolute;border:solid 3px #f02e65;vertical-align:middle}input[type=checkbox]:checked:after{text-align:center;font-family:fontello;content:'\e83d';font-size:16px;line-height:20px;color:#fff;background:#f02e65}input[type=checkbox]:focus{outline:0}input[type=checkbox]:focus:after,input[type=checkbox]:hover:after{outline:0;border-color:#000}input[type=checkbox]:checked:focus:after,input[type=checkbox]:checked:hover:after{border-color:#f02e65}.input-copy{position:relative}.input-copy input,.input-copy textarea{padding-right:65px;width:calc(100% - 82px);resize:none}.input-copy .copy{position:absolute;top:0;right:0;border-left:solid 1px #e2e2e2;height:calc(100% - 2px);width:50px;line-height:50px;text-align:center;background:#fbfbfb;margin:1px;border-radius:0 10px 10px 0}.paging{color:#8d8e8e;padding:5px 15px;font-size:12px}.paging form{display:inline-block}.blue-snap iframe{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px;float:none!important;height:40px!important;width:calc(100% - 32px)!important;border:solid 1px #e2e2e2!important;background:0 0!important;position:static!important}.blue-snap iframe[type=file]{line-height:0;padding:15px;height:auto}.blue-snap iframe[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;left:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.blue-snap iframe[xtype=file]:disabled{opacity:0!important}.blue-snap iframe:focus{outline:0;border-color:#b3d7fd}.blue-snap iframe:disabled{background:#f1f3f5}.blue-snap iframe.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:right 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.blue-snap iframe.strip:focus{border-color:#b3d7fd}.blue-snap .error{font-size:12px;margin-top:-25px;color:#f53d3d;height:40px;padding-left:2px}.pell{height:auto;padding-bottom:0;margin-bottom:0;padding-top:0;background:#fff;line-height:normal!important}.pell.hide{padding:0!important;height:1px;min-height:1px;max-height:1px;border:none;box-shadow:none;margin-bottom:20px;opacity:0}.pell [contenteditable=true]:empty:before{content:attr(placeholder);display:block;color:#868686}.pell .pell-actionbar{border-bottom:solid 1px #e7e7e7;margin:0 -15px 15px -15px;padding:10px 15px}.pell .pell-content{min-height:100px;display:block;padding:10px;margin:-10px;cursor:text}.pell .pell-content:focus{outline:0}.pell button{background:inherit;color:inherit;margin:0;padding:0;padding-right:15px;height:40px;line-height:40px;box-shadow:none;cursor:pointer;font-size:13px;border-radius:0}.pell button.pell-button-selected,.pell button:focus,.pell button:hover{color:#1e849e}.pell h1,.pell h2,.pell h3,.pell h4,.pell h5,.pell h6{text-align:inherit;margin-bottom:30px}.pell b,.pell strong{font-weight:700}.pell ol,.pell ul{margin:0 0 20px 0}.pell ol li,.pell ul li{display:list-item!important;list-style:inherit;margin-bottom:10px}.pell ol li p,.pell ul li p{margin:0}.pell ul li{margin:0 20px;display:list-item}label.switch{line-height:42px}input[type=checkbox].switch{width:67px;height:42px;line-height:42px;border-radius:21px;background:#818181;display:block;margin:0;padding:5px;padding-left:30px;padding-right:5px}input[type=checkbox].switch:checked{background:#f02e65;padding-left:5px;padding-right:30px}input[type=checkbox].switch:focus:after,input[type=checkbox].switch:hover:after{background:#fff}input[type=checkbox].switch:after{content:"";display:block;width:32px;height:32px;background:#fff;border-radius:50%;border:none;position:static;top:0}.password-meter{margin:-41px 10px 30px 10px;height:2px;background:0 0;max-width:100%;z-index:2;position:relative}.password-meter.weak{background:#f53d3d}.password-meter.medium{background:#ffed4d}.password-meter.strong{background:#1bbf61}.color-input:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.color-input .color-preview{width:53px;height:53px;float:left;margin-right:10px;background:#000;border-radius:10px;box-shadow:inset 0 0 3px #a0a0a0;position:relative}.color-input .color-preview input{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;cursor:pointer}.color-input input{text-transform:uppercase;float:left;width:calc(100% - 95px)}.grecaptcha-badge{box-shadow:none!important;border-radius:10px!important;overflow:hidden!important;background:#4d92df!important;bottom:25px}.grecaptcha-badge:hover{width:256px!important}.back{font-size:15px;line-height:24px;height:24px;margin-left:-15px;margin-top:-25px;margin-bottom:20px}hr{height:1px;background:#eceff1;border:none}.upload{position:relative}.upload:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.upload input{position:absolute;top:0;left:0;opacity:0;cursor:pointer}.upload.single .preview{height:0;position:relative;padding-top:100%;width:100%;margin-bottom:15px!important}.upload.single .preview li{position:absolute;top:0;width:calc(100% - 20px);height:calc(100% - 20px);margin-right:0!important;margin-bottom:0!important}.upload .button{float:left;margin-right:20px!important}.upload .button.disabled,.upload .button.disabled:hover{background:0 0;color:inherit;border-color:inherit}.upload .count{float:left;line-height:52px}.upload .progress{background:#1bbf61;height:6px;border-radius:3px;margin-bottom:15px!important}.upload .preview:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.upload .preview li{float:left;margin-right:20px!important;margin-bottom:15px!important;background:#f1f1f1;width:150px;height:150px;line-height:148px;text-align:center;border-radius:20px;overflow:hidden;position:relative;cursor:pointer;border:solid 10px #f1f1f1}.upload .preview li:hover:before{background:#f02e65}.upload .preview li:before{content:'\e807';font-family:fontello;font-size:12px;position:absolute;width:20px;height:20px;display:block;top:5px;right:5px;text-align:center;line-height:20px;vertical-align:middle;border-radius:50%;background:#484848;color:#fff;z-index:1}.upload .preview li img{vertical-align:middle;max-height:150px;max-width:150px;-webkit-filter:drop-shadow(0 0 6px rgba(0, 0, 0, .3));filter:drop-shadow(0 0 1px rgba(0, 0, 0, .3))}.upload.wide .preview li{height:0;width:100%;position:relative;padding-top:30.547%;background:#e7e7e7;border-radius:10px;overflow:hidden;border:solid 1px #f9f9f9;margin:0}.upload.wide .preview li img{border-radius:10px;position:absolute;top:0;width:100%;display:block;opacity:1;max-width:inherit;max-height:inherit}ol{list-style:none;counter-reset:x-counter;padding:0}ol li{counter-increment:x-counter;line-height:30px;margin-bottom:30px;margin-left:45px}ol li::before{display:inline-block;content:counter(x-counter);color:#f02e65;color:#fff;background:#fff;background:#f02e65;border:solid 2px #f02e65;margin-right:15px;margin-left:-45px;width:26px;height:26px;border-radius:50%;text-align:center;line-height:26px}.required{color:#f53d3d;font-size:8px;position:relative;top:-8px}.drop-list{position:relative;outline:0}.drop-list.open ul{display:block}.drop-list ul{position:relative;background:#fff;border-radius:10px;box-shadow:0 0 3px rgba(0,0,0,.05);padding:30px;display:block;border-bottom:none;box-shadow:0 0 6px rgba(0,0,0,.1);display:none;position:absolute;bottom:calc(100% + 10px);z-index:2;padding:0;left:-10px;max-width:280px;min-width:240px;overflow:hidden}.drop-list ul.padding-small{padding:15px}.drop-list ul.y-scroll{overflow-y:auto}.drop-list ul.danger{background:#f53d3d;color:#fff}.drop-list ul.focus{background:#f02e65;color:#fff}.drop-list ul.focus .button,.drop-list ul.focus button{background:#fff;color:#f02e65}.drop-list ul.warning{background:#ffed4d;color:#2d2d2d}.drop-list ul.warning .button,.drop-list ul.warning button{background:rgba(45,45,45,.8);color:#ffed4d}.drop-list ul>footer{margin:30px -30px -30px -30px;padding:15px 30px;background:#f5f5f5;border:solid 1px #eaeaea;border-radius:0 0 10px 10px}.drop-list ul hr{height:2px;background:#eceff1;border:none;margin:30px -30px}.drop-list ul .header{position:static;height:40px;padding:20px 30px 20px 30px;margin-bottom:30px;margin:-30px -30px 20px -30px;background:#f9f9f9;border-bottom:solid 1px #efefef}.drop-list ul .toggle{position:relative;border-top:2px solid #f6f7f8;border-bottom:2px solid #f6f7f8;margin:0 -30px;padding:30px;height:35px;overflow:hidden}.drop-list ul .toggle button.ls-ui-open{position:absolute;top:0;left:0;width:100%;height:95px;background:0 0;opacity:.5;border-radius:0}.drop-list ul .toggle .icon-minus{display:none}.drop-list ul .toggle .content{display:none}.drop-list ul .toggle.open{height:auto}.drop-list ul .toggle.open .icon-minus{display:block}.drop-list ul .toggle.open .icon-plus{display:none}.drop-list ul .toggle.open .content{display:block}.drop-list ul .list li{border-bottom:solid 2px #f6f7f8;margin:0 -30px 30px -30px;padding:0 30px 30px 30px}.drop-list ul .list li:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.drop-list ul.new{text-align:center}.drop-list ul.new i{font-size:80px;line-height:80px;font-family:Poppins,sans-serif;font-style:normal;font-weight:300}.drop-list ul.new b{margin-top:20px;display:block}.drop-list ul:before{border:solid;border-color:#fff transparent;border-width:8px 8px 0 8px;bottom:-8px;content:"";position:absolute;z-index:99;left:30px}.drop-list ul li{border-bottom:solid 1px #f1f3f5;margin:0;padding:0}.drop-list ul li:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.drop-list ul li .link,.drop-list ul li a{vertical-align:middle;height:30px;line-height:30px;display:block;padding:10px 25px;color:inherit;font-size:14px;border:none;max-width:260px;cursor:pointer}.drop-list ul li .link:hover,.drop-list ul li a:hover{background:#f1f3f5;border-color:transparent}.drop-list ul li.disabled .link:hover,.drop-list ul li.disabled a:hover{background:0 0}.drop-list ul li .avatar{width:30px;height:30px;margin-right:10px;float:left}.drop-list ul li:last-child{border-bottom:none}.drop-list.bottom ul{bottom:auto;margin-top:-2px}.drop-list.bottom ul:before{bottom:auto;top:-8px;border-width:0 8px 8px 8px}.disabled{opacity:.2;cursor:default}.disabled .button,.disabled .link,.disabled a,.disabled button{cursor:default!important}.disabled .button:hover,.disabled .link:hover,.disabled a:hover,.disabled button:hover{background:0 0}.tags{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px;background:#fff;min-height:42px;height:auto}.tags[type=file]{line-height:0;padding:15px;height:auto}.tags[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;left:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.tags[xtype=file]:disabled{opacity:0!important}.tags:focus{outline:0;border-color:#b3d7fd}.tags:disabled{background:#f1f3f5}.tags.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:right 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.tags.strip:focus{border-color:#b3d7fd}.tags .add{display:inline-block!important;border:none;padding:0;width:auto;margin:0}.tags ul.tags-list{display:inline}.tags ul.tags-list li{display:inline-block!important;margin-right:10px;font-size:16px;padding:5px 10px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tags ul.tags-list li::before{float:right;content:'\e807';font-family:fontello;font-style:normal;display:inline-block;text-align:center;line-height:16px;width:16px;height:16px;font-size:12px;background:#000;color:#fff;border-radius:50%;margin-top:4px;margin-bottom:4px;margin-left:6px;margin-right:0}.console{height:100%;width:100%;padding:0}.console body{position:relative;height:calc(100% - 70px);width:calc(100% - 320px);padding-top:70px;padding-bottom:0;padding-right:50px;padding-left:270px;margin:0;color:#4b4b4b;background:#eceff1}.console body .project-only{display:none!important}.console body.show-nav .project-only{display:inline-block!important}.console body.hide-nav .console-back{display:block}.console body.hide-nav .account{display:none}.console body.index .console-back{display:none}.console body.index .account{display:block}.console body .console-back{display:none}.console body:before{content:'';display:block;position:absolute;width:calc(100% - 220px);height:100px;top:-100px;left:0;right:0;background:#fff;z-index:1000;border-left:solid 220px #132a3b}.console header{position:fixed;top:0;width:calc(100% - 280px);height:40px;line-height:40px;padding:15px 30px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.1);margin:0 -50px;z-index:2;font-size:14px}.console header .setup-new{width:40px;height:40px;line-height:40px}.console header .list{width:240px}.console header .list select{height:40px;line-height:40px;padding-top:0;padding-bottom:0;border:none;border-radius:26px;background-color:#ececec;color:#868686}.console header .account{margin-left:25px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.console header .account:hover{border-bottom:none}.console header .avatar{height:40px;width:40px}.console header .notifications{position:relative;font-size:20px}.console header .notifications a{color:#1b3445}.console header .notifications:after{position:absolute;content:"";display:block;background:#f53d3d;width:8px;height:8px;border-radius:50%;top:3px;right:3px}.console header nav{background:#1b3445;background:linear-gradient(#132a3b,#302839);background:linear-gradient(#143650,#302839);color:#788c99;position:fixed;height:100%;width:220px;top:0;left:0}.console header nav .logo{height:39px;padding:15px 20px;display:block;border-bottom:none}.console header nav .logo:hover{border-bottom:none}.console header nav .logo img{display:inline-block;margin-top:9px;width:75%}.console header nav .logo svg g{fill:#f02e65}.console header nav .icon{display:block;border:none;margin:18px 10px 50px 10px}.console header nav .icon img{display:block}.console header nav .icon:hover{border-bottom:none}.console header nav .icon:hover svg g{fill:#f02e65}.console header nav .container{overflow:scroll;height:calc(100% - 183px);padding-bottom:50px;width:100%}.console header nav .project-box{padding:20px;text-align:center;display:block;border:none;line-height:100px;height:100px}.console header nav .project-box img{max-height:80px;max-width:80%;display:inline-block;vertical-align:middle}.console header nav .project{display:block;padding:85px 25px 20px 25px;color:#788c99;position:relative;border:none;height:20px}.console header nav .project:hover{border-bottom:none}.console header nav .project .name{height:20px;line-height:20px;margin:0;padding:0;display:inline-block;max-width:100%}.console header nav .project .arrow{display:block;position:absolute;right:5px;top:10px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #788c99;transform:rotate(225deg)}.console header nav .project img{position:absolute;bottom:40px;display:block;margin-bottom:10px;max-height:35px;max-width:40%}.console header nav .subtitle{padding:0 30px 5px 30px;display:block;font-size:12px;font-weight:300}.console header nav .links{margin-bottom:15px!important}.console header nav .links.top{border:none;padding-bottom:0;margin-bottom:5px!important}.console header nav .links.bottom{position:absolute;bottom:0;left:0;right:0;padding-bottom:0;border:none;margin-bottom:0!important}.console header nav .links.bottom a{border-top:solid 1px #2a253a;border-bottom:none}.console header nav .links .sub{display:inline-block;border:none;width:25px;height:25px;line-height:25px;border-radius:50%;padding:0;background:#f02e65;color:#fff;text-align:center;font-size:12px;margin:18px}.console header nav .links .sub i{width:auto;margin:0}.console header nav .links .sub:hover{border:none}.console header nav .links a{padding:12px 20px;border:none;display:block;color:#87a5b9;font-weight:400;border-left:solid 5px transparent}.console header nav .links a i{margin-right:8px;width:22px;display:inline-block}.console header nav .links a.selected,.console header nav .links a:hover{color:#e4e4e4;font-weight:500}.console header nav:after{content:'';display:block;position:absolute;background:#302839;height:100px;width:100%;bottom:-100px}.console>footer{width:calc(100% + 100px);margin:0 -50px;box-sizing:border-box;background:0 0;padding-right:30px;padding-left:30px}.console>footer ul{float:none;text-align:center}.console>footer ul li{float:none;display:inline-block}.console .projects{position:relative}.console .projects:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.console .projects li{float:left;margin-right:50px;margin-bottom:50px;width:270px}.console .projects li.new,.console .projects li:nth-child(3n){margin-right:0}.console .dashboard{padding:20px;min-height:95px;overflow:hidden;position:relative;z-index:1}.console .dashboard hr{margin:20px -20px}.console .dashboard footer{margin:-20px;padding:20px;background:#fcfeff;border:none;color:#1e849e}.console .dashboard .col{position:relative}.console .dashboard .col:last-child:after{display:none}.console .dashboard .col:after{content:"";display:block;width:2px;background:#eceff1;height:calc(100% + 110px);position:absolute;top:-20px;bottom:-20px;right:24px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.console .dashboard .col:after{width:calc(100% + 40px);height:3px;position:static;margin:20px -20px}}.console .dashboard .value{color:#f02e65;vertical-align:bottom;line-height:55px}.console .dashboard .value .sum{font-size:55px;line-height:55px;font-weight:700;vertical-align:bottom}.console .dashboard .unit{font-weight:500;line-height:20px;vertical-align:bottom;font-size:16px;display:inline-block;margin-bottom:5px;margin-left:5px;color:#f02e65}.console .dashboard .metric{color:#f02e65;font-weight:400;font-size:13px;line-height:16px}.console .dashboard .range{color:#818181;font-weight:400;font-size:14px;line-height:16px}.console .dashboard a{display:block;font-weight:400;font-size:14px;line-height:16px;padding:0;border:none}.console .dashboard .chart-metric{width:19%}@media only screen and (min-width:551px) and (max-width:970px),only screen and (max-width:550px){.console .dashboard .chart-metric{width:100%}}.console .dashboard .chart{width:80%;position:relative;height:0;padding-top:20px;padding-bottom:26%;margin-right:-2px;overflow:hidden;background-color:#fff;background-image:linear-gradient(transparent 1px,transparent 1px),linear-gradient(90deg,transparent 1px,transparent 1px),linear-gradient(#f1f1f1 1px,transparent 1px),linear-gradient(90deg,#f1f1f1 1px,transparent 1px);background-size:100px 100px,100px 100px,20px 20px,20px 20px;background-position:-2px -2px,-2px -2px,-1px -1px,-1px -1px;background-repeat:round;border:solid 1px #f1f1f1;border-right:solid 1px transparent;border-bottom:solid 1px transparent}@media only screen and (min-width:551px) and (max-width:970px),only screen and (max-width:550px){.console .dashboard .chart{width:100%;float:none;margin-bottom:20px}}.console .dashboard .chart canvas{position:absolute;bottom:0;display:block;height:100%;width:100%}.console .link-list li{margin-bottom:15px}.console .link-list i{display:inline-block;width:30px;height:30px;line-height:30px;text-align:center;background:#818181;color:#f1f3f5;border-radius:50%;margin-right:15px}.console .link-list i.fade{background:0 0;color:#818181}.console .provider{width:50px;height:50px;background:#f5f5f5;color:#868686;line-height:50px;text-align:center;font-size:25px;border-radius:50%}.console .provider.facebook{color:#fff;background:#3b5998}.console .provider.twitter{color:#fff;background:#55beff}.console .provider.telegram{color:#fff;background:#3ba9e1}.console .provider.github{color:#fff;background:#24292e}.console .provider.whatsapp{color:#fff;background:#25d366}.console .provider.linkedin{color:#fff;background:#1074af}.console .provider.microsoft{color:#fff;background:#137ad4}.console .provider.google{color:#fff;background:#4489f1}.console .provider.bitbucket{color:#fff;background:#2a88fb}.console .provider.gitlab{color:#faa238;background:#30353e}.console .provider.instagram{color:#fff;background:radial-gradient(circle at 30% 107%,#fdf497 0,#fdf497 5%,#fd5949 45%,#d6249f 60%,#285aeb 90%)}.console .premium{z-index:3;margin-top:320px}.console .premium .message{height:190px;overflow:hidden;position:absolute;top:-280px}.console .premium:after{content:'';position:absolute;top:0;left:-20px;right:-20px;bottom:-20px;background:#f6f7f8;opacity:.7;z-index:300}.console .app-section{height:90px}.console .confirm{background:#1e849e;color:#fff;border-radius:25px;padding:12px;line-height:28px;text-align:center}.console .confirm .action{font-weight:500;cursor:pointer}.console .platforms{overflow:hidden}.console .platforms .box{overflow:hidden}.console .platforms .box img{width:50px;margin:0 auto;margin-bottom:20px}.console .platforms .box .cover{margin:-30px -30px 30px -30px;padding:30px}.console .platforms .box .cover.android{background:#a4ca24}.console .platforms .box .cover.android h1{color:#fff;font-size:18px;margin-top:20px}.console .platforms .col{text-align:center;line-height:30px}.console .platforms a{display:block;margin:-20px;padding:20px}.console .platforms a:hover{background:#fbfeff}.console .platforms img{display:block;margin:0 30px;width:calc(100% - 60px);border-radius:50%;margin-bottom:20px}.dev-feature{display:none}.prod-feature{display:none}.development .dev-feature{display:block;opacity:.6!important;outline:solid #ff0 3px;outline-offset:3px}.development .dev-feature.dev-inline{display:inline-block}.development .prod-feature{display:none}.production .dev-feature{display:none}.production .prod-feature{display:block}.search{opacity:1!important}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.search button{margin-top:20px}}html.home body{padding:0 50px}html.home .logo img{max-height:35px;margin:45px 25px 25px 25px}.alerts ul{width:100%;visibility:hidden;position:fixed;padding:0;right:0;left:0;color:#fff;z-index:1002;margin:0 auto;bottom:15px;max-width:650px;opacity:.9}.alerts ul li{margin:1px 0 0 0;padding:0}.alerts ul li div.message{position:relative;padding:12px 35px;margin:0 auto;list-style:none;background:#818181;text-align:center;font-weight:700;border-radius:20px;line-height:16px;min-height:16px}.alerts ul li div.message i{cursor:pointer;position:absolute;font-size:22px;top:8px;left:8px}.alerts ul li div.message.error{color:#fff;background:#f53d3d}.alerts ul li div.message.success{color:#fff;background:#1bbf61}.alerts ul li div.message.warning{color:#fff;background:#ffed4d}.alerts ul li div.message.open{display:block}.alerts ul li div.message.close{display:none}.alerts .cookie-alert{background:#fff2f6!important;color:#f02e65}.alerts .cookie-alert a{color:#f02e65;font-weight:400;border-bottom:dotted 1px #f02e65}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.alerts ul{top:auto;bottom:0;max-width:100%}.alerts ul li{margin:5px 0 0 0}.alerts ul li div.message{border-radius:0}}article{overflow-wrap:break-word;word-wrap:break-word}article h1{font-size:36px}article h2{font-size:24px}article h3{font-size:20px}article h4{font-size:20px}article h5{font-size:18px}article h6{font-size:16px}article h1,article h2,article h3,article h4,article h5,article h6{margin-top:30px!important;margin-bottom:30px!important}article p{line-height:32px;font-size:17px}article .update{display:block;margin-top:50px!important}article table{width:100%;margin:0;margin-bottom:30px!important;border-radius:0;border-bottom:solid 1px #e7e7e7}article table thead td{font-weight:500;padding:5px 15px}article table td,article table th{padding:15px;height:auto}article table td:first-child,article table th:first-child{padding-left:10px}article table td:last-child,article table th:last-child{padding-right:10px}article table td p,article table th p{font-size:inherit;line-height:inherit}article table td p:last-child,article table th p:last-child{margin:0}.avatar{width:60px;height:60px;border-radius:50%;background:#ddd;display:inline-block;overflow:hidden;box-shadow:0 0 6px rgba(0,0,0,.09);position:relative;z-index:1;opacity:1!important}.avatar:before{content:"";position:absolute;width:100%;height:100%;z-index:0;background:#ddd}.avatar.inline{display:inline-block;vertical-align:middle}.avatar.trans{background:0 0}.avatar.xs{width:20px;height:20px}.avatar.small{width:50px;height:50px}.avatar.big{width:100px;height:100px}.avatar.huge{width:150px;height:150px}.box{position:relative;background:#fff;border-radius:10px;box-shadow:0 0 3px rgba(0,0,0,.05);padding:30px;display:block;border-bottom:none}.box.padding-small{padding:15px}.box.y-scroll{overflow-y:auto}.box.danger{background:#f53d3d;color:#fff}.box.focus{background:#f02e65;color:#fff}.box.focus .button,.box.focus button{background:#fff;color:#f02e65}.box.warning{background:#ffed4d;color:#2d2d2d}.box.warning .button,.box.warning button{background:rgba(45,45,45,.8);color:#ffed4d}.box>footer{margin:30px -30px -30px -30px;padding:15px 30px;background:#f5f5f5;border:solid 1px #eaeaea;border-radius:0 0 10px 10px}.box hr{height:2px;background:#eceff1;border:none;margin:30px -30px}.box .header{position:static;height:40px;padding:20px 30px 20px 30px;margin-bottom:30px;margin:-30px -30px 20px -30px;background:#f9f9f9;border-bottom:solid 1px #efefef}.box .toggle{position:relative;border-top:2px solid #f6f7f8;border-bottom:2px solid #f6f7f8;margin:0 -30px;padding:30px;height:35px;overflow:hidden}.box .toggle button.ls-ui-open{position:absolute;top:0;left:0;width:100%;height:95px;background:0 0;opacity:.5;border-radius:0}.box .toggle .icon-minus{display:none}.box .toggle .content{display:none}.box .toggle.open{height:auto}.box .toggle.open .icon-minus{display:block}.box .toggle.open .icon-plus{display:none}.box .toggle.open .content{display:block}.box .list li{border-bottom:solid 2px #f6f7f8;margin:0 -30px 30px -30px;padding:0 30px 30px 30px}.box .list li:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.box.new{text-align:center}.box.new i{font-size:80px;line-height:80px;font-family:Poppins,sans-serif;font-style:normal;font-weight:300}.box.new b{margin-top:20px;display:block}a.box{border-right:none;border-left:none}a.box:hover{border-bottom:none;border-right:none;border-left:none;background:#f8fdff;box-shadow:0 0 1px rgba(0,0,0,.2)}.box-asidex{padding-right:25px!important;padding-left:70px;right:0;background:#f9f9f9;border-radius:0 10px 10px 0;height:calc(100% - 30px);position:absolute;padding-top:30px}.box-asidex:after{content:"";display:block;position:absolute;height:100%;width:51px;background:#fff;top:0;bottom:0;left:-6px}.cover{background:#fff2f6;padding:30px 50px;margin:0 -50px;position:relative;border-bottom:solid 1px #dedede}.cover .title,.cover h1,.cover h2,.cover h3,.cover h4{color:#f02e65;font-weight:600;margin-bottom:40px!important;font-size:28px;line-height:42px}.cover i:before{margin:0!important}.cover p{color:#737373}.cover .button{color:#fff}.cover .link,.cover a{color:#f02e65;border-left:none;border-right:none;cursor:pointer}.cover .link:hover,.cover a:hover{border-bottom-color:#f02e65}.console .database .row .col{height:452px}.console .database .row .col:after{width:2px;right:20px}.console .database hr{margin:0 -20px;background:#efefef;height:2px}.console .database h3{font-size:13px;line-height:20px;height:20px;background-color:#f5f5f5;margin:-20px -20px 0 -20px;padding:10px 20px;border-bottom:solid 1px #e1e2e2;font-weight:600}.console .database .empty{height:160px;font-size:12px;text-align:center;margin:50px 0}.console .database .empty h4{font-size:13px;font-weight:600;line-height:120px}.console .database .search{background-color:#f5f5f5;margin:0 -20px 0 -20px;padding:10px 15px}.console .database .search input{height:40px;background-color:#fff;border-radius:25px;padding-top:0;padding-bottom:0}.console .database .code{height:411px;background:#f5f5f5;margin:0 -20px -20px -20px;padding:20px;width:calc(100% - 10px)}.console .database .code .ide{overflow:scroll;height:451px;margin:-20px;box-shadow:none;border-radius:0}.console .database .paging{background:#f5f5f5;margin:0 -20px -20px -20px;padding:20px}.console .database .button{margin:0 -20px;padding:0 20px!important;text-align:inherit;color:#f02e65;width:100%;font-size:15px;line-height:55px;box-sizing:content-box}.console .database .button i{margin-right:8px}.console .database .button:hover{border:none;background:#fff2f6}.console .database .items{margin:0 -20px;height:260px;overflow-x:hidden;overflow-y:scroll}.console .database .items form{opacity:0;position:relative}.console .database .items form button{background:red;position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:45px;border-radius:0;cursor:pointer}.console .database .items li{padding:0;margin:0 0;line-height:45px;font-size:15px;padding-left:50px;padding-right:30px;position:relative}.console .database .items li i{position:absolute;display:none;right:10px}.console .database .items li .name{display:inline-block;width:100%;height:28px}.console .database .items li.selected,.console .database .items li:hover{background:#f5f5f5}.console .database .items li.selected i,.console .database .items li:hover i{display:block}.console .database .items li:last-child{border-bottom:none}body>footer{color:#818181;line-height:40px;margin:0 -50px;padding:12px 50px;font-size:13px;width:100%;background:#f1f1f1;position:relative;margin-top:80px!important}body>footer:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}body>footer .logo img{height:22px;padding-top:12px}body>footer a{color:#505050}body>footer a:hover{border-bottom-color:#505050}body>footer ul:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}body>footer ul li{float:left;margin-right:20px!important}body>footer .copyright{padding-left:2px}[data-ls-if]{display:none}[data-service]{opacity:0}.load-service-start{opacity:0}.load-service-end{opacity:1;transition:opacity .5s ease-out;-moz-transition:opacity .5s ease-out;-webkit-transition:opacity .5s ease-out;-o-transition:opacity .5s ease-out}.modal-open .modal-bg,.modal-open body .modal-bg{position:fixed;content:'';display:block;width:100%;height:100%;left:0;right:0;top:0;bottom:0;background:#0c0c0c;opacity:.5;z-index:4}.modal{overflow:auto;display:none;position:fixed;width:100%;max-height:90%;max-width:640px;background:#fff;z-index:1000;box-shadow:0 0 4px rgba(0,0,0,.25);padding:30px;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:10px;box-sizing:border-box;text-align:left}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.modal{width:calc(100% - 20px)}}.modal.padding-small{padding:15px}.modal.height-tiny form{height:100px}.modal.height-small form{height:220px}.modal.width-small{max-width:400px}.modal.width-medium{max-width:500px}.modal.width-large{max-width:800px}.modal.open{display:block}.modalbutton.close{display:none}.modal.fill{height:95%;max-height:95%;max-width:75%}.modal h1,.modal h2{margin-bottom:25px;margin-top:0;font-size:20px;text-align:left}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5,.modal h6{color:inherit!important;line-height:35px}.modal .main,.modal form{position:relative;border-top:solid 1px #e7e7e7;padding:30px 30px 0 30px;margin:0 -30px}.modal .separator{margin:20px -30px}.modal .info{margin:0 -30px;padding:20px 30px;background:#f5fbff;color:#3b5d73;border-top:solid 1px #eaf2f7;border-bottom:solid 1px #eaf2f7}.modal button.close{width:30px;height:30px;line-height:30px;padding:0;margin:0;background:#1b1b1b;color:#fff;border-radius:50%}.phases{list-style:none;margin:0;padding:0;position:relative}.phases li{display:none}.phases li li{display:block}.phases li.selected{display:block}.phases .number{display:none}.phases h2,.phases h3,.phases h4,.phases h5,.phases h6{margin:0 0 30px 0;text-align:inherit}.container{position:relative}.container .tabs{height:55px;line-height:55px;list-style:none;padding:0;margin-bottom:50px!important;margin-top:-55px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.container .tabs:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.container .tabs .selected{font-weight:400;color:#f02e65;position:relative;opacity:1}.container .tabs .selected:after{content:"";display:block;height:2px;background:#f02e65;width:calc(100% - 46px);position:absolute;bottom:0;border-radius:2px;left:-2px}.container .tabs .number{display:none}.container .tabs li{float:left;padding-right:50px;color:#f02e65;opacity:.9;cursor:pointer}.container .tabs li:focus{outline:0}.container .icon{display:none}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.container .tabs{width:auto;overflow-x:scroll;overflow-y:hidden;white-space:nowrap}.container .tabs li{display:inline-block;float:none}}.ide{background-color:#373738;overflow:hidden;position:relative;z-index:1;box-shadow:0 2px 4px 0 rgba(50,50,93,.3);border-radius:10px;margin-bottom:30px}.ide .tag{color:inherit!important;background:0 0!important;padding:inherit!important;font-size:inherit!important}.ide .copy{position:absolute;bottom:15px;right:15px;cursor:pointer;background:#39393c;border-radius:50%;padding:2px;color:#6a6a6d;border:solid 2px #414142}.ide pre{-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;color:#e6ebf1;font-weight:400;line-height:20px;font-size:13px;margin:0;padding:20px;padding-left:60px}.ide.light{box-shadow:0 2px 4px 0 rgba(50,50,93,.1);background-color:#fff}.ide.light pre{color:#414770}.ide.light .token.cdata,.ide.light .token.comment,.ide.light .token.doctype,.ide.light .token.prolog{color:#91a2b0}.ide.light .token.attr-name,.ide.light .token.builtin,.ide.light .token.char,.ide.light .token.inserted,.ide.light .token.selector,.ide.light .token.string{color:#149570}.ide.light .token.punctuation{color:#414770}.ide.light .language-css .token.string,.ide.light .style .token.string,.ide.light .token.entity,.ide.light .token.operator,.ide.light .token.url,.ide.light .token.variable{color:#414770}.ide.light .line-numbers .line-numbers-rows{background:#f2feef}.ide.light .line-numbers-rows>span:before{color:#5dc79e}.ide.light .token.keyword{color:#6772e4;font-weight:500}code[class*=language-],pre[class*=language-]{text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{padding:.1em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6b7c93}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#f79a59}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#3ecf8e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#45b2e8}.token.keyword{color:#7795f8}.token.important,.token.regex{color:#fd971f}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;padding-left:60px;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{background:#39393c;position:absolute;pointer-events:none;top:-20px;padding:20px 0;font-size:100%;left:-60px;width:40px;letter-spacing:-1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{padding-right:5px;pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#636365;display:block;padding-right:.8em;text-align:right}html{padding:0;margin:0;direction:ltr}body{margin:0;background:#f6f7f8 no-repeat fixed}main{min-height:100%}ul{padding:0;margin:0}ul li{margin:0;list-style:none}.force-left{direction:ltr;text-align:left}.force-right{direction:rtl;text-align:right}.pull-left{float:left}.pull-right{float:right} \ No newline at end of file +.pull-start{float:left}.pull-end{float:right}img[src=""]{visibility:hidden;display:inline-block}.margin-end{margin-right:20px!important}.margin-start{margin-left:20px!important}.margin-end-small{margin-right:10px!important}.margin-start-small{margin-left:10px!important}.margin-end-large{margin-right:50px!important}.margin-start-large{margin-left:50px!important}.margin-end-no{margin-right:0!important}.margin-start-no{margin-left:0!important}.margin-top{margin-top:30px!important}.margin-bottom{margin-bottom:30px!important}.margin-top-no{margin-top:0!important}.margin-bottom-no{margin-bottom:0!important}.margin-top-xxl{margin-top:140px!important}.margin-top-xl{margin-top:80px!important}.margin-top-large{margin-top:50px!important}.margin-top-small{margin-top:15px!important}.margin-top-tiny{margin-top:5px!important}.margin-top-negative{margin-top:-30px!important}.margin-top-negative-tiny{margin-top:-5px!important}.margin-top-negative-small{margin-top:-15px!important}.margin-top-negative-large{margin-top:-50px!important}.margin-top-negative-xl{margin-top:-80px!important}.margin-top-negative-xxl{margin-top:-100px!important}.margin-bottom-xxl{margin-bottom:140px!important}.margin-bottom-xl{margin-bottom:80px!important}.margin-bottom-large{margin-bottom:50px!important}.margin-bottom-small{margin-bottom:15px!important}.margin-bottom-tiny{margin-bottom:5px!important}.margin-bottom-negative{margin-bottom:-30px!important}.margin-bottom-negative-tiny{margin-bottom:-5px!important}.margin-bottom-negative-small{margin-bottom:-15px!important}.margin-bottom-negative-large{margin-bottom:-50px!important}.margin-bottom-negative-xl{margin-bottom:-80px!important}.margin-bottom-negative-xl{margin-bottom:-100px!important}.ratio-wide{height:0;overflow:hidden;padding-top:56%;position:relative;width:100%}.ratio-wide>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-square{height:0;overflow:hidden;padding-top:56%;position:relative;width:100%}.ratio-square>*{position:absolute;top:0;left:0;width:100%;height:100%}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}*{font-family:Poppins,sans-serif,Arial;-webkit-font-smoothing:antialiased;font-weight:300}h1,h2,h3,h4,h5,h6{margin:0}h4,h5,h6{font-weight:400}.link,a{color:#1e849e;text-decoration:none;border-left:2px solid transparent;border-right:2px solid transparent;border-bottom:solid 1px transparent}.link:hover,a:hover{border-bottom:dotted 1px #1e849e}.link.disabled,a.disabled{opacity:.5}.link.disabled:hover,a.disabled:hover{border-bottom:none}.link.tag:hover,a.tag:hover{border-bottom:none;opacity:.9}b,strong{font-weight:500}p{margin:0 0 20px 0;line-height:26px}small{font-size:16px;color:#818181}.text-size-small{font-size:13px}.text-size-normal{font-size:16px}.text-one-liner{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-bold{font-weight:400!important}.text-danger{color:#f53d3d}.text-success{color:#1bbf61}.text-upper{text-transform:uppercase}.text-warning{color:#ffed4d}.text-focus{color:#f02e65}.text-fade{color:#818181}.text-disclaimer{font-size:11px;color:#818181}.text-fade-extra{color:#818181;opacity:.5}.text-line-high-large{line-height:30px}.text-line-high-xl{line-height:40px}.text-sign{margin:5px 0;font-size:25px;width:25px;height:25px;line-height:25px;display:inline-block}.text-align-center{text-align:center}.text-align-start{text-align:left}.text-align-end{text-align:right}.text-align-left{text-align:left}.text-align-right{text-align:right}.text-dir-ltr{direction:ltr;display:inline-block}.text-dir-rtl{direction:rtl;display:inline-block}.icon-dot-3:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}table{width:calc(100% + 60px);border-collapse:collapse;margin:-30px;border-radius:10px;overflow:hidden;position:relative;table-layout:fixed}table thead{box-shadow:0 0 2px rgba(0,0,0,.25);border-bottom:solid 1px #f1f3f5;font-size:14px}table thead th{position:sticky;top:0}table.small{font-size:14px}table.open-end tbody tr:last-child{border-bottom:none;font-weight:700;background:#f7fbf7}table.full tbody td,table.full tbody th{vertical-align:top;white-space:normal;overflow:auto;line-height:24px;padding-top:20px;padding-bottom:20px;height:auto}table .avatar{width:30px;height:30px}table tr{border-bottom:solid 1px #f1f3f5}table tr:last-child{border-bottom:none}table tr:nth-child(even){background:#fbfbfb}table th{text-align:left;font-weight:400}table th i{color:#818181;font-size:10px;display:inline-block;vertical-align:top;line-height:16px;padding:0 3px}table td,table th{height:65px;padding:0 15px;line-height:50px}table td:first-child,table th:first-child{padding-left:30px}table td:last-child,table th:last-child{padding-right:30px}@media only screen and (max-width:550px){table td:first-child,table th:first-child{width:auto}}table td,table th{overflow:hidden;white-space:nowrap}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){table.vertical{border-top:solid 1px #f1f3f5;display:block;overflow:hidden;padding-top:12px}table.vertical .hide{display:none}table.vertical tbody,table.vertical td,table.vertical th,table.vertical thead,table.vertical tr{width:100%;display:block}table.vertical th,table.vertical tr{padding-top:12px;padding-bottom:12px}table.vertical th:first-child,table.vertical tr:first-child{padding-top:0}table.vertical td,table.vertical th{padding:5px 20px!important;text-overflow:ellipsis;white-space:normal;height:40px;line-height:40px}table.vertical td:first-child,table.vertical td:last-child,table.vertical th:first-child,table.vertical th:last-child{padding:0 10px}table.vertical td:last-child,table.vertical th:last-child{padding-bottom:0}table.vertical td p,table.vertical th p{display:inline-block;width:calc(100% - 40px)}table.vertical td:before{content:attr(data-title);margin-right:4px;font-weight:400}table.vertical thead{display:none}}.zone{max-width:910px;margin:0 auto 40px auto}.zone.xxxl{max-width:calc(100% - 100px)}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.zone.xxxl{max-width:100%}}.zone.xxl{max-width:1100px}.zone.xl{max-width:910px}.zone.large{max-width:700px}.zone.medium{max-width:550px}.zone.small{max-width:320px}.row{position:relative;margin:0 -50px;padding-left:50px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.row{margin:0 -30px;padding-left:30px}}.row.force-ltr>.col{float:left}.row.force-rtl>.col{float:right}.row.force-reverse>.col{float:right}.row.wide{margin:0 -100px;padding-left:100px}.row.wide>.span-1{width:calc(8.33333333% * 1 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-2{width:calc(8.33333333% * 2 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-3{width:calc(8.33333333% * 3 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-4{width:calc(8.33333333% * 4 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-5{width:calc(8.33333333% * 5 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-6{width:calc(8.33333333% * 6 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-7{width:calc(8.33333333% * 7 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-8{width:calc(8.33333333% * 8 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-9{width:calc(8.33333333% * 9 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-10{width:calc(8.33333333% * 10 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-11{width:calc(8.33333333% * 11 - 100px);box-sizing:content-box;padding-right:100px}.row.wide>.span-12{width:calc(8.33333333% * 12 - 100px);box-sizing:content-box;padding-right:100px}.row.thin{margin:0 -20px;padding-left:20px}.row.thin>.span-1{width:calc(8.33333333% * 1 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-2{width:calc(8.33333333% * 2 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-3{width:calc(8.33333333% * 3 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-4{width:calc(8.33333333% * 4 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-5{width:calc(8.33333333% * 5 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-6{width:calc(8.33333333% * 6 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-7{width:calc(8.33333333% * 7 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-8{width:calc(8.33333333% * 8 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-9{width:calc(8.33333333% * 9 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-10{width:calc(8.33333333% * 10 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-11{width:calc(8.33333333% * 11 - 20px);box-sizing:content-box;padding-right:20px}.row.thin>.span-12{width:calc(8.33333333% * 12 - 20px);box-sizing:content-box;padding-right:20px}.row:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.row .col{float:left;box-sizing:border-box}.row .col.sticky-top{position:sticky;top:0}.row .col.sticky-bottom{position:sticky;bottom:0}.row .span-1{width:calc(8.33333333% * 1 - 40px);box-sizing:content-box;padding-right:40px}.row .span-2{width:calc(8.33333333% * 2 - 40px);box-sizing:content-box;padding-right:40px}.row .span-3{width:calc(8.33333333% * 3 - 40px);box-sizing:content-box;padding-right:40px}.row .span-4{width:calc(8.33333333% * 4 - 40px);box-sizing:content-box;padding-right:40px}.row .span-5{width:calc(8.33333333% * 5 - 40px);box-sizing:content-box;padding-right:40px}.row .span-6{width:calc(8.33333333% * 6 - 40px);box-sizing:content-box;padding-right:40px}.row .span-7{width:calc(8.33333333% * 7 - 40px);box-sizing:content-box;padding-right:40px}.row .span-8{width:calc(8.33333333% * 8 - 40px);box-sizing:content-box;padding-right:40px}.row .span-9{width:calc(8.33333333% * 9 - 40px);box-sizing:content-box;padding-right:40px}.row .span-10{width:calc(8.33333333% * 10 - 40px);box-sizing:content-box;padding-right:40px}.row .span-11{width:calc(8.33333333% * 11 - 40px);box-sizing:content-box;padding-right:40px}.row .span-12{width:calc(8.33333333% * 12 - 40px);box-sizing:content-box;padding-right:40px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.row.responsive{width:100%;padding:0;margin:0}.row.responsive>.span-1,.row.responsive>.span-10,.row.responsive>.span-11,.row.responsive>.span-12,.row.responsive>.span-2,.row.responsive>.span-3,.row.responsive>.span-4,.row.responsive>.span-5,.row.responsive>.span-6,.row.responsive>.span-7,.row.responsive>.span-8,.row.responsive>.span-9{width:calc(8.33333333% * 12 - 0px)!important;box-sizing:content-box!important;padding-right:0!important;width:100%!important}}.tiles{position:relative}.tiles:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.tiles li{margin-right:50px!important;float:left;width:calc(33% - 33px)}.tiles li .photo-title{width:calc(100% + 30px);height:15px;margin:-15px -15px 10px -15px;border-radius:10px 10px 0 0;background:#f1f3f5;border-bottom:solid 1px #f1f3f5}.tiles li:nth-child(3n){margin-right:0!important}@media only screen and (max-width:550px){.tiles li{width:100%;margin-right:0!important}}@font-face{font-family:fontello;src:url(data:application/octet-stream;base64,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) format('woff'),url(data:application/octet-stream;base64,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b250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADkAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAGYAbwBuAHQAZQBsAGwAbwBSAGUAZwB1AGwAYQByAGYAbwBuAHQAZQBsAGwAbwBmAG8AbgB0AGUAbABsAG8AVgBlAHIAcwBpAG8AbgAgADEALgAwAGYAbwBuAHQAZQBsAGwAbwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUABHVzZXIGZm9sZGVyBGxpc3QFbG9naW4DY29nB3R3aXR0ZXILYXJ0aWNsZS1hbHQGY2FuY2VsBGhvbWUIZG93bi1kaXIIZmFjZWJvb2sIYXN0ZXJpc2sGdXBsb2FkCXN0b3B3YXRjaAZleHBvcnQFaGVhcnQEcGx1cwZ1cC1kaXIEbWVudQlsZWZ0LW9wZW4KcmlnaHQtb3BlbgVpbmJveAZ3cmVuY2gHY29tbWVudA1zdGFja292ZXJmbG93CHF1ZXN0aW9uCm9rLWNpcmNsZWQHd2FybmluZwRtYWlsBGxpbmsHa2V5LWludgV0cmFzaAhkb3dubG9hZAdnbGFzc2VzBnFyY29kZQdzaHVmZmxlA2V5ZQRsb2NrBnNlYXJjaARiZWxsBXVzZXJzCGxvY2F0aW9uCWJyaWVmY2FzZQlp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) format('truetype')}[class*=" icon-"]:before,[class^=icon-]:before{font-family:fontello;font-style:normal;font-weight:400;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.icon-user:before{content:'\e800'}.icon-folder:before{content:'\e801'}.icon-list:before{content:'\e802'}.icon-login:before{content:'\e803'}.icon-cog:before{content:'\e804'}.icon-twitter:before{content:'\e805'}.icon-article-alt:before{content:'\e806'}.icon-cancel:before{content:'\e807'}.icon-home:before{content:'\e808'}.icon-down-dir:before{content:'\e809'}.icon-facebook:before{content:'\e80a'}.icon-asterisk:before{content:'\e80b'}.icon-upload:before{content:'\e80c'}.icon-stopwatch:before{content:'\e80d'}.icon-export:before{content:'\e80e'}.icon-heart:before{content:'\e80f'}.icon-plus:before{content:'\e810'}.icon-up-dir:before{content:'\e811'}.icon-menu:before{content:'\e812'}.icon-left-open:before{content:'\e813'}.icon-right-open:before{content:'\e814'}.icon-inbox:before{content:'\e815'}.icon-wrench:before{content:'\e816'}.icon-comment:before{content:'\e817'}.icon-stackoverflow:before{content:'\e818'}.icon-question:before{content:'\e819'}.icon-ok-circled:before{content:'\e81a'}.icon-warning:before{content:'\e81b'}.icon-mail:before{content:'\e81c'}.icon-link:before{content:'\e81d'}.icon-key-inv:before{content:'\e81e'}.icon-trash:before{content:'\e81f'}.icon-download:before{content:'\e820'}.icon-glasses:before{content:'\e821'}.icon-qrcode:before{content:'\e822'}.icon-shuffle:before{content:'\e823'}.icon-eye:before{content:'\e824'}.icon-lock:before{content:'\e825'}.icon-search:before{content:'\e826'}.icon-bell:before{content:'\e827'}.icon-users:before{content:'\e828'}.icon-location:before{content:'\e829'}.icon-briefcase:before{content:'\e82a'}.icon-instagram:before{content:'\e82b'}.icon-clock:before{content:'\e82c'}.icon-phone:before{content:'\e82d'}.icon-calendar:before{content:'\e82e'}.icon-print:before{content:'\e82f'}.icon-edit:before{content:'\e830'}.icon-bold:before{content:'\e831'}.icon-italic:before{content:'\e832'}.icon-rocket:before{content:'\e833'}.icon-whatsapp:before{content:'\e834'}.icon-dot-3:before{content:'\e835'}.icon-info-circled:before{content:'\e836'}.icon-videocam:before{content:'\e837'}.icon-quote-right:before{content:'\e838'}.icon-picture:before{content:'\e839'}.icon-palette:before{content:'\e83a'}.icon-lamp:before{content:'\e83b'}.icon-book-open:before{content:'\e83c'}.icon-ok:before{content:'\e83d'}.icon-chat-alt:before{content:'\e83e'}.icon-archive:before{content:'\e83f'}.icon-play:before{content:'\e840'}.icon-pause:before{content:'\e841'}.icon-down-open:before{content:'\e842'}.icon-up-open:before{content:'\e843'}.icon-minus:before{content:'\e844'}.icon-exchange:before{content:'\e845'}.icon-network:before{content:'\e846'}.icon-link-ext:before{content:'\f08e'}.icon-github-circled:before{content:'\f09b'}.icon-filter:before{content:'\f0b0'}.icon-docs:before{content:'\f0c5'}.icon-list-bullet:before{content:'\f0ca'}.icon-list-numbered:before{content:'\f0cb'}.icon-underline:before{content:'\f0cd'}.icon-sort:before{content:'\f0dc'}.icon-linkedin:before{content:'\f0e1'}.icon-smile:before{content:'\f118'}.icon-keyboard:before{content:'\f11c'}.icon-code:before{content:'\f121'}.icon-shield:before{content:'\f132'}.icon-bitbucket:before{content:'\f171'}.icon-windows:before{content:'\f17a'}.icon-wheelchair:before{content:'\f193'}.icon-bank:before{content:'\f19c'}.icon-google:before{content:'\f1a0'}.icon-building-filled:before{content:'\f1ad'}.icon-database:before{content:'\f1c0'}.icon-lifebuoy:before{content:'\f1cd'}.icon-header:before{content:'\f1dc'}.icon-binoculars:before{content:'\f1e5'}.icon-chart-area:before{content:'\f1fe'}.icon-pinterest:before{content:'\f231'}.icon-medium:before{content:'\f23a'}.icon-gitlab:before{content:'\f296'}.icon-telegram:before{content:'\f2c6'}.datalist-polyfill{list-style:none;display:none;background:#fff;box-shadow:0 2px 2px #999;position:absolute;left:0;top:0;margin:0;padding:0;max-height:300px;overflow-y:auto}.datalist-polyfill:empty{display:none!important}.datalist-polyfill>li{padding:3px;font:13px "Lucida Grande",Sans-Serif}.datalist-polyfill__active{background:#3875d7;color:#fff}date-input-polyfill{z-index:1000!important;max-width:320px!important;width:320px!important}date-input-polyfill .monthSelect-wrapper,date-input-polyfill .yearSelect-wrapper{height:50px;line-height:50px;padding:0;width:40%!important;margin-bottom:10px!important}date-input-polyfill .monthSelect-wrapper select,date-input-polyfill .yearSelect-wrapper select{padding:0 12px;height:50px;line-height:50px;box-sizing:border-box}date-input-polyfill .yearSelect-wrapper{width:35%!important}date-input-polyfill table{width:100%!important;max-width:100%!important;padding:0 12px 12px 12px!important;box-sizing:border-box;margin:0}date-input-polyfill table td:first-child,date-input-polyfill table td:last-child,date-input-polyfill table th:first-child,date-input-polyfill table th:last-child{width:32px!important;padding:4px!important}date-input-polyfill select{margin-bottom:10px}date-input-polyfill button{width:25%!important;height:50px!important;line-height:50px!important;margin-bottom:10px!important;background:inherit;position:relative;color:inherit;padding:inherit;box-sizing:inherit;border-radius:inherit;font-size:inherit;box-shadow:none;border:none;border-bottom:none!important}::placeholder{color:#868686;text-align:left}::-webkit-input-placeholder{text-align:left}input:-moz-placeholder{text-align:left}.button,button{display:inline-block;background:#f02e65;border-radius:26px;border:none;color:#fff;height:52px;line-height:52px;padding:0 25px;cursor:pointer;font-size:16px;box-sizing:border-box;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.button:focus,.button:hover,button:focus,button:hover{background:#c52653;border-bottom:none}.button.fly,button.fly{position:fixed;z-index:2;bottom:30px;right:30px}.button.fill,button.fill{display:block;width:100%;text-align:center;padding:0 10px!important}.button.fill-aligned,button.fill-aligned{display:block;width:100%;text-align:left;padding:0 20px!important}.button.icon,button.icon{padding-right:30px!important}.button.icon-reduce,button.icon-reduce{padding-left:15px!important}.button.reverse,button.reverse{background:0 0;height:50px;line-height:48px;padding:0 23px;color:#f02e65;border:solid 2px #f02e65}.button.reverse:focus,.button.reverse:hover,button.reverse:focus,button.reverse:hover{color:#c52653;border-color:#c52653}.button.round,button.round{width:52px;padding:0}.button.round.small,button.round.small{font-size:12px;width:30px;height:30px;line-height:30px}.button.white,button.white{background:#fff;color:#f02e65}.button.white.reverse,button.white.reverse{color:#fff;background:0 0;border:solid 2px #fff}.button.trans,button.trans{background:0 0!important}.button.trans.reverse,button.trans.reverse{background:0 0!important}.button.success,button.success{background:#1bbf61}.button.success.reverse,button.success.reverse{color:#1bbf61;background:#fff;border:solid 2px #1bbf61}.button.danger,button.danger{background:#f53d3d}.button.danger.reverse,button.danger.reverse{color:#f53d3d;background:#fff;border:solid 2px #f53d3d}.button .disabled,.button.disabled,.button:disabled,button .disabled,button.disabled,button:disabled{background:#818181;cursor:default}.button.link,button.link{background:0 0;border-radius:0;color:#1e849e;height:auto;line-height:normal;padding:0;padding-right:0!important}.button.link:hover,button.link:hover{border-bottom:dotted 1px #1e849e}.button.link:focus,button.link:focus{box-shadow:inherit}.button.strip,button.strip{background:0 0;height:auto;line-height:16px;color:inherit;padding:0 5px}.button.facebook,button.facebook{color:#fff!important;background:#4070b4!important}.button.twitter,button.twitter{color:#fff!important;background:#56c2ea!important}.button.linkedin,button.linkedin{color:#fff!important;background:#0076b5!important}.button.github,button.github{color:#fff!important;background:#7e7c7c!important}.button:focus,button:focus{outline:0}label{margin-bottom:15px;display:block;line-height:normal}.input,input[type=date],input[type=datetime-local],input[type=email],input[type=file],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px}.input[type=file],input[type=date][type=file],input[type=datetime-local][type=file],input[type=email][type=file],input[type=file][type=file],input[type=number][type=file],input[type=password][type=file],input[type=search][type=file],input[type=tel][type=file],input[type=text][type=file],input[type=url][type=file],select[type=file],textarea[type=file]{line-height:0;padding:15px;height:auto}.input[xtype=file],input[type=date][xtype=file],input[type=datetime-local][xtype=file],input[type=email][xtype=file],input[type=file][xtype=file],input[type=number][xtype=file],input[type=password][xtype=file],input[type=search][xtype=file],input[type=tel][xtype=file],input[type=text][xtype=file],input[type=url][xtype=file],select[xtype=file],textarea[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;left:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.input[xtype=file]:disabled,input[type=date][xtype=file]:disabled,input[type=datetime-local][xtype=file]:disabled,input[type=email][xtype=file]:disabled,input[type=file][xtype=file]:disabled,input[type=number][xtype=file]:disabled,input[type=password][xtype=file]:disabled,input[type=search][xtype=file]:disabled,input[type=tel][xtype=file]:disabled,input[type=text][xtype=file]:disabled,input[type=url][xtype=file]:disabled,select[xtype=file]:disabled,textarea[xtype=file]:disabled{opacity:0!important}.input:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=file]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{outline:0;border-color:#b3d7fd}.input:disabled,input[type=date]:disabled,input[type=datetime-local]:disabled,input[type=email]:disabled,input[type=file]:disabled,input[type=number]:disabled,input[type=password]:disabled,input[type=search]:disabled,input[type=tel]:disabled,input[type=text]:disabled,input[type=url]:disabled,select:disabled,textarea:disabled{background:#f1f3f5}.input.strip,input[type=date].strip,input[type=datetime-local].strip,input[type=email].strip,input[type=file].strip,input[type=number].strip,input[type=password].strip,input[type=search].strip,input[type=tel].strip,input[type=text].strip,input[type=url].strip,select.strip,textarea.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:right 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.input.strip:focus,input[type=date].strip:focus,input[type=datetime-local].strip:focus,input[type=email].strip:focus,input[type=file].strip:focus,input[type=number].strip:focus,input[type=password].strip:focus,input[type=search].strip:focus,input[type=tel].strip:focus,input[type=text].strip:focus,input[type=url].strip:focus,select.strip:focus,textarea.strip:focus{border-color:#b3d7fd}input[type=email],input[type=url]{direction:ltr}input[type=email]::placeholder,input[type=url]::placeholder{text-align:left;direction:ltr}select{background:0 0;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,");background-position:right 15px top 50%;background-repeat:no-repeat;background-color:#fff;width:calc(100% - 62px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:45px}select:-webkit-autofill{background-image:url("data:image/svg+xml;utf8,")!important;background-position:100% 50%!important;background-repeat:no-repeat!important}input[type=search],input[type=search].strip{background:0 0;-webkit-appearance:none;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAdZJREFUWIXt1s2LjWEYBvDfnDMzFpNIamZIFrMiJYMyFmKhZKfOwoiFr2LFn2BByG6WVrKwMcjWxgoLIlKIUk6RrzAjZWZ8LO731FlwvB+PUbjq6X0X7/VeV/d9P9fz8IdRL8Hpw3x8w0xaOz9GNxq4gJeZcGs1cRab0fU7xLfgMSYzoT3YgNXYhIO4iM+4iTWphGs4jikcFSXvhEGczr4/UFW8C2N4jXUFudvwCYeqGNgnSr6yJH8rpkWLCqMfE9hdUryFE3iC3qLEk7ij+kT34Q32FiHV8Qr7K4q3cArXihCGxd5elMjARnzBvE4f1dreV+AtnicycC/7/7K8BhaIvqXCO3zFwrwGZtCT0EAtW9N5DTSxWGR/CizNns/yEgbFEK5NZGCnaEPHE7e9Ai9wA6OJDIzistgJubFdxHB/RfFVYgCHixJruI5x5dNwDm6J47sUhkTvjpUw0Y1zeOrXR3hHjOA9zmBuTs4Arog4/yhuUZWwHPdFMh7280BZgiP4ILJ/UuymqRQmejPxphiquzgvKnMJDzOxB9glZqiRiecykbfHdawX98EhcdxO4BGu4nYm2EJDzEKPSMIdYrBnFYUq8d/EP2di1gey3cS4ErflvxffASbhcakIINaMAAAAAElFTkSuQmCC);background-position:left 15px top 50%;background-repeat:no-repeat;background-size:20px 20px;width:calc(100% - 60px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:45px}select[multiple]{min-height:75px;padding:5px 10px!important;padding-right:50px!important}select[multiple] option{padding:10px 4px;border-bottom:solid 1px #f1f1f1}select[multiple] option:last-child{border-bottom:none}textarea{min-height:75px;resize:vertical;line-height:32px;padding:5px 15px}textarea.tall{min-height:180px}fieldset{border:none;margin:0;padding:0}.counter{font-size:13px;float:right;margin-top:-20px}.file-preview{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAIElEQVQoU2NkYGAwZsAEZ9GFGIeIQix+wfQgyDODXSEAcUwGCrDSHgkAAAAASUVORK5CYII=)!important;border:solid 1px #e2e2e2;box-shadow:inset 0 0 3px #a0a0a0;border-radius:8px;width:calc(100% - 2px);max-height:180px;visibility:visible!important}.video-preview{padding-top:56%;position:relative;border-radius:10px;background:#e7e7e7;overflow:hidden;margin:0}.video-preview iframe{position:absolute;top:0;width:100%;height:100%;border:none}.map-preview{padding-top:50%;position:relative;margin-bottom:10px;border-radius:10px;background:#e7e7e7;overflow:hidden;box-shadow:0 0 30px rgba(218,218,218,.5)}.map-preview iframe{position:absolute;top:0;width:100%;height:100%;border:none}.tooltip{position:relative}.tooltip.large:hover:after{white-space:normal;width:280px}.tooltip:hover:after{white-space:nowrap;background:#333;border-radius:5px;bottom:26px;color:#fff;content:attr(data-tooltip);padding:5px 15px;position:absolute;font-size:13px;line-height:20px;z-index:98;left:20%;margin-left:-30px}.tooltip:hover:before{border:solid;border-color:#333 transparent;border-width:6px 6px 0 6px;bottom:20px;content:"";position:absolute;z-index:99;left:5px}.tooltip.down:hover:after{top:26px;bottom:inherit}.tooltip.down:hover:before{top:20px;border-width:0 6px 6px 6px;bottom:inherit}.tag{display:inline-block;background:#e7e7e7;color:#868686;border-radius:12px;line-height:24px;padding:0 8px;font-size:12px;box-shadow:none!important;border:none;height:auto;width:auto;white-space:nowrap;text-overflow:ellipsis}.tag:hover{border:none}.tag.green{background:#1bbf61;color:#fff}.tag.red{background:#f53d3d;color:#fff}.tag.yellow{background:#ffe28b;color:#494949}.tag.focus{background:#f02e65;color:#fff}.tag.dark{background:#6f6f6f;color:#e7e7e7}.tag.blue{background:#4abde8;color:#fff}.tag.link{background:#1e849e;color:#fff}input[type=checkbox]{width:26px;height:16px;position:relative;-webkit-appearance:none;border-radius:0;border:none;background:0 0;vertical-align:middle}input[type=checkbox]:after{content:"";display:block;width:20px;height:20px;background:#fff;top:-5px;border-radius:50%;position:absolute;border:solid 3px #f02e65;vertical-align:middle}input[type=checkbox]:checked:after{text-align:center;font-family:fontello;content:'\e83d';font-size:16px;line-height:20px;color:#fff;background:#f02e65}input[type=checkbox]:focus{outline:0}input[type=checkbox]:focus:after,input[type=checkbox]:hover:after{outline:0;border-color:#000}input[type=checkbox]:checked:focus:after,input[type=checkbox]:checked:hover:after{border-color:#f02e65}.input-copy{position:relative}.input-copy input,.input-copy textarea{padding-right:65px;width:calc(100% - 82px);resize:none}.input-copy .copy{position:absolute;top:0;right:0;border-left:solid 1px #e2e2e2;height:calc(100% - 2px);width:50px;line-height:50px;text-align:center;background:#fbfbfb;margin:1px;border-radius:0 10px 10px 0}.paging{color:#8d8e8e;padding:5px 15px;font-size:12px}.paging form{display:inline-block}.blue-snap iframe{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px;float:none!important;height:40px!important;width:calc(100% - 32px)!important;border:solid 1px #e2e2e2!important;background:0 0!important;position:static!important}.blue-snap iframe[type=file]{line-height:0;padding:15px;height:auto}.blue-snap iframe[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;left:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.blue-snap iframe[xtype=file]:disabled{opacity:0!important}.blue-snap iframe:focus{outline:0;border-color:#b3d7fd}.blue-snap iframe:disabled{background:#f1f3f5}.blue-snap iframe.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:right 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.blue-snap iframe.strip:focus{border-color:#b3d7fd}.blue-snap .error{font-size:12px;margin-top:-25px;color:#f53d3d;height:40px;padding-left:2px}.pell{height:auto;padding-bottom:0;margin-bottom:0;padding-top:0;background:#fff;line-height:normal!important}.pell.hide{padding:0!important;height:1px;min-height:1px;max-height:1px;border:none;box-shadow:none;margin-bottom:20px;opacity:0}.pell [contenteditable=true]:empty:before{content:attr(placeholder);display:block;color:#868686}.pell .pell-actionbar{border-bottom:solid 1px #e7e7e7;margin:0 -15px 15px -15px;padding:10px 15px}.pell .pell-content{min-height:100px;display:block;padding:10px;margin:-10px;cursor:text}.pell .pell-content:focus{outline:0}.pell button{background:inherit;color:inherit;margin:0;padding:0;padding-right:15px;height:40px;line-height:40px;box-shadow:none;cursor:pointer;font-size:13px;border-radius:0}.pell button.pell-button-selected,.pell button:focus,.pell button:hover{color:#1e849e}.pell h1,.pell h2,.pell h3,.pell h4,.pell h5,.pell h6{text-align:inherit;margin-bottom:30px}.pell b,.pell strong{font-weight:700}.pell ol,.pell ul{margin:0 0 20px 0}.pell ol li,.pell ul li{display:list-item!important;list-style:inherit;margin-bottom:10px}.pell ol li p,.pell ul li p{margin:0}.pell ul li{margin:0 20px;display:list-item}label.switch{line-height:42px}input[type=checkbox].switch{width:67px;height:42px;line-height:42px;border-radius:21px;background:#818181;display:block;margin:0;padding:5px;padding-left:30px;padding-right:5px}input[type=checkbox].switch:checked{background:#f02e65;padding-left:5px;padding-right:30px}input[type=checkbox].switch:focus:after,input[type=checkbox].switch:hover:after{background:#fff}input[type=checkbox].switch:after{content:"";display:block;width:32px;height:32px;background:#fff;border-radius:50%;border:none;position:static;top:0}.password-meter{margin:-41px 10px 30px 10px;height:2px;background:0 0;max-width:100%;z-index:2;position:relative}.password-meter.weak{background:#f53d3d}.password-meter.medium{background:#ffed4d}.password-meter.strong{background:#1bbf61}.color-input:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.color-input .color-preview{width:53px;height:53px;float:left;margin-right:10px;background:#000;border-radius:10px;box-shadow:inset 0 0 3px #a0a0a0;position:relative}.color-input .color-preview input{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;cursor:pointer}.color-input input{text-transform:uppercase;float:left;width:calc(100% - 95px)}.grecaptcha-badge{box-shadow:none!important;border-radius:10px!important;overflow:hidden!important;background:#4d92df!important;bottom:25px}.grecaptcha-badge:hover{width:256px!important}.back{font-size:15px;line-height:24px;height:24px;margin-left:-15px;margin-top:-25px;margin-bottom:20px}hr{height:1px;background:#eceff1;border:none}.upload{position:relative}.upload:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.upload input{position:absolute;top:0;left:0;opacity:0;cursor:pointer}.upload.single .preview{height:0;position:relative;padding-top:100%;width:100%;margin-bottom:15px!important}.upload.single .preview li{position:absolute;top:0;width:calc(100% - 20px);height:calc(100% - 20px);margin-right:0!important;margin-bottom:0!important}.upload .button{float:left;margin-right:20px!important}.upload .button.disabled,.upload .button.disabled:hover{background:0 0;color:inherit;border-color:inherit}.upload .count{float:left;line-height:52px}.upload .progress{background:#1bbf61;height:6px;border-radius:3px;margin-bottom:15px!important}.upload .preview:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.upload .preview li{float:left;margin-right:20px!important;margin-bottom:15px!important;background:#f1f1f1;width:150px;height:150px;line-height:148px;text-align:center;border-radius:20px;overflow:hidden;position:relative;cursor:pointer;border:solid 10px #f1f1f1}.upload .preview li:hover:before{background:#f02e65}.upload .preview li:before{content:'\e807';font-family:fontello;font-size:12px;position:absolute;width:20px;height:20px;display:block;top:5px;right:5px;text-align:center;line-height:20px;vertical-align:middle;border-radius:50%;background:#484848;color:#fff;z-index:1}.upload .preview li img{vertical-align:middle;max-height:150px;max-width:150px;-webkit-filter:drop-shadow(0 0 6px rgba(0, 0, 0, .3));filter:drop-shadow(0 0 1px rgba(0, 0, 0, .3))}.upload.wide .preview li{height:0;width:100%;position:relative;padding-top:30.547%;background:#e7e7e7;border-radius:10px;overflow:hidden;border:solid 1px #f9f9f9;margin:0}.upload.wide .preview li img{border-radius:10px;position:absolute;top:0;width:100%;display:block;opacity:1;max-width:inherit;max-height:inherit}ol{list-style:none;counter-reset:x-counter;padding:0}ol li{counter-increment:x-counter;line-height:30px;margin-bottom:30px;margin-left:45px}ol li::before{display:inline-block;content:counter(x-counter);color:#f02e65;color:#fff;background:#fff;background:#f02e65;border:solid 2px #f02e65;margin-right:15px;margin-left:-45px;width:26px;height:26px;border-radius:50%;text-align:center;line-height:26px}.required{color:#f53d3d;font-size:8px;position:relative;top:-8px}.drop-list{position:relative;outline:0}.drop-list.open ul{display:block}.drop-list ul{position:relative;background:#fff;border-radius:10px;box-shadow:0 0 3px rgba(0,0,0,.05);padding:30px;display:block;border-bottom:none;box-shadow:0 0 6px rgba(0,0,0,.1);display:none;position:absolute;bottom:calc(100% + 10px);z-index:2;padding:0;left:-10px;max-width:280px;min-width:240px;overflow:hidden}.drop-list ul.padding-small{padding:15px}.drop-list ul.y-scroll{overflow-y:auto}.drop-list ul.danger{background:#f53d3d;color:#fff}.drop-list ul.focus{background:#f02e65;color:#fff}.drop-list ul.focus .button,.drop-list ul.focus button{background:#fff;color:#f02e65}.drop-list ul.warning{background:#ffed4d;color:#2d2d2d}.drop-list ul.warning .button,.drop-list ul.warning button{background:rgba(45,45,45,.8);color:#ffed4d}.drop-list ul>footer{margin:30px -30px -30px -30px;padding:15px 30px;background:#f5f5f5;border:solid 1px #eaeaea;border-radius:0 0 10px 10px}.drop-list ul hr{height:2px;background:#eceff1;border:none;margin:30px -30px}.drop-list ul .header{position:static;height:40px;padding:20px 30px 20px 30px;margin-bottom:30px;margin:-30px -30px 20px -30px;background:#f9f9f9;border-bottom:solid 1px #efefef}.drop-list ul .toggle{position:relative;border-top:2px solid #f6f7f8;border-bottom:2px solid #f6f7f8;margin:0 -30px;padding:30px;height:35px;overflow:hidden}.drop-list ul .toggle button.ls-ui-open{position:absolute;top:0;left:0;width:100%;height:95px;background:0 0;opacity:.5;border-radius:0}.drop-list ul .toggle .icon-minus{display:none}.drop-list ul .toggle .content{display:none}.drop-list ul .toggle.open{height:auto}.drop-list ul .toggle.open .icon-minus{display:block}.drop-list ul .toggle.open .icon-plus{display:none}.drop-list ul .toggle.open .content{display:block}.drop-list ul .list li{border-bottom:solid 2px #f6f7f8;margin:0 -30px 30px -30px;padding:0 30px 30px 30px}.drop-list ul .list li:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.drop-list ul.new{text-align:center}.drop-list ul.new i{font-size:80px;line-height:80px;font-family:Poppins,sans-serif;font-style:normal;font-weight:300}.drop-list ul.new b{margin-top:20px;display:block}.drop-list ul:before{border:solid;border-color:#fff transparent;border-width:8px 8px 0 8px;bottom:-8px;content:"";position:absolute;z-index:99;left:30px}.drop-list ul li{border-bottom:solid 1px #f1f3f5;margin:0;padding:0}.drop-list ul li:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.drop-list ul li .link,.drop-list ul li a{vertical-align:middle;height:30px;line-height:30px;display:block;padding:10px 25px;color:inherit;font-size:14px;border:none;max-width:260px;cursor:pointer}.drop-list ul li .link:hover,.drop-list ul li a:hover{background:#f1f3f5;border-color:transparent}.drop-list ul li.disabled .link:hover,.drop-list ul li.disabled a:hover{background:0 0}.drop-list ul li .avatar{width:30px;height:30px;margin-right:10px;float:left}.drop-list ul li:last-child{border-bottom:none}.drop-list.bottom ul{bottom:auto;margin-top:-2px}.drop-list.bottom ul:before{bottom:auto;top:-8px;border-width:0 8px 8px 8px}.disabled{opacity:.2;cursor:default}.disabled .button,.disabled .link,.disabled a,.disabled button{cursor:default!important}.disabled .button:hover,.disabled .link:hover,.disabled a:hover,.disabled button:hover{background:0 0}.tags{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px;background:#fff;min-height:42px;height:auto}.tags[type=file]{line-height:0;padding:15px;height:auto}.tags[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;left:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.tags[xtype=file]:disabled{opacity:0!important}.tags:focus{outline:0;border-color:#b3d7fd}.tags:disabled{background:#f1f3f5}.tags.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:right 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.tags.strip:focus{border-color:#b3d7fd}.tags .add{display:inline-block!important;border:none;padding:0;width:auto;margin:0}.tags ul.tags-list{display:inline}.tags ul.tags-list li{display:inline-block!important;margin-right:10px;font-size:16px;padding:5px 10px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tags ul.tags-list li::before{float:right;content:'\e807';font-family:fontello;font-style:normal;display:inline-block;text-align:center;line-height:16px;width:16px;height:16px;font-size:12px;background:#000;color:#fff;border-radius:50%;margin-top:4px;margin-bottom:4px;margin-left:6px;margin-right:0}.console{height:100%;width:100%;padding:0}.console body{position:relative;height:calc(100% - 70px);width:calc(100% - 320px);padding-top:70px;padding-bottom:0;padding-right:50px;padding-left:270px;margin:0;color:#4b4b4b;background:#eceff1}.console body .project-only{display:none!important}.console body.show-nav .project-only{display:inline-block!important}.console body.hide-nav .console-back{display:block}.console body.hide-nav .account{display:none}.console body.index .console-back{display:none}.console body.index .account{display:block}.console body .console-back{display:none}.console body:before{content:'';display:block;position:absolute;width:calc(100% - 220px);height:100px;top:-100px;left:0;right:0;background:#fff;z-index:1000;border-left:solid 220px #132a3b}.console header{position:fixed;top:0;width:calc(100% - 280px);height:40px;line-height:40px;padding:15px 30px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.1);margin:0 -50px;z-index:2;font-size:14px}.console header .setup-new{width:40px;height:40px;line-height:40px}.console header .list{width:240px}.console header .list select{height:40px;line-height:40px;padding-top:0;padding-bottom:0;border:none;border-radius:26px;background-color:#ececec;color:#868686}.console header .account{margin-left:25px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.console header .account:hover{border-bottom:none}.console header .avatar{height:40px;width:40px}.console header .notifications{position:relative;font-size:20px}.console header .notifications a{color:#1b3445}.console header .notifications:after{position:absolute;content:"";display:block;background:#f53d3d;width:8px;height:8px;border-radius:50%;top:3px;right:3px}.console header nav{background:#1b3445;background:linear-gradient(#132a3b,#302839);background:linear-gradient(#143650,#302839);color:#788c99;position:fixed;height:100%;width:220px;top:0;left:0}.console header nav .logo{height:39px;padding:15px 20px;display:block;border-bottom:none}.console header nav .logo:hover{border-bottom:none}.console header nav .logo img{display:inline-block;margin-top:9px;width:75%}.console header nav .logo svg g{fill:#f02e65}.console header nav .icon{display:block;border:none;margin:18px 10px 50px 10px}.console header nav .icon img{display:block}.console header nav .icon:hover{border-bottom:none}.console header nav .icon:hover svg g{fill:#f02e65}.console header nav .container{overflow:scroll;height:calc(100% - 183px);padding-bottom:50px;width:100%}.console header nav .project-box{padding:20px;text-align:center;display:block;border:none;line-height:100px;height:100px}.console header nav .project-box img{max-height:80px;max-width:80%;display:inline-block;vertical-align:middle}.console header nav .project{display:block;padding:85px 25px 20px 25px;color:#788c99;position:relative;border:none;height:20px}.console header nav .project:hover{border-bottom:none}.console header nav .project .name{height:20px;line-height:20px;margin:0;padding:0;display:inline-block;max-width:100%}.console header nav .project .arrow{display:block;position:absolute;right:5px;top:10px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #788c99;transform:rotate(225deg)}.console header nav .project img{position:absolute;bottom:40px;display:block;margin-bottom:10px;max-height:35px;max-width:40%}.console header nav .subtitle{padding:0 30px 5px 30px;display:block;font-size:12px;font-weight:300}.console header nav .links{margin-bottom:15px!important}.console header nav .links.top{border:none;padding-bottom:0;margin-bottom:5px!important}.console header nav .links.bottom{position:absolute;bottom:0;left:0;right:0;padding-bottom:0;border:none;margin-bottom:0!important}.console header nav .links.bottom a{border-top:solid 1px #2a253a;border-bottom:none}.console header nav .links .sub{display:inline-block;border:none;width:25px;height:25px;line-height:25px;border-radius:50%;padding:0;background:#f02e65;color:#fff;text-align:center;font-size:12px;margin:18px}.console header nav .links .sub i{width:auto;margin:0}.console header nav .links .sub:hover{border:none}.console header nav .links a{padding:12px 20px;border:none;display:block;color:#87a5b9;font-weight:400;border-left:solid 5px transparent}.console header nav .links a i{margin-right:8px;width:22px;display:inline-block}.console header nav .links a.selected,.console header nav .links a:hover{color:#e4e4e4;font-weight:500}.console header nav:after{content:'';display:block;position:absolute;background:#302839;height:100px;width:100%;bottom:-100px}.console>footer{width:calc(100% + 100px);margin:0 -50px;box-sizing:border-box;background:0 0;padding-right:30px;padding-left:30px}.console>footer ul{float:none;text-align:center}.console>footer ul li{float:none;display:inline-block}.console .projects{position:relative}.console .projects:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.console .projects li{float:left;margin-right:50px;margin-bottom:50px;width:270px}.console .projects li.new,.console .projects li:nth-child(3n){margin-right:0}.console .dashboard{padding:20px;min-height:95px;overflow:hidden;position:relative;z-index:1}.console .dashboard hr{margin:20px -20px}.console .dashboard footer{margin:-20px;padding:20px;background:#fcfeff;border:none;color:#1e849e}.console .dashboard .col{position:relative}.console .dashboard .col:last-child:after{display:none}.console .dashboard .col:after{content:"";display:block;width:2px;background:#eceff1;height:calc(100% + 110px);position:absolute;top:-20px;bottom:-20px;right:24px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.console .dashboard .col:after{width:calc(100% + 40px);height:3px;position:static;margin:20px -20px}}.console .dashboard .value{color:#f02e65;vertical-align:bottom;line-height:55px}.console .dashboard .value .sum{font-size:55px;line-height:55px;font-weight:700;vertical-align:bottom}.console .dashboard .unit{font-weight:500;line-height:20px;vertical-align:bottom;font-size:16px;display:inline-block;margin-bottom:5px;margin-left:5px;color:#f02e65}.console .dashboard .metric{color:#f02e65;font-weight:400;font-size:13px;line-height:16px}.console .dashboard .range{color:#818181;font-weight:400;font-size:14px;line-height:16px}.console .dashboard a{display:block;font-weight:400;font-size:14px;line-height:16px;padding:0;border:none}.console .dashboard .chart-metric{width:19%}@media only screen and (min-width:551px) and (max-width:970px),only screen and (max-width:550px){.console .dashboard .chart-metric{width:100%}}.console .dashboard .chart{width:80%;position:relative;height:0;padding-top:20px;padding-bottom:26%;margin-right:-2px;overflow:hidden;background-color:#fff;background-image:linear-gradient(transparent 1px,transparent 1px),linear-gradient(90deg,transparent 1px,transparent 1px),linear-gradient(#f1f1f1 1px,transparent 1px),linear-gradient(90deg,#f1f1f1 1px,transparent 1px);background-size:100px 100px,100px 100px,20px 20px,20px 20px;background-position:-2px -2px,-2px -2px,-1px -1px,-1px -1px;background-repeat:round;border:solid 1px #f1f1f1;border-right:solid 1px transparent;border-bottom:solid 1px transparent}@media only screen and (min-width:551px) and (max-width:970px),only screen and (max-width:550px){.console .dashboard .chart{width:100%;float:none;margin-bottom:20px}}.console .dashboard .chart canvas{position:absolute;bottom:0;display:block;height:100%;width:100%}.console .link-list li{margin-bottom:15px}.console .link-list i{display:inline-block;width:30px;height:30px;line-height:30px;text-align:center;background:#818181;color:#f1f3f5;border-radius:50%;margin-right:15px}.console .link-list i.fade{background:0 0;color:#818181}.console .provider{width:50px;height:50px;background:#f5f5f5;color:#868686;line-height:50px;text-align:center;font-size:25px;border-radius:50%}.console .provider.facebook{color:#fff;background:#3b5998}.console .provider.twitter{color:#fff;background:#55beff}.console .provider.telegram{color:#fff;background:#3ba9e1}.console .provider.github{color:#fff;background:#24292e}.console .provider.whatsapp{color:#fff;background:#25d366}.console .provider.linkedin{color:#fff;background:#1074af}.console .provider.microsoft{color:#fff;background:#137ad4}.console .provider.google{color:#fff;background:#4489f1}.console .provider.bitbucket{color:#fff;background:#2a88fb}.console .provider.gitlab{color:#faa238;background:#30353e}.console .provider.instagram{color:#fff;background:radial-gradient(circle at 30% 107%,#fdf497 0,#fdf497 5%,#fd5949 45%,#d6249f 60%,#285aeb 90%)}.console .premium{z-index:3;margin-top:320px}.console .premium .message{height:190px;overflow:hidden;position:absolute;top:-280px}.console .premium:after{content:'';position:absolute;top:0;left:-20px;right:-20px;bottom:-20px;background:#f6f7f8;opacity:.7;z-index:300}.console .app-section{height:90px}.console .confirm{background:#1e849e;color:#fff;border-radius:25px;padding:12px;line-height:28px;text-align:center}.console .confirm .action{font-weight:500;cursor:pointer}.console .platforms{overflow:hidden}.console .platforms .box{overflow:hidden}.console .platforms .box img{width:50px;margin:0 auto;margin-bottom:20px}.console .platforms .box .cover{margin:-30px -30px 30px -30px;padding:30px}.console .platforms .box .cover.android{background:#a4ca24}.console .platforms .box .cover.android h1{color:#fff;font-size:18px;margin-top:20px}.console .platforms .col{text-align:center;line-height:30px}.console .platforms a{display:block;margin:-20px;padding:20px}.console .platforms a:hover{background:#fbfeff}.console .platforms img{display:block;margin:0 30px;width:calc(100% - 60px);border-radius:50%;margin-bottom:20px}.dev-feature{display:none}.prod-feature{display:none}.development .dev-feature{display:block;opacity:.6!important;outline:solid #ff0 3px;outline-offset:3px}.development .dev-feature.dev-inline{display:inline-block}.development .prod-feature{display:none}.production .dev-feature{display:none}.production .prod-feature{display:block}.search{opacity:1!important}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.search button{margin-top:20px}}html.home body{padding:0 50px}html.home .logo img{max-height:35px;margin:45px 25px 25px 25px}.alerts ul{width:100%;visibility:hidden;position:fixed;padding:0;right:0;left:0;color:#fff;z-index:1002;margin:0 auto;bottom:15px;max-width:650px;opacity:.9}.alerts ul li{margin:1px 0 0 0;padding:0}.alerts ul li div.message{position:relative;padding:12px 35px;margin:0 auto;list-style:none;background:#818181;text-align:center;font-weight:700;border-radius:20px;line-height:16px;min-height:16px}.alerts ul li div.message i{cursor:pointer;position:absolute;font-size:22px;top:8px;left:8px}.alerts ul li div.message.error{color:#fff;background:#f53d3d}.alerts ul li div.message.success{color:#fff;background:#1bbf61}.alerts ul li div.message.warning{color:#fff;background:#ffed4d}.alerts ul li div.message.open{display:block}.alerts ul li div.message.close{display:none}.alerts .cookie-alert{background:#fff2f6!important;color:#f02e65}.alerts .cookie-alert a{color:#f02e65;font-weight:400;border-bottom:dotted 1px #f02e65}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.alerts ul{top:auto;bottom:0;max-width:100%}.alerts ul li{margin:5px 0 0 0}.alerts ul li div.message{border-radius:0}}article{overflow-wrap:break-word;word-wrap:break-word}article h1{font-size:36px}article h2{font-size:24px}article h3{font-size:20px}article h4{font-size:20px}article h5{font-size:18px}article h6{font-size:16px}article h1,article h2,article h3,article h4,article h5,article h6{margin-top:30px!important;margin-bottom:30px!important}article p{line-height:32px;font-size:17px}article .update{display:block;margin-top:50px!important}article table{width:100%;margin:0;margin-bottom:30px!important;border-radius:0;border-bottom:solid 1px #e7e7e7}article table thead td{font-weight:500;padding:5px 15px}article table td,article table th{padding:15px;height:auto}article table td:first-child,article table th:first-child{padding-left:10px}article table td:last-child,article table th:last-child{padding-right:10px}article table td p,article table th p{font-size:inherit;line-height:inherit}article table td p:last-child,article table th p:last-child{margin:0}.avatar{width:60px;height:60px;border-radius:50%;background:#ddd;display:inline-block;overflow:hidden;box-shadow:0 0 6px rgba(0,0,0,.09);position:relative;z-index:1;opacity:1!important}.avatar:before{content:"";position:absolute;width:100%;height:100%;z-index:0;background:#ddd}.avatar.inline{display:inline-block;vertical-align:middle}.avatar.trans{background:0 0}.avatar.xs{width:20px;height:20px}.avatar.small{width:50px;height:50px}.avatar.big{width:100px;height:100px}.avatar.huge{width:150px;height:150px}.box{position:relative;background:#fff;border-radius:10px;box-shadow:0 0 3px rgba(0,0,0,.05);padding:30px;display:block;border-bottom:none}.box.padding-small{padding:15px}.box.y-scroll{overflow-y:auto}.box.danger{background:#f53d3d;color:#fff}.box.focus{background:#f02e65;color:#fff}.box.focus .button,.box.focus button{background:#fff;color:#f02e65}.box.warning{background:#ffed4d;color:#2d2d2d}.box.warning .button,.box.warning button{background:rgba(45,45,45,.8);color:#ffed4d}.box>footer{margin:30px -30px -30px -30px;padding:15px 30px;background:#f5f5f5;border:solid 1px #eaeaea;border-radius:0 0 10px 10px}.box hr{height:2px;background:#eceff1;border:none;margin:30px -30px}.box .header{position:static;height:40px;padding:20px 30px 20px 30px;margin-bottom:30px;margin:-30px -30px 20px -30px;background:#f9f9f9;border-bottom:solid 1px #efefef}.box .toggle{position:relative;border-top:2px solid #f6f7f8;border-bottom:2px solid #f6f7f8;margin:0 -30px;padding:30px;height:35px;overflow:hidden}.box .toggle button.ls-ui-open{position:absolute;top:0;left:0;width:100%;height:95px;background:0 0;opacity:.5;border-radius:0}.box .toggle .icon-minus{display:none}.box .toggle .content{display:none}.box .toggle.open{height:auto}.box .toggle.open .icon-minus{display:block}.box .toggle.open .icon-plus{display:none}.box .toggle.open .content{display:block}.box .list li{border-bottom:solid 2px #f6f7f8;margin:0 -30px 30px -30px;padding:0 30px 30px 30px}.box .list li:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.box.new{text-align:center}.box.new i{font-size:80px;line-height:80px;font-family:Poppins,sans-serif;font-style:normal;font-weight:300}.box.new b{margin-top:20px;display:block}a.box{border-right:none;border-left:none}a.box:hover{border-bottom:none;border-right:none;border-left:none;background:#f8fdff;box-shadow:0 0 1px rgba(0,0,0,.2)}.box-asidex{padding-right:25px!important;padding-left:70px;right:0;background:#f9f9f9;border-radius:0 10px 10px 0;height:calc(100% - 30px);position:absolute;padding-top:30px}.box-asidex:after{content:"";display:block;position:absolute;height:100%;width:51px;background:#fff;top:0;bottom:0;left:-6px}.cover{background:#fff2f6;padding:30px 50px;margin:0 -50px;position:relative;border-bottom:solid 1px #dedede}.cover .title,.cover h1,.cover h2,.cover h3,.cover h4{color:#f02e65;font-weight:600;margin-bottom:40px!important;font-size:28px;line-height:42px}.cover i:before{margin:0!important}.cover p{color:#737373}.cover .button{color:#fff}.cover .link,.cover a{color:#f02e65;border-left:none;border-right:none;cursor:pointer}.cover .link:hover,.cover a:hover{border-bottom-color:#f02e65}.console .database .row .col{height:452px}.console .database .row .col:after{width:2px;right:20px}.console .database hr{margin:0 -20px;background:#efefef;height:2px}.console .database h3{font-size:13px;line-height:20px;height:20px;background-color:#f5f5f5;margin:-20px -20px 0 -20px;padding:10px 20px;border-bottom:solid 1px #e1e2e2;font-weight:600}.console .database .empty{height:160px;font-size:12px;text-align:center;margin:50px 0}.console .database .empty h4{font-size:13px;font-weight:600;line-height:120px}.console .database .search{background-color:#f5f5f5;margin:0 -20px 0 -20px;padding:10px 15px}.console .database .search input{height:40px;background-color:#fff;border-radius:25px;padding-top:0;padding-bottom:0}.console .database .code{height:411px;background:#f5f5f5;margin:0 -20px -20px -20px;padding:20px;width:calc(100% - 10px)}.console .database .code .ide{overflow:scroll;height:451px;margin:-20px;box-shadow:none;border-radius:0}.console .database .paging{background:#f5f5f5;margin:0 -20px -20px -20px;padding:20px}.console .database .button{margin:0 -20px;padding:0 20px!important;text-align:inherit;color:#f02e65;width:100%;font-size:15px;line-height:55px;box-sizing:content-box}.console .database .button i{margin-right:8px}.console .database .button:hover{border:none;background:#fff2f6}.console .database .items{margin:0 -20px;height:260px;overflow-x:hidden;overflow-y:scroll}.console .database .items form{opacity:0;position:relative}.console .database .items form button{background:red;position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:45px;border-radius:0;cursor:pointer}.console .database .items li{padding:0;margin:0 0;line-height:45px;font-size:15px;padding-left:50px;padding-right:30px;position:relative}.console .database .items li i{position:absolute;display:none;right:10px}.console .database .items li .name{display:inline-block;width:100%;height:28px}.console .database .items li.selected,.console .database .items li:hover{background:#f5f5f5}.console .database .items li.selected i,.console .database .items li:hover i{display:block}.console .database .items li:last-child{border-bottom:none}body>footer{color:#818181;line-height:40px;margin:0 -50px;padding:12px 50px;font-size:13px;width:100%;background:#f1f1f1;position:relative;margin-top:80px!important}body>footer:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}body>footer .logo img{height:22px;padding-top:12px}body>footer a{color:#505050}body>footer a:hover{border-bottom-color:#505050}body>footer ul:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}body>footer ul li{float:left;margin-right:20px!important}body>footer .copyright{padding-left:2px}[data-ls-if]{display:none}[data-service]{opacity:0}.load-service-start{opacity:0}.load-service-end{opacity:1;transition:opacity .5s ease-out;-moz-transition:opacity .5s ease-out;-webkit-transition:opacity .5s ease-out;-o-transition:opacity .5s ease-out}.modal-open .modal-bg,.modal-open body .modal-bg{position:fixed;content:'';display:block;width:100%;height:100%;left:0;right:0;top:0;bottom:0;background:#0c0c0c;opacity:.5;z-index:4}.modal{overflow:auto;display:none;position:fixed;width:100%;max-height:90%;max-width:640px;background:#fff;z-index:1000;box-shadow:0 0 4px rgba(0,0,0,.25);padding:30px;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:10px;box-sizing:border-box;text-align:left}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.modal{width:calc(100% - 20px)}}.modal.padding-small{padding:15px}.modal.height-tiny form{height:100px}.modal.height-small form{height:220px}.modal.width-small{max-width:400px}.modal.width-medium{max-width:500px}.modal.width-large{max-width:800px}.modal.open{display:block}.modalbutton.close{display:none}.modal.fill{height:95%;max-height:95%;max-width:75%}.modal h1,.modal h2{margin-bottom:25px;margin-top:0;font-size:20px;text-align:left}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5,.modal h6{color:inherit!important;line-height:35px}.modal .main,.modal form{position:relative;border-top:solid 1px #e7e7e7;padding:30px 30px 0 30px;margin:0 -30px}.modal .separator{margin:20px -30px}.modal .info{margin:0 -30px;padding:20px 30px;background:#f5fbff;color:#3b5d73;border-top:solid 1px #eaf2f7;border-bottom:solid 1px #eaf2f7}.modal button.close{width:30px;height:30px;line-height:30px;padding:0;margin:0;background:#1b1b1b;color:#fff;border-radius:50%}.phases{list-style:none;margin:0;padding:0;position:relative}.phases li{display:none}.phases li li{display:block}.phases li.selected{display:block}.phases .number{display:none}.phases h2,.phases h3,.phases h4,.phases h5,.phases h6{margin:0 0 30px 0;text-align:inherit}.container{position:relative}.container .tabs{height:55px;line-height:55px;list-style:none;padding:0;margin-bottom:50px!important;margin-top:-55px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.container .tabs:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.container .tabs .selected{font-weight:400;color:#f02e65;position:relative;opacity:1}.container .tabs .selected:after{content:"";display:block;height:2px;background:#f02e65;width:calc(100% - 46px);position:absolute;bottom:0;border-radius:2px;left:-2px}.container .tabs .number{display:none}.container .tabs li{float:left;padding-right:50px;color:#f02e65;opacity:.9;cursor:pointer}.container .tabs li:focus{outline:0}.container .icon{display:none}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.container .tabs{width:auto;overflow-x:scroll;overflow-y:hidden;white-space:nowrap}.container .tabs li{display:inline-block;float:none}}.ide{background-color:#373738;overflow:hidden;position:relative;z-index:1;box-shadow:0 2px 4px 0 rgba(50,50,93,.3);border-radius:10px;margin-bottom:30px}.ide[data-lang]::after{content:attr(data-lang);display:inline-block;background:#fff;color:#000;position:absolute;top:15px;padding:5px 10px;border-radius:15px;font-size:10px;right:10px;opacity:.95}.ide[data-lang=bash]::after{background:#2b2626;color:#fff}.ide[data-lang=javascript]::after{background:#fff054;color:#333232}.ide[data-lang=html]::after{background:#ff895b;color:#fff}.ide[data-lang=php]::after{background:#6182bb;color:#fff}.ide[data-lang="node.js"]::after{background:#8cc500;color:#373738}.ide[data-lang=ruby]::after{background:#fc3f48;color:#fff}.ide[data-lang=python]::after{background:#3873a2;color:#fff}.ide[data-lang=go]::after{background:#00add8;color:#fff}.ide[data-lang=dart]::after{background:#035698;color:#2bb1f0}.ide .tag{color:inherit!important;background:0 0!important;padding:inherit!important;font-size:inherit!important}.ide .copy{cursor:pointer;content:attr(data-lang);display:inline-block;background:#fff;color:#000;position:absolute;transform:translateX(-50%);bottom:-20px;padding:5px 10px;border-radius:15px;font-size:10px;font-style:normal;left:50%;opacity:0;transition:bottom .3s,opacity .3s}.ide .copy::before{padding-right:5px}.ide:hover .copy{transition:bottom .3s,opacity .3s;opacity:.9;bottom:16px}.ide pre{-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;color:#e6ebf1;font-weight:400;line-height:20px;font-size:13px;margin:0;padding:20px;padding-left:60px}.ide.light{box-shadow:0 2px 4px 0 rgba(50,50,93,.1);background-color:#fff}.ide.light pre{color:#414770}.ide.light .token.cdata,.ide.light .token.comment,.ide.light .token.doctype,.ide.light .token.prolog{color:#91a2b0}.ide.light .token.attr-name,.ide.light .token.builtin,.ide.light .token.char,.ide.light .token.inserted,.ide.light .token.selector,.ide.light .token.string{color:#149570}.ide.light .token.punctuation{color:#414770}.ide.light .language-css .token.string,.ide.light .style .token.string,.ide.light .token.entity,.ide.light .token.operator,.ide.light .token.url,.ide.light .token.variable{color:#414770}.ide.light .line-numbers .line-numbers-rows{background:#f2feef}.ide.light .line-numbers-rows>span:before{color:#5dc79e}.ide.light .token.keyword{color:#6772e4;font-weight:500}code[class*=language-],pre[class*=language-]{text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{padding:.1em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6b7c93}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#f79a59}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#3ecf8e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#45b2e8}.token.keyword{color:#7795f8}.token.important,.token.regex{color:#fd971f}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;padding-left:60px;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{background:#39393c;position:absolute;pointer-events:none;top:-20px;padding:20px 0;font-size:100%;left:-60px;width:40px;letter-spacing:-1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{padding-right:5px;pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#636365;display:block;padding-right:.8em;text-align:right}html{padding:0;margin:0;direction:ltr}body{margin:0;background:#f6f7f8 no-repeat fixed}main{min-height:100%}ul{padding:0;margin:0}ul li{margin:0;list-style:none}.force-left{direction:ltr;text-align:left}.force-right{direction:rtl;text-align:right}.pull-left{float:left}.pull-right{float:right} \ No newline at end of file diff --git a/public/dist/styles/default-rtl.css b/public/dist/styles/default-rtl.css index d7c316a23f..7c5e887828 100644 --- a/public/dist/styles/default-rtl.css +++ b/public/dist/styles/default-rtl.css @@ -1 +1 @@ -.pull-start{float:right}.pull-end{float:left}img[src=""]{visibility:hidden;display:inline-block}.margin-end{margin-left:20px!important}.margin-start{margin-right:20px!important}.margin-end-small{margin-left:10px!important}.margin-start-small{margin-right:10px!important}.margin-end-large{margin-left:50px!important}.margin-start-large{margin-right:50px!important}.margin-end-no{margin-left:0!important}.margin-start-no{margin-right:0!important}.margin-top{margin-top:30px!important}.margin-bottom{margin-bottom:30px!important}.margin-top-no{margin-top:0!important}.margin-bottom-no{margin-bottom:0!important}.margin-top-xxl{margin-top:140px!important}.margin-top-xl{margin-top:80px!important}.margin-top-large{margin-top:50px!important}.margin-top-small{margin-top:15px!important}.margin-top-tiny{margin-top:5px!important}.margin-top-negative{margin-top:-30px!important}.margin-top-negative-tiny{margin-top:-5px!important}.margin-top-negative-small{margin-top:-15px!important}.margin-top-negative-large{margin-top:-50px!important}.margin-top-negative-xl{margin-top:-80px!important}.margin-top-negative-xxl{margin-top:-100px!important}.margin-bottom-xxl{margin-bottom:140px!important}.margin-bottom-xl{margin-bottom:80px!important}.margin-bottom-large{margin-bottom:50px!important}.margin-bottom-small{margin-bottom:15px!important}.margin-bottom-tiny{margin-bottom:5px!important}.margin-bottom-negative{margin-bottom:-30px!important}.margin-bottom-negative-tiny{margin-bottom:-5px!important}.margin-bottom-negative-small{margin-bottom:-15px!important}.margin-bottom-negative-large{margin-bottom:-50px!important}.margin-bottom-negative-xl{margin-bottom:-80px!important}.margin-bottom-negative-xl{margin-bottom:-100px!important}.ratio-wide{height:0;overflow:hidden;padding-top:56%;position:relative;width:100%}.ratio-wide>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-square{height:0;overflow:hidden;padding-top:56%;position:relative;width:100%}.ratio-square>*{position:absolute;top:0;left:0;width:100%;height:100%}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}*{font-family:Poppins,sans-serif,Arial;-webkit-font-smoothing:antialiased;font-weight:300}h1,h2,h3,h4,h5,h6{margin:0}h4,h5,h6{font-weight:400}.link,a{color:#1e849e;text-decoration:none;border-left:2px solid transparent;border-right:2px solid transparent;border-bottom:solid 1px transparent}.link:hover,a:hover{border-bottom:dotted 1px #1e849e}.link.disabled,a.disabled{opacity:.5}.link.disabled:hover,a.disabled:hover{border-bottom:none}.link.tag:hover,a.tag:hover{border-bottom:none;opacity:.9}b,strong{font-weight:500}p{margin:0 0 20px 0;line-height:26px}small{font-size:16px;color:#818181}.text-size-small{font-size:13px}.text-size-normal{font-size:16px}.text-one-liner{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-bold{font-weight:400!important}.text-danger{color:#f53d3d}.text-success{color:#1bbf61}.text-upper{text-transform:uppercase}.text-warning{color:#ffed4d}.text-focus{color:#f02e65}.text-fade{color:#818181}.text-disclaimer{font-size:11px;color:#818181}.text-fade-extra{color:#818181;opacity:.5}.text-line-high-large{line-height:30px}.text-line-high-xl{line-height:40px}.text-sign{margin:5px 0;font-size:25px;width:25px;height:25px;line-height:25px;display:inline-block}.text-align-center{text-align:center}.text-align-start{text-align:right}.text-align-end{text-align:left}.text-align-left{text-align:left}.text-align-right{text-align:right}.text-dir-ltr{direction:ltr;display:inline-block}.text-dir-rtl{direction:rtl;display:inline-block}.icon-dot-3:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}table{width:calc(100% + 60px);border-collapse:collapse;margin:-30px;border-radius:10px;overflow:hidden;position:relative;table-layout:fixed}table thead{box-shadow:0 0 2px rgba(0,0,0,.25);border-bottom:solid 1px #f1f3f5;font-size:14px}table thead th{position:sticky;top:0}table.small{font-size:14px}table.open-end tbody tr:last-child{border-bottom:none;font-weight:700;background:#f7fbf7}table.full tbody td,table.full tbody th{vertical-align:top;white-space:normal;overflow:auto;line-height:24px;padding-top:20px;padding-bottom:20px;height:auto}table .avatar{width:30px;height:30px}table tr{border-bottom:solid 1px #f1f3f5}table tr:last-child{border-bottom:none}table tr:nth-child(even){background:#fbfbfb}table th{text-align:right;font-weight:400}table th i{color:#818181;font-size:10px;display:inline-block;vertical-align:top;line-height:16px;padding:0 3px}table td,table th{height:65px;padding:0 15px;line-height:50px}table td:first-child,table th:first-child{padding-right:30px}table td:last-child,table th:last-child{padding-left:30px}@media only screen and (max-width:550px){table td:first-child,table th:first-child{width:auto}}table td,table th{overflow:hidden;white-space:nowrap}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){table.vertical{display:block;overflow:hidden;padding-top:12px}table.vertical .hide{display:none}table.vertical tbody,table.vertical td,table.vertical th,table.vertical thead,table.vertical tr{width:100%;display:block}table.vertical th,table.vertical tr{padding-top:12px;padding-bottom:12px}table.vertical th:first-child,table.vertical tr:first-child{padding-top:0}table.vertical td,table.vertical th{padding:5px 20px!important;text-overflow:ellipsis;white-space:normal;height:40px;line-height:40px}table.vertical td:first-child,table.vertical td:last-child,table.vertical th:first-child,table.vertical th:last-child{padding:0 10px}table.vertical td:last-child,table.vertical th:last-child{padding-bottom:0}table.vertical td p,table.vertical th p{display:inline-block;width:calc(100% - 40px)}table.vertical td:before{content:attr(data-title);margin-right:4px;font-weight:400}table.vertical thead{display:none}}.zone{max-width:910px;margin:0 auto 40px auto}.zone.xxxl{max-width:calc(100% - 100px)}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.zone.xxxl{max-width:100%}}.zone.xxl{max-width:1100px}.zone.xl{max-width:910px}.zone.large{max-width:700px}.zone.medium{max-width:550px}.zone.small{max-width:320px}.row{position:relative;margin:0 -50px;padding-right:50px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.row{margin:0 -30px;padding-right:30px}}.row.force-ltr>.col{float:left}.row.force-rtl>.col{float:right}.row.force-reverse>.col{float:left}.row.wide{margin:0 -100px;padding-right:100px}.row.wide>.span-1{width:calc(8.33333333% * 1 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-2{width:calc(8.33333333% * 2 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-3{width:calc(8.33333333% * 3 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-4{width:calc(8.33333333% * 4 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-5{width:calc(8.33333333% * 5 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-6{width:calc(8.33333333% * 6 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-7{width:calc(8.33333333% * 7 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-8{width:calc(8.33333333% * 8 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-9{width:calc(8.33333333% * 9 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-10{width:calc(8.33333333% * 10 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-11{width:calc(8.33333333% * 11 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-12{width:calc(8.33333333% * 12 - 100px);box-sizing:content-box;padding-left:100px}.row.thin{margin:0 -20px;padding-right:20px}.row.thin>.span-1{width:calc(8.33333333% * 1 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-2{width:calc(8.33333333% * 2 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-3{width:calc(8.33333333% * 3 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-4{width:calc(8.33333333% * 4 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-5{width:calc(8.33333333% * 5 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-6{width:calc(8.33333333% * 6 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-7{width:calc(8.33333333% * 7 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-8{width:calc(8.33333333% * 8 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-9{width:calc(8.33333333% * 9 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-10{width:calc(8.33333333% * 10 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-11{width:calc(8.33333333% * 11 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-12{width:calc(8.33333333% * 12 - 20px);box-sizing:content-box;padding-left:20px}.row:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.row .col{float:right;box-sizing:border-box}.row .col.sticky-top{position:sticky;top:0}.row .col.sticky-bottom{position:sticky;bottom:0}.row .span-1{width:calc(8.33333333% * 1 - 40px);box-sizing:content-box;padding-left:40px}.row .span-2{width:calc(8.33333333% * 2 - 40px);box-sizing:content-box;padding-left:40px}.row .span-3{width:calc(8.33333333% * 3 - 40px);box-sizing:content-box;padding-left:40px}.row .span-4{width:calc(8.33333333% * 4 - 40px);box-sizing:content-box;padding-left:40px}.row .span-5{width:calc(8.33333333% * 5 - 40px);box-sizing:content-box;padding-left:40px}.row .span-6{width:calc(8.33333333% * 6 - 40px);box-sizing:content-box;padding-left:40px}.row .span-7{width:calc(8.33333333% * 7 - 40px);box-sizing:content-box;padding-left:40px}.row .span-8{width:calc(8.33333333% * 8 - 40px);box-sizing:content-box;padding-left:40px}.row .span-9{width:calc(8.33333333% * 9 - 40px);box-sizing:content-box;padding-left:40px}.row .span-10{width:calc(8.33333333% * 10 - 40px);box-sizing:content-box;padding-left:40px}.row .span-11{width:calc(8.33333333% * 11 - 40px);box-sizing:content-box;padding-left:40px}.row .span-12{width:calc(8.33333333% * 12 - 40px);box-sizing:content-box;padding-left:40px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.row.responsive{width:100%;padding:0;margin:0}.row.responsive>.span-1,.row.responsive>.span-10,.row.responsive>.span-11,.row.responsive>.span-12,.row.responsive>.span-2,.row.responsive>.span-3,.row.responsive>.span-4,.row.responsive>.span-5,.row.responsive>.span-6,.row.responsive>.span-7,.row.responsive>.span-8,.row.responsive>.span-9{width:calc(8.33333333% * 12 - 0px)!important;box-sizing:content-box!important;padding-left:0!important;width:100%!important}}.tiles{position:relative}.tiles:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.tiles li{margin-left:50px!important;float:right;width:calc(33% - 33px)}.tiles li .photo-title{width:calc(100% + 30px);height:15px;margin:-15px -15px 10px -15px;border-radius:10px 10px 0 0;background:#f1f3f5;border-bottom:solid 1px #f1f3f5}.tiles li:nth-child(3n){margin-left:0!important}@media only screen and (max-width:550px){.tiles li{width:100%;margin-left:0!important}}@font-face{font-family:fontello;src:url(data:application/octet-stream;base64,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) format('woff'),url(data:application/octet-stream;base64,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b250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADkAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAGYAbwBuAHQAZQBsAGwAbwBSAGUAZwB1AGwAYQByAGYAbwBuAHQAZQBsAGwAbwBmAG8AbgB0AGUAbABsAG8AVgBlAHIAcwBpAG8AbgAgADEALgAwAGYAbwBuAHQAZQBsAGwAbwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUABHVzZXIGZm9sZGVyBGxpc3QFbG9naW4DY29nB3R3aXR0ZXILYXJ0aWNsZS1hbHQGY2FuY2VsBGhvbWUIZG93bi1kaXIIZmFjZWJvb2sIYXN0ZXJpc2sGdXBsb2FkCXN0b3B3YXRjaAZleHBvcnQFaGVhcnQEcGx1cwZ1cC1kaXIEbWVudQlsZWZ0LW9wZW4KcmlnaHQtb3BlbgVpbmJveAZ3cmVuY2gHY29tbWVudA1zdGFja292ZXJmbG93CHF1ZXN0aW9uCm9rLWNpcmNsZWQHd2FybmluZwRtYWlsBGxpbmsHa2V5LWludgV0cmFzaAhkb3dubG9hZAdnbGFzc2VzBnFyY29kZQdzaHVmZmxlA2V5ZQRsb2NrBnNlYXJjaARiZWxsBXVzZXJzCGxvY2F0aW9uCWJyaWVmY2FzZQlp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) format('truetype')}[class*=" icon-"]:before,[class^=icon-]:before{font-family:fontello;font-style:normal;font-weight:400;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.icon-user:before{content:'\e800'}.icon-folder:before{content:'\e801'}.icon-list:before{content:'\e802'}.icon-login:before{content:'\e803'}.icon-cog:before{content:'\e804'}.icon-twitter:before{content:'\e805'}.icon-article-alt:before{content:'\e806'}.icon-cancel:before{content:'\e807'}.icon-home:before{content:'\e808'}.icon-down-dir:before{content:'\e809'}.icon-facebook:before{content:'\e80a'}.icon-asterisk:before{content:'\e80b'}.icon-upload:before{content:'\e80c'}.icon-stopwatch:before{content:'\e80d'}.icon-export:before{content:'\e80e'}.icon-heart:before{content:'\e80f'}.icon-plus:before{content:'\e810'}.icon-up-dir:before{content:'\e811'}.icon-menu:before{content:'\e812'}.icon-left-open:before{content:'\e813'}.icon-right-open:before{content:'\e814'}.icon-inbox:before{content:'\e815'}.icon-wrench:before{content:'\e816'}.icon-comment:before{content:'\e817'}.icon-stackoverflow:before{content:'\e818'}.icon-question:before{content:'\e819'}.icon-ok-circled:before{content:'\e81a'}.icon-warning:before{content:'\e81b'}.icon-mail:before{content:'\e81c'}.icon-link:before{content:'\e81d'}.icon-key-inv:before{content:'\e81e'}.icon-trash:before{content:'\e81f'}.icon-download:before{content:'\e820'}.icon-glasses:before{content:'\e821'}.icon-qrcode:before{content:'\e822'}.icon-shuffle:before{content:'\e823'}.icon-eye:before{content:'\e824'}.icon-lock:before{content:'\e825'}.icon-search:before{content:'\e826'}.icon-bell:before{content:'\e827'}.icon-users:before{content:'\e828'}.icon-location:before{content:'\e829'}.icon-briefcase:before{content:'\e82a'}.icon-instagram:before{content:'\e82b'}.icon-clock:before{content:'\e82c'}.icon-phone:before{content:'\e82d'}.icon-calendar:before{content:'\e82e'}.icon-print:before{content:'\e82f'}.icon-edit:before{content:'\e830'}.icon-bold:before{content:'\e831'}.icon-italic:before{content:'\e832'}.icon-rocket:before{content:'\e833'}.icon-whatsapp:before{content:'\e834'}.icon-dot-3:before{content:'\e835'}.icon-info-circled:before{content:'\e836'}.icon-videocam:before{content:'\e837'}.icon-quote-right:before{content:'\e838'}.icon-picture:before{content:'\e839'}.icon-palette:before{content:'\e83a'}.icon-lamp:before{content:'\e83b'}.icon-book-open:before{content:'\e83c'}.icon-ok:before{content:'\e83d'}.icon-chat-alt:before{content:'\e83e'}.icon-archive:before{content:'\e83f'}.icon-play:before{content:'\e840'}.icon-pause:before{content:'\e841'}.icon-down-open:before{content:'\e842'}.icon-up-open:before{content:'\e843'}.icon-minus:before{content:'\e844'}.icon-exchange:before{content:'\e845'}.icon-network:before{content:'\e846'}.icon-link-ext:before{content:'\f08e'}.icon-github-circled:before{content:'\f09b'}.icon-filter:before{content:'\f0b0'}.icon-docs:before{content:'\f0c5'}.icon-list-bullet:before{content:'\f0ca'}.icon-list-numbered:before{content:'\f0cb'}.icon-underline:before{content:'\f0cd'}.icon-sort:before{content:'\f0dc'}.icon-linkedin:before{content:'\f0e1'}.icon-smile:before{content:'\f118'}.icon-keyboard:before{content:'\f11c'}.icon-code:before{content:'\f121'}.icon-shield:before{content:'\f132'}.icon-bitbucket:before{content:'\f171'}.icon-windows:before{content:'\f17a'}.icon-wheelchair:before{content:'\f193'}.icon-bank:before{content:'\f19c'}.icon-google:before{content:'\f1a0'}.icon-building-filled:before{content:'\f1ad'}.icon-database:before{content:'\f1c0'}.icon-lifebuoy:before{content:'\f1cd'}.icon-header:before{content:'\f1dc'}.icon-binoculars:before{content:'\f1e5'}.icon-chart-area:before{content:'\f1fe'}.icon-pinterest:before{content:'\f231'}.icon-medium:before{content:'\f23a'}.icon-gitlab:before{content:'\f296'}.icon-telegram:before{content:'\f2c6'}.datalist-polyfill{list-style:none;display:none;background:#fff;box-shadow:0 2px 2px #999;position:absolute;left:0;top:0;margin:0;padding:0;max-height:300px;overflow-y:auto}.datalist-polyfill:empty{display:none!important}.datalist-polyfill>li{padding:3px;font:13px "Lucida Grande",Sans-Serif}.datalist-polyfill__active{background:#3875d7;color:#fff}date-input-polyfill{z-index:1000!important;max-width:320px!important;width:320px!important}date-input-polyfill .monthSelect-wrapper,date-input-polyfill .yearSelect-wrapper{height:50px;line-height:50px;padding:0;width:40%!important;margin-bottom:10px!important}date-input-polyfill .monthSelect-wrapper select,date-input-polyfill .yearSelect-wrapper select{padding:0 12px;height:50px;line-height:50px;box-sizing:border-box}date-input-polyfill .yearSelect-wrapper{width:35%!important}date-input-polyfill table{width:100%!important;max-width:100%!important;padding:0 12px 12px 12px!important;box-sizing:border-box;margin:0}date-input-polyfill table td:first-child,date-input-polyfill table td:last-child,date-input-polyfill table th:first-child,date-input-polyfill table th:last-child{width:32px!important;padding:4px!important}date-input-polyfill select{margin-bottom:10px}date-input-polyfill button{width:25%!important;height:50px!important;line-height:50px!important;margin-bottom:10px!important;background:inherit;position:relative;color:inherit;padding:inherit;box-sizing:inherit;border-radius:inherit;font-size:inherit;box-shadow:none;border:none;border-bottom:none!important}::placeholder{color:#868686;text-align:right}::-webkit-input-placeholder{text-align:right}input:-moz-placeholder{text-align:right}.button,button{display:inline-block;background:#f02e65;border-radius:26px;border:none;color:#fff;height:52px;line-height:52px;padding:0 25px;cursor:pointer;font-size:16px;box-sizing:border-box;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.button:focus,.button:hover,button:focus,button:hover{background:#c52653;border-bottom:none}.button.fly,button.fly{position:fixed;z-index:2;bottom:30px;left:30px}.button.fill,button.fill{display:block;width:100%;text-align:center;padding:0 10px!important}.button.fill-aligned,button.fill-aligned{display:block;width:100%;text-align:right;padding:0 20px!important}.button.icon,button.icon{padding-left:30px!important}.button.icon-reduce,button.icon-reduce{padding-right:15px!important}.button.reverse,button.reverse{background:0 0;height:50px;line-height:48px;padding:0 23px;color:#f02e65;border:solid 2px #f02e65}.button.reverse:focus,.button.reverse:hover,button.reverse:focus,button.reverse:hover{color:#c52653;border-color:#c52653}.button.round,button.round{width:52px;padding:0}.button.round.small,button.round.small{font-size:12px;width:30px;height:30px;line-height:30px}.button.white,button.white{background:#fff;color:#f02e65}.button.white.reverse,button.white.reverse{color:#fff;background:0 0;border:solid 2px #fff}.button.trans,button.trans{background:0 0!important}.button.trans.reverse,button.trans.reverse{background:0 0!important}.button.success,button.success{background:#1bbf61}.button.success.reverse,button.success.reverse{color:#1bbf61;background:#fff;border:solid 2px #1bbf61}.button.danger,button.danger{background:#f53d3d}.button.danger.reverse,button.danger.reverse{color:#f53d3d;background:#fff;border:solid 2px #f53d3d}.button .disabled,.button.disabled,.button:disabled,button .disabled,button.disabled,button:disabled{background:#818181;cursor:default}.button.link,button.link{background:0 0;border-radius:0;color:#1e849e;height:auto;line-height:normal;padding:0;padding-left:0!important}.button.link:hover,button.link:hover{border-bottom:dotted 1px #1e849e}.button.link:focus,button.link:focus{box-shadow:inherit}.button.strip,button.strip{background:0 0;height:auto;line-height:16px;color:inherit;padding:0 5px}.button.facebook,button.facebook{color:#fff!important;background:#4070b4!important}.button.twitter,button.twitter{color:#fff!important;background:#56c2ea!important}.button.linkedin,button.linkedin{color:#fff!important;background:#0076b5!important}.button.github,button.github{color:#fff!important;background:#7e7c7c!important}.button:focus,button:focus{outline:0}label{margin-bottom:15px;display:block;line-height:normal}.input,input[type=date],input[type=datetime-local],input[type=email],input[type=file],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px}.input[type=file],input[type=date][type=file],input[type=datetime-local][type=file],input[type=email][type=file],input[type=file][type=file],input[type=number][type=file],input[type=password][type=file],input[type=search][type=file],input[type=tel][type=file],input[type=text][type=file],input[type=url][type=file],select[type=file],textarea[type=file]{line-height:0;padding:15px;height:auto}.input[xtype=file],input[type=date][xtype=file],input[type=datetime-local][xtype=file],input[type=email][xtype=file],input[type=file][xtype=file],input[type=number][xtype=file],input[type=password][xtype=file],input[type=search][xtype=file],input[type=tel][xtype=file],input[type=text][xtype=file],input[type=url][xtype=file],select[xtype=file],textarea[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;right:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.input[xtype=file]:disabled,input[type=date][xtype=file]:disabled,input[type=datetime-local][xtype=file]:disabled,input[type=email][xtype=file]:disabled,input[type=file][xtype=file]:disabled,input[type=number][xtype=file]:disabled,input[type=password][xtype=file]:disabled,input[type=search][xtype=file]:disabled,input[type=tel][xtype=file]:disabled,input[type=text][xtype=file]:disabled,input[type=url][xtype=file]:disabled,select[xtype=file]:disabled,textarea[xtype=file]:disabled{opacity:0!important}.input:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=file]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{outline:0;border-color:#b3d7fd}.input:disabled,input[type=date]:disabled,input[type=datetime-local]:disabled,input[type=email]:disabled,input[type=file]:disabled,input[type=number]:disabled,input[type=password]:disabled,input[type=search]:disabled,input[type=tel]:disabled,input[type=text]:disabled,input[type=url]:disabled,select:disabled,textarea:disabled{background:#f1f3f5}.input.strip,input[type=date].strip,input[type=datetime-local].strip,input[type=email].strip,input[type=file].strip,input[type=number].strip,input[type=password].strip,input[type=search].strip,input[type=tel].strip,input[type=text].strip,input[type=url].strip,select.strip,textarea.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:left 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.input.strip:focus,input[type=date].strip:focus,input[type=datetime-local].strip:focus,input[type=email].strip:focus,input[type=file].strip:focus,input[type=number].strip:focus,input[type=password].strip:focus,input[type=search].strip:focus,input[type=tel].strip:focus,input[type=text].strip:focus,input[type=url].strip:focus,select.strip:focus,textarea.strip:focus{border-color:#b3d7fd}input[type=email],input[type=url]{direction:ltr}input[type=email]::placeholder,input[type=url]::placeholder{text-align:left;direction:ltr}select{background:0 0;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,");background-position:left 15px top 50%;background-repeat:no-repeat;background-color:#fff;width:calc(100% - 62px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:45px}select:-webkit-autofill{background-image:url("data:image/svg+xml;utf8,")!important;background-position:100% 50%!important;background-repeat:no-repeat!important}input[type=search],input[type=search].strip{background:0 0;-webkit-appearance:none;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAdZJREFUWIXt1s2LjWEYBvDfnDMzFpNIamZIFrMiJYMyFmKhZKfOwoiFr2LFn2BByG6WVrKwMcjWxgoLIlKIUk6RrzAjZWZ8LO731FlwvB+PUbjq6X0X7/VeV/d9P9fz8IdRL8Hpw3x8w0xaOz9GNxq4gJeZcGs1cRab0fU7xLfgMSYzoT3YgNXYhIO4iM+4iTWphGs4jikcFSXvhEGczr4/UFW8C2N4jXUFudvwCYeqGNgnSr6yJH8rpkWLCqMfE9hdUryFE3iC3qLEk7ij+kT34Q32FiHV8Qr7K4q3cArXihCGxd5elMjARnzBvE4f1dreV+AtnicycC/7/7K8BhaIvqXCO3zFwrwGZtCT0EAtW9N5DTSxWGR/CizNns/yEgbFEK5NZGCnaEPHE7e9Ai9wA6OJDIzistgJubFdxHB/RfFVYgCHixJruI5x5dNwDm6J47sUhkTvjpUw0Y1zeOrXR3hHjOA9zmBuTs4Arog4/yhuUZWwHPdFMh7280BZgiP4ILJ/UuymqRQmejPxphiquzgvKnMJDzOxB9glZqiRiecykbfHdawX98EhcdxO4BGu4nYm2EJDzEKPSMIdYrBnFYUq8d/EP2di1gey3cS4ErflvxffASbhcakIINaMAAAAAElFTkSuQmCC);background-position:right 15px top 50%;background-repeat:no-repeat;background-size:20px 20px;width:calc(100% - 60px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:45px}select[multiple]{min-height:75px;padding:5px 10px!important;padding-left:50px!important}select[multiple] option{padding:10px 4px;border-bottom:solid 1px #f1f1f1}select[multiple] option:last-child{border-bottom:none}textarea{min-height:75px;resize:vertical;line-height:32px;padding:5px 15px}textarea.tall{min-height:180px}fieldset{border:none;margin:0;padding:0}.counter{font-size:13px;float:left;margin-top:-20px}.file-preview{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAIElEQVQoU2NkYGAwZsAEZ9GFGIeIQix+wfQgyDODXSEAcUwGCrDSHgkAAAAASUVORK5CYII=)!important;border:solid 1px #e2e2e2;box-shadow:inset 0 0 3px #a0a0a0;border-radius:8px;width:calc(100% - 2px);max-height:180px;visibility:visible!important}.video-preview{padding-top:56%;position:relative;border-radius:10px;background:#e7e7e7;overflow:hidden;margin:0}.video-preview iframe{position:absolute;top:0;width:100%;height:100%;border:none}.map-preview{padding-top:50%;position:relative;margin-bottom:10px;border-radius:10px;background:#e7e7e7;overflow:hidden;box-shadow:0 0 30px rgba(218,218,218,.5)}.map-preview iframe{position:absolute;top:0;width:100%;height:100%;border:none}.tooltip{position:relative}.tooltip.large:hover:after{white-space:normal;width:280px}.tooltip:hover:after{white-space:nowrap;background:#333;border-radius:5px;bottom:26px;color:#fff;content:attr(data-tooltip);padding:5px 15px;position:absolute;font-size:13px;line-height:20px;z-index:98;right:20%;margin-right:-30px}.tooltip:hover:before{border:solid;border-color:#333 transparent;border-width:6px 6px 0 6px;bottom:20px;content:"";position:absolute;z-index:99;right:5px}.tooltip.down:hover:after{top:26px;bottom:inherit}.tooltip.down:hover:before{top:20px;border-width:0 6px 6px 6px;bottom:inherit}.tag{display:inline-block;background:#e7e7e7;color:#868686;border-radius:12px;line-height:24px;padding:0 8px;font-size:12px;box-shadow:none!important;border:none;height:auto;width:auto;white-space:nowrap;text-overflow:ellipsis}.tag:hover{border:none}.tag.green{background:#1bbf61;color:#fff}.tag.red{background:#f53d3d;color:#fff}.tag.yellow{background:#ffe28b;color:#494949}.tag.focus{background:#f02e65;color:#fff}.tag.dark{background:#6f6f6f;color:#e7e7e7}.tag.blue{background:#4abde8;color:#fff}.tag.link{background:#1e849e;color:#fff}input[type=checkbox]{width:26px;height:16px;position:relative;-webkit-appearance:none;border-radius:0;border:none;background:0 0;vertical-align:middle}input[type=checkbox]:after{content:"";display:block;width:20px;height:20px;background:#fff;top:-5px;border-radius:50%;position:absolute;border:solid 3px #f02e65;vertical-align:middle}input[type=checkbox]:checked:after{text-align:center;font-family:fontello;content:'\e83d';font-size:16px;line-height:20px;color:#fff;background:#f02e65}input[type=checkbox]:focus{outline:0}input[type=checkbox]:focus:after,input[type=checkbox]:hover:after{outline:0;border-color:#000}input[type=checkbox]:checked:focus:after,input[type=checkbox]:checked:hover:after{border-color:#f02e65}.input-copy{position:relative}.input-copy input,.input-copy textarea{padding-left:65px;width:calc(100% - 82px);resize:none}.input-copy .copy{position:absolute;top:0;left:0;border-right:solid 1px #e2e2e2;height:calc(100% - 2px);width:50px;line-height:50px;text-align:center;background:#fbfbfb;margin:1px;border-radius:0 10px 10px 0}.paging{color:#8d8e8e;padding:5px 15px;font-size:12px}.paging form{display:inline-block}.blue-snap iframe{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px;float:none!important;height:40px!important;width:calc(100% - 32px)!important;border:solid 1px #e2e2e2!important;background:0 0!important;position:static!important}.blue-snap iframe[type=file]{line-height:0;padding:15px;height:auto}.blue-snap iframe[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;right:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.blue-snap iframe[xtype=file]:disabled{opacity:0!important}.blue-snap iframe:focus{outline:0;border-color:#b3d7fd}.blue-snap iframe:disabled{background:#f1f3f5}.blue-snap iframe.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:left 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.blue-snap iframe.strip:focus{border-color:#b3d7fd}.blue-snap .error{font-size:12px;margin-top:-25px;color:#f53d3d;height:40px;padding-right:2px}.pell{height:auto;padding-bottom:0;margin-bottom:0;padding-top:0;background:#fff;line-height:normal!important}.pell.hide{padding:0!important;height:1px;min-height:1px;max-height:1px;border:none;box-shadow:none;margin-bottom:20px;opacity:0}.pell [contenteditable=true]:empty:before{content:attr(placeholder);display:block;color:#868686}.pell .pell-actionbar{border-bottom:solid 1px #e7e7e7;margin:0 -15px 15px -15px;padding:10px 15px}.pell .pell-content{min-height:100px;display:block;padding:10px;margin:-10px;cursor:text}.pell .pell-content:focus{outline:0}.pell button{background:inherit;color:inherit;margin:0;padding:0;padding-left:15px;height:40px;line-height:40px;box-shadow:none;cursor:pointer;font-size:13px;border-radius:0}.pell button.pell-button-selected,.pell button:focus,.pell button:hover{color:#1e849e}.pell h1,.pell h2,.pell h3,.pell h4,.pell h5,.pell h6{text-align:inherit;margin-bottom:30px}.pell b,.pell strong{font-weight:700}.pell ol,.pell ul{margin:0 0 20px 0}.pell ol li,.pell ul li{display:list-item!important;list-style:inherit;margin-bottom:10px}.pell ol li p,.pell ul li p{margin:0}.pell ul li{margin:0 20px;display:list-item}label.switch{line-height:42px}input[type=checkbox].switch{width:67px;height:42px;line-height:42px;border-radius:21px;background:#818181;display:block;margin:0;padding:5px;padding-right:30px;padding-left:5px}input[type=checkbox].switch:checked{background:#f02e65;padding-right:5px;padding-left:30px}input[type=checkbox].switch:focus:after,input[type=checkbox].switch:hover:after{background:#fff}input[type=checkbox].switch:after{content:"";display:block;width:32px;height:32px;background:#fff;border-radius:50%;border:none;position:static;top:0}.password-meter{margin:-41px 10px 30px 10px;height:2px;background:0 0;max-width:100%;z-index:2;position:relative}.password-meter.weak{background:#f53d3d}.password-meter.medium{background:#ffed4d}.password-meter.strong{background:#1bbf61}.color-input:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.color-input .color-preview{width:53px;height:53px;float:right;margin-left:10px;background:#000;border-radius:10px;box-shadow:inset 0 0 3px #a0a0a0;position:relative}.color-input .color-preview input{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;cursor:pointer}.color-input input{text-transform:uppercase;float:right;width:calc(100% - 95px)}.grecaptcha-badge{box-shadow:none!important;border-radius:10px!important;overflow:hidden!important;background:#4d92df!important;bottom:25px}.grecaptcha-badge:hover{width:256px!important}.back{font-size:15px;line-height:24px;height:24px;margin-right:-15px;margin-top:-25px;margin-bottom:20px}hr{height:1px;background:#eceff1;border:none}.upload{position:relative}.upload:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.upload input{position:absolute;top:0;right:0;opacity:0;cursor:pointer}.upload.single .preview{height:0;position:relative;padding-top:100%;width:100%;margin-bottom:15px!important}.upload.single .preview li{position:absolute;top:0;width:calc(100% - 20px);height:calc(100% - 20px);margin-left:0!important;margin-bottom:0!important}.upload .button{float:right;margin-left:20px!important}.upload .button.disabled,.upload .button.disabled:hover{background:0 0;color:inherit;border-color:inherit}.upload .count{float:right;line-height:52px}.upload .progress{background:#1bbf61;height:6px;border-radius:3px;margin-bottom:15px!important}.upload .preview:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.upload .preview li{float:right;margin-left:20px!important;margin-bottom:15px!important;background:#f1f1f1;width:150px;height:150px;line-height:148px;text-align:center;border-radius:20px;overflow:hidden;position:relative;cursor:pointer;border:solid 10px #f1f1f1}.upload .preview li:hover:before{background:#f02e65}.upload .preview li:before{content:'\e807';font-family:fontello;font-size:12px;position:absolute;width:20px;height:20px;display:block;top:5px;left:5px;text-align:center;line-height:20px;vertical-align:middle;border-radius:50%;background:#484848;color:#fff;z-index:1}.upload .preview li img{vertical-align:middle;max-height:150px;max-width:150px;-webkit-filter:drop-shadow(0 0 6px rgba(0, 0, 0, .3));filter:drop-shadow(0 0 1px rgba(0, 0, 0, .3))}.upload.wide .preview li{height:0;width:100%;position:relative;padding-top:30.547%;background:#e7e7e7;border-radius:10px;overflow:hidden;border:solid 1px #f9f9f9;margin:0}.upload.wide .preview li img{border-radius:10px;position:absolute;top:0;width:100%;display:block;opacity:1;max-width:inherit;max-height:inherit}ol{list-style:none;counter-reset:x-counter;padding:0}ol li{counter-increment:x-counter;line-height:30px;margin-bottom:30px;margin-right:45px}ol li::before{display:inline-block;content:counter(x-counter);color:#f02e65;color:#fff;background:#fff;background:#f02e65;border:solid 2px #f02e65;margin-left:15px;margin-right:-45px;width:26px;height:26px;border-radius:50%;text-align:center;line-height:26px}.required{color:#f53d3d;font-size:8px;position:relative;top:-8px}.drop-list{position:relative;outline:0}.drop-list.open ul{display:block}.drop-list ul{position:relative;background:#fff;border-radius:10px;box-shadow:0 0 3px rgba(0,0,0,.05);padding:30px;display:block;border-bottom:none;box-shadow:0 0 6px rgba(0,0,0,.1);display:none;position:absolute;bottom:calc(100% + 10px);z-index:2;padding:0;right:-10px;max-width:280px;min-width:240px;overflow:hidden}.drop-list ul.padding-small{padding:15px}.drop-list ul.y-scroll{overflow-y:auto}.drop-list ul.danger{background:#f53d3d;color:#fff}.drop-list ul.focus{background:#f02e65;color:#fff}.drop-list ul.focus .button,.drop-list ul.focus button{background:#fff;color:#f02e65}.drop-list ul.warning{background:#ffed4d;color:#2d2d2d}.drop-list ul.warning .button,.drop-list ul.warning button{background:rgba(45,45,45,.8);color:#ffed4d}.drop-list ul>footer{margin:30px -30px -30px -30px;padding:15px 30px;background:#f5f5f5;border:solid 1px #eaeaea;border-radius:0 0 10px 10px}.drop-list ul hr{height:2px;background:#eceff1;border:none;margin:30px -30px}.drop-list ul .header{position:static;height:40px;padding:20px 30px 20px 30px;margin-bottom:30px;margin:-30px -30px 20px -30px;background:#f9f9f9;border-bottom:solid 1px #efefef}.drop-list ul .toggle{position:relative;border-top:2px solid #f6f7f8;border-bottom:2px solid #f6f7f8;margin:0 -30px;padding:30px;height:35px;overflow:hidden}.drop-list ul .toggle button.ls-ui-open{position:absolute;top:0;right:0;width:100%;height:95px;background:0 0;opacity:.5;border-radius:0}.drop-list ul .toggle .icon-minus{display:none}.drop-list ul .toggle .content{display:none}.drop-list ul .toggle.open{height:auto}.drop-list ul .toggle.open .icon-minus{display:block}.drop-list ul .toggle.open .icon-plus{display:none}.drop-list ul .toggle.open .content{display:block}.drop-list ul .list li{border-bottom:solid 2px #f6f7f8;margin:0 -30px 30px -30px;padding:0 30px 30px 30px}.drop-list ul .list li:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.drop-list ul.new{text-align:center}.drop-list ul.new i{font-size:80px;line-height:80px;font-family:Poppins,sans-serif;font-style:normal;font-weight:300}.drop-list ul.new b{margin-top:20px;display:block}.drop-list ul:before{border:solid;border-color:#fff transparent;border-width:8px 8px 0 8px;bottom:-8px;content:"";position:absolute;z-index:99;right:30px}.drop-list ul li{border-bottom:solid 1px #f1f3f5;margin:0;padding:0}.drop-list ul li:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.drop-list ul li .link,.drop-list ul li a{vertical-align:middle;height:30px;line-height:30px;display:block;padding:10px 25px;color:inherit;font-size:14px;border:none;max-width:260px;cursor:pointer}.drop-list ul li .link:hover,.drop-list ul li a:hover{background:#f1f3f5;border-color:transparent}.drop-list ul li.disabled .link:hover,.drop-list ul li.disabled a:hover{background:0 0}.drop-list ul li .avatar{width:30px;height:30px;margin-left:10px;float:right}.drop-list ul li:last-child{border-bottom:none}.drop-list.bottom ul{bottom:auto;margin-top:-2px}.drop-list.bottom ul:before{bottom:auto;top:-8px;border-width:0 8px 8px 8px}.disabled{opacity:.2;cursor:default}.disabled .button,.disabled .link,.disabled a,.disabled button{cursor:default!important}.disabled .button:hover,.disabled .link:hover,.disabled a:hover,.disabled button:hover{background:0 0}.tags{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px;background:#fff;min-height:42px;height:auto}.tags[type=file]{line-height:0;padding:15px;height:auto}.tags[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;right:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.tags[xtype=file]:disabled{opacity:0!important}.tags:focus{outline:0;border-color:#b3d7fd}.tags:disabled{background:#f1f3f5}.tags.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:left 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.tags.strip:focus{border-color:#b3d7fd}.tags .add{display:inline-block!important;border:none;padding:0;width:auto;margin:0}.tags ul.tags-list{display:inline}.tags ul.tags-list li{display:inline-block!important;margin-left:10px;font-size:16px;padding:5px 10px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tags ul.tags-list li::before{float:left;content:'\e807';font-family:fontello;font-style:normal;display:inline-block;text-align:center;line-height:16px;width:16px;height:16px;font-size:12px;background:#000;color:#fff;border-radius:50%;margin-top:4px;margin-bottom:4px;margin-right:6px;margin-left:0}.console{height:100%;width:100%;padding:0}.console body{position:relative;height:calc(100% - 70px);width:calc(100% - 320px);padding-top:70px;padding-bottom:0;padding-left:50px;padding-right:270px;margin:0;color:#4b4b4b;background:#eceff1}.console body .project-only{display:none!important}.console body.show-nav .project-only{display:inline-block!important}.console body.hide-nav .console-back{display:block}.console body.hide-nav .account{display:none}.console body.index .console-back{display:none}.console body.index .account{display:block}.console body .console-back{display:none}.console body:before{content:'';display:block;position:absolute;width:calc(100% - 220px);height:100px;top:-100px;left:0;right:0;background:#fff;z-index:1000;border-right:solid 220px #132a3b}.console header{position:fixed;top:0;width:calc(100% - 280px);height:40px;line-height:40px;padding:15px 30px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.1);margin:0 -50px;z-index:2;font-size:14px}.console header .setup-new{width:40px;height:40px;line-height:40px}.console header .list{width:240px}.console header .list select{height:40px;line-height:40px;padding-top:0;padding-bottom:0;border:none;border-radius:26px;background-color:#ececec;color:#868686}.console header .account{margin-right:25px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.console header .account:hover{border-bottom:none}.console header .avatar{height:40px;width:40px}.console header .notifications{position:relative;font-size:20px}.console header .notifications a{color:#1b3445}.console header .notifications:after{position:absolute;content:"";display:block;background:#f53d3d;width:8px;height:8px;border-radius:50%;top:3px;left:3px}.console header nav{background:#1b3445;background:linear-gradient(#132a3b,#302839);background:linear-gradient(#143650,#302839);color:#788c99;position:fixed;height:100%;width:220px;top:0;right:0}.console header nav .logo{height:39px;padding:15px 20px;display:block;border-bottom:none}.console header nav .logo:hover{border-bottom:none}.console header nav .logo img{display:inline-block;margin-top:9px;width:75%}.console header nav .logo svg g{fill:#f02e65}.console header nav .icon{display:block;border:none;margin:18px 10px 50px 10px}.console header nav .icon img{display:block}.console header nav .icon:hover{border-bottom:none}.console header nav .icon:hover svg g{fill:#f02e65}.console header nav .container{overflow:scroll;height:calc(100% - 183px);padding-bottom:50px;width:100%}.console header nav .project-box{padding:20px;text-align:center;display:block;border:none;line-height:100px;height:100px}.console header nav .project-box img{max-height:80px;max-width:80%;display:inline-block;vertical-align:middle}.console header nav .project{display:block;padding:85px 25px 20px 25px;color:#788c99;position:relative;border:none;height:20px}.console header nav .project:hover{border-bottom:none}.console header nav .project .name{height:20px;line-height:20px;margin:0;padding:0;display:inline-block;max-width:100%}.console header nav .project .arrow{display:block;position:absolute;left:5px;top:10px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #788c99;transform:rotate(225deg)}.console header nav .project img{position:absolute;bottom:40px;display:block;margin-bottom:10px;max-height:35px;max-width:40%}.console header nav .subtitle{padding:0 30px 5px 30px;display:block;font-size:12px;font-weight:300}.console header nav .links{margin-bottom:15px!important}.console header nav .links.top{border:none;padding-bottom:0;margin-bottom:5px!important}.console header nav .links.bottom{position:absolute;bottom:0;left:0;right:0;padding-bottom:0;border:none;margin-bottom:0!important}.console header nav .links.bottom a{border-top:solid 1px #2a253a;border-bottom:none}.console header nav .links .sub{display:inline-block;border:none;width:25px;height:25px;line-height:25px;border-radius:50%;padding:0;background:#f02e65;color:#fff;text-align:center;font-size:12px;margin:18px}.console header nav .links .sub i{width:auto;margin:0}.console header nav .links .sub:hover{border:none}.console header nav .links a{padding:12px 20px;border:none;display:block;color:#87a5b9;font-weight:400;border-right:solid 5px transparent}.console header nav .links a i{margin-left:8px;width:22px;display:inline-block}.console header nav .links a.selected,.console header nav .links a:hover{color:#e4e4e4;font-weight:500}.console header nav:after{content:'';display:block;position:absolute;background:#302839;height:100px;width:100%;bottom:-100px}.console>footer{width:calc(100% + 100px);margin:0 -50px;box-sizing:border-box;background:0 0;padding-left:30px;padding-right:30px}.console>footer ul{float:none;text-align:center}.console>footer ul li{float:none;display:inline-block}.console .projects{position:relative}.console .projects:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.console .projects li{float:right;margin-left:50px;margin-bottom:50px;width:270px}.console .projects li.new,.console .projects li:nth-child(3n){margin-left:0}.console .dashboard{padding:20px;min-height:95px;overflow:hidden;position:relative;z-index:1}.console .dashboard hr{margin:20px -20px}.console .dashboard footer{margin:-20px;padding:20px;background:#fcfeff;border:none;color:#1e849e}.console .dashboard .col{position:relative}.console .dashboard .col:last-child:after{display:none}.console .dashboard .col:after{content:"";display:block;width:2px;background:#eceff1;height:calc(100% + 110px);position:absolute;top:-20px;bottom:-20px;left:24px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.console .dashboard .col:after{width:calc(100% + 40px);height:3px;position:static;margin:20px -20px}}.console .dashboard .value{color:#f02e65;vertical-align:bottom;line-height:55px}.console .dashboard .value .sum{font-size:55px;line-height:55px;font-weight:700;vertical-align:bottom}.console .dashboard .unit{font-weight:500;line-height:20px;vertical-align:bottom;font-size:16px;display:inline-block;margin-bottom:5px;margin-right:5px;color:#f02e65}.console .dashboard .metric{color:#f02e65;font-weight:400;font-size:13px;line-height:16px}.console .dashboard .range{color:#818181;font-weight:400;font-size:14px;line-height:16px}.console .dashboard a{display:block;font-weight:400;font-size:14px;line-height:16px;padding:0;border:none}.console .dashboard .chart-metric{width:19%}@media only screen and (min-width:551px) and (max-width:970px),only screen and (max-width:550px){.console .dashboard .chart-metric{width:100%}}.console .dashboard .chart{width:80%;position:relative;height:0;padding-top:20px;padding-bottom:26%;margin-left:-2px;overflow:hidden;background-color:#fff;background-image:linear-gradient(transparent 1px,transparent 1px),linear-gradient(90deg,transparent 1px,transparent 1px),linear-gradient(#f1f1f1 1px,transparent 1px),linear-gradient(90deg,#f1f1f1 1px,transparent 1px);background-size:100px 100px,100px 100px,20px 20px,20px 20px;background-position:-2px -2px,-2px -2px,-1px -1px,-1px -1px;background-repeat:round;border:solid 1px #f1f1f1;border-right:solid 1px transparent;border-bottom:solid 1px transparent}@media only screen and (min-width:551px) and (max-width:970px),only screen and (max-width:550px){.console .dashboard .chart{width:100%;float:none;margin-bottom:20px}}.console .dashboard .chart canvas{position:absolute;bottom:0;display:block;height:100%;width:100%}.console .link-list li{margin-bottom:15px}.console .link-list i{display:inline-block;width:30px;height:30px;line-height:30px;text-align:center;background:#818181;color:#f1f3f5;border-radius:50%;margin-left:15px}.console .link-list i.fade{background:0 0;color:#818181}.console .provider{width:50px;height:50px;background:#f5f5f5;color:#868686;line-height:50px;text-align:center;font-size:25px;border-radius:50%}.console .provider.facebook{color:#fff;background:#3b5998}.console .provider.twitter{color:#fff;background:#55beff}.console .provider.telegram{color:#fff;background:#3ba9e1}.console .provider.github{color:#fff;background:#24292e}.console .provider.whatsapp{color:#fff;background:#25d366}.console .provider.linkedin{color:#fff;background:#1074af}.console .provider.microsoft{color:#fff;background:#137ad4}.console .provider.google{color:#fff;background:#4489f1}.console .provider.bitbucket{color:#fff;background:#2a88fb}.console .provider.gitlab{color:#faa238;background:#30353e}.console .provider.instagram{color:#fff;background:radial-gradient(circle at 30% 107%,#fdf497 0,#fdf497 5%,#fd5949 45%,#d6249f 60%,#285aeb 90%)}.console .premium{z-index:3;margin-top:320px}.console .premium .message{height:190px;overflow:hidden;position:absolute;top:-280px}.console .premium:after{content:'';position:absolute;top:0;left:-20px;right:-20px;bottom:-20px;background:#f6f7f8;opacity:.7;z-index:300}.console .app-section{height:90px}.console .confirm{background:#1e849e;color:#fff;border-radius:25px;padding:12px;line-height:28px;text-align:center}.console .confirm .action{font-weight:500;cursor:pointer}.console .platforms{overflow:hidden}.console .platforms .box{overflow:hidden}.console .platforms .box img{width:50px;margin:0 auto;margin-bottom:20px}.console .platforms .box .cover{margin:-30px -30px 30px -30px;padding:30px}.console .platforms .box .cover.android{background:#a4ca24}.console .platforms .box .cover.android h1{color:#fff;font-size:18px;margin-top:20px}.console .platforms .col{text-align:center;line-height:30px}.console .platforms a{display:block;margin:-20px;padding:20px}.console .platforms a:hover{background:#fbfeff}.console .platforms img{display:block;margin:0 30px;width:calc(100% - 60px);border-radius:50%;margin-bottom:20px}.dev-feature{display:none}.prod-feature{display:none}.development .dev-feature{display:block;opacity:.6!important;outline:solid #ff0 3px;outline-offset:3px}.development .dev-feature.dev-inline{display:inline-block}.development .prod-feature{display:none}.production .dev-feature{display:none}.production .prod-feature{display:block}.search{opacity:1!important}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.search button{margin-top:20px}}html.home body{padding:0 50px}html.home .logo img{max-height:35px;margin:45px 25px 25px 25px}.alerts ul{width:100%;visibility:hidden;position:fixed;padding:0;right:0;left:0;color:#fff;z-index:1002;margin:0 auto;bottom:15px;max-width:650px;opacity:.9}.alerts ul li{margin:1px 0 0 0;padding:0}.alerts ul li div.message{position:relative;padding:12px 35px;margin:0 auto;list-style:none;background:#818181;text-align:center;font-weight:700;border-radius:20px;line-height:16px;min-height:16px}.alerts ul li div.message i{cursor:pointer;position:absolute;font-size:22px;top:8px;right:8px}.alerts ul li div.message.error{color:#fff;background:#f53d3d}.alerts ul li div.message.success{color:#fff;background:#1bbf61}.alerts ul li div.message.warning{color:#fff;background:#ffed4d}.alerts ul li div.message.open{display:block}.alerts ul li div.message.close{display:none}.alerts .cookie-alert{background:#fff2f6!important;color:#f02e65}.alerts .cookie-alert a{color:#f02e65;font-weight:400;border-bottom:dotted 1px #f02e65}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.alerts ul{top:auto;bottom:0;max-width:100%}.alerts ul li{margin:5px 0 0 0}.alerts ul li div.message{border-radius:0}}article{overflow-wrap:break-word;word-wrap:break-word}article h1{font-size:36px}article h2{font-size:24px}article h3{font-size:20px}article h4{font-size:20px}article h5{font-size:18px}article h6{font-size:16px}article h1,article h2,article h3,article h4,article h5,article h6{margin-top:30px!important;margin-bottom:30px!important}article p{line-height:32px;font-size:17px}article .update{display:block;margin-top:50px!important}article table{width:100%;margin:0;margin-bottom:30px!important;border-radius:0;border-bottom:solid 1px #e7e7e7}article table thead td{font-weight:500;padding:5px 15px}article table td,article table th{padding:15px;height:auto}article table td:first-child,article table th:first-child{padding-right:10px}article table td:last-child,article table th:last-child{padding-left:10px}article table td p,article table th p{font-size:inherit;line-height:inherit}article table td p:last-child,article table th p:last-child{margin:0}.avatar{width:60px;height:60px;border-radius:50%;background:#ddd;display:inline-block;overflow:hidden;box-shadow:0 0 6px rgba(0,0,0,.09);position:relative;z-index:1;opacity:1!important}.avatar:before{content:"";position:absolute;width:100%;height:100%;z-index:0;background:#ddd}.avatar.inline{display:inline-block;vertical-align:middle}.avatar.trans{background:0 0}.avatar.xs{width:20px;height:20px}.avatar.small{width:50px;height:50px}.avatar.big{width:100px;height:100px}.avatar.huge{width:150px;height:150px}.box{position:relative;background:#fff;border-radius:10px;box-shadow:0 0 3px rgba(0,0,0,.05);padding:30px;display:block;border-bottom:none}.box.padding-small{padding:15px}.box.y-scroll{overflow-y:auto}.box.danger{background:#f53d3d;color:#fff}.box.focus{background:#f02e65;color:#fff}.box.focus .button,.box.focus button{background:#fff;color:#f02e65}.box.warning{background:#ffed4d;color:#2d2d2d}.box.warning .button,.box.warning button{background:rgba(45,45,45,.8);color:#ffed4d}.box>footer{margin:30px -30px -30px -30px;padding:15px 30px;background:#f5f5f5;border:solid 1px #eaeaea;border-radius:0 0 10px 10px}.box hr{height:2px;background:#eceff1;border:none;margin:30px -30px}.box .header{position:static;height:40px;padding:20px 30px 20px 30px;margin-bottom:30px;margin:-30px -30px 20px -30px;background:#f9f9f9;border-bottom:solid 1px #efefef}.box .toggle{position:relative;border-top:2px solid #f6f7f8;border-bottom:2px solid #f6f7f8;margin:0 -30px;padding:30px;height:35px;overflow:hidden}.box .toggle button.ls-ui-open{position:absolute;top:0;right:0;width:100%;height:95px;background:0 0;opacity:.5;border-radius:0}.box .toggle .icon-minus{display:none}.box .toggle .content{display:none}.box .toggle.open{height:auto}.box .toggle.open .icon-minus{display:block}.box .toggle.open .icon-plus{display:none}.box .toggle.open .content{display:block}.box .list li{border-bottom:solid 2px #f6f7f8;margin:0 -30px 30px -30px;padding:0 30px 30px 30px}.box .list li:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.box.new{text-align:center}.box.new i{font-size:80px;line-height:80px;font-family:Poppins,sans-serif;font-style:normal;font-weight:300}.box.new b{margin-top:20px;display:block}a.box{border-right:none;border-left:none}a.box:hover{border-bottom:none;border-right:none;border-left:none;background:#f8fdff;box-shadow:0 0 1px rgba(0,0,0,.2)}.box-asidex{padding-left:25px!important;padding-right:70px;left:0;background:#f9f9f9;border-radius:0 10px 10px 0;height:calc(100% - 30px);position:absolute;padding-top:30px}.box-asidex:after{content:"";display:block;position:absolute;height:100%;width:51px;background:#fff;top:0;bottom:0;right:-6px}.cover{background:#fff2f6;padding:30px 50px;margin:0 -50px;position:relative;border-bottom:solid 1px #dedede}.cover .title,.cover h1,.cover h2,.cover h3,.cover h4{color:#f02e65;font-weight:600;margin-bottom:40px!important;font-size:28px;line-height:42px}.cover i:before{margin:0!important}.cover p{color:#737373}.cover .button{color:#fff}.cover .link,.cover a{color:#f02e65;border-left:none;border-right:none;cursor:pointer}.cover .link:hover,.cover a:hover{border-bottom-color:#f02e65}.console .database .row .col{height:452px}.console .database .row .col:after{width:2px;left:20px}.console .database hr{margin:0 -20px;background:#efefef;height:2px}.console .database h3{font-size:13px;line-height:20px;height:20px;background-color:#f5f5f5;margin:-20px -20px 0 -20px;padding:10px 20px;border-bottom:solid 1px #e1e2e2;font-weight:600}.console .database .empty{height:160px;font-size:12px;text-align:center;margin:50px 0}.console .database .empty h4{font-size:13px;font-weight:600;line-height:120px}.console .database .search{background-color:#f5f5f5;margin:0 -20px 0 -20px;padding:10px 15px}.console .database .search input{height:40px;background-color:#fff;border-radius:25px;padding-top:0;padding-bottom:0}.console .database .code{height:411px;background:#f5f5f5;margin:0 -20px -20px -20px;padding:20px;width:calc(100% - 10px)}.console .database .code .ide{overflow:scroll;height:451px;margin:-20px;box-shadow:none;border-radius:0}.console .database .paging{background:#f5f5f5;margin:0 -20px -20px -20px;padding:20px}.console .database .button{margin:0 -20px;padding:0 20px!important;text-align:inherit;color:#f02e65;width:100%;font-size:15px;line-height:55px;box-sizing:content-box}.console .database .button i{margin-left:8px}.console .database .button:hover{border:none;background:#fff2f6}.console .database .items{margin:0 -20px;height:260px;overflow-x:hidden;overflow-y:scroll}.console .database .items form{opacity:0;position:relative}.console .database .items form button{background:red;position:absolute;top:0;bottom:0;right:0;left:0;width:100%;height:45px;border-radius:0;cursor:pointer}.console .database .items li{padding:0;margin:0 0;line-height:45px;font-size:15px;padding-right:50px;padding-left:30px;position:relative}.console .database .items li i{position:absolute;display:none;left:10px}.console .database .items li .name{display:inline-block;width:100%;height:28px}.console .database .items li.selected,.console .database .items li:hover{background:#f5f5f5}.console .database .items li.selected i,.console .database .items li:hover i{display:block}.console .database .items li:last-child{border-bottom:none}body>footer{color:#818181;line-height:40px;margin:0 -50px;padding:12px 50px;font-size:13px;width:100%;background:#f1f1f1;position:relative;margin-top:80px!important}body>footer:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}body>footer .logo img{height:22px;padding-top:12px}body>footer a{color:#505050}body>footer a:hover{border-bottom-color:#505050}body>footer ul:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}body>footer ul li{float:right;margin-left:20px!important}body>footer .copyright{padding-right:2px}[data-ls-if]{display:none}[data-service]{opacity:0}.load-service-start{opacity:0}.load-service-end{opacity:1;transition:opacity .5s ease-out;-moz-transition:opacity .5s ease-out;-webkit-transition:opacity .5s ease-out;-o-transition:opacity .5s ease-out}.modal-open .modal-bg,.modal-open body .modal-bg{position:fixed;content:'';display:block;width:100%;height:100%;left:0;right:0;top:0;bottom:0;background:#0c0c0c;opacity:.5;z-index:4}.modal{overflow:auto;display:none;position:fixed;width:100%;max-height:90%;max-width:640px;background:#fff;z-index:1000;box-shadow:0 0 4px rgba(0,0,0,.25);padding:30px;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:10px;box-sizing:border-box;text-align:right}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.modal{width:calc(100% - 20px)}}.modal.padding-small{padding:15px}.modal.height-tiny form{height:100px}.modal.height-small form{height:220px}.modal.width-small{max-width:400px}.modal.width-medium{max-width:500px}.modal.width-large{max-width:800px}.modal.open{display:block}.modalbutton.close{display:none}.modal.fill{height:95%;max-height:95%;max-width:75%}.modal h1,.modal h2{margin-bottom:25px;margin-top:0;font-size:20px;text-align:right}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5,.modal h6{color:inherit!important;line-height:35px}.modal .main,.modal form{position:relative;border-top:solid 1px #e7e7e7;padding:30px 30px 0 30px;margin:0 -30px}.modal .separator{margin:20px -30px}.modal .info{margin:0 -30px;padding:20px 30px;background:#f5fbff;color:#3b5d73;border-top:solid 1px #eaf2f7;border-bottom:solid 1px #eaf2f7}.modal button.close{width:30px;height:30px;line-height:30px;padding:0;margin:0;background:#1b1b1b;color:#fff;border-radius:50%}.phases{list-style:none;margin:0;padding:0;position:relative}.phases li{display:none}.phases li li{display:block}.phases li.selected{display:block}.phases .number{display:none}.phases h2,.phases h3,.phases h4,.phases h5,.phases h6{margin:0 0 30px 0;text-align:inherit}.container{position:relative}.container .tabs{height:55px;line-height:55px;list-style:none;padding:0;margin-bottom:50px!important;margin-top:-55px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.container .tabs:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.container .tabs .selected{font-weight:400;color:#f02e65;position:relative;opacity:1}.container .tabs .selected:after{content:"";display:block;height:2px;background:#f02e65;width:calc(100% - 46px);position:absolute;bottom:0;border-radius:2px;right:-2px}.container .tabs .number{display:none}.container .tabs li{float:right;padding-left:50px;color:#f02e65;opacity:.9;cursor:pointer}.container .tabs li:focus{outline:0}.container .icon{display:none}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.container .tabs{width:auto;overflow-x:scroll;overflow-y:hidden;white-space:nowrap}.container .tabs li{display:inline-block;float:none}}.ide{background-color:#373738;overflow:hidden;position:relative;z-index:1;box-shadow:0 2px 4px 0 rgba(50,50,93,.3);border-radius:10px;margin-bottom:30px}.ide .tag{color:inherit!important;background:0 0!important;padding:inherit!important;font-size:inherit!important}.ide .copy{position:absolute;bottom:15px;left:15px;cursor:pointer;background:#39393c;border-radius:50%;padding:2px;color:#6a6a6d;border:solid 2px #414142}.ide pre{-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;color:#e6ebf1;font-weight:400;line-height:20px;font-size:13px;margin:0;padding:20px;padding-left:60px}.ide.light{box-shadow:0 2px 4px 0 rgba(50,50,93,.1);background-color:#fff}.ide.light pre{color:#414770}.ide.light .token.cdata,.ide.light .token.comment,.ide.light .token.doctype,.ide.light .token.prolog{color:#91a2b0}.ide.light .token.attr-name,.ide.light .token.builtin,.ide.light .token.char,.ide.light .token.inserted,.ide.light .token.selector,.ide.light .token.string{color:#149570}.ide.light .token.punctuation{color:#414770}.ide.light .language-css .token.string,.ide.light .style .token.string,.ide.light .token.entity,.ide.light .token.operator,.ide.light .token.url,.ide.light .token.variable{color:#414770}.ide.light .line-numbers .line-numbers-rows{background:#f2feef}.ide.light .line-numbers-rows>span:before{color:#5dc79e}.ide.light .token.keyword{color:#6772e4;font-weight:500}code[class*=language-],pre[class*=language-]{text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{padding:.1em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6b7c93}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#f79a59}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#3ecf8e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#45b2e8}.token.keyword{color:#7795f8}.token.important,.token.regex{color:#fd971f}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;padding-left:60px;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{background:#39393c;position:absolute;pointer-events:none;top:-20px;padding:20px 0;font-size:100%;left:-60px;width:40px;letter-spacing:-1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{padding-left:5px;pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#636365;display:block;padding-right:.8em;text-align:right}html{padding:0;margin:0;direction:rtl}body{margin:0;background:#f6f7f8 no-repeat fixed}main{min-height:100%}ul{padding:0;margin:0}ul li{margin:0;list-style:none}.force-left{direction:ltr;text-align:left}.force-right{direction:rtl;text-align:right}.pull-left{float:left}.pull-right{float:right}.icon-left-open:before{content:'\e814'!important}.icon-right-open:before{content:'\e813'!important}.icon-link-ext:before{-moz-transform:scaleX(-1);-o-transform:scaleX(-1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.icon-article-alt:before{-moz-transform:scaleX(-1);-o-transform:scaleX(-1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.copy{border-radius:10px 0 0 10px!important} \ No newline at end of file +.pull-start{float:right}.pull-end{float:left}img[src=""]{visibility:hidden;display:inline-block}.margin-end{margin-left:20px!important}.margin-start{margin-right:20px!important}.margin-end-small{margin-left:10px!important}.margin-start-small{margin-right:10px!important}.margin-end-large{margin-left:50px!important}.margin-start-large{margin-right:50px!important}.margin-end-no{margin-left:0!important}.margin-start-no{margin-right:0!important}.margin-top{margin-top:30px!important}.margin-bottom{margin-bottom:30px!important}.margin-top-no{margin-top:0!important}.margin-bottom-no{margin-bottom:0!important}.margin-top-xxl{margin-top:140px!important}.margin-top-xl{margin-top:80px!important}.margin-top-large{margin-top:50px!important}.margin-top-small{margin-top:15px!important}.margin-top-tiny{margin-top:5px!important}.margin-top-negative{margin-top:-30px!important}.margin-top-negative-tiny{margin-top:-5px!important}.margin-top-negative-small{margin-top:-15px!important}.margin-top-negative-large{margin-top:-50px!important}.margin-top-negative-xl{margin-top:-80px!important}.margin-top-negative-xxl{margin-top:-100px!important}.margin-bottom-xxl{margin-bottom:140px!important}.margin-bottom-xl{margin-bottom:80px!important}.margin-bottom-large{margin-bottom:50px!important}.margin-bottom-small{margin-bottom:15px!important}.margin-bottom-tiny{margin-bottom:5px!important}.margin-bottom-negative{margin-bottom:-30px!important}.margin-bottom-negative-tiny{margin-bottom:-5px!important}.margin-bottom-negative-small{margin-bottom:-15px!important}.margin-bottom-negative-large{margin-bottom:-50px!important}.margin-bottom-negative-xl{margin-bottom:-80px!important}.margin-bottom-negative-xl{margin-bottom:-100px!important}.ratio-wide{height:0;overflow:hidden;padding-top:56%;position:relative;width:100%}.ratio-wide>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-square{height:0;overflow:hidden;padding-top:56%;position:relative;width:100%}.ratio-square>*{position:absolute;top:0;left:0;width:100%;height:100%}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}*{font-family:Poppins,sans-serif,Arial;-webkit-font-smoothing:antialiased;font-weight:300}h1,h2,h3,h4,h5,h6{margin:0}h4,h5,h6{font-weight:400}.link,a{color:#1e849e;text-decoration:none;border-left:2px solid transparent;border-right:2px solid transparent;border-bottom:solid 1px transparent}.link:hover,a:hover{border-bottom:dotted 1px #1e849e}.link.disabled,a.disabled{opacity:.5}.link.disabled:hover,a.disabled:hover{border-bottom:none}.link.tag:hover,a.tag:hover{border-bottom:none;opacity:.9}b,strong{font-weight:500}p{margin:0 0 20px 0;line-height:26px}small{font-size:16px;color:#818181}.text-size-small{font-size:13px}.text-size-normal{font-size:16px}.text-one-liner{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-bold{font-weight:400!important}.text-danger{color:#f53d3d}.text-success{color:#1bbf61}.text-upper{text-transform:uppercase}.text-warning{color:#ffed4d}.text-focus{color:#f02e65}.text-fade{color:#818181}.text-disclaimer{font-size:11px;color:#818181}.text-fade-extra{color:#818181;opacity:.5}.text-line-high-large{line-height:30px}.text-line-high-xl{line-height:40px}.text-sign{margin:5px 0;font-size:25px;width:25px;height:25px;line-height:25px;display:inline-block}.text-align-center{text-align:center}.text-align-start{text-align:right}.text-align-end{text-align:left}.text-align-left{text-align:left}.text-align-right{text-align:right}.text-dir-ltr{direction:ltr;display:inline-block}.text-dir-rtl{direction:rtl;display:inline-block}.icon-dot-3:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}table{width:calc(100% + 60px);border-collapse:collapse;margin:-30px;border-radius:10px;overflow:hidden;position:relative;table-layout:fixed}table thead{box-shadow:0 0 2px rgba(0,0,0,.25);border-bottom:solid 1px #f1f3f5;font-size:14px}table thead th{position:sticky;top:0}table.small{font-size:14px}table.open-end tbody tr:last-child{border-bottom:none;font-weight:700;background:#f7fbf7}table.full tbody td,table.full tbody th{vertical-align:top;white-space:normal;overflow:auto;line-height:24px;padding-top:20px;padding-bottom:20px;height:auto}table .avatar{width:30px;height:30px}table tr{border-bottom:solid 1px #f1f3f5}table tr:last-child{border-bottom:none}table tr:nth-child(even){background:#fbfbfb}table th{text-align:right;font-weight:400}table th i{color:#818181;font-size:10px;display:inline-block;vertical-align:top;line-height:16px;padding:0 3px}table td,table th{height:65px;padding:0 15px;line-height:50px}table td:first-child,table th:first-child{padding-right:30px}table td:last-child,table th:last-child{padding-left:30px}@media only screen and (max-width:550px){table td:first-child,table th:first-child{width:auto}}table td,table th{overflow:hidden;white-space:nowrap}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){table.vertical{border-top:solid 1px #f1f3f5;display:block;overflow:hidden;padding-top:12px}table.vertical .hide{display:none}table.vertical tbody,table.vertical td,table.vertical th,table.vertical thead,table.vertical tr{width:100%;display:block}table.vertical th,table.vertical tr{padding-top:12px;padding-bottom:12px}table.vertical th:first-child,table.vertical tr:first-child{padding-top:0}table.vertical td,table.vertical th{padding:5px 20px!important;text-overflow:ellipsis;white-space:normal;height:40px;line-height:40px}table.vertical td:first-child,table.vertical td:last-child,table.vertical th:first-child,table.vertical th:last-child{padding:0 10px}table.vertical td:last-child,table.vertical th:last-child{padding-bottom:0}table.vertical td p,table.vertical th p{display:inline-block;width:calc(100% - 40px)}table.vertical td:before{content:attr(data-title);margin-right:4px;font-weight:400}table.vertical thead{display:none}}.zone{max-width:910px;margin:0 auto 40px auto}.zone.xxxl{max-width:calc(100% - 100px)}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.zone.xxxl{max-width:100%}}.zone.xxl{max-width:1100px}.zone.xl{max-width:910px}.zone.large{max-width:700px}.zone.medium{max-width:550px}.zone.small{max-width:320px}.row{position:relative;margin:0 -50px;padding-right:50px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.row{margin:0 -30px;padding-right:30px}}.row.force-ltr>.col{float:left}.row.force-rtl>.col{float:right}.row.force-reverse>.col{float:left}.row.wide{margin:0 -100px;padding-right:100px}.row.wide>.span-1{width:calc(8.33333333% * 1 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-2{width:calc(8.33333333% * 2 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-3{width:calc(8.33333333% * 3 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-4{width:calc(8.33333333% * 4 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-5{width:calc(8.33333333% * 5 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-6{width:calc(8.33333333% * 6 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-7{width:calc(8.33333333% * 7 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-8{width:calc(8.33333333% * 8 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-9{width:calc(8.33333333% * 9 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-10{width:calc(8.33333333% * 10 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-11{width:calc(8.33333333% * 11 - 100px);box-sizing:content-box;padding-left:100px}.row.wide>.span-12{width:calc(8.33333333% * 12 - 100px);box-sizing:content-box;padding-left:100px}.row.thin{margin:0 -20px;padding-right:20px}.row.thin>.span-1{width:calc(8.33333333% * 1 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-2{width:calc(8.33333333% * 2 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-3{width:calc(8.33333333% * 3 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-4{width:calc(8.33333333% * 4 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-5{width:calc(8.33333333% * 5 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-6{width:calc(8.33333333% * 6 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-7{width:calc(8.33333333% * 7 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-8{width:calc(8.33333333% * 8 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-9{width:calc(8.33333333% * 9 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-10{width:calc(8.33333333% * 10 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-11{width:calc(8.33333333% * 11 - 20px);box-sizing:content-box;padding-left:20px}.row.thin>.span-12{width:calc(8.33333333% * 12 - 20px);box-sizing:content-box;padding-left:20px}.row:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.row .col{float:right;box-sizing:border-box}.row .col.sticky-top{position:sticky;top:0}.row .col.sticky-bottom{position:sticky;bottom:0}.row .span-1{width:calc(8.33333333% * 1 - 40px);box-sizing:content-box;padding-left:40px}.row .span-2{width:calc(8.33333333% * 2 - 40px);box-sizing:content-box;padding-left:40px}.row .span-3{width:calc(8.33333333% * 3 - 40px);box-sizing:content-box;padding-left:40px}.row .span-4{width:calc(8.33333333% * 4 - 40px);box-sizing:content-box;padding-left:40px}.row .span-5{width:calc(8.33333333% * 5 - 40px);box-sizing:content-box;padding-left:40px}.row .span-6{width:calc(8.33333333% * 6 - 40px);box-sizing:content-box;padding-left:40px}.row .span-7{width:calc(8.33333333% * 7 - 40px);box-sizing:content-box;padding-left:40px}.row .span-8{width:calc(8.33333333% * 8 - 40px);box-sizing:content-box;padding-left:40px}.row .span-9{width:calc(8.33333333% * 9 - 40px);box-sizing:content-box;padding-left:40px}.row .span-10{width:calc(8.33333333% * 10 - 40px);box-sizing:content-box;padding-left:40px}.row .span-11{width:calc(8.33333333% * 11 - 40px);box-sizing:content-box;padding-left:40px}.row .span-12{width:calc(8.33333333% * 12 - 40px);box-sizing:content-box;padding-left:40px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.row.responsive{width:100%;padding:0;margin:0}.row.responsive>.span-1,.row.responsive>.span-10,.row.responsive>.span-11,.row.responsive>.span-12,.row.responsive>.span-2,.row.responsive>.span-3,.row.responsive>.span-4,.row.responsive>.span-5,.row.responsive>.span-6,.row.responsive>.span-7,.row.responsive>.span-8,.row.responsive>.span-9{width:calc(8.33333333% * 12 - 0px)!important;box-sizing:content-box!important;padding-left:0!important;width:100%!important}}.tiles{position:relative}.tiles:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.tiles li{margin-left:50px!important;float:right;width:calc(33% - 33px)}.tiles li .photo-title{width:calc(100% + 30px);height:15px;margin:-15px -15px 10px -15px;border-radius:10px 10px 0 0;background:#f1f3f5;border-bottom:solid 1px #f1f3f5}.tiles li:nth-child(3n){margin-left:0!important}@media only screen and (max-width:550px){.tiles li{width:100%;margin-left:0!important}}@font-face{font-family:fontello;src:url(data:application/octet-stream;base64,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) format('woff'),url(data:application/octet-stream;base64,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b250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADkAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAGYAbwBuAHQAZQBsAGwAbwBSAGUAZwB1AGwAYQByAGYAbwBuAHQAZQBsAGwAbwBmAG8AbgB0AGUAbABsAG8AVgBlAHIAcwBpAG8AbgAgADEALgAwAGYAbwBuAHQAZQBsAGwAbwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUABHVzZXIGZm9sZGVyBGxpc3QFbG9naW4DY29nB3R3aXR0ZXILYXJ0aWNsZS1hbHQGY2FuY2VsBGhvbWUIZG93bi1kaXIIZmFjZWJvb2sIYXN0ZXJpc2sGdXBsb2FkCXN0b3B3YXRjaAZleHBvcnQFaGVhcnQEcGx1cwZ1cC1kaXIEbWVudQlsZWZ0LW9wZW4KcmlnaHQtb3BlbgVpbmJveAZ3cmVuY2gHY29tbWVudA1zdGFja292ZXJmbG93CHF1ZXN0aW9uCm9rLWNpcmNsZWQHd2FybmluZwRtYWlsBGxpbmsHa2V5LWludgV0cmFzaAhkb3dubG9hZAdnbGFzc2VzBnFyY29kZQdzaHVmZmxlA2V5ZQRsb2NrBnNlYXJjaARiZWxsBXVzZXJzCGxvY2F0aW9uCWJyaWVmY2FzZQlp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) format('truetype')}[class*=" icon-"]:before,[class^=icon-]:before{font-family:fontello;font-style:normal;font-weight:400;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.icon-user:before{content:'\e800'}.icon-folder:before{content:'\e801'}.icon-list:before{content:'\e802'}.icon-login:before{content:'\e803'}.icon-cog:before{content:'\e804'}.icon-twitter:before{content:'\e805'}.icon-article-alt:before{content:'\e806'}.icon-cancel:before{content:'\e807'}.icon-home:before{content:'\e808'}.icon-down-dir:before{content:'\e809'}.icon-facebook:before{content:'\e80a'}.icon-asterisk:before{content:'\e80b'}.icon-upload:before{content:'\e80c'}.icon-stopwatch:before{content:'\e80d'}.icon-export:before{content:'\e80e'}.icon-heart:before{content:'\e80f'}.icon-plus:before{content:'\e810'}.icon-up-dir:before{content:'\e811'}.icon-menu:before{content:'\e812'}.icon-left-open:before{content:'\e813'}.icon-right-open:before{content:'\e814'}.icon-inbox:before{content:'\e815'}.icon-wrench:before{content:'\e816'}.icon-comment:before{content:'\e817'}.icon-stackoverflow:before{content:'\e818'}.icon-question:before{content:'\e819'}.icon-ok-circled:before{content:'\e81a'}.icon-warning:before{content:'\e81b'}.icon-mail:before{content:'\e81c'}.icon-link:before{content:'\e81d'}.icon-key-inv:before{content:'\e81e'}.icon-trash:before{content:'\e81f'}.icon-download:before{content:'\e820'}.icon-glasses:before{content:'\e821'}.icon-qrcode:before{content:'\e822'}.icon-shuffle:before{content:'\e823'}.icon-eye:before{content:'\e824'}.icon-lock:before{content:'\e825'}.icon-search:before{content:'\e826'}.icon-bell:before{content:'\e827'}.icon-users:before{content:'\e828'}.icon-location:before{content:'\e829'}.icon-briefcase:before{content:'\e82a'}.icon-instagram:before{content:'\e82b'}.icon-clock:before{content:'\e82c'}.icon-phone:before{content:'\e82d'}.icon-calendar:before{content:'\e82e'}.icon-print:before{content:'\e82f'}.icon-edit:before{content:'\e830'}.icon-bold:before{content:'\e831'}.icon-italic:before{content:'\e832'}.icon-rocket:before{content:'\e833'}.icon-whatsapp:before{content:'\e834'}.icon-dot-3:before{content:'\e835'}.icon-info-circled:before{content:'\e836'}.icon-videocam:before{content:'\e837'}.icon-quote-right:before{content:'\e838'}.icon-picture:before{content:'\e839'}.icon-palette:before{content:'\e83a'}.icon-lamp:before{content:'\e83b'}.icon-book-open:before{content:'\e83c'}.icon-ok:before{content:'\e83d'}.icon-chat-alt:before{content:'\e83e'}.icon-archive:before{content:'\e83f'}.icon-play:before{content:'\e840'}.icon-pause:before{content:'\e841'}.icon-down-open:before{content:'\e842'}.icon-up-open:before{content:'\e843'}.icon-minus:before{content:'\e844'}.icon-exchange:before{content:'\e845'}.icon-network:before{content:'\e846'}.icon-link-ext:before{content:'\f08e'}.icon-github-circled:before{content:'\f09b'}.icon-filter:before{content:'\f0b0'}.icon-docs:before{content:'\f0c5'}.icon-list-bullet:before{content:'\f0ca'}.icon-list-numbered:before{content:'\f0cb'}.icon-underline:before{content:'\f0cd'}.icon-sort:before{content:'\f0dc'}.icon-linkedin:before{content:'\f0e1'}.icon-smile:before{content:'\f118'}.icon-keyboard:before{content:'\f11c'}.icon-code:before{content:'\f121'}.icon-shield:before{content:'\f132'}.icon-bitbucket:before{content:'\f171'}.icon-windows:before{content:'\f17a'}.icon-wheelchair:before{content:'\f193'}.icon-bank:before{content:'\f19c'}.icon-google:before{content:'\f1a0'}.icon-building-filled:before{content:'\f1ad'}.icon-database:before{content:'\f1c0'}.icon-lifebuoy:before{content:'\f1cd'}.icon-header:before{content:'\f1dc'}.icon-binoculars:before{content:'\f1e5'}.icon-chart-area:before{content:'\f1fe'}.icon-pinterest:before{content:'\f231'}.icon-medium:before{content:'\f23a'}.icon-gitlab:before{content:'\f296'}.icon-telegram:before{content:'\f2c6'}.datalist-polyfill{list-style:none;display:none;background:#fff;box-shadow:0 2px 2px #999;position:absolute;left:0;top:0;margin:0;padding:0;max-height:300px;overflow-y:auto}.datalist-polyfill:empty{display:none!important}.datalist-polyfill>li{padding:3px;font:13px "Lucida Grande",Sans-Serif}.datalist-polyfill__active{background:#3875d7;color:#fff}date-input-polyfill{z-index:1000!important;max-width:320px!important;width:320px!important}date-input-polyfill .monthSelect-wrapper,date-input-polyfill .yearSelect-wrapper{height:50px;line-height:50px;padding:0;width:40%!important;margin-bottom:10px!important}date-input-polyfill .monthSelect-wrapper select,date-input-polyfill .yearSelect-wrapper select{padding:0 12px;height:50px;line-height:50px;box-sizing:border-box}date-input-polyfill .yearSelect-wrapper{width:35%!important}date-input-polyfill table{width:100%!important;max-width:100%!important;padding:0 12px 12px 12px!important;box-sizing:border-box;margin:0}date-input-polyfill table td:first-child,date-input-polyfill table td:last-child,date-input-polyfill table th:first-child,date-input-polyfill table th:last-child{width:32px!important;padding:4px!important}date-input-polyfill select{margin-bottom:10px}date-input-polyfill button{width:25%!important;height:50px!important;line-height:50px!important;margin-bottom:10px!important;background:inherit;position:relative;color:inherit;padding:inherit;box-sizing:inherit;border-radius:inherit;font-size:inherit;box-shadow:none;border:none;border-bottom:none!important}::placeholder{color:#868686;text-align:right}::-webkit-input-placeholder{text-align:right}input:-moz-placeholder{text-align:right}.button,button{display:inline-block;background:#f02e65;border-radius:26px;border:none;color:#fff;height:52px;line-height:52px;padding:0 25px;cursor:pointer;font-size:16px;box-sizing:border-box;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.button:focus,.button:hover,button:focus,button:hover{background:#c52653;border-bottom:none}.button.fly,button.fly{position:fixed;z-index:2;bottom:30px;left:30px}.button.fill,button.fill{display:block;width:100%;text-align:center;padding:0 10px!important}.button.fill-aligned,button.fill-aligned{display:block;width:100%;text-align:right;padding:0 20px!important}.button.icon,button.icon{padding-left:30px!important}.button.icon-reduce,button.icon-reduce{padding-right:15px!important}.button.reverse,button.reverse{background:0 0;height:50px;line-height:48px;padding:0 23px;color:#f02e65;border:solid 2px #f02e65}.button.reverse:focus,.button.reverse:hover,button.reverse:focus,button.reverse:hover{color:#c52653;border-color:#c52653}.button.round,button.round{width:52px;padding:0}.button.round.small,button.round.small{font-size:12px;width:30px;height:30px;line-height:30px}.button.white,button.white{background:#fff;color:#f02e65}.button.white.reverse,button.white.reverse{color:#fff;background:0 0;border:solid 2px #fff}.button.trans,button.trans{background:0 0!important}.button.trans.reverse,button.trans.reverse{background:0 0!important}.button.success,button.success{background:#1bbf61}.button.success.reverse,button.success.reverse{color:#1bbf61;background:#fff;border:solid 2px #1bbf61}.button.danger,button.danger{background:#f53d3d}.button.danger.reverse,button.danger.reverse{color:#f53d3d;background:#fff;border:solid 2px #f53d3d}.button .disabled,.button.disabled,.button:disabled,button .disabled,button.disabled,button:disabled{background:#818181;cursor:default}.button.link,button.link{background:0 0;border-radius:0;color:#1e849e;height:auto;line-height:normal;padding:0;padding-left:0!important}.button.link:hover,button.link:hover{border-bottom:dotted 1px #1e849e}.button.link:focus,button.link:focus{box-shadow:inherit}.button.strip,button.strip{background:0 0;height:auto;line-height:16px;color:inherit;padding:0 5px}.button.facebook,button.facebook{color:#fff!important;background:#4070b4!important}.button.twitter,button.twitter{color:#fff!important;background:#56c2ea!important}.button.linkedin,button.linkedin{color:#fff!important;background:#0076b5!important}.button.github,button.github{color:#fff!important;background:#7e7c7c!important}.button:focus,button:focus{outline:0}label{margin-bottom:15px;display:block;line-height:normal}.input,input[type=date],input[type=datetime-local],input[type=email],input[type=file],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px}.input[type=file],input[type=date][type=file],input[type=datetime-local][type=file],input[type=email][type=file],input[type=file][type=file],input[type=number][type=file],input[type=password][type=file],input[type=search][type=file],input[type=tel][type=file],input[type=text][type=file],input[type=url][type=file],select[type=file],textarea[type=file]{line-height:0;padding:15px;height:auto}.input[xtype=file],input[type=date][xtype=file],input[type=datetime-local][xtype=file],input[type=email][xtype=file],input[type=file][xtype=file],input[type=number][xtype=file],input[type=password][xtype=file],input[type=search][xtype=file],input[type=tel][xtype=file],input[type=text][xtype=file],input[type=url][xtype=file],select[xtype=file],textarea[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;right:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.input[xtype=file]:disabled,input[type=date][xtype=file]:disabled,input[type=datetime-local][xtype=file]:disabled,input[type=email][xtype=file]:disabled,input[type=file][xtype=file]:disabled,input[type=number][xtype=file]:disabled,input[type=password][xtype=file]:disabled,input[type=search][xtype=file]:disabled,input[type=tel][xtype=file]:disabled,input[type=text][xtype=file]:disabled,input[type=url][xtype=file]:disabled,select[xtype=file]:disabled,textarea[xtype=file]:disabled{opacity:0!important}.input:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=file]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{outline:0;border-color:#b3d7fd}.input:disabled,input[type=date]:disabled,input[type=datetime-local]:disabled,input[type=email]:disabled,input[type=file]:disabled,input[type=number]:disabled,input[type=password]:disabled,input[type=search]:disabled,input[type=tel]:disabled,input[type=text]:disabled,input[type=url]:disabled,select:disabled,textarea:disabled{background:#f1f3f5}.input.strip,input[type=date].strip,input[type=datetime-local].strip,input[type=email].strip,input[type=file].strip,input[type=number].strip,input[type=password].strip,input[type=search].strip,input[type=tel].strip,input[type=text].strip,input[type=url].strip,select.strip,textarea.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:left 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.input.strip:focus,input[type=date].strip:focus,input[type=datetime-local].strip:focus,input[type=email].strip:focus,input[type=file].strip:focus,input[type=number].strip:focus,input[type=password].strip:focus,input[type=search].strip:focus,input[type=tel].strip:focus,input[type=text].strip:focus,input[type=url].strip:focus,select.strip:focus,textarea.strip:focus{border-color:#b3d7fd}input[type=email],input[type=url]{direction:ltr}input[type=email]::placeholder,input[type=url]::placeholder{text-align:left;direction:ltr}select{background:0 0;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,");background-position:left 15px top 50%;background-repeat:no-repeat;background-color:#fff;width:calc(100% - 62px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:45px}select:-webkit-autofill{background-image:url("data:image/svg+xml;utf8,")!important;background-position:100% 50%!important;background-repeat:no-repeat!important}input[type=search],input[type=search].strip{background:0 0;-webkit-appearance:none;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAdZJREFUWIXt1s2LjWEYBvDfnDMzFpNIamZIFrMiJYMyFmKhZKfOwoiFr2LFn2BByG6WVrKwMcjWxgoLIlKIUk6RrzAjZWZ8LO731FlwvB+PUbjq6X0X7/VeV/d9P9fz8IdRL8Hpw3x8w0xaOz9GNxq4gJeZcGs1cRab0fU7xLfgMSYzoT3YgNXYhIO4iM+4iTWphGs4jikcFSXvhEGczr4/UFW8C2N4jXUFudvwCYeqGNgnSr6yJH8rpkWLCqMfE9hdUryFE3iC3qLEk7ij+kT34Q32FiHV8Qr7K4q3cArXihCGxd5elMjARnzBvE4f1dreV+AtnicycC/7/7K8BhaIvqXCO3zFwrwGZtCT0EAtW9N5DTSxWGR/CizNns/yEgbFEK5NZGCnaEPHE7e9Ai9wA6OJDIzistgJubFdxHB/RfFVYgCHixJruI5x5dNwDm6J47sUhkTvjpUw0Y1zeOrXR3hHjOA9zmBuTs4Arog4/yhuUZWwHPdFMh7280BZgiP4ILJ/UuymqRQmejPxphiquzgvKnMJDzOxB9glZqiRiecykbfHdawX98EhcdxO4BGu4nYm2EJDzEKPSMIdYrBnFYUq8d/EP2di1gey3cS4ErflvxffASbhcakIINaMAAAAAElFTkSuQmCC);background-position:right 15px top 50%;background-repeat:no-repeat;background-size:20px 20px;width:calc(100% - 60px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:45px}select[multiple]{min-height:75px;padding:5px 10px!important;padding-left:50px!important}select[multiple] option{padding:10px 4px;border-bottom:solid 1px #f1f1f1}select[multiple] option:last-child{border-bottom:none}textarea{min-height:75px;resize:vertical;line-height:32px;padding:5px 15px}textarea.tall{min-height:180px}fieldset{border:none;margin:0;padding:0}.counter{font-size:13px;float:left;margin-top:-20px}.file-preview{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAIElEQVQoU2NkYGAwZsAEZ9GFGIeIQix+wfQgyDODXSEAcUwGCrDSHgkAAAAASUVORK5CYII=)!important;border:solid 1px #e2e2e2;box-shadow:inset 0 0 3px #a0a0a0;border-radius:8px;width:calc(100% - 2px);max-height:180px;visibility:visible!important}.video-preview{padding-top:56%;position:relative;border-radius:10px;background:#e7e7e7;overflow:hidden;margin:0}.video-preview iframe{position:absolute;top:0;width:100%;height:100%;border:none}.map-preview{padding-top:50%;position:relative;margin-bottom:10px;border-radius:10px;background:#e7e7e7;overflow:hidden;box-shadow:0 0 30px rgba(218,218,218,.5)}.map-preview iframe{position:absolute;top:0;width:100%;height:100%;border:none}.tooltip{position:relative}.tooltip.large:hover:after{white-space:normal;width:280px}.tooltip:hover:after{white-space:nowrap;background:#333;border-radius:5px;bottom:26px;color:#fff;content:attr(data-tooltip);padding:5px 15px;position:absolute;font-size:13px;line-height:20px;z-index:98;right:20%;margin-right:-30px}.tooltip:hover:before{border:solid;border-color:#333 transparent;border-width:6px 6px 0 6px;bottom:20px;content:"";position:absolute;z-index:99;right:5px}.tooltip.down:hover:after{top:26px;bottom:inherit}.tooltip.down:hover:before{top:20px;border-width:0 6px 6px 6px;bottom:inherit}.tag{display:inline-block;background:#e7e7e7;color:#868686;border-radius:12px;line-height:24px;padding:0 8px;font-size:12px;box-shadow:none!important;border:none;height:auto;width:auto;white-space:nowrap;text-overflow:ellipsis}.tag:hover{border:none}.tag.green{background:#1bbf61;color:#fff}.tag.red{background:#f53d3d;color:#fff}.tag.yellow{background:#ffe28b;color:#494949}.tag.focus{background:#f02e65;color:#fff}.tag.dark{background:#6f6f6f;color:#e7e7e7}.tag.blue{background:#4abde8;color:#fff}.tag.link{background:#1e849e;color:#fff}input[type=checkbox]{width:26px;height:16px;position:relative;-webkit-appearance:none;border-radius:0;border:none;background:0 0;vertical-align:middle}input[type=checkbox]:after{content:"";display:block;width:20px;height:20px;background:#fff;top:-5px;border-radius:50%;position:absolute;border:solid 3px #f02e65;vertical-align:middle}input[type=checkbox]:checked:after{text-align:center;font-family:fontello;content:'\e83d';font-size:16px;line-height:20px;color:#fff;background:#f02e65}input[type=checkbox]:focus{outline:0}input[type=checkbox]:focus:after,input[type=checkbox]:hover:after{outline:0;border-color:#000}input[type=checkbox]:checked:focus:after,input[type=checkbox]:checked:hover:after{border-color:#f02e65}.input-copy{position:relative}.input-copy input,.input-copy textarea{padding-left:65px;width:calc(100% - 82px);resize:none}.input-copy .copy{position:absolute;top:0;left:0;border-right:solid 1px #e2e2e2;height:calc(100% - 2px);width:50px;line-height:50px;text-align:center;background:#fbfbfb;margin:1px;border-radius:0 10px 10px 0}.paging{color:#8d8e8e;padding:5px 15px;font-size:12px}.paging form{display:inline-block}.blue-snap iframe{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px;float:none!important;height:40px!important;width:calc(100% - 32px)!important;border:solid 1px #e2e2e2!important;background:0 0!important;position:static!important}.blue-snap iframe[type=file]{line-height:0;padding:15px;height:auto}.blue-snap iframe[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;right:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.blue-snap iframe[xtype=file]:disabled{opacity:0!important}.blue-snap iframe:focus{outline:0;border-color:#b3d7fd}.blue-snap iframe:disabled{background:#f1f3f5}.blue-snap iframe.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:left 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.blue-snap iframe.strip:focus{border-color:#b3d7fd}.blue-snap .error{font-size:12px;margin-top:-25px;color:#f53d3d;height:40px;padding-right:2px}.pell{height:auto;padding-bottom:0;margin-bottom:0;padding-top:0;background:#fff;line-height:normal!important}.pell.hide{padding:0!important;height:1px;min-height:1px;max-height:1px;border:none;box-shadow:none;margin-bottom:20px;opacity:0}.pell [contenteditable=true]:empty:before{content:attr(placeholder);display:block;color:#868686}.pell .pell-actionbar{border-bottom:solid 1px #e7e7e7;margin:0 -15px 15px -15px;padding:10px 15px}.pell .pell-content{min-height:100px;display:block;padding:10px;margin:-10px;cursor:text}.pell .pell-content:focus{outline:0}.pell button{background:inherit;color:inherit;margin:0;padding:0;padding-left:15px;height:40px;line-height:40px;box-shadow:none;cursor:pointer;font-size:13px;border-radius:0}.pell button.pell-button-selected,.pell button:focus,.pell button:hover{color:#1e849e}.pell h1,.pell h2,.pell h3,.pell h4,.pell h5,.pell h6{text-align:inherit;margin-bottom:30px}.pell b,.pell strong{font-weight:700}.pell ol,.pell ul{margin:0 0 20px 0}.pell ol li,.pell ul li{display:list-item!important;list-style:inherit;margin-bottom:10px}.pell ol li p,.pell ul li p{margin:0}.pell ul li{margin:0 20px;display:list-item}label.switch{line-height:42px}input[type=checkbox].switch{width:67px;height:42px;line-height:42px;border-radius:21px;background:#818181;display:block;margin:0;padding:5px;padding-right:30px;padding-left:5px}input[type=checkbox].switch:checked{background:#f02e65;padding-right:5px;padding-left:30px}input[type=checkbox].switch:focus:after,input[type=checkbox].switch:hover:after{background:#fff}input[type=checkbox].switch:after{content:"";display:block;width:32px;height:32px;background:#fff;border-radius:50%;border:none;position:static;top:0}.password-meter{margin:-41px 10px 30px 10px;height:2px;background:0 0;max-width:100%;z-index:2;position:relative}.password-meter.weak{background:#f53d3d}.password-meter.medium{background:#ffed4d}.password-meter.strong{background:#1bbf61}.color-input:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.color-input .color-preview{width:53px;height:53px;float:right;margin-left:10px;background:#000;border-radius:10px;box-shadow:inset 0 0 3px #a0a0a0;position:relative}.color-input .color-preview input{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;cursor:pointer}.color-input input{text-transform:uppercase;float:right;width:calc(100% - 95px)}.grecaptcha-badge{box-shadow:none!important;border-radius:10px!important;overflow:hidden!important;background:#4d92df!important;bottom:25px}.grecaptcha-badge:hover{width:256px!important}.back{font-size:15px;line-height:24px;height:24px;margin-right:-15px;margin-top:-25px;margin-bottom:20px}hr{height:1px;background:#eceff1;border:none}.upload{position:relative}.upload:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.upload input{position:absolute;top:0;right:0;opacity:0;cursor:pointer}.upload.single .preview{height:0;position:relative;padding-top:100%;width:100%;margin-bottom:15px!important}.upload.single .preview li{position:absolute;top:0;width:calc(100% - 20px);height:calc(100% - 20px);margin-left:0!important;margin-bottom:0!important}.upload .button{float:right;margin-left:20px!important}.upload .button.disabled,.upload .button.disabled:hover{background:0 0;color:inherit;border-color:inherit}.upload .count{float:right;line-height:52px}.upload .progress{background:#1bbf61;height:6px;border-radius:3px;margin-bottom:15px!important}.upload .preview:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.upload .preview li{float:right;margin-left:20px!important;margin-bottom:15px!important;background:#f1f1f1;width:150px;height:150px;line-height:148px;text-align:center;border-radius:20px;overflow:hidden;position:relative;cursor:pointer;border:solid 10px #f1f1f1}.upload .preview li:hover:before{background:#f02e65}.upload .preview li:before{content:'\e807';font-family:fontello;font-size:12px;position:absolute;width:20px;height:20px;display:block;top:5px;left:5px;text-align:center;line-height:20px;vertical-align:middle;border-radius:50%;background:#484848;color:#fff;z-index:1}.upload .preview li img{vertical-align:middle;max-height:150px;max-width:150px;-webkit-filter:drop-shadow(0 0 6px rgba(0, 0, 0, .3));filter:drop-shadow(0 0 1px rgba(0, 0, 0, .3))}.upload.wide .preview li{height:0;width:100%;position:relative;padding-top:30.547%;background:#e7e7e7;border-radius:10px;overflow:hidden;border:solid 1px #f9f9f9;margin:0}.upload.wide .preview li img{border-radius:10px;position:absolute;top:0;width:100%;display:block;opacity:1;max-width:inherit;max-height:inherit}ol{list-style:none;counter-reset:x-counter;padding:0}ol li{counter-increment:x-counter;line-height:30px;margin-bottom:30px;margin-right:45px}ol li::before{display:inline-block;content:counter(x-counter);color:#f02e65;color:#fff;background:#fff;background:#f02e65;border:solid 2px #f02e65;margin-left:15px;margin-right:-45px;width:26px;height:26px;border-radius:50%;text-align:center;line-height:26px}.required{color:#f53d3d;font-size:8px;position:relative;top:-8px}.drop-list{position:relative;outline:0}.drop-list.open ul{display:block}.drop-list ul{position:relative;background:#fff;border-radius:10px;box-shadow:0 0 3px rgba(0,0,0,.05);padding:30px;display:block;border-bottom:none;box-shadow:0 0 6px rgba(0,0,0,.1);display:none;position:absolute;bottom:calc(100% + 10px);z-index:2;padding:0;right:-10px;max-width:280px;min-width:240px;overflow:hidden}.drop-list ul.padding-small{padding:15px}.drop-list ul.y-scroll{overflow-y:auto}.drop-list ul.danger{background:#f53d3d;color:#fff}.drop-list ul.focus{background:#f02e65;color:#fff}.drop-list ul.focus .button,.drop-list ul.focus button{background:#fff;color:#f02e65}.drop-list ul.warning{background:#ffed4d;color:#2d2d2d}.drop-list ul.warning .button,.drop-list ul.warning button{background:rgba(45,45,45,.8);color:#ffed4d}.drop-list ul>footer{margin:30px -30px -30px -30px;padding:15px 30px;background:#f5f5f5;border:solid 1px #eaeaea;border-radius:0 0 10px 10px}.drop-list ul hr{height:2px;background:#eceff1;border:none;margin:30px -30px}.drop-list ul .header{position:static;height:40px;padding:20px 30px 20px 30px;margin-bottom:30px;margin:-30px -30px 20px -30px;background:#f9f9f9;border-bottom:solid 1px #efefef}.drop-list ul .toggle{position:relative;border-top:2px solid #f6f7f8;border-bottom:2px solid #f6f7f8;margin:0 -30px;padding:30px;height:35px;overflow:hidden}.drop-list ul .toggle button.ls-ui-open{position:absolute;top:0;right:0;width:100%;height:95px;background:0 0;opacity:.5;border-radius:0}.drop-list ul .toggle .icon-minus{display:none}.drop-list ul .toggle .content{display:none}.drop-list ul .toggle.open{height:auto}.drop-list ul .toggle.open .icon-minus{display:block}.drop-list ul .toggle.open .icon-plus{display:none}.drop-list ul .toggle.open .content{display:block}.drop-list ul .list li{border-bottom:solid 2px #f6f7f8;margin:0 -30px 30px -30px;padding:0 30px 30px 30px}.drop-list ul .list li:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.drop-list ul.new{text-align:center}.drop-list ul.new i{font-size:80px;line-height:80px;font-family:Poppins,sans-serif;font-style:normal;font-weight:300}.drop-list ul.new b{margin-top:20px;display:block}.drop-list ul:before{border:solid;border-color:#fff transparent;border-width:8px 8px 0 8px;bottom:-8px;content:"";position:absolute;z-index:99;right:30px}.drop-list ul li{border-bottom:solid 1px #f1f3f5;margin:0;padding:0}.drop-list ul li:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.drop-list ul li .link,.drop-list ul li a{vertical-align:middle;height:30px;line-height:30px;display:block;padding:10px 25px;color:inherit;font-size:14px;border:none;max-width:260px;cursor:pointer}.drop-list ul li .link:hover,.drop-list ul li a:hover{background:#f1f3f5;border-color:transparent}.drop-list ul li.disabled .link:hover,.drop-list ul li.disabled a:hover{background:0 0}.drop-list ul li .avatar{width:30px;height:30px;margin-left:10px;float:right}.drop-list ul li:last-child{border-bottom:none}.drop-list.bottom ul{bottom:auto;margin-top:-2px}.drop-list.bottom ul:before{bottom:auto;top:-8px;border-width:0 8px 8px 8px}.disabled{opacity:.2;cursor:default}.disabled .button,.disabled .link,.disabled a,.disabled button{cursor:default!important}.disabled .button:hover,.disabled .link:hover,.disabled a:hover,.disabled button:hover{background:0 0}.tags{-webkit-appearance:none;-moz-appearance:none;-webkit-transform:translateZ(0);box-sizing:content-box;height:40px;line-height:40px;border:solid 1px #e2e2e2;border-radius:10px;padding:5px 15px;font-size:16px;display:block;width:calc(100% - 32px);margin-bottom:30px;background:#fff;min-height:42px;height:auto}.tags[type=file]{line-height:0;padding:15px;height:auto}.tags[xtype=file]{line-height:normal;height:auto;border:none;position:absolute;top:0;right:0;bottom:0;opacity:0;cursor:pointer;padding:0;margin:0;font-size:0;width:100%}.tags[xtype=file]:disabled{opacity:0!important}.tags:focus{outline:0;border-color:#b3d7fd}.tags:disabled{background:#f1f3f5}.tags.strip{border:none;border-radius:0;padding:5px 0;width:100%;background-color:transparent;background-position:left 2px top 50%;border-bottom:solid 1px #e2e2e2;color:#868686}.tags.strip:focus{border-color:#b3d7fd}.tags .add{display:inline-block!important;border:none;padding:0;width:auto;margin:0}.tags ul.tags-list{display:inline}.tags ul.tags-list li{display:inline-block!important;margin-left:10px;font-size:16px;padding:5px 10px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tags ul.tags-list li::before{float:left;content:'\e807';font-family:fontello;font-style:normal;display:inline-block;text-align:center;line-height:16px;width:16px;height:16px;font-size:12px;background:#000;color:#fff;border-radius:50%;margin-top:4px;margin-bottom:4px;margin-right:6px;margin-left:0}.console{height:100%;width:100%;padding:0}.console body{position:relative;height:calc(100% - 70px);width:calc(100% - 320px);padding-top:70px;padding-bottom:0;padding-left:50px;padding-right:270px;margin:0;color:#4b4b4b;background:#eceff1}.console body .project-only{display:none!important}.console body.show-nav .project-only{display:inline-block!important}.console body.hide-nav .console-back{display:block}.console body.hide-nav .account{display:none}.console body.index .console-back{display:none}.console body.index .account{display:block}.console body .console-back{display:none}.console body:before{content:'';display:block;position:absolute;width:calc(100% - 220px);height:100px;top:-100px;left:0;right:0;background:#fff;z-index:1000;border-right:solid 220px #132a3b}.console header{position:fixed;top:0;width:calc(100% - 280px);height:40px;line-height:40px;padding:15px 30px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.1);margin:0 -50px;z-index:2;font-size:14px}.console header .setup-new{width:40px;height:40px;line-height:40px}.console header .list{width:240px}.console header .list select{height:40px;line-height:40px;padding-top:0;padding-bottom:0;border:none;border-radius:26px;background-color:#ececec;color:#868686}.console header .account{margin-right:25px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.console header .account:hover{border-bottom:none}.console header .avatar{height:40px;width:40px}.console header .notifications{position:relative;font-size:20px}.console header .notifications a{color:#1b3445}.console header .notifications:after{position:absolute;content:"";display:block;background:#f53d3d;width:8px;height:8px;border-radius:50%;top:3px;left:3px}.console header nav{background:#1b3445;background:linear-gradient(#132a3b,#302839);background:linear-gradient(#143650,#302839);color:#788c99;position:fixed;height:100%;width:220px;top:0;right:0}.console header nav .logo{height:39px;padding:15px 20px;display:block;border-bottom:none}.console header nav .logo:hover{border-bottom:none}.console header nav .logo img{display:inline-block;margin-top:9px;width:75%}.console header nav .logo svg g{fill:#f02e65}.console header nav .icon{display:block;border:none;margin:18px 10px 50px 10px}.console header nav .icon img{display:block}.console header nav .icon:hover{border-bottom:none}.console header nav .icon:hover svg g{fill:#f02e65}.console header nav .container{overflow:scroll;height:calc(100% - 183px);padding-bottom:50px;width:100%}.console header nav .project-box{padding:20px;text-align:center;display:block;border:none;line-height:100px;height:100px}.console header nav .project-box img{max-height:80px;max-width:80%;display:inline-block;vertical-align:middle}.console header nav .project{display:block;padding:85px 25px 20px 25px;color:#788c99;position:relative;border:none;height:20px}.console header nav .project:hover{border-bottom:none}.console header nav .project .name{height:20px;line-height:20px;margin:0;padding:0;display:inline-block;max-width:100%}.console header nav .project .arrow{display:block;position:absolute;left:5px;top:10px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #788c99;transform:rotate(225deg)}.console header nav .project img{position:absolute;bottom:40px;display:block;margin-bottom:10px;max-height:35px;max-width:40%}.console header nav .subtitle{padding:0 30px 5px 30px;display:block;font-size:12px;font-weight:300}.console header nav .links{margin-bottom:15px!important}.console header nav .links.top{border:none;padding-bottom:0;margin-bottom:5px!important}.console header nav .links.bottom{position:absolute;bottom:0;left:0;right:0;padding-bottom:0;border:none;margin-bottom:0!important}.console header nav .links.bottom a{border-top:solid 1px #2a253a;border-bottom:none}.console header nav .links .sub{display:inline-block;border:none;width:25px;height:25px;line-height:25px;border-radius:50%;padding:0;background:#f02e65;color:#fff;text-align:center;font-size:12px;margin:18px}.console header nav .links .sub i{width:auto;margin:0}.console header nav .links .sub:hover{border:none}.console header nav .links a{padding:12px 20px;border:none;display:block;color:#87a5b9;font-weight:400;border-right:solid 5px transparent}.console header nav .links a i{margin-left:8px;width:22px;display:inline-block}.console header nav .links a.selected,.console header nav .links a:hover{color:#e4e4e4;font-weight:500}.console header nav:after{content:'';display:block;position:absolute;background:#302839;height:100px;width:100%;bottom:-100px}.console>footer{width:calc(100% + 100px);margin:0 -50px;box-sizing:border-box;background:0 0;padding-left:30px;padding-right:30px}.console>footer ul{float:none;text-align:center}.console>footer ul li{float:none;display:inline-block}.console .projects{position:relative}.console .projects:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.console .projects li{float:right;margin-left:50px;margin-bottom:50px;width:270px}.console .projects li.new,.console .projects li:nth-child(3n){margin-left:0}.console .dashboard{padding:20px;min-height:95px;overflow:hidden;position:relative;z-index:1}.console .dashboard hr{margin:20px -20px}.console .dashboard footer{margin:-20px;padding:20px;background:#fcfeff;border:none;color:#1e849e}.console .dashboard .col{position:relative}.console .dashboard .col:last-child:after{display:none}.console .dashboard .col:after{content:"";display:block;width:2px;background:#eceff1;height:calc(100% + 110px);position:absolute;top:-20px;bottom:-20px;left:24px}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.console .dashboard .col:after{width:calc(100% + 40px);height:3px;position:static;margin:20px -20px}}.console .dashboard .value{color:#f02e65;vertical-align:bottom;line-height:55px}.console .dashboard .value .sum{font-size:55px;line-height:55px;font-weight:700;vertical-align:bottom}.console .dashboard .unit{font-weight:500;line-height:20px;vertical-align:bottom;font-size:16px;display:inline-block;margin-bottom:5px;margin-right:5px;color:#f02e65}.console .dashboard .metric{color:#f02e65;font-weight:400;font-size:13px;line-height:16px}.console .dashboard .range{color:#818181;font-weight:400;font-size:14px;line-height:16px}.console .dashboard a{display:block;font-weight:400;font-size:14px;line-height:16px;padding:0;border:none}.console .dashboard .chart-metric{width:19%}@media only screen and (min-width:551px) and (max-width:970px),only screen and (max-width:550px){.console .dashboard .chart-metric{width:100%}}.console .dashboard .chart{width:80%;position:relative;height:0;padding-top:20px;padding-bottom:26%;margin-left:-2px;overflow:hidden;background-color:#fff;background-image:linear-gradient(transparent 1px,transparent 1px),linear-gradient(90deg,transparent 1px,transparent 1px),linear-gradient(#f1f1f1 1px,transparent 1px),linear-gradient(90deg,#f1f1f1 1px,transparent 1px);background-size:100px 100px,100px 100px,20px 20px,20px 20px;background-position:-2px -2px,-2px -2px,-1px -1px,-1px -1px;background-repeat:round;border:solid 1px #f1f1f1;border-right:solid 1px transparent;border-bottom:solid 1px transparent}@media only screen and (min-width:551px) and (max-width:970px),only screen and (max-width:550px){.console .dashboard .chart{width:100%;float:none;margin-bottom:20px}}.console .dashboard .chart canvas{position:absolute;bottom:0;display:block;height:100%;width:100%}.console .link-list li{margin-bottom:15px}.console .link-list i{display:inline-block;width:30px;height:30px;line-height:30px;text-align:center;background:#818181;color:#f1f3f5;border-radius:50%;margin-left:15px}.console .link-list i.fade{background:0 0;color:#818181}.console .provider{width:50px;height:50px;background:#f5f5f5;color:#868686;line-height:50px;text-align:center;font-size:25px;border-radius:50%}.console .provider.facebook{color:#fff;background:#3b5998}.console .provider.twitter{color:#fff;background:#55beff}.console .provider.telegram{color:#fff;background:#3ba9e1}.console .provider.github{color:#fff;background:#24292e}.console .provider.whatsapp{color:#fff;background:#25d366}.console .provider.linkedin{color:#fff;background:#1074af}.console .provider.microsoft{color:#fff;background:#137ad4}.console .provider.google{color:#fff;background:#4489f1}.console .provider.bitbucket{color:#fff;background:#2a88fb}.console .provider.gitlab{color:#faa238;background:#30353e}.console .provider.instagram{color:#fff;background:radial-gradient(circle at 30% 107%,#fdf497 0,#fdf497 5%,#fd5949 45%,#d6249f 60%,#285aeb 90%)}.console .premium{z-index:3;margin-top:320px}.console .premium .message{height:190px;overflow:hidden;position:absolute;top:-280px}.console .premium:after{content:'';position:absolute;top:0;left:-20px;right:-20px;bottom:-20px;background:#f6f7f8;opacity:.7;z-index:300}.console .app-section{height:90px}.console .confirm{background:#1e849e;color:#fff;border-radius:25px;padding:12px;line-height:28px;text-align:center}.console .confirm .action{font-weight:500;cursor:pointer}.console .platforms{overflow:hidden}.console .platforms .box{overflow:hidden}.console .platforms .box img{width:50px;margin:0 auto;margin-bottom:20px}.console .platforms .box .cover{margin:-30px -30px 30px -30px;padding:30px}.console .platforms .box .cover.android{background:#a4ca24}.console .platforms .box .cover.android h1{color:#fff;font-size:18px;margin-top:20px}.console .platforms .col{text-align:center;line-height:30px}.console .platforms a{display:block;margin:-20px;padding:20px}.console .platforms a:hover{background:#fbfeff}.console .platforms img{display:block;margin:0 30px;width:calc(100% - 60px);border-radius:50%;margin-bottom:20px}.dev-feature{display:none}.prod-feature{display:none}.development .dev-feature{display:block;opacity:.6!important;outline:solid #ff0 3px;outline-offset:3px}.development .dev-feature.dev-inline{display:inline-block}.development .prod-feature{display:none}.production .dev-feature{display:none}.production .prod-feature{display:block}.search{opacity:1!important}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.search button{margin-top:20px}}html.home body{padding:0 50px}html.home .logo img{max-height:35px;margin:45px 25px 25px 25px}.alerts ul{width:100%;visibility:hidden;position:fixed;padding:0;right:0;left:0;color:#fff;z-index:1002;margin:0 auto;bottom:15px;max-width:650px;opacity:.9}.alerts ul li{margin:1px 0 0 0;padding:0}.alerts ul li div.message{position:relative;padding:12px 35px;margin:0 auto;list-style:none;background:#818181;text-align:center;font-weight:700;border-radius:20px;line-height:16px;min-height:16px}.alerts ul li div.message i{cursor:pointer;position:absolute;font-size:22px;top:8px;right:8px}.alerts ul li div.message.error{color:#fff;background:#f53d3d}.alerts ul li div.message.success{color:#fff;background:#1bbf61}.alerts ul li div.message.warning{color:#fff;background:#ffed4d}.alerts ul li div.message.open{display:block}.alerts ul li div.message.close{display:none}.alerts .cookie-alert{background:#fff2f6!important;color:#f02e65}.alerts .cookie-alert a{color:#f02e65;font-weight:400;border-bottom:dotted 1px #f02e65}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.alerts ul{top:auto;bottom:0;max-width:100%}.alerts ul li{margin:5px 0 0 0}.alerts ul li div.message{border-radius:0}}article{overflow-wrap:break-word;word-wrap:break-word}article h1{font-size:36px}article h2{font-size:24px}article h3{font-size:20px}article h4{font-size:20px}article h5{font-size:18px}article h6{font-size:16px}article h1,article h2,article h3,article h4,article h5,article h6{margin-top:30px!important;margin-bottom:30px!important}article p{line-height:32px;font-size:17px}article .update{display:block;margin-top:50px!important}article table{width:100%;margin:0;margin-bottom:30px!important;border-radius:0;border-bottom:solid 1px #e7e7e7}article table thead td{font-weight:500;padding:5px 15px}article table td,article table th{padding:15px;height:auto}article table td:first-child,article table th:first-child{padding-right:10px}article table td:last-child,article table th:last-child{padding-left:10px}article table td p,article table th p{font-size:inherit;line-height:inherit}article table td p:last-child,article table th p:last-child{margin:0}.avatar{width:60px;height:60px;border-radius:50%;background:#ddd;display:inline-block;overflow:hidden;box-shadow:0 0 6px rgba(0,0,0,.09);position:relative;z-index:1;opacity:1!important}.avatar:before{content:"";position:absolute;width:100%;height:100%;z-index:0;background:#ddd}.avatar.inline{display:inline-block;vertical-align:middle}.avatar.trans{background:0 0}.avatar.xs{width:20px;height:20px}.avatar.small{width:50px;height:50px}.avatar.big{width:100px;height:100px}.avatar.huge{width:150px;height:150px}.box{position:relative;background:#fff;border-radius:10px;box-shadow:0 0 3px rgba(0,0,0,.05);padding:30px;display:block;border-bottom:none}.box.padding-small{padding:15px}.box.y-scroll{overflow-y:auto}.box.danger{background:#f53d3d;color:#fff}.box.focus{background:#f02e65;color:#fff}.box.focus .button,.box.focus button{background:#fff;color:#f02e65}.box.warning{background:#ffed4d;color:#2d2d2d}.box.warning .button,.box.warning button{background:rgba(45,45,45,.8);color:#ffed4d}.box>footer{margin:30px -30px -30px -30px;padding:15px 30px;background:#f5f5f5;border:solid 1px #eaeaea;border-radius:0 0 10px 10px}.box hr{height:2px;background:#eceff1;border:none;margin:30px -30px}.box .header{position:static;height:40px;padding:20px 30px 20px 30px;margin-bottom:30px;margin:-30px -30px 20px -30px;background:#f9f9f9;border-bottom:solid 1px #efefef}.box .toggle{position:relative;border-top:2px solid #f6f7f8;border-bottom:2px solid #f6f7f8;margin:0 -30px;padding:30px;height:35px;overflow:hidden}.box .toggle button.ls-ui-open{position:absolute;top:0;right:0;width:100%;height:95px;background:0 0;opacity:.5;border-radius:0}.box .toggle .icon-minus{display:none}.box .toggle .content{display:none}.box .toggle.open{height:auto}.box .toggle.open .icon-minus{display:block}.box .toggle.open .icon-plus{display:none}.box .toggle.open .content{display:block}.box .list li{border-bottom:solid 2px #f6f7f8;margin:0 -30px 30px -30px;padding:0 30px 30px 30px}.box .list li:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.box.new{text-align:center}.box.new i{font-size:80px;line-height:80px;font-family:Poppins,sans-serif;font-style:normal;font-weight:300}.box.new b{margin-top:20px;display:block}a.box{border-right:none;border-left:none}a.box:hover{border-bottom:none;border-right:none;border-left:none;background:#f8fdff;box-shadow:0 0 1px rgba(0,0,0,.2)}.box-asidex{padding-left:25px!important;padding-right:70px;left:0;background:#f9f9f9;border-radius:0 10px 10px 0;height:calc(100% - 30px);position:absolute;padding-top:30px}.box-asidex:after{content:"";display:block;position:absolute;height:100%;width:51px;background:#fff;top:0;bottom:0;right:-6px}.cover{background:#fff2f6;padding:30px 50px;margin:0 -50px;position:relative;border-bottom:solid 1px #dedede}.cover .title,.cover h1,.cover h2,.cover h3,.cover h4{color:#f02e65;font-weight:600;margin-bottom:40px!important;font-size:28px;line-height:42px}.cover i:before{margin:0!important}.cover p{color:#737373}.cover .button{color:#fff}.cover .link,.cover a{color:#f02e65;border-left:none;border-right:none;cursor:pointer}.cover .link:hover,.cover a:hover{border-bottom-color:#f02e65}.console .database .row .col{height:452px}.console .database .row .col:after{width:2px;left:20px}.console .database hr{margin:0 -20px;background:#efefef;height:2px}.console .database h3{font-size:13px;line-height:20px;height:20px;background-color:#f5f5f5;margin:-20px -20px 0 -20px;padding:10px 20px;border-bottom:solid 1px #e1e2e2;font-weight:600}.console .database .empty{height:160px;font-size:12px;text-align:center;margin:50px 0}.console .database .empty h4{font-size:13px;font-weight:600;line-height:120px}.console .database .search{background-color:#f5f5f5;margin:0 -20px 0 -20px;padding:10px 15px}.console .database .search input{height:40px;background-color:#fff;border-radius:25px;padding-top:0;padding-bottom:0}.console .database .code{height:411px;background:#f5f5f5;margin:0 -20px -20px -20px;padding:20px;width:calc(100% - 10px)}.console .database .code .ide{overflow:scroll;height:451px;margin:-20px;box-shadow:none;border-radius:0}.console .database .paging{background:#f5f5f5;margin:0 -20px -20px -20px;padding:20px}.console .database .button{margin:0 -20px;padding:0 20px!important;text-align:inherit;color:#f02e65;width:100%;font-size:15px;line-height:55px;box-sizing:content-box}.console .database .button i{margin-left:8px}.console .database .button:hover{border:none;background:#fff2f6}.console .database .items{margin:0 -20px;height:260px;overflow-x:hidden;overflow-y:scroll}.console .database .items form{opacity:0;position:relative}.console .database .items form button{background:red;position:absolute;top:0;bottom:0;right:0;left:0;width:100%;height:45px;border-radius:0;cursor:pointer}.console .database .items li{padding:0;margin:0 0;line-height:45px;font-size:15px;padding-right:50px;padding-left:30px;position:relative}.console .database .items li i{position:absolute;display:none;left:10px}.console .database .items li .name{display:inline-block;width:100%;height:28px}.console .database .items li.selected,.console .database .items li:hover{background:#f5f5f5}.console .database .items li.selected i,.console .database .items li:hover i{display:block}.console .database .items li:last-child{border-bottom:none}body>footer{color:#818181;line-height:40px;margin:0 -50px;padding:12px 50px;font-size:13px;width:100%;background:#f1f1f1;position:relative;margin-top:80px!important}body>footer:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}body>footer .logo img{height:22px;padding-top:12px}body>footer a{color:#505050}body>footer a:hover{border-bottom-color:#505050}body>footer ul:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}body>footer ul li{float:right;margin-left:20px!important}body>footer .copyright{padding-right:2px}[data-ls-if]{display:none}[data-service]{opacity:0}.load-service-start{opacity:0}.load-service-end{opacity:1;transition:opacity .5s ease-out;-moz-transition:opacity .5s ease-out;-webkit-transition:opacity .5s ease-out;-o-transition:opacity .5s ease-out}.modal-open .modal-bg,.modal-open body .modal-bg{position:fixed;content:'';display:block;width:100%;height:100%;left:0;right:0;top:0;bottom:0;background:#0c0c0c;opacity:.5;z-index:4}.modal{overflow:auto;display:none;position:fixed;width:100%;max-height:90%;max-width:640px;background:#fff;z-index:1000;box-shadow:0 0 4px rgba(0,0,0,.25);padding:30px;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:10px;box-sizing:border-box;text-align:right}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.modal{width:calc(100% - 20px)}}.modal.padding-small{padding:15px}.modal.height-tiny form{height:100px}.modal.height-small form{height:220px}.modal.width-small{max-width:400px}.modal.width-medium{max-width:500px}.modal.width-large{max-width:800px}.modal.open{display:block}.modalbutton.close{display:none}.modal.fill{height:95%;max-height:95%;max-width:75%}.modal h1,.modal h2{margin-bottom:25px;margin-top:0;font-size:20px;text-align:right}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5,.modal h6{color:inherit!important;line-height:35px}.modal .main,.modal form{position:relative;border-top:solid 1px #e7e7e7;padding:30px 30px 0 30px;margin:0 -30px}.modal .separator{margin:20px -30px}.modal .info{margin:0 -30px;padding:20px 30px;background:#f5fbff;color:#3b5d73;border-top:solid 1px #eaf2f7;border-bottom:solid 1px #eaf2f7}.modal button.close{width:30px;height:30px;line-height:30px;padding:0;margin:0;background:#1b1b1b;color:#fff;border-radius:50%}.phases{list-style:none;margin:0;padding:0;position:relative}.phases li{display:none}.phases li li{display:block}.phases li.selected{display:block}.phases .number{display:none}.phases h2,.phases h3,.phases h4,.phases h5,.phases h6{margin:0 0 30px 0;text-align:inherit}.container{position:relative}.container .tabs{height:55px;line-height:55px;list-style:none;padding:0;margin-bottom:50px!important;margin-top:-55px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.container .tabs:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.container .tabs .selected{font-weight:400;color:#f02e65;position:relative;opacity:1}.container .tabs .selected:after{content:"";display:block;height:2px;background:#f02e65;width:calc(100% - 46px);position:absolute;bottom:0;border-radius:2px;right:-2px}.container .tabs .number{display:none}.container .tabs li{float:right;padding-left:50px;color:#f02e65;opacity:.9;cursor:pointer}.container .tabs li:focus{outline:0}.container .icon{display:none}@media only screen and (max-width:550px),only screen and (min-width:551px) and (max-width:970px){.container .tabs{width:auto;overflow-x:scroll;overflow-y:hidden;white-space:nowrap}.container .tabs li{display:inline-block;float:none}}.ide{background-color:#373738;overflow:hidden;position:relative;z-index:1;box-shadow:0 2px 4px 0 rgba(50,50,93,.3);border-radius:10px;margin-bottom:30px}.ide[data-lang]::after{content:attr(data-lang);display:inline-block;background:#fff;color:#000;position:absolute;top:15px;padding:5px 10px;border-radius:15px;font-size:10px;left:10px;opacity:.95}.ide[data-lang=bash]::after{background:#2b2626;color:#fff}.ide[data-lang=javascript]::after{background:#fff054;color:#333232}.ide[data-lang=html]::after{background:#ff895b;color:#fff}.ide[data-lang=php]::after{background:#6182bb;color:#fff}.ide[data-lang="node.js"]::after{background:#8cc500;color:#373738}.ide[data-lang=ruby]::after{background:#fc3f48;color:#fff}.ide[data-lang=python]::after{background:#3873a2;color:#fff}.ide[data-lang=go]::after{background:#00add8;color:#fff}.ide[data-lang=dart]::after{background:#035698;color:#2bb1f0}.ide .tag{color:inherit!important;background:0 0!important;padding:inherit!important;font-size:inherit!important}.ide .copy{cursor:pointer;content:attr(data-lang);display:inline-block;background:#fff;color:#000;position:absolute;transform:translateX(-50%);bottom:-20px;padding:5px 10px;border-radius:15px;font-size:10px;font-style:normal;right:50%;opacity:0;transition:bottom .3s,opacity .3s}.ide .copy::before{padding-left:5px}.ide:hover .copy{transition:bottom .3s,opacity .3s;opacity:.9;bottom:16px}.ide pre{-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;color:#e6ebf1;font-weight:400;line-height:20px;font-size:13px;margin:0;padding:20px;padding-left:60px}.ide.light{box-shadow:0 2px 4px 0 rgba(50,50,93,.1);background-color:#fff}.ide.light pre{color:#414770}.ide.light .token.cdata,.ide.light .token.comment,.ide.light .token.doctype,.ide.light .token.prolog{color:#91a2b0}.ide.light .token.attr-name,.ide.light .token.builtin,.ide.light .token.char,.ide.light .token.inserted,.ide.light .token.selector,.ide.light .token.string{color:#149570}.ide.light .token.punctuation{color:#414770}.ide.light .language-css .token.string,.ide.light .style .token.string,.ide.light .token.entity,.ide.light .token.operator,.ide.light .token.url,.ide.light .token.variable{color:#414770}.ide.light .line-numbers .line-numbers-rows{background:#f2feef}.ide.light .line-numbers-rows>span:before{color:#5dc79e}.ide.light .token.keyword{color:#6772e4;font-weight:500}code[class*=language-],pre[class*=language-]{text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-]{padding:.1em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6b7c93}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#f79a59}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#3ecf8e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#45b2e8}.token.keyword{color:#7795f8}.token.important,.token.regex{color:#fd971f}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;padding-left:60px;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{background:#39393c;position:absolute;pointer-events:none;top:-20px;padding:20px 0;font-size:100%;left:-60px;width:40px;letter-spacing:-1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{padding-left:5px;pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#636365;display:block;padding-right:.8em;text-align:right}html{padding:0;margin:0;direction:rtl}body{margin:0;background:#f6f7f8 no-repeat fixed}main{min-height:100%}ul{padding:0;margin:0}ul li{margin:0;list-style:none}.force-left{direction:ltr;text-align:left}.force-right{direction:rtl;text-align:right}.pull-left{float:left}.pull-right{float:right}.icon-left-open:before{content:'\e814'!important}.icon-right-open:before{content:'\e813'!important}.icon-link-ext:before{-moz-transform:scaleX(-1);-o-transform:scaleX(-1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.icon-article-alt:before{-moz-transform:scaleX(-1);-o-transform:scaleX(-1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.copy{border-radius:10px 0 0 10px!important} \ No newline at end of file diff --git a/public/scripts/app.js b/public/scripts/app.js index f8016e58a2..44fcd89833 100644 --- a/public/scripts/app.js +++ b/public/scripts/app.js @@ -135,6 +135,7 @@ window.ls.container copy.className = "icon-docs copy"; copy.title = "Copy to Clipboard"; + copy.textContent = "Click to Copy"; copy.addEventListener("click", function() { window.getSelection().removeAllRanges(); diff --git a/public/scripts/filters.js b/public/scripts/filters.js index 8e1b9e2584..4bda20ebec 100644 --- a/public/scripts/filters.js +++ b/public/scripts/filters.js @@ -354,6 +354,9 @@ window.ls.filter $value = abbreviate($value, 1, false, false); return $value === "0" ? "N/A" : $value; + }) + .add("isEmptyObject", function($value) { + return ((Object.keys($value).length === 0 && $value.constructor === Object) || $value.length === 0) }); function abbreviate(number, maxPlaces, forcePlaces, forceLetter) { diff --git a/public/scripts/views/general/setup.js b/public/scripts/views/general/setup.js index 0f19e93166..c5bb755100 100644 --- a/public/scripts/views/general/setup.js +++ b/public/scripts/views/general/setup.js @@ -1,10 +1,12 @@ (function(window) { window.ls.container.get("view").add({ selector: "data-setup", - controller: function(element, console, form) { + controller: function(element, console, form, alerts) { element.addEventListener("submit", function(event) { event.preventDefault(); + let loaderId = alerts.add({ text: 'Creating new project...', class: "" }, 0); + let formData = form.toJson(element); formData["name"] = @@ -24,7 +26,8 @@ console.projects.createProject(formData["name"], team).then( function(project) { //router.change(); - window.location.href = "/console?project=" + project["$uid"]; + alerts.remove(loaderId); + window.location.href = "/console/home?project=" + project["$uid"]; }, function() { throw new Error("Failed to setup project"); diff --git a/public/styles/default-ltr.less b/public/styles/default-ltr.less index 1a76474f2b..f937af1d52 100644 --- a/public/styles/default-ltr.less +++ b/public/styles/default-ltr.less @@ -43,6 +43,14 @@ border-right: solid @value @config-color-fade-light; } +.func-border-radius-start(@value) { + border-radius: @value 0 0 @value; +} + +.func-border-radius-end(@value) { + border-radius: 0 @value @value 0; +} + .pull-start { float: left; } diff --git a/public/styles/default-rtl.less b/public/styles/default-rtl.less index bb81c8c4e2..f7af668a43 100644 --- a/public/styles/default-rtl.less +++ b/public/styles/default-rtl.less @@ -43,6 +43,14 @@ border-left: solid @value @config-color-fade-light; } +.func-border-radius-start(@value) { + border-radius: 0 @value @value 0; +} + +.func-border-radius-end(@value) { + border-radius: @value 0 0 @value; +} + .pull-start { float: right; } diff --git a/public/styles/dependencies/prism.less b/public/styles/dependencies/prism.less index eb8d2ac994..f331f43d06 100644 --- a/public/styles/dependencies/prism.less +++ b/public/styles/dependencies/prism.less @@ -15,6 +15,65 @@ https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clik border-radius: 10px; margin-bottom: 30px; + &[data-lang]::after { + content: attr(data-lang); + display: inline-block; + background: #ffffff; + color: #000000; + position: absolute; + top: 15px; + padding: 5px 10px; + border-radius: 15px; + font-size: 10px; + .func-end(10px); + opacity: 0.95; + } + + &[data-lang="bash"]::after { + background: #2b2626; + color: #fff; + } + + &[data-lang="javascript"]::after { + background: #fff054; + color: #333232; + } + + &[data-lang="html"]::after { + background: #ff895b; + color: #ffffff; + } + + &[data-lang="php"]::after { + background: #6182bb; + color: #ffffff; + } + + &[data-lang="node.js"]::after { + background: #8cc500; + color: #373738; + } + + &[data-lang="ruby"]::after { + background: #fc3f48; + color: #ffffff; + } + + &[data-lang="python"]::after { + background: #3873a2; + color: #ffffff; + } + + &[data-lang="go"]::after { + background: #00add8; + color: #ffffff; + } + + &[data-lang="dart"]::after { + background: #035698; + color: #2bb1f0; + } + .tag { color: inherit!important; background: transparent!important; @@ -23,15 +82,33 @@ https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clik } .copy { - position: absolute; - bottom: 15px; - .func-end(15px); cursor: pointer; - background: #39393c; - border-radius: 50%; - padding: 2px; - color: #6a6a6d; - border: solid 2px #414142; + content: attr(data-lang); + display: inline-block; + background: #ffffff; + color: #000000; + position: absolute; + transform: translateX(-50%); + bottom: -20px; + padding: 5px 10px; + border-radius: 15px; + font-size: 10px; + font-style: normal; + .func-start(50%); + opacity: 0; + transition: bottom .3s, opacity .3s; + + &::before { + .func-padding-end(5px); + } + } + + &:hover { + .copy { + transition: bottom .3s, opacity .3s; + opacity: 0.90; + bottom: 16px; + } } pre { diff --git a/public/styles/fontello/config.json b/public/styles/fontello/config.json old mode 100755 new mode 100644 diff --git a/public/styles/tabels.less b/public/styles/tabels.less index 54d1e57ab0..06238ab4fa 100644 --- a/public/styles/tabels.less +++ b/public/styles/tabels.less @@ -101,6 +101,7 @@ table { &.vertical { @media @phones, @tablets { + border-top: solid 1px @config-color-fade-super; display: block; overflow: hidden; padding-top: 12px; diff --git a/src/Auth/Validator/Password.php b/src/Auth/Validator/Password.php old mode 100755 new mode 100644 diff --git a/src/Database/Validator/Authorization.php b/src/Database/Validator/Authorization.php index 1d08d3e384..6af0420d9e 100644 --- a/src/Database/Validator/Authorization.php +++ b/src/Database/Validator/Authorization.php @@ -72,6 +72,10 @@ class Authorization extends Validator return false; } + if(is_array($permissions[$this->action]) && empty($permissions[$this->action])) { + return true; + } + $permission = null; foreach ($permissions[$this->action] as $permission) { @@ -82,7 +86,7 @@ class Authorization extends Validator } } - $this->message = 'User is missing '.$this->action.' for '.$permission.' permission. only this scope "'.json_encode(self::getRoles()).'" is given.'; + $this->message = 'User is missing '.$this->action.' for "'.$permission.'" permission. Only this scopes "'.json_encode(self::getRoles()).'" is given and only this are allowed "'.json_encode($permissions[$this->action]).'".'; return false; } diff --git a/src/Resize/Resize.php b/src/Resize/Resize.php old mode 100755 new mode 100644 diff --git a/tests/e2e/BaseConsole.php b/tests/e2e/BaseConsole.php index 96fa9d274c..9d1631ca81 100644 --- a/tests/e2e/BaseConsole.php +++ b/tests/e2e/BaseConsole.php @@ -48,4 +48,73 @@ class BaseConsole extends TestCase return $response; } + + public function initProject(array $scopes) { + $response = $this->register(); + + $this->assertEquals('http://localhost/success', $response['headers']['location']); + $this->assertEquals("", $response['body']); + + $session = $this->client->parseCookie($response['headers']['set-cookie'])['a-session-console']; + + $team = $this->client->call(Client::METHOD_POST, '/teams', [ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'cookie' => 'a-session-console=' . $session, + ], [ + 'name' => 'Demo Project Team', + ]); + + $this->assertEquals(201, $team['headers']['status-code']); + $this->assertEquals('Demo Project Team', $team['body']['name']); + $this->assertNotEmpty($team['body']['$uid']); + + $project = $this->client->call(Client::METHOD_POST, '/projects', [ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'cookie' => 'a-session-console=' . $session, + ], [ + 'name' => 'Demo Project', + 'teamId' => $team['body']['$uid'], + 'description' => 'Demo Project Description', + 'logo' => '', + 'url' => 'https://appwrite.io', + 'legalName' => '', + 'legalCountry' => '', + 'legalState' => '', + 'legalCity' => '', + 'legalAddress' => '', + 'legalTaxId' => '', + ]); + + $this->assertEquals(201, $project['headers']['status-code']); + $this->assertNotEmpty($project['body']); + + $key = $this->client->call(Client::METHOD_POST, '/projects/' . $project['body']['$uid'] . '/keys', [ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'cookie' => 'a-session-console=' . $session, + ], [ + 'name' => 'Demo Project Key', + 'scopes' => $scopes, + ]); + + $this->assertEquals(201, $project['headers']['status-code']); + $this->assertNotEmpty($key['body']); + $this->assertNotEmpty($key['body']['secret']); + + $user = $this->projectRegister($project['body']['$uid']); + + $this->assertEquals('http://localhost/success', $user['headers']['location']); + $this->assertEquals("", $user['body']); + + return [ + 'email' => $this->demoEmail, + 'password' => $this->demoPassword, + 'session' => $session, + 'projectUid' => $project['body']['$uid'], + 'projectAPIKeySecret' => $key['body']['secret'], + 'projectSession' => $this->client->parseCookie($user['headers']['set-cookie'])['a-session-' . $project['body']['$uid']], + ]; + } } diff --git a/tests/e2e/ConsoleProjectsTest.php b/tests/e2e/ConsoleProjectsTest.php index 3a0b2df8e7..64aa507131 100644 --- a/tests/e2e/ConsoleProjectsTest.php +++ b/tests/e2e/ConsoleProjectsTest.php @@ -10,8 +10,6 @@ class ConsoleProjectsTest extends BaseConsole { $response = $this->register(); - var_dump($response); - $this->assertEquals('http://localhost/success', $response['headers']['location']); $this->assertEquals("", $response['body']); diff --git a/tests/e2e/ProjectAvatarsTest.php b/tests/e2e/ProjectAvatarsTest.php new file mode 100644 index 0000000000..77c3430406 --- /dev/null +++ b/tests/e2e/ProjectAvatarsTest.php @@ -0,0 +1,246 @@ +initProject([]); + } + + /** + * @depends testRegisterSuccess + */ + public function testAvatarsCCReadSuccess($data) + { + $logo = $this->client->call(Client::METHOD_GET, '/avatars/credit-cards/visa', [ + 'x-appwrite-project' => $data['projectUid'], + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('ef7512678fc617a708298a535dac143b', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/credit-cards/visa', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'width' => 200, + 'height' => 200, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('022ca094acd9eb6c59a5e0ee5b6d6f14', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/credit-cards/visa', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'width' => 300, + 'height' => 300, + 'quality' => 30, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('2b4052955b6515d667990b22cbd4dc82', md5($logo['body'])); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testAvatarsBrowserReadSuccess($data) + { + $logo = $this->client->call(Client::METHOD_GET, '/avatars/browsers/ch', [ + 'x-appwrite-project' => $data['projectUid'], + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('0c9ed000128635206d72e55b287a5be0', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/browsers/ch', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'width' => 200, + 'height' => 200, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('2a9da62aa876303dab6d8e00d2f8789c', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/browsers/ch', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'width' => 300, + 'height' => 300, + 'quality' => 30, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('111cbe4bef171fb47ac1f597274279ed', md5($logo['body'])); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testAvatarsFlagReadSuccess($data) + { + $logo = $this->client->call(Client::METHOD_GET, '/avatars/flags/us', [ + 'x-appwrite-project' => $data['projectUid'], + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('39da0f4b444b1a41e9fe850589fb082f', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/flags/us', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'width' => 200, + 'height' => 200, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('37fa54e9f4b0c868365e7f0721aae1d6', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/flags/us', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'width' => 300, + 'height' => 300, + 'quality' => 30, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('e3d32d455826451e1d88f58417716502', md5($logo['body'])); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testAvatarsRemoteImageReadSuccess($data) + { + $logo = $this->client->call(Client::METHOD_GET, '/avatars/image', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'url' => 'https://appwrite.io/images/apple.png', + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('2a985e6d64fc16dcdfae21543d606f9c', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/image', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'url' => 'https://appwrite.io/images/apple.png', + 'width' => 200, + 'height' => 200, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('64bbc9f8f2c459618e4dc4fa0f0fa51b', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/image', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'url' => 'https://appwrite.io/images/apple.png', + 'width' => 300, + 'height' => 300, + 'quality' => 30, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('27b7c09701b6736c91f7a3b8d649fb3e', md5($logo['body'])); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testAvatarsFaviconReadSuccess($data) + { + $logo = $this->client->call(Client::METHOD_GET, '/avatars/favicon', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'url' => 'https://appwrite.io/', + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('5f22187ae9b19c9d92a28b3ce1f74777', md5($logo['body'])); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testAvatarsQRReadSuccess($data) + { + $logo = $this->client->call(Client::METHOD_GET, '/avatars/qr', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'text' => 'url:https://appwrite.io/', + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('c5c7224f33e68e11022529f846086217', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/qr', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'text' => 'url:https://appwrite.io/', + 'size' => 200, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('385dbbd81bab7a4b9e4d621a0c34fa71', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/qr', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'text' => 'url:https://appwrite.io/', + 'size' => 200, + 'margin' => 10, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('bc2a09d6a34d9a3e9ac81c9a0a43a7f3', md5($logo['body'])); + + $logo = $this->client->call(Client::METHOD_GET, '/avatars/qr', [ + 'x-appwrite-project' => $data['projectUid'], + ], [ + 'text' => 'url:https://appwrite.io/', + 'size' => 200, + 'margin' => 10, + 'download' => 1, + ]); + + $this->assertEquals(200, $logo['headers']['status-code']); + $this->assertEquals('attachment; filename="qr.png"', $logo['headers']['content-disposition']); + $this->assertEquals('image/png; charset=UTF-8', $logo['headers']['content-type']); + //$this->assertEquals('bc2a09d6a34d9a3e9ac81c9a0a43a7f3', md5($logo['body'])); + + return $data; + } +} diff --git a/tests/e2e/ProjectDatabaseTest.php b/tests/e2e/ProjectDatabaseTest.php index 890795ce42..2cec1bc8bb 100644 --- a/tests/e2e/ProjectDatabaseTest.php +++ b/tests/e2e/ProjectDatabaseTest.php @@ -8,72 +8,7 @@ class ProjectDatabaseTest extends BaseProjects { public function testRegisterSuccess() { - $response = $this->register(); - - $this->assertEquals('http://localhost/success', $response['headers']['location']); - $this->assertEquals("", $response['body']); - - $session = $this->client->parseCookie($response['headers']['set-cookie'])['a-session-console']; - - $team = $this->client->call(Client::METHOD_POST, '/teams', [ - 'origin' => 'http://localhost', - 'content-type' => 'application/json', - 'cookie' => 'a-session-console=' . $session, - ], [ - 'name' => 'Demo Project Team', - ]); - - $this->assertEquals(201, $team['headers']['status-code']); - $this->assertEquals('Demo Project Team', $team['body']['name']); - $this->assertNotEmpty($team['body']['$uid']); - - $project = $this->client->call(Client::METHOD_POST, '/projects', [ - 'origin' => 'http://localhost', - 'content-type' => 'application/json', - 'cookie' => 'a-session-console=' . $session, - ], [ - 'name' => 'Demo Project', - 'teamId' => $team['body']['$uid'], - 'description' => 'Demo Project Description', - 'logo' => '', - 'url' => 'https://appwrite.io', - 'legalName' => '', - 'legalCountry' => '', - 'legalState' => '', - 'legalCity' => '', - 'legalAddress' => '', - 'legalTaxId' => '', - ]); - - $this->assertEquals(201, $project['headers']['status-code']); - $this->assertNotEmpty($project['body']); - - $key = $this->client->call(Client::METHOD_POST, '/projects/' . $project['body']['$uid'] . '/keys', [ - 'origin' => 'http://localhost', - 'content-type' => 'application/json', - 'cookie' => 'a-session-console=' . $session, - ], [ - 'name' => 'Demo Project Key', - 'scopes' => ['collections.read', 'collections.write', 'documents.read', 'documents.write',], - ]); - - $this->assertEquals(201, $project['headers']['status-code']); - $this->assertNotEmpty($key['body']); - $this->assertNotEmpty($key['body']['secret']); - - $user = $this->projectRegister($project['body']['$uid']); - - $this->assertEquals('http://localhost/success', $user['headers']['location']); - $this->assertEquals("", $user['body']); - - return [ - 'email' => $this->demoEmail, - 'password' => $this->demoPassword, - 'session' => $session, - 'projectUid' => $project['body']['$uid'], - 'projectAPIKeySecret' => $key['body']['secret'], - 'projectSession' => $this->client->parseCookie($user['headers']['set-cookie'])['a-session-' . $project['body']['$uid']], - ]; + return $this->initProject(['collections.read', 'collections.write', 'documents.read', 'documents.write',]); } /** @@ -504,4 +439,103 @@ class ProjectDatabaseTest extends BaseProjects $this->assertEquals('Spider-Man: Far From Home', $documents['body']['documents'][0]['name']); $this->assertEquals('Spider-Man: Homecoming', $documents['body']['documents'][1]['name']); } + + /** + * @depends testDocumentCreateSuccess + */ + public function testDocumentsUpdateSuccess($data) + { + $document = $this->client->call(Client::METHOD_POST, '/database/' . $data['moviesId'] . '/documents', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ], [ + 'data' => [ + 'name' => 'Thor: Ragnaroc', + 'releaseYear' => 2017, + ] + ]); + + $id = $document['body']['$uid']; + $collection = $document['body']['$collection']; + + $this->assertEquals($document['headers']['status-code'], 201); + $this->assertEquals($document['body']['name'], 'Thor: Ragnaroc'); + $this->assertEquals($document['body']['releaseYear'], 2017); + + $document = $this->client->call(Client::METHOD_PATCH, '/database/' . $collection . '/documents/' . $id, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ], [ + 'data' => [ + 'name' => 'Thor: Ragnarok' + ] + ]); + + $this->assertEquals($document['headers']['status-code'], 200); + $this->assertEquals($document['body']['name'], 'Thor: Ragnarok'); + $this->assertEquals($document['body']['releaseYear'], 2017); + + $document = $this->client->call(Client::METHOD_GET, '/database/' . $collection . '/documents/' . $id, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $id = $document['body']['$uid']; + $collection = $document['body']['$collection']; + + $this->assertEquals($document['headers']['status-code'], 200); + $this->assertEquals($document['body']['name'], 'Thor: Ragnarok'); + $this->assertEquals($document['body']['releaseYear'], 2017); + + } + + /** + * @depends testDocumentCreateSuccess + */ + public function testDocumentsDeleteSuccess($data) + { + $document = $this->client->call(Client::METHOD_POST, '/database/' . $data['moviesId'] . '/documents', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ], [ + 'data' => [ + 'name' => 'Thor: Ragnarok', + 'releaseYear' => 2017, + ] + ]); + + $id = $document['body']['$uid']; + $collection = $document['body']['$collection']; + + $this->assertEquals($document['headers']['status-code'], 201); + + $document = $this->client->call(Client::METHOD_GET, '/database/' . $collection . '/documents/' . $id, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertEquals($document['headers']['status-code'], 200); + + $document = $this->client->call(Client::METHOD_DELETE, '/database/' . $collection . '/documents/' . $id, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertEquals($document['headers']['status-code'], 204); + + $document = $this->client->call(Client::METHOD_GET, '/database/' . $collection . '/documents/' . $id, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertEquals($document['headers']['status-code'], 404); + + } } diff --git a/tests/e2e/ProjectLocaleTest.php b/tests/e2e/ProjectLocaleTest.php new file mode 100644 index 0000000000..95f72f5186 --- /dev/null +++ b/tests/e2e/ProjectLocaleTest.php @@ -0,0 +1,143 @@ +initProject([]); + } + + /** + * @depends testRegisterSuccess + */ + public function testLocaleReadSuccess($data) + { + $locale = $this->client->call(Client::METHOD_GET, '/locale', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + //'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertArrayHasKey('ip', $locale['body']); + $this->assertArrayHasKey('countryCode', $locale['body']); + $this->assertArrayHasKey('country', $locale['body']); + $this->assertArrayHasKey('continent', $locale['body']); + $this->assertArrayHasKey('continentCode', $locale['body']); + $this->assertArrayHasKey('eu', $locale['body']); + $this->assertArrayHasKey('currency', $locale['body']); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testLocaleCountriesReadSuccess($data) + { + $countries = $this->client->call(Client::METHOD_GET, '/locale/countries', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + ]); + + $this->assertEquals($countries['headers']['status-code'], 200); + $this->assertIsArray($countries['body']); + $this->assertCount(194, $countries['body']); + $this->assertEquals($countries['body']['US'], 'United States'); + + // Test locale code change to ES + + $countries = $this->client->call(Client::METHOD_GET, '/locale/countries', [ + 'content-type' => 'application/json', + 'x-appwrite-locale' => 'es', + ]); + + $this->assertEquals($countries['headers']['status-code'], 200); + $this->assertIsArray($countries['body']); + $this->assertCount(194, $countries['body']); + $this->assertEquals($countries['body']['US'], 'Estados Unidos'); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testLocaleCountriesEUReadSuccess($data) + { + $countries = $this->client->call(Client::METHOD_GET, '/locale/countries/eu', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + ]); + + $this->assertEquals($countries['headers']['status-code'], 200); + $this->assertIsArray($countries['body']); + $this->assertCount(28, $countries['body']); + $this->assertEquals($countries['body']['DE'], 'Germany'); + + // Test locale code change to ES + + $countries = $this->client->call(Client::METHOD_GET, '/locale/countries/eu', [ + 'content-type' => 'application/json', + 'x-appwrite-locale' => 'es', + ]); + + $this->assertEquals($countries['headers']['status-code'], 200); + $this->assertIsArray($countries['body']); + $this->assertCount(28, $countries['body']); + $this->assertEquals($countries['body']['DE'], 'Alemania'); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testLocaleContinentsReadSuccess($data) + { + $continents = $this->client->call(Client::METHOD_GET, '/locale/continents', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + ]); + + $this->assertEquals($continents['headers']['status-code'], 200); + $this->assertIsArray($continents['body']); + $this->assertCount(7, $continents['body']); + $this->assertEquals($continents['body']['NA'], 'North America'); + + // Test locale code change to ES + $continents = $this->client->call(Client::METHOD_GET, '/locale/continents', [ + 'content-type' => 'application/json', + 'x-appwrite-locale' => 'es', + ]); + + $this->assertEquals($continents['headers']['status-code'], 200); + $this->assertIsArray($continents['body']); + $this->assertCount(7, $continents['body']); + $this->assertEquals($continents['body']['NA'], 'América del Norte'); + + return $data; + } + + /** + * @depends testRegisterSuccess + */ + public function testLocaleCurrenciesReadSuccess($data) + { + $continents = $this->client->call(Client::METHOD_GET, '/locale/currencies', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + ]); + + $this->assertEquals($continents['headers']['status-code'], 200); + $this->assertIsArray($continents['body']); + $this->assertCount(117, $continents['body']); + $this->assertEquals($continents['body'][0]['symbol'], '$'); + $this->assertEquals($continents['body'][0]['name'], 'US Dollar'); + + return $data; + } +} diff --git a/tests/e2e/ProjectUsersTest.php b/tests/e2e/ProjectUsersTest.php new file mode 100644 index 0000000000..2025164e34 --- /dev/null +++ b/tests/e2e/ProjectUsersTest.php @@ -0,0 +1,159 @@ +initProject(['users.read', 'users.write']); + } + + /** + * @depends testRegisterSuccess + */ + public function testUserCreateSuccess($data) + { + $user = $this->client->call(Client::METHOD_POST, '/users', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ], [ + 'email' => 'users.service@example.com', + 'password' => 'password', + 'name' => 'Project User', + ]); + + $this->assertEquals($user['headers']['status-code'], 201); + $this->assertEquals($user['body']['name'], 'Project User'); + $this->assertEquals($user['body']['email'], 'users.service@example.com'); + $this->assertEquals($user['body']['status'], 0); + $this->assertGreaterThan(0, $user['body']['registration']); + $this->assertIsArray($user['body']['roles']); + + return array_merge($data, ['userId' => $user['body']['$uid']]); + } + + /** + * @depends testUserCreateSuccess + */ + public function testUserReadSuccess($data) + { + $user = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'], [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertEquals($user['headers']['status-code'], 200); + $this->assertEquals($user['body']['name'], 'Project User'); + $this->assertEquals($user['body']['email'], 'users.service@example.com'); + $this->assertEquals($user['body']['status'], 0); + $this->assertGreaterThan(0, $user['body']['registration']); + $this->assertIsArray($user['body']['roles']); + + $sessions = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'] . '/sessions', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertEquals($sessions['headers']['status-code'], 200); + $this->assertIsArray($sessions['body']); + + $logs = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'] . '/logs', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertEquals($logs['headers']['status-code'], 200); + $this->assertIsArray($logs['body']); + + $users = $this->client->call(Client::METHOD_GET, '/users', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertEquals($users['headers']['status-code'], 200); + $this->assertIsArray($users['body']); + $this->assertIsArray($users['body']['users']); + $this->assertIsInt($users['body']['sum']); + $this->assertGreaterThan(0, $users['body']['sum']); + + $users = $this->client->call(Client::METHOD_GET, '/users', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ], [ + 'search' => 'demo' + ]); + + $this->assertEquals($users['headers']['status-code'], 200); + $this->assertIsArray($users['body']); + $this->assertIsArray($users['body']['users']); + $this->assertIsInt($users['body']['sum']); + $this->assertEquals(1, $users['body']['sum']); + $this->assertGreaterThan(0, $users['body']['sum']); + $this->assertCount(1, $users['body']['users']); + + return $data; + } + + /** + * @depends testUserReadSuccess + */ + public function testUserUpdateStatusSuccess($data) + { + $user = $this->client->call(Client::METHOD_PATCH, '/users/' . $data['userId'] . '/status', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ], [ + 'status' => 2, + ]); + + $this->assertEquals($user['headers']['status-code'], 200); + $this->assertEquals($user['body']['status'], 2); + + $user = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'], [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ]); + + $this->assertEquals($user['headers']['status-code'], 200); + $this->assertEquals($user['body']['status'], 2); + + return $data; + } + + /** + * @depends testUserReadSuccess + */ + public function testUserUpdatePrefsSuccess($data) + { + $user = $this->client->call(Client::METHOD_PATCH, '/users/' . $data['userId'] . '/prefs', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $data['projectUid'], + 'x-appwrite-key' => $data['projectAPIKeySecret'], + ], [ + 'prefs' => [ + 'key1' => 'value1', + 'key2' => 'value2', + ], + ]); + + $this->assertEquals($user['headers']['status-code'], 200); + $this->assertEquals($user['body']['key1'], 'value1'); + $this->assertEquals($user['body']['key2'], 'value2'); + + return $data; + } + + // TODO add test for session delete + // TODO add test for all sessions delete +}