Merge branch 'master' into feat-whitelist-enums

This commit is contained in:
Bishwajeet Parhi 2023-07-18 21:22:48 +05:30
commit 3c15359447
187 changed files with 465 additions and 148 deletions

View file

@ -1,8 +1,28 @@
# Version 1.3.7
## Bugs
- Fix the routing for the default OAuth2 pages [#5640](https://github.com/appwrite/appwrite/pull/5640) [#5648](https://github.com/appwrite/appwrite/pull/5648)
- Add support for trailing slashes in Routes and URLs [#5647](https://github.com/appwrite/appwrite/pull/5647) [#5648](https://github.com/appwrite/appwrite/pull/5648)
# Version 1.3.6
## Bugs
- Fix Console deep linking to result in a 404 [#5632](https://github.com/appwrite/appwrite/pull/5632)
- Fix ACME HTTP Challenge [#5632](https://github.com/appwrite/appwrite/pull/5632)
# Version 1.3.5
## Bugs
- Fix minimum length for string attribute default values [#5606](https://github.com/appwrite/appwrite/pull/5606), [#5602](https://github.com/appwrite/appwrite/pull/5602)
- Update framework to fix route mismatches [#5603](https://github.com/appwrite/appwrite/pull/5603)
# Version 1.3.4
## Bugs
- Update migration to properly migrate bucket permissiosn [#5497](https://github.com/appwrite/appwrite/pull/5497)
- Update migration to properly migrate bucket permissions [#5497](https://github.com/appwrite/appwrite/pull/5497)
# Version 1.3.3
@ -76,6 +96,7 @@
## Changes
- Released `appwrite/console` [2.0.2](https://github.com/appwrite/console/releases/tag/2.0.2)
- Make `region` parameter optional with default for project create [#4763](https://github.com/appwrite/appwrite/pull/4763)
- Add security headers to the console endpoint [#4758](https://github.com/appwrite/appwrite/pull/4758)
## Bugs
- Fix default oauth paths [#4725](https://github.com/appwrite/appwrite/pull/4725)

View file

@ -66,7 +66,7 @@ docker run -it --rm \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
--entrypoint="install" \
appwrite/appwrite:1.3.4
appwrite/appwrite:1.3.7
```
### Windows
@ -78,7 +78,7 @@ docker run -it --rm ^
--volume //var/run/docker.sock:/var/run/docker.sock ^
--volume "%cd%"/appwrite:/usr/src/code/appwrite:rw ^
--entrypoint="install" ^
appwrite/appwrite:1.3.4
appwrite/appwrite:1.3.7
```
#### PowerShell
@ -88,7 +88,7 @@ docker run -it --rm `
--volume /var/run/docker.sock:/var/run/docker.sock `
--volume ${pwd}/appwrite:/usr/src/code/appwrite:rw `
--entrypoint="install" `
appwrite/appwrite:1.3.4
appwrite/appwrite:1.3.7
```
运行后,可以在浏览器上访问 http://localhost 找到 Appwrite 控制台。在非 Linux 的本机主机上完成安装后,服务器可能需要几分钟才能启动。

View file

@ -75,7 +75,7 @@ docker run -it --rm \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
--entrypoint="install" \
appwrite/appwrite:1.3.4
appwrite/appwrite:1.3.7
```
### Windows
@ -87,7 +87,7 @@ docker run -it --rm ^
--volume //var/run/docker.sock:/var/run/docker.sock ^
--volume "%cd%"/appwrite:/usr/src/code/appwrite:rw ^
--entrypoint="install" ^
appwrite/appwrite:1.3.4
appwrite/appwrite:1.3.7
```
#### PowerShell
@ -97,7 +97,7 @@ docker run -it --rm `
--volume /var/run/docker.sock:/var/run/docker.sock `
--volume ${pwd}/appwrite:/usr/src/code/appwrite:rw `
--entrypoint="install" `
appwrite/appwrite:1.3.4
appwrite/appwrite:1.3.7
```
Once the Docker installation is complete, go to http://localhost to access the Appwrite console from your browser. Please note that on non-Linux native hosts, the server might take a few minutes to start after completing the installation.

View file

@ -403,9 +403,14 @@ return [
'description' => 'The document structure is invalid. Please ensure the attributes match the collection definition.',
'code' => 400,
],
Exception::DOCUMENT_MISSING_DATA => [
'name' => Exception::DOCUMENT_MISSING_DATA,
'description' => 'The document data is missing. You must provide the document data.',
'code' => 400,
],
Exception::DOCUMENT_MISSING_PAYLOAD => [
'name' => Exception::DOCUMENT_MISSING_PAYLOAD,
'description' => 'The document payload is missing.',
'description' => 'The document data and permissions are missing. You must provide either the document data or permissions to be updated.',
'code' => 400,
],
Exception::DOCUMENT_ALREADY_EXISTS => [

View file

@ -285,7 +285,7 @@ return [
[
'key' => 'python',
'name' => 'Python',
'version' => '2.0.0',
'version' => '2.0.2',
'url' => 'https://github.com/appwrite/sdk-for-python',
'package' => 'https://pypi.org/project/appwrite/',
'enabled' => true,
@ -357,7 +357,7 @@ return [
[
'key' => 'dotnet',
'name' => '.NET',
'version' => '0.4.0',
'version' => '0.4.2',
'url' => 'https://github.com/appwrite/sdk-for-dotnet',
'package' => 'https://www.nuget.org/packages/Appwrite',
'enabled' => true,

View file

@ -327,22 +327,22 @@ function updateAttribute(
}
if ($type === Database::VAR_RELATIONSHIP) {
$options = \array_merge($attribute->getAttribute('options', []), $options);
$attribute->setAttribute('options', $options);
$primaryDocumentOptions = \array_merge($attribute->getAttribute('options', []), $options);
$attribute->setAttribute('options', $primaryDocumentOptions);
$dbForProject->updateRelationship(
collection: $collectionId,
id: $key,
onDelete: $options['onDelete'],
onDelete: $primaryDocumentOptions['onDelete'],
);
if ($options['twoWay']) {
$relatedCollection = $dbForProject->getDocument('database_' . $db->getInternalId(), $options['relatedCollection']);
$relatedAttribute = $dbForProject->getDocument('attributes', $db->getInternalId() . '_' . $relatedCollection->getInternalId() . '_' . $options['twoWayKey']);
if ($primaryDocumentOptions['twoWay']) {
$relatedCollection = $dbForProject->getDocument('database_' . $db->getInternalId(), $primaryDocumentOptions['relatedCollection']);
$relatedAttribute = $dbForProject->getDocument('attributes', $db->getInternalId() . '_' . $relatedCollection->getInternalId() . '_' . $primaryDocumentOptions['twoWayKey']);
$relatedOptions = \array_merge($relatedAttribute->getAttribute('options'), $options);
$relatedAttribute->setAttribute('options', $relatedOptions);
$dbForProject->updateDocument('attributes', $db->getInternalId() . '_' . $relatedCollection->getInternalId() . '_' . $options['twoWayKey'], $relatedAttribute);
$dbForProject->updateDocument('attributes', $db->getInternalId() . '_' . $relatedCollection->getInternalId() . '_' . $primaryDocumentOptions['twoWayKey'], $relatedAttribute);
$dbForProject->deleteCachedDocument('database_' . $db->getInternalId(), $relatedCollection->getId());
}
} else {
@ -1103,7 +1103,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string
->param('key', '', new Key(), 'Attribute Key.')
->param('size', null, new Range(1, APP_DATABASE_ATTRIBUTE_STRING_MAX_LENGTH, Range::TYPE_INTEGER), 'Attribute size for text attributes, in number of characters.')
->param('required', null, new Boolean(), 'Is attribute required?')
->param('default', null, new Text(0), 'Default value for attribute when not provided. Cannot be set when attribute is required.', true)
->param('default', null, new Text(0, 0), 'Default value for attribute when not provided. Cannot be set when attribute is required.', true)
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForProject')
@ -1112,7 +1112,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string
->action(function (string $databaseId, string $collectionId, string $key, ?int $size, ?bool $required, ?string $default, bool $array, Response $response, Database $dbForProject, EventDatabase $database, Event $events) {
// Ensure attribute default is within required size
$validator = new Text($size);
$validator = new Text($size, 0);
if (!is_null($default) && !$validator->isValid($default)) {
throw new Exception(Exception::ATTRIBUTE_VALUE_INVALID, $validator->getDescription());
}
@ -1777,7 +1777,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/strin
->param('collectionId', '', new UID(), 'Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection).')
->param('key', '', new Key(), 'Attribute Key.')
->param('required', null, new Boolean(), 'Is attribute required?')
->param('default', null, new Nullable(new Text(0)), 'Default value for attribute when not provided. Cannot be set when attribute is required.')
->param('default', null, new Nullable(new Text(0, 0)), 'Default value for attribute when not provided. Cannot be set when attribute is required.')
->inject('response')
->inject('dbForProject')
->inject('events')
@ -2623,7 +2623,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents')
->label('event', 'databases.[databaseId].collections.[collectionId].documents.[documentId].create')
->label('scope', 'documents.write')
->label('audits.event', 'document.create')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}/document/{response.$id}')
->label('usage.metric', 'documents.{scope}.requests.create')
->label('usage.params', ['databaseId:{request.databaseId}', 'collectionId:{request.collectionId}'])
->label('abuse-key', 'ip:{ip},method:{method},url:{url},userId:{userId}')
@ -2653,7 +2653,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents')
$data = (\is_string($data)) ? \json_decode($data, true) : $data; // Cast to JSON array
if (empty($data)) {
throw new Exception(Exception::DOCUMENT_MISSING_PAYLOAD);
throw new Exception(Exception::DOCUMENT_MISSING_DATA);
}
if (isset($data['$id'])) {

View file

@ -650,11 +650,13 @@ App::post('/v1/functions/:functionId/deployments')
$end = $request->getContentRangeEnd();
$fileSize = $request->getContentRangeSize();
$deploymentId = $request->getHeader('x-appwrite-id', $deploymentId);
if (is_null($start) || is_null($end) || is_null($fileSize)) {
// TODO make `end >= $fileSize` in next breaking version
if (is_null($start) || is_null($end) || is_null($fileSize) || $end > $fileSize) {
throw new Exception(Exception::STORAGE_INVALID_CONTENT_RANGE);
}
if ($end === $fileSize) {
// TODO remove the condition that checks `$end === $fileSize` in next breaking version
if ($end === $fileSize - 1 || $end === $fileSize) {
//if it's a last chunks the chunk size might differ, so we set the $chunks and $chunk to notify it's last chunk
$chunks = $chunk = -1;
} else {

View file

@ -684,17 +684,11 @@ App::delete('/v1/projects/:projectId')
->label('sdk.response.code', Response::STATUS_CODE_NOCONTENT)
->label('sdk.response.model', Response::MODEL_NONE)
->param('projectId', '', new UID(), 'Project unique ID.')
->param('password', '', new Password(), 'Your user password for confirmation. Must be at least 8 chars.')
->inject('response')
->inject('user')
->inject('dbForConsole')
->inject('deletes')
->action(function (string $projectId, string $password, Response $response, Document $user, Database $dbForConsole, Delete $deletes) {
if (!Auth::passwordVerify($password, $user->getAttribute('password'), $user->getAttribute('hash'), $user->getAttribute('hashOptions'))) { // Double check user password
throw new Exception(Exception::USER_INVALID_CREDENTIALS);
}
->action(function (string $projectId, Response $response, Document $user, Database $dbForConsole, Delete $deletes) {
$project = $dbForConsole->getDocument('projects', $projectId);
if ($project->isEmpty()) {

View file

@ -445,11 +445,13 @@ App::post('/v1/storage/buckets/:bucketId/files')
$end = $request->getContentRangeEnd();
$fileSize = $request->getContentRangeSize();
$fileId = $request->getHeader('x-appwrite-id', $fileId);
if (is_null($start) || is_null($end) || is_null($fileSize)) {
// TODO make `end >= $fileSize` in next breaking version
if (is_null($start) || is_null($end) || is_null($fileSize) || $end > $fileSize) {
throw new Exception(Exception::STORAGE_INVALID_CONTENT_RANGE);
}
if ($end === $fileSize) {
// TODO remove the condition that checks `$end === $fileSize` in next breaking version
if ($end === $fileSize - 1 || $end === $fileSize) {
//if it's a last chunks the chunk size might differ, so we set the $chunks and $chunk to -1 notify it's last chunk
$chunks = $chunk = -1;
} else {

View file

@ -41,6 +41,7 @@ Config::setParam('cookieDomain', 'localhost');
Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE);
App::init()
->groups(['api'])
->inject('utopia')
->inject('request')
->inject('response')
@ -437,7 +438,7 @@ App::error()
$log->addExtra('line', $error->getLine());
$log->addExtra('trace', $error->getTraceAsString());
$log->addExtra('detailedTrace', $error->getTrace());
$log->addExtra('roles', Authorization::$roles);
$log->addExtra('roles', Authorization::getRoles());
$action = $route->getLabel("sdk.namespace", "UNKNOWN_NAMESPACE") . '.' . $route->getLabel("sdk.method", "UNKNOWN_METHOD");
$log->setAction($action);
@ -584,7 +585,7 @@ App::get('/humans.txt')
$response->text($template->render(false));
});
App::get('/.well-known/acme-challenge')
App::get('/.well-known/acme-challenge/*')
->desc('SSL Verification')
->label('scope', 'public')
->label('docs', false)

View file

@ -286,7 +286,7 @@ App::post('/v1/mock/tests/general/upload')
$id = $request->getHeader('x-appwrite-id', '');
$file['size'] = (\is_array($file['size'])) ? $file['size'][0] : $file['size'];
if (is_null($start) || is_null($end) || is_null($size)) {
if (is_null($start) || is_null($end) || is_null($size) || $end >= $size) {
throw new Exception(Exception::GENERAL_MOCK, 'Invalid content-range header');
}
@ -302,11 +302,11 @@ App::post('/v1/mock/tests/general/upload')
throw new Exception(Exception::GENERAL_MOCK, 'All chunked request must have id header (except first)');
}
if ($end !== $size && $end - $start + 1 !== $chunkSize) {
if ($end !== $size - 1 && $end - $start + 1 !== $chunkSize) {
throw new Exception(Exception::GENERAL_MOCK, 'Chunk size must be 5MB (except last chunk)');
}
if ($end !== $size && $file['size'] !== $chunkSize) {
if ($end !== $size - 1 && $file['size'] !== $chunkSize) {
throw new Exception(Exception::GENERAL_MOCK, 'Wrong chunk size');
}
@ -314,11 +314,11 @@ App::post('/v1/mock/tests/general/upload')
throw new Exception(Exception::GENERAL_MOCK, 'Chunk size must be 5MB or less');
}
if ($end !== $size) {
if ($end !== $size - 1) {
$response->json([
'$id' => ID::custom('newfileid'),
'chunksTotal' => $file['size'] / $chunkSize,
'chunksUploaded' => $start / $chunkSize
'chunksTotal' => (int) ceil($size / ($end + 1 - $start)),
'chunksUploaded' => ceil($start / $chunkSize) + 1
]);
}
} else {

View file

@ -1,14 +1,28 @@
<?php
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Utopia\App;
App::get('/console')
App::init()
->groups(['web'])
->inject('request')
->inject('response')
->action(function (Request $request, Response $response) {
$response
->addHeader('X-Frame-Options', 'SAMEORIGIN') // Avoid console and homepage from showing in iframes
->addHeader('X-XSS-Protection', '1; mode=block; report=/v1/xss?url=' . \urlencode($request->getURI()))
->addHeader('X-UA-Compatible', 'IE=Edge') // Deny IE browsers from going into quirks mode
;
});
App::get('/console/*')
->alias('/')
->alias('auth/*')
->alias('/invite')
->alias('/login')
->alias('/recover')
->alias('/register')
->alias('/register/*')
->groups(['web'])
->label('permission', 'public')
->label('scope', 'home')

View file

@ -6,7 +6,7 @@ use Utopia\Config\Config;
App::get('/versions')
->desc('Get Version')
->groups(['web', 'home'])
->groups(['home'])
->label('scope', 'public')
->inject('response')
->action(function (Response $response) {

View file

@ -100,8 +100,8 @@ const APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT = 60; // Default maximum write rate pe
const APP_LIMIT_LIST_DEFAULT = 25; // Default maximum number of items to return in list API calls
const APP_KEY_ACCCESS = 24 * 60 * 60; // 24 hours
const APP_CACHE_UPDATE = 24 * 60 * 60; // 24 hours
const APP_CACHE_BUSTER = 503;
const APP_VERSION_STABLE = '1.3.4';
const APP_CACHE_BUSTER = 506;
const APP_VERSION_STABLE = '1.3.7';
const APP_DATABASE_ATTRIBUTE_EMAIL = 'email';
const APP_DATABASE_ATTRIBUTE_ENUM = 'enum';
const APP_DATABASE_ATTRIBUTE_IP = 'ip';
@ -903,7 +903,7 @@ App::setResource('project', function ($dbForConsole, $request, $console) {
/** @var Utopia\Database\Database $dbForConsole */
/** @var Utopia\Database\Document $console */
$projectId = $request->getParam('project', $request->getHeader('x-appwrite-project', 'console'));
$projectId = $request->getParam('project', $request->getHeader('x-appwrite-project', ''));
if ($projectId === 'console') {
return $console;

12
composer.lock generated
View file

@ -3031,16 +3031,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
"version": "0.33.7",
"version": "0.33.6",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
"reference": "9f5db4a637b23879ceacea9ed2d33b0486771ffc"
"reference": "237fe97b68090a244382c36f96482c352880a38c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/9f5db4a637b23879ceacea9ed2d33b0486771ffc",
"reference": "9f5db4a637b23879ceacea9ed2d33b0486771ffc",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/237fe97b68090a244382c36f96482c352880a38c",
"reference": "237fe97b68090a244382c36f96482c352880a38c",
"shasum": ""
},
"require": {
@ -3076,9 +3076,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
"source": "https://github.com/appwrite/sdk-generator/tree/0.33.7"
"source": "https://github.com/appwrite/sdk-generator/tree/0.33.6"
},
"time": "2023-07-12T12:15:43+00:00"
"time": "2023-07-10T16:27:53+00:00"
},
{
"name": "doctrine/deprecations",

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()
@ -11,5 +12,5 @@ var functions = new Functions(client);
Deployment result = await functions.CreateDeployment(
functionId: "[FUNCTION_ID]",
entrypoint: "[ENTRYPOINT]",
code: new File("./path-to-files/image.jpg"),
code: InputFile.FromPath("./path-to-files/image.jpg"),
activate: false);

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

View file

@ -1,4 +1,5 @@
using Appwrite;
using Appwrite.Services;
using Appwrite.Models;
var client = new Client()

Some files were not shown because too many files have changed in this diff Show more