diff --git a/Dockerfile b/Dockerfile index 4b9c3c62f8..5b07ff4699 100755 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,27 @@ FROM ubuntu:18.04 LABEL maintainer="team@appwrite.io" ENV TZ=Asia/Tel_Aviv + +ENV _APP_ENV production +ENV _APP_EDITION community +ENV _APP_OPENSSL_KEY_V1 empty +ENV _APP_REDIS_HOST redis +ENV _APP_REDIS_PORT 6379 +ENV _APP_DB_HOST mariadb +ENV _APP_DB_PORT 3306 +ENV _APP_DB_USER root +ENV _APP_DB_PASS password +ENV _APP_DB_SCHEMA appwrite +ENV _APP_INFLUXDB_HOST influxdb +ENV _APP_INFLUXDB_PORT 8086 +ENV _APP_STATSD_HOST telegraf +ENV _APP_STATSD_PORT 8125 +ENV _APP_SMTP_HOST smtp +ENV _APP_SMTP_PORT 25 +ENV _APP_SMTP_SECURE '' +ENV _APP_SMTP_USERNAME '' +ENV _APP_SMTP_PASSWORD '' + RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN \ diff --git a/app/app.php b/app/app.php index e4f65e9f7e..8e268d7e1f 100644 --- a/app/app.php +++ b/app/app.php @@ -49,6 +49,14 @@ $utopia->init(function() use ($utopia, $request, $response, $register, &$user, $ $referrer = $request->getServer('HTTP_REFERER', ''); $origin = $request->getServer('HTTP_ORIGIN', parse_url($referrer, PHP_URL_SCHEME) . '://' . parse_url($referrer, PHP_URL_HOST)); + // //var_dump($project->getAttribute('clients', []), $project); + // print_r(array_map(function($node) { + // var_dump($node); + // if(isset($node['type']) && $node['type'] === 'web') { + // return $node['domains']; + // } + // }, $project->getAttribute('platforms', []))); + // exit(); $refDomain = (in_array($origin, array_merge($project->getAttribute('clients', [])))) ? $origin : 'http://localhost'; diff --git a/app/config/collections.php b/app/config/collections.php index 4346a8dcad..49e2542e67 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -1264,12 +1264,12 @@ return [ ], [ '$collection' => Database::SYSTEM_COLLECTION_RULES, - 'label' => 'Domains', - 'key' => 'domains', + 'label' => 'url', + 'key' => 'url', 'type' => 'text', 'default' => '', 'required' => false, - 'array' => true, + 'array' => false, ], ], ], diff --git a/app/controllers/projects.php b/app/controllers/projects.php index 8550a39138..41a7d48b81 100644 --- a/app/controllers/projects.php +++ b/app/controllers/projects.php @@ -1086,9 +1086,9 @@ $utopia->post('/v1/projects/:projectId/platforms') ->param('name', null, function () {return new Text(256);}, 'Platform name') ->param('key', null, function () {return new Text(256);}, 'Package name for android or bundle ID for iOS', true) ->param('store', null, function () {return new Text(256);}, 'App store or Google Play store ID', true) - ->param('domains', [], function () {return new ArrayList(new Domain());}, 'Project client domains names', true) + ->param('url', '', function() {return new URL();}, 'Platform client URL', true) ->action( - function($projectId, $type, $name, $key, $store, $domains) use ($request, $response, $consoleDB) + function($projectId, $type, $name, $key, $store, $url) use ($response, $consoleDB) { $project = $consoleDB->getDocument($projectId); @@ -1106,7 +1106,7 @@ $utopia->post('/v1/projects/:projectId/platforms') 'name' => $name, 'key' => $key, 'store' => $store, - 'domains' => $domains, + 'url' => $url, 'created' => time(), 'updated' => time(), ]); @@ -1140,9 +1140,9 @@ $utopia->put('/v1/projects/:projectId/platforms/:platformId') ->param('name', null, function () {return new Text(256);}, 'Platform name') ->param('key', null, function () {return new Text(256);}, 'Package name for android or bundle ID for iOS', true) ->param('store', null, function () {return new Text(256);}, 'App store or Google Play store ID', true) - ->param('domains', [], function () {return new ArrayList(new Domain());}, 'Project client domains names', true) + ->param('url', [], function () {return new URL();}, 'Platform client URL', true) ->action( - function($projectId, $platformId, $name, $key, $store, $domains) use ($request, $response, $consoleDB) + function($projectId, $platformId, $name, $key, $store, $url) use ($response, $consoleDB) { $project = $consoleDB->getDocument($projectId); @@ -1161,7 +1161,7 @@ $utopia->put('/v1/projects/:projectId/platforms/:platformId') ->setAttribute('updated', time()) ->setAttribute('key', $key) ->setAttribute('store', $store) - ->setAttribute('domains', $domains) + ->setAttribute('url', $url) ; if(false === $consoleDB->updateDocument($platform->getArrayCopy())) { diff --git a/app/sdks/js/docs/examples/projects/create-webhook.md b/app/sdks/js/docs/examples/projects/create-webhook.md index f3ed6e65b7..9210093702 100644 --- a/app/sdks/js/docs/examples/projects/create-webhook.md +++ b/app/sdks/js/docs/examples/projects/create-webhook.md @@ -5,7 +5,7 @@ sdk setKey('') ; -let promise = sdk.projects.createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 0); +let promise = sdk.projects.createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 1); promise.then(function (response) { console.log(response); diff --git a/app/sdks/js/docs/examples/projects/update-task.md b/app/sdks/js/docs/examples/projects/update-task.md index c5bb04d59b..693c61ee6b 100644 --- a/app/sdks/js/docs/examples/projects/update-task.md +++ b/app/sdks/js/docs/examples/projects/update-task.md @@ -5,7 +5,7 @@ sdk setKey('') ; -let promise = sdk.projects.updateTask('[PROJECT_ID]', '[TASK_ID]', '[NAME]', 'play', '', 1, 'GET', 'https://example.com'); +let promise = sdk.projects.updateTask('[PROJECT_ID]', '[TASK_ID]', '[NAME]', 'play', '', 0, 'GET', 'https://example.com'); 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 e8a5bd6c6d..514424a682 100644 --- a/app/sdks/js/docs/examples/projects/update-webhook.md +++ b/app/sdks/js/docs/examples/projects/update-webhook.md @@ -5,7 +5,7 @@ sdk setKey('') ; -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/package.json b/app/sdks/js/package.json index bc2646430f..1a1bcad95d 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": "v1.0.9", + "version": "v1.0.10", "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 b3d9357f0b..50c0c10dcb 100644 --- a/app/sdks/js/src/sdk.js +++ b/app/sdks/js/src/sdk.js @@ -132,7 +132,7 @@ globalParams.push({key: key, value: value}); }; - addGlobalHeader('x-sdk-version', 'appwrite:javascript:v1.0.9'); + addGlobalHeader('x-sdk-version', 'appwrite:javascript:v1.0.10'); addGlobalHeader('content-type', ''); /** @@ -1716,10 +1716,10 @@ * @param {string} name * @param {string} key * @param {string} store - * @param {array} domains + * @param {string} url * @throws {Error} * @return {Promise} */ - createPlatform: function(projectId, type, name, key = '', store = '', domains = []) { + createPlatform: function(projectId, type, name, key = '', store = '', url = '') { if(projectId === undefined) { throw new Error('Missing required parameter: "projectId"'); } @@ -1741,7 +1741,7 @@ 'name': name, 'key': key, 'store': store, - 'domains': domains + 'url': url }); }, @@ -1779,10 +1779,10 @@ * @param {string} name * @param {string} key * @param {string} store - * @param {array} domains + * @param {string} url * @throws {Error} * @return {Promise} */ - updatePlatform: function(projectId, platformId, name, key = '', store = '', domains = []) { + updatePlatform: function(projectId, platformId, name, key = '', store = '', url = '[]') { if(projectId === undefined) { throw new Error('Missing required parameter: "projectId"'); } @@ -1803,7 +1803,7 @@ 'name': name, 'key': key, 'store': store, - 'domains': domains + 'url': url }); }, diff --git a/app/sdks/js/src/sdk.min.js b/app/sdks/js/src/sdk.min.js index 5cc767c5ca..be90d749ee 100644 --- a/app/sdks/js/src/sdk.min.js +++ b/app/sdks/js/src/sdk.min.js @@ -1,5 +1,5 @@ (function(window){window.Appwrite=function(){let config={endpoint:'https://appwrite.test/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(params.hasOwnProperty(p)){str.push(encodeURIComponent(p)+"="+encodeURIComponent(params[p]))}} -return str.join("&")};let addGlobalHeader=function(key,value){globalHeaders[key]={key:key.toLowerCase(),value:value.toLowerCase()}};let addGlobalParam=function(key,value){globalParams.push({key:key,value:value})};addGlobalHeader('x-sdk-version','appwrite:javascript:v1.0.9');addGlobalHeader('content-type','');let call=function(method,path,headers={},params={},progress=null){let i;path=config.endpoint+path;if(-1===['GET','POST','PUT','DELETE','TRACE','HEAD','OPTIONS','CONNECT','PATCH'].indexOf(method)){throw new Error('var method must contain a valid HTTP method name')} +return str.join("&")};let addGlobalHeader=function(key,value){globalHeaders[key]={key:key.toLowerCase(),value:value.toLowerCase()}};let addGlobalParam=function(key,value){globalParams.push({key:key,value:value})};addGlobalHeader('x-sdk-version','appwrite:javascript:v1.0.10');addGlobalHeader('content-type','');let call=function(method,path,headers={},params={},progress=null){let i;path=config.endpoint+path;if(-1===['GET','POST','PUT','DELETE','TRACE','HEAD','OPTIONS','CONNECT','PATCH'].indexOf(method)){throw new Error('var method must contain a valid HTTP method name')} if(typeof path!=='string'){throw new Error('var path must be of type string')} if(typeof headers!=='object'){throw new Error('var headers must be of type object')} for(i=0;icreateWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 0); \ No newline at end of file +$result = $projects->createWebhook('[PROJECT_ID]', '[NAME]', [], '[URL]', 1); \ 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 409f004868..01a229b7b4 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 c4fa7864a1..bf0679261b 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/projects.md b/app/sdks/php/docs/projects.md index 0a5c010df9..d721431455 100644 --- a/app/sdks/php/docs/projects.md +++ b/app/sdks/php/docs/projects.md @@ -185,7 +185,7 @@ POST https://appwrite.test/v1/projects/{projectId}/platforms | name | string | Platform name | | | key | string | Package name for android or bundle ID for iOS | | | store | string | App store or Google Play store ID | | -| domains | array | Project client domains names | [] | +| url | string | Platform client URL | | ## Get Platform @@ -215,7 +215,7 @@ PUT https://appwrite.test/v1/projects/{projectId}/platforms/{platformId} | name | string | Platform name | | | key | string | Package name for android or bundle ID for iOS | | | store | string | App store or Google Play store ID | | -| domains | array | Project client domains names | [] | +| url | string | Platform client URL | [] | ## Delete Platform diff --git a/app/sdks/php/src/Appwrite/Client.php b/app/sdks/php/src/Appwrite/Client.php index bbe3d0a42b..756f24c3ac 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:v1.0.1', + 'x-sdk-version' => 'appwrite:php:v1.0.2', ]; /** diff --git a/app/sdks/php/src/Appwrite/Services/Projects.php b/app/sdks/php/src/Appwrite/Services/Projects.php index 7e9e7a3a2e..0277656fc2 100644 --- a/app/sdks/php/src/Appwrite/Services/Projects.php +++ b/app/sdks/php/src/Appwrite/Services/Projects.php @@ -281,11 +281,11 @@ class Projects extends Service * @param string $name * @param string $key * @param string $store - * @param array $domains + * @param string $url * @throws Exception * @return array */ - public function createPlatform($projectId, $type, $name, $key = '', $store = '', $domains = []) + public function createPlatform($projectId, $type, $name, $key = '', $store = '', $url = '') { $path = str_replace(['{projectId}'], [$projectId], '/projects/{projectId}/platforms'); $params = []; @@ -294,7 +294,7 @@ class Projects extends Service $params['name'] = $name; $params['key'] = $key; $params['store'] = $store; - $params['domains'] = $domains; + $params['url'] = $url; return $this->client->call(Client::METHOD_POST, $path, [ ], $params); @@ -326,11 +326,11 @@ class Projects extends Service * @param string $name * @param string $key * @param string $store - * @param array $domains + * @param string $url * @throws Exception * @return array */ - public function updatePlatform($projectId, $platformId, $name, $key = '', $store = '', $domains = []) + public function updatePlatform($projectId, $platformId, $name, $key = '', $store = '', $url = '[]') { $path = str_replace(['{projectId}', '{platformId}'], [$projectId, $platformId], '/projects/{projectId}/platforms/{platformId}'); $params = []; @@ -338,7 +338,7 @@ class Projects extends Service $params['name'] = $name; $params['key'] = $key; $params['store'] = $store; - $params['domains'] = $domains; + $params['url'] = $url; return $this->client->call(Client::METHOD_PUT, $path, [ ], $params); diff --git a/app/sdks/python/appwrite/services/projects.py b/app/sdks/python/appwrite/services/projects.py index eff2484d6a..08aad2d018 100644 --- a/app/sdks/python/appwrite/services/projects.py +++ b/app/sdks/python/appwrite/services/projects.py @@ -156,8 +156,7 @@ class Projects(Service): return self.client.call('get', path, { }, params) - def create_platform(self, project_id, type, name, key='', store='', domainsstring(4) ""[]"" -=[]): + def create_platform(self, project_id, type, name, key='', store='', url=''): """Create Platform""" params = {} @@ -167,7 +166,7 @@ class Projects(Service): params['name'] = name params['key'] = key params['store'] = store - params['domains'] = domains + params['url'] = url return self.client.call('post', path, { }, params) @@ -183,8 +182,7 @@ class Projects(Service): return self.client.call('get', path, { }, params) - def update_platform(self, project_id, platform_id, name, key='', store='', domainsstring(4) ""[]"" -=[]): + def update_platform(self, project_id, platform_id, name, key='', store='', url='[]'): """Update Platform""" params = {} @@ -194,7 +192,7 @@ class Projects(Service): params['name'] = name params['key'] = key params['store'] = store - params['domains'] = domains + params['url'] = url return self.client.call('put', path, { }, params) diff --git a/app/sdks/ruby/lib/appwrite/services/projects.rb b/app/sdks/ruby/lib/appwrite/services/projects.rb index b351b964b5..7111110c42 100644 --- a/app/sdks/ruby/lib/appwrite/services/projects.rb +++ b/app/sdks/ruby/lib/appwrite/services/projects.rb @@ -164,7 +164,7 @@ module Appwrite }, params); end - def create_platform(project_id:, type:, name:, key: '', store: '', domains: []) + def create_platform(project_id:, type:, name:, key: '', store: '', url: '') path = '/projects/{projectId}/platforms' .gsub('{project_id}', project_id) @@ -173,7 +173,7 @@ module Appwrite 'name': name, 'key': key, 'store': store, - 'domains': domains + 'url': url } return @client.call('post', path, { @@ -192,7 +192,7 @@ module Appwrite }, params); end - def update_platform(project_id:, platform_id:, name:, key: '', store: '', domains: []) + def update_platform(project_id:, platform_id:, name:, key: '', store: '', url: '[]') path = '/projects/{projectId}/platforms/{platformId}' .gsub('{project_id}', project_id) .gsub('{platform_id}', platform_id) @@ -201,7 +201,7 @@ module Appwrite 'name': name, 'key': key, 'store': store, - 'domains': domains + 'url': url } return @client.call('put', path, { diff --git a/app/tasks/sdks.php b/app/tasks/sdks.php index abd5a09f83..df247298fd 100644 --- a/app/tasks/sdks.php +++ b/app/tasks/sdks.php @@ -38,7 +38,7 @@ $cli $clients = [ 'php' => [ - 'version' => 'v1.0.1', + 'version' => 'v1.0.2', 'result' => __DIR__ . '/../sdks/php/', 'gitURL' => 'https://github.com/appwrite/sdk-for-php.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-php.git', @@ -46,7 +46,7 @@ $cli 'gitUserName' => 'appwrite', ], 'js' => [ - 'version' => 'v1.0.9', + 'version' => 'v1.0.10', 'result' => __DIR__ . '/../sdks/js/', 'gitURL' => 'https://github.com/appwrite/sdk-for-js.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-js.git', @@ -54,7 +54,7 @@ $cli 'gitUserName' => 'appwrite', ], 'node' => [ - 'version' => 'v1.0.18', + 'version' => 'v1.0.19', 'result' => __DIR__ . '/../sdks/node/', 'gitURL' => 'https://github.com/appwrite/sdk-for-node.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-node.git', diff --git a/app/views/console/home/index.phtml b/app/views/console/home/index.phtml index d822b8a829..8196f6434b 100644 --- a/app/views/console/home/index.phtml +++ b/app/views/console/home/index.phtml @@ -114,7 +114,7 @@ $graph = $this->getParam('graph', false); -

+

@@ -169,23 +169,9 @@ $graph = $this->getParam('graph', false); - - - - -
-
-
-
- -
-
- -
-
-
-
- + + +
Next Steps
@@ -220,36 +206,9 @@ $graph = $this->getParam('graph', false); - - - - -
-
-
-
- -
-
- -
-
-
-
- -
-
-
-
- -
-
- -
-
-
-
- + + +
 
diff --git a/docker-compose.yml b/docker-compose.yml index f347e33cb0..5a283503f6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,10 +25,6 @@ services: - _APP_INFLUXDB_PORT=8086 - _APP_STATSD_HOST=telegraf - _APP_STATSD_PORT=8125 - - _APP_NEWRELIC_KEY= - - _APP_MAILGUN_KEY= - - _APP_MAILGUN_DOMAIN= - - _APP_SENTRY_DSN= mariadb: image: appwrite/mariadb:1.0.0 # fix issues when upgrading using: mysql_upgrade -u root -p diff --git a/package-lock.json b/package-lock.json index aae9c45f0d..f64df5c307 100644 --- a/package-lock.json +++ b/package-lock.json @@ -823,9 +823,9 @@ } }, "appwrite": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/appwrite/-/appwrite-1.0.9.tgz", - "integrity": "sha512-Gr5BEEo9fWdrhiCQSU250yj+GN/Pzxa2YEMR+Lrvm6ROaMGLp6pQf64ggQTM/oa26FZTpGhRjZJNpH2Skr1Wzw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/appwrite/-/appwrite-1.0.10.tgz", + "integrity": "sha512-tY+aq/4Xq4Eu5Rx9+fZMm2NSevp1gs1zwfAL5DWU0QlcB0Nx1R9MLIytnbpHMR2ywnUvP06M2La6fTahOhqwwA==", "dev": true }, "archy": { diff --git a/package.json b/package.json index 1ed73717bb..ba5b6eaca4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "license": "BSD-3-Clause", "repository": "public", "devDependencies": { - "appwrite": "^1.0.9", + "appwrite": "^1.0.10", "gulp": "^4.0.0", "gulp-clean-css": "^4.0.0", "gulp-concat": "2.5.2", diff --git a/public/dist/scripts/app-dep.js b/public/dist/scripts/app-dep.js index 9d4289261d..4051b6a3da 100644 --- a/public/dist/scripts/app-dep.js +++ b/public/dist/scripts/app-dep.js @@ -4,7 +4,7 @@ {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(params.hasOwnProperty(p)){str.push(encodeURIComponent(p)+"="+encodeURIComponent(params[p]));}} -return str.join("&");};let addGlobalHeader=function(key,value){globalHeaders[key]={key:key.toLowerCase(),value:value.toLowerCase()};};let addGlobalParam=function(key,value){globalParams.push({key:key,value:value});};addGlobalHeader('x-sdk-version','appwrite:javascript:v1.0.9');addGlobalHeader('content-type','');let call=function(method,path,headers={},params={},progress=null){let i;path=config.endpoint+path;if(-1===['GET','POST','PUT','DELETE','TRACE','HEAD','OPTIONS','CONNECT','PATCH'].indexOf(method)){throw new Error('var method must contain a valid HTTP method name');} +return str.join("&");};let addGlobalHeader=function(key,value){globalHeaders[key]={key:key.toLowerCase(),value:value.toLowerCase()};};let addGlobalParam=function(key,value){globalParams.push({key:key,value:value});};addGlobalHeader('x-sdk-version','appwrite:javascript:v1.0.10');addGlobalHeader('content-type','');let call=function(method,path,headers={},params={},progress=null){let i;path=config.endpoint+path;if(-1===['GET','POST','PUT','DELETE','TRACE','HEAD','OPTIONS','CONNECT','PATCH'].indexOf(method)){throw new Error('var method must contain a valid HTTP method name');} if(typeof path!=='string'){throw new Error('var path must be of type string');} if(typeof headers!=='object'){throw new Error('var headers must be of type object');} for(i=0;i