Compare commits

...
Author SHA1 Message Date
Khushboo Verma ac0e96556d Updated specs 2024-08-28 19:11:42 +05:30
Khushboo Verma cb38f2c8e1 Change SDK request type to multipart 2024-08-28 18:58:35 +05:30
Torsten DittmannandGitHub 5c58ef2691 Merge pull request #8587 from appwrite/docs-add-dart-and-flutter-changelogs
docs: add changelogs for dart and flutter
2024-08-27 16:05:36 +02:00
Torsten Dittmann 3c94e07bbb docs: add changelogs for dart and flutter 2024-08-27 15:25:26 +02:00
Christy JacobandGitHub 78be575048 Merge pull request #8582 from appwrite/update-sdk-versions
chore: update sdks
2024-08-27 16:11:37 +04:00
Christy Jacob 3ef150ff08 Merge branch 'update-sdk-versions' of github.com:appwrite/appwrite into update-sdk-versions 2024-08-27 16:09:55 +04:00
Christy Jacob d13b5ca57e feat: review comments 2024-08-27 16:09:34 +04:00
8e07ea2c69 Update Dockerfile
Co-authored-by: Jake Barnby <jakeb994@gmail.com>
2024-08-27 16:09:07 +04:00
Christy Jacob f8c281dfc0 feat: update cache buster 2024-08-27 15:58:19 +04:00
Christy Jacob 53a86e62d2 Merge branch 'update-sdk-versions' of github.com:appwrite/appwrite into update-sdk-versions 2024-08-27 15:56:52 +04:00
Christy Jacob fec30cc614 feat: update SDK version 2024-08-27 15:56:15 +04:00
Christy JacobandGitHub 9553dc0a85 Merge branch '1.6.x' into update-sdk-versions 2024-08-27 14:52:17 +04:00
Christy Jacob 2ccf617dd8 feat: update SDK version 2024-08-27 14:25:25 +04:00
Jake BarnbyandGitHub 607c5c7638 Merge pull request #8443 from appwrite/feat-1.5.x-impl-deployment-storage-projects-usage
Merge deployments and build storage metrics together in API
2024-08-27 19:38:56 +12:00
Bradley Schofield a02a092faf Merge branch '1.6.x' into feat-1.5.x-impl-deployment-storage-projects-usage
# Conflicts:
#	app/controllers/api/project.php
#	src/Appwrite/Utopia/Response/Model/UsageProject.php
2024-08-27 15:49:21 +09:00
Christy Jacob a2030c170b chore: update sdks 2024-08-26 20:33:43 +04:00
Torsten DittmannandGitHub 8aebad1c01 Merge pull request #8581 from appwrite/chore-bump-console-sdk
chore: bump console sdk
2024-08-26 18:09:09 +02:00
Torsten Dittmann 588475cddf chore: bump console version 2024-08-26 17:51:03 +02:00
Torsten Dittmann e78767f1a0 chore: bump console sdk 2024-08-26 17:16:39 +02:00
Christy JacobandGitHub 1ec3215900 Merge pull request #8580 from appwrite/1.6.x-logging-test
1.6.x logging test
2024-08-26 16:37:23 +04:00
Christy Jacob e8125b4070 feat: linter 2024-08-26 15:05:50 +04:00
Christy Jacob d2c9ce65e3 feat: remove var_dumps 2024-08-26 14:56:30 +04:00
Christy Jacob 4f8e6d7005 feat: update experimental logging provider 2024-08-26 14:42:48 +04:00
Christy Jacob 03031805a9 feat: add logs 2024-08-26 13:33:51 +04:00
Torsten DittmannandGitHub 5b4444804b Merge pull request #8575 from appwrite/chore-upgrade-console
chore: upgrade console
2024-08-23 22:19:34 +02:00
Torsten Dittmann b215ab07fc chore: bump console to 5.0.1 2024-08-23 22:12:27 +02:00
Torsten Dittmann 853bd9a67c chore: upgrade console 2024-08-23 22:11:37 +02:00
Torsten DittmannandGitHub 6208d78146 Merge pull request #8562 from appwrite/feat-react-native-platform
feat: react native platform
2024-08-23 22:09:30 +02:00
Torsten Dittmann 14dedb9392 chore: bump web sdk for console 2024-08-23 21:49:50 +02:00
Torsten Dittmann 6ef600deb9 Merge branch '1.6.x' of https://github.com/appwrite/appwrite into feat-react-native-platform 2024-08-23 21:44:58 +02:00
Christy JacobandGitHub c12854b369 Merge pull request #8574 from appwrite/chore-latest-database
chore: versions update
2024-08-23 21:35:46 +04:00
Binyamin Yawitz 5cdb8388a1 chore: versions update 2024-08-23 13:02:54 -04:00
Binyamin Yawitz 42631aa85e chore: versions update 2024-08-23 11:55:21 -04:00
Christy JacobandGitHub cf6110530a Merge pull request #8572 from appwrite/fix-go-runtime
fix: go runtime
2024-08-22 19:47:38 +04:00
Matej Bačo 6b940bad05 gix go runtime 2024-08-22 15:44:58 +00:00
Torsten Dittmann 90c2bb10ff Merge branch 'feat-react-native-platform' of https://github.com/appwrite/appwrite into feat-react-native-platform 2024-08-21 13:22:30 +02:00
Torsten Dittmann 04181ec9ce fix: increase platform type size and add migration 2024-08-21 13:22:24 +02:00
Luke B. SilverandGitHub 14b40ace27 Merge branch '1.6.x' into feat-react-native-platform 2024-08-21 11:55:51 +01:00
Torsten Dittmann 129c1e7c4f Merge branch '1.6.x' of https://github.com/appwrite/appwrite into feat-react-native-platform 2024-08-20 16:04:40 +02:00
Torsten Dittmann cb374eb9f6 chore: upgrade sdk-generator 2024-08-20 16:02:49 +02:00
Torsten Dittmann f3874e680b fix: react native platform for ios adn android 2024-08-20 13:03:03 +02:00
Torsten Dittmann f065022cab feat: react native platform 2024-08-20 12:01:20 +02:00
Bradley Schofield 16cd971682 Merge deployments and build storage metrics together 2024-07-29 12:03:41 +09:00
46 changed files with 203 additions and 129 deletions
+1 -1
View File
@@ -4688,7 +4688,7 @@ $consoleCollections = array_merge([
'$id' => ID::custom('type'),
'type' => Database::VAR_STRING,
'format' => '',
'size' => 16,
'size' => Database::LENGTH_KEY,
'signed' => true,
'required' => false,
'default' => null,
+17 -17
View File
@@ -15,7 +15,7 @@ return [
[
'key' => 'web',
'name' => 'Web',
'version' => '16.0.0-rc.4',
'version' => '16.0.0',
'url' => 'https://github.com/appwrite/sdk-for-web',
'package' => 'https://www.npmjs.com/package/appwrite',
'enabled' => true,
@@ -63,7 +63,7 @@ return [
[
'key' => 'flutter',
'name' => 'Flutter',
'version' => '13.0.0-rc.3',
'version' => '13.0.0',
'url' => 'https://github.com/appwrite/sdk-for-flutter',
'package' => 'https://pub.dev/packages/appwrite',
'enabled' => true,
@@ -81,7 +81,7 @@ return [
[
'key' => 'apple',
'name' => 'Apple',
'version' => '7.0.0-rc.2',
'version' => '7.0.0',
'url' => 'https://github.com/appwrite/sdk-for-apple',
'package' => 'https://github.com/appwrite/sdk-for-apple',
'enabled' => true,
@@ -116,7 +116,7 @@ return [
[
'key' => 'android',
'name' => 'Android',
'version' => '6.0.0-rc.2',
'version' => '6.0.0',
'url' => 'https://github.com/appwrite/sdk-for-android',
'package' => 'https://search.maven.org/artifact/io.appwrite/sdk-for-android',
'enabled' => true,
@@ -138,7 +138,7 @@ return [
[
'key' => 'react-native',
'name' => 'React Native',
'version' => '0.5.0-rc.2',
'version' => '0.5.0',
'url' => 'https://github.com/appwrite/sdk-for-react-native',
'package' => 'https://npmjs.com/package/react-native-appwrite',
'enabled' => true,
@@ -203,7 +203,7 @@ return [
[
'key' => 'web',
'name' => 'Console',
'version' => '0.6.5-rc.2',
'version' => '1.0.1',
'url' => 'https://github.com/appwrite/sdk-for-console',
'package' => '',
'enabled' => true,
@@ -221,7 +221,7 @@ return [
[
'key' => 'cli',
'name' => 'Command Line',
'version' => '6.0.0-rc.8',
'version' => '6.0.0',
'url' => 'https://github.com/appwrite/sdk-for-cli',
'package' => 'https://www.npmjs.com/package/appwrite-cli',
'enabled' => true,
@@ -249,7 +249,7 @@ return [
[
'key' => 'nodejs',
'name' => 'Node.js',
'version' => '14.0.0-rc.3',
'version' => '14.0.0',
'url' => 'https://github.com/appwrite/sdk-for-node',
'package' => 'https://www.npmjs.com/package/node-appwrite',
'enabled' => true,
@@ -267,7 +267,7 @@ return [
[
'key' => 'deno',
'name' => 'Deno',
'version' => '12.0.0-rc.2',
'version' => '12.0.0',
'url' => 'https://github.com/appwrite/sdk-for-deno',
'package' => 'https://deno.land/x/appwrite',
'enabled' => true,
@@ -285,7 +285,7 @@ return [
[
'key' => 'php',
'name' => 'PHP',
'version' => '12.0.0-rc.2',
'version' => '12.0.0',
'url' => 'https://github.com/appwrite/sdk-for-php',
'package' => 'https://packagist.org/packages/appwrite/appwrite',
'enabled' => true,
@@ -303,7 +303,7 @@ return [
[
'key' => 'python',
'name' => 'Python',
'version' => '6.0.0-rc.2',
'version' => '6.0.0',
'url' => 'https://github.com/appwrite/sdk-for-python',
'package' => 'https://pypi.org/project/appwrite/',
'enabled' => true,
@@ -321,7 +321,7 @@ return [
[
'key' => 'ruby',
'name' => 'Ruby',
'version' => '12.0.0-rc.3',
'version' => '12.0.0',
'url' => 'https://github.com/appwrite/sdk-for-ruby',
'package' => 'https://rubygems.org/gems/appwrite',
'enabled' => true,
@@ -339,7 +339,7 @@ return [
[
'key' => 'go',
'name' => 'Go',
'version' => '0.0.1-rc.8',
'version' => '0.1.0',
'url' => 'https://github.com/appwrite/sdk-for-go',
'package' => 'https://github.com/appwrite/sdk-for-go',
'enabled' => true,
@@ -357,7 +357,7 @@ return [
[
'key' => 'dotnet',
'name' => '.NET',
'version' => '0.9.0-rc.2',
'version' => '0.9.0',
'url' => 'https://github.com/appwrite/sdk-for-dotnet',
'package' => 'https://www.nuget.org/packages/Appwrite',
'enabled' => true,
@@ -375,7 +375,7 @@ return [
[
'key' => 'dart',
'name' => 'Dart',
'version' => '12.0.0-rc.3',
'version' => '12.0.0',
'url' => 'https://github.com/appwrite/sdk-for-dart',
'package' => 'https://pub.dev/packages/dart_appwrite',
'enabled' => true,
@@ -393,7 +393,7 @@ return [
[
'key' => 'kotlin',
'name' => 'Kotlin',
'version' => '6.0.0-rc.2',
'version' => '6.0.0',
'url' => 'https://github.com/appwrite/sdk-for-kotlin',
'package' => 'https://search.maven.org/artifact/io.appwrite/sdk-for-kotlin',
'enabled' => true,
@@ -415,7 +415,7 @@ return [
[
'key' => 'swift',
'name' => 'Swift',
'version' => '6.0.0-rc.2',
'version' => '6.0.0',
'url' => 'https://github.com/appwrite/sdk-for-swift',
'package' => 'https://github.com/appwrite/sdk-for-swift',
'enabled' => true,
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -2
View File
@@ -951,7 +951,7 @@ App::get('/v1/functions/:functionId/deployments/:deploymentId/download')
->groups(['api', 'functions'])
->desc('Download deployment')
->label('scope', 'functions.read')
->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT])
->label('sdk.auth', [APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT])
->label('sdk.namespace', 'functions')
->label('sdk.method', 'getDeploymentDownload')
->label('sdk.description', '/docs/references/functions/get-deployment-download.md')
@@ -1713,7 +1713,7 @@ App::post('/v1/functions/:functionId/executions')
->label('sdk.response.code', Response::STATUS_CODE_CREATED)
->label('sdk.response.type', Response::CONTENT_TYPE_MULTIPART)
->label('sdk.response.model', Response::MODEL_EXECUTION)
->label('sdk.request.type', Response::CONTENT_TYPE_JSON)
->label('sdk.request.type', Response::CONTENT_TYPE_MULTIPART)
->param('functionId', '', new UID(), 'Function ID.')
->param('body', '', new Text(10485760, 0), 'HTTP body of execution. Default value is empty string.', true)
->param('async', false, new Boolean(), 'Execute code in the background. Default value is false.', true)
@@ -2532,6 +2532,7 @@ App::get('/v1/functions/templates')
->label('scope', 'public')
->label('sdk.namespace', 'functions')
->label('sdk.method', 'listTemplates')
->label('sdk.auth', [APP_AUTH_TYPE_ADMIN])
->label('sdk.description', '/docs/references/functions/list-templates.md')
->label('sdk.response.code', Response::STATUS_CODE_OK)
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
@@ -2568,6 +2569,7 @@ App::get('/v1/functions/templates/:templateId')
->label('scope', 'public')
->label('sdk.namespace', 'functions')
->label('sdk.method', 'getTemplate')
->label('sdk.auth', [APP_AUTH_TYPE_ADMIN])
->label('sdk.description', '/docs/references/functions/get-template.md')
->label('sdk.response.code', Response::STATUS_CODE_OK)
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
+17 -8
View File
@@ -47,7 +47,8 @@ App::get('/v1/project/usage')
METRIC_USERS,
METRIC_BUCKETS,
METRIC_FILES_STORAGE,
METRIC_DEPLOYMENTS_STORAGE
METRIC_DEPLOYMENTS_STORAGE,
METRIC_BUILDS_STORAGE
],
'period' => [
METRIC_NETWORK_REQUESTS,
@@ -181,19 +182,27 @@ App::get('/v1/project/usage')
];
}, $dbForProject->find('buckets'));
$deploymentsStorageBreakdown = array_map(function ($function) use ($dbForProject) {
$functionsStorageBreakdown = array_map(function ($function) use ($dbForProject) {
$id = $function->getId();
$name = $function->getAttribute('name');
$metric = str_replace(['{resourceType}', '{resourceInternalId}'], ['functions', $function->getInternalId()], METRIC_FUNCTION_ID_DEPLOYMENTS_STORAGE);
$value = $dbForProject->findOne('stats', [
Query::equal('metric', [$metric]),
$deploymentMetric = str_replace(['{resourceType}', '{resourceInternalId}'], ['functions', $function->getInternalId()], METRIC_FUNCTION_ID_DEPLOYMENTS_STORAGE);
$deploymentValue = $dbForProject->findOne('stats', [
Query::equal('metric', [$deploymentMetric]),
Query::equal('period', ['inf'])
]);
$buildMetric = str_replace(['{functionInternalId}'], [$function->getInternalId()], METRIC_FUNCTION_ID_BUILDS_STORAGE);
$buildValue = $dbForProject->findOne('stats', [
Query::equal('metric', [$buildMetric]),
Query::equal('period', ['inf'])
]);
$value = ($buildValue['value'] ?? 0) + ($deploymentValue['value'] ?? 0);
return [
'resourceId' => $id,
'name' => $name,
'value' => $value['value'] ?? 0,
'value' => $value,
];
}, $dbForProject->find('functions'));
@@ -263,14 +272,14 @@ App::get('/v1/project/usage')
'usersTotal' => $total[METRIC_USERS],
'bucketsTotal' => $total[METRIC_BUCKETS],
'filesStorageTotal' => $total[METRIC_FILES_STORAGE],
'deploymentsStorageTotal' => $total[METRIC_DEPLOYMENTS_STORAGE],
'functionsStorageTotal' => $total[METRIC_DEPLOYMENTS_STORAGE] + $total[METRIC_BUILDS_STORAGE],
'executionsBreakdown' => $executionsBreakdown,
'executionsMbSecondsBreakdown' => $executionsMbSecondsBreakdown,
'buildsMbSecondsBreakdown' => $buildsMbSecondsBreakdown,
'bucketsBreakdown' => $bucketsBreakdown,
'executionsMbSecondsBreakdown' => $executionsMbSecondsBreakdown,
'buildsMbSecondsBreakdown' => $buildsMbSecondsBreakdown,
'deploymentsStorageBreakdown' => $deploymentsStorageBreakdown,
'functionsStorageBreakdown' => $functionsStorageBreakdown,
]), Response::MODEL_USAGE_PROJECT);
});
+3 -3
View File
@@ -16,7 +16,7 @@ use Appwrite\Utopia\Database\Validator\Queries\Projects;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use PHPMailer\PHPMailer\PHPMailer;
use Utopia\Abuse\Adapters\Database as AbuseDatabase;
use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\App;
use Utopia\Audit\Audit;
use Utopia\Cache\Cache;
@@ -209,7 +209,7 @@ App::post('/v1/projects')
$audit = new Audit($dbForProject);
$audit->setup();
$abuse = new AbuseDatabase('', 0, 1, $dbForProject);
$abuse = new TimeLimit('', 0, 1, $dbForProject);
$abuse->setup();
/** @var array $collections */
@@ -1444,7 +1444,7 @@ App::post('/v1/projects/:projectId/platforms')
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_PLATFORM)
->param('projectId', '', new UID(), 'Project unique ID.')
->param('type', null, new WhiteList([Origin::CLIENT_TYPE_WEB, Origin::CLIENT_TYPE_FLUTTER_WEB, Origin::CLIENT_TYPE_FLUTTER_IOS, Origin::CLIENT_TYPE_FLUTTER_ANDROID, Origin::CLIENT_TYPE_FLUTTER_LINUX, Origin::CLIENT_TYPE_FLUTTER_MACOS, Origin::CLIENT_TYPE_FLUTTER_WINDOWS, Origin::CLIENT_TYPE_APPLE_IOS, Origin::CLIENT_TYPE_APPLE_MACOS, Origin::CLIENT_TYPE_APPLE_WATCHOS, Origin::CLIENT_TYPE_APPLE_TVOS, Origin::CLIENT_TYPE_ANDROID, Origin::CLIENT_TYPE_UNITY], true), 'Platform type.')
->param('type', null, new WhiteList([Origin::CLIENT_TYPE_WEB, Origin::CLIENT_TYPE_FLUTTER_WEB, Origin::CLIENT_TYPE_FLUTTER_IOS, Origin::CLIENT_TYPE_FLUTTER_ANDROID, Origin::CLIENT_TYPE_FLUTTER_LINUX, Origin::CLIENT_TYPE_FLUTTER_MACOS, Origin::CLIENT_TYPE_FLUTTER_WINDOWS, Origin::CLIENT_TYPE_APPLE_IOS, Origin::CLIENT_TYPE_APPLE_MACOS, Origin::CLIENT_TYPE_APPLE_WATCHOS, Origin::CLIENT_TYPE_APPLE_TVOS, Origin::CLIENT_TYPE_ANDROID, Origin::CLIENT_TYPE_UNITY, Origin::CLIENT_TYPE_REACT_NATIVE_IOS, Origin::CLIENT_TYPE_REACT_NATIVE_ANDROID], true), 'Platform type.')
->param('name', null, new Text(128), 'Platform name. Max length: 128 chars.')
->param('key', '', new Text(256), 'Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.', true)
->param('store', '', new Text(256), 'App store or Google Play store ID. Max length: 256 chars.', true)
+18 -9
View File
@@ -32,6 +32,7 @@ use Utopia\Database\Validator\Authorization;
use Utopia\Domains\Domain;
use Utopia\DSN\DSN;
use Utopia\Locale\Locale;
use Utopia\Logger\Adapter\Sentry;
use Utopia\Logger\Log;
use Utopia\Logger\Log\User;
use Utopia\Logger\Logger;
@@ -754,16 +755,24 @@ App::error()
$providerName = System::getEnv('_APP_EXPERIMENT_LOGGING_PROVIDER', '');
$providerConfig = System::getEnv('_APP_EXPERIMENT_LOGGING_CONFIG', '');
if (!(empty($providerName) || empty($providerConfig))) {
if (!Logger::hasProvider($providerName)) {
throw new Exception("Logging provider not supported. Logging is disabled");
}
try {
$loggingProvider = new DSN($providerConfig ?? '');
$providerName = $loggingProvider->getScheme();
$classname = '\\Utopia\\Logger\\Adapter\\' . \ucfirst($providerName);
$adapter = new $classname($providerConfig);
$logger = new Logger($adapter);
$logger->setSample(0.04);
$publish = true;
if (!empty($providerName) && $providerName === 'sentry') {
$key = $loggingProvider->getPassword();
$projectId = $loggingProvider->getUser() ?? '';
$host = 'https://' . $loggingProvider->getHost();
$adapter = new Sentry($projectId, $key, $host);
$logger = new Logger($adapter);
$logger->setSample(0.04);
$publish = true;
} else {
throw new \Exception('Invalid experimental logging provider');
}
} catch (\Throwable $th) {
Console::warning('Failed to initialize logging provider: ' . $th->getMessage());
}
}
+2 -2
View File
@@ -18,7 +18,7 @@ use Appwrite\Messaging\Adapter\Realtime;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Utopia\Abuse\Abuse;
use Utopia\Abuse\Adapters\Database as AbuseDatabase;
use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\App;
use Utopia\Cache\Adapter\Filesystem;
use Utopia\Cache\Cache;
@@ -380,7 +380,7 @@ App::init()
foreach ($abuseKeyLabel as $abuseKey) {
$start = $request->getContentRangeStart();
$end = $request->getContentRangeEnd();
$timeLimit = new AbuseDatabase($abuseKey, $route->getLabel('abuse-limit', 0), $route->getLabel('abuse-time', 3600), $dbForProject);
$timeLimit = new TimeLimit($abuseKey, $route->getLabel('abuse-limit', 0), $route->getLabel('abuse-time', 3600), $dbForProject);
$timeLimit
->setParam('{projectId}', $project->getId())
->setParam('{userId}', $user->getId())
+3 -3
View File
@@ -9,7 +9,7 @@ use Swoole\Http\Request as SwooleRequest;
use Swoole\Http\Response as SwooleResponse;
use Swoole\Http\Server;
use Swoole\Process;
use Utopia\Abuse\Adapters\Database as AbuseDatabase;
use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\App;
use Utopia\Audit\Audit;
use Utopia\CLI\Console;
@@ -101,8 +101,8 @@ $http->on(Constant::EVENT_START, function (Server $http) use ($payloadSize, $reg
$audit->setup();
}
if ($dbForConsole->getCollection(AbuseDatabase::COLLECTION)->isEmpty()) {
$adapter = new AbuseDatabase("", 0, 1, $dbForConsole);
if ($dbForConsole->getCollection(TimeLimit::COLLECTION)->isEmpty()) {
$adapter = new TimeLimit("", 0, 1, $dbForConsole);
$adapter->setup();
}
+3 -2
View File
@@ -118,7 +118,7 @@ const APP_KEY_ACCESS = 24 * 60 * 60; // 24 hours
const APP_USER_ACCESS = 24 * 60 * 60; // 24 hours
const APP_PROJECT_ACCESS = 24 * 60 * 60; // 24 hours
const APP_CACHE_UPDATE = 24 * 60 * 60; // 24 hours
const APP_CACHE_BUSTER = 4315;
const APP_CACHE_BUSTER = 4318;
const APP_VERSION_STABLE = '1.6.0';
const APP_DATABASE_ATTRIBUTE_EMAIL = 'email';
const APP_DATABASE_ATTRIBUTE_ENUM = 'enum';
@@ -759,8 +759,9 @@ $register->set('logger', function () {
'logowl' => ['ticket' => $loggingProvider->getUser() ?? '', 'host' => $loggingProvider->getHost()],
default => ['key' => $loggingProvider->getHost()],
};
} catch (Throwable) {
} catch (Throwable $th) {
// Fallback for older Appwrite versions up to 1.5.x that use _APP_LOGGING_PROVIDER and _APP_LOGGING_CONFIG environment variables
Console::warning('Using deprecated logging configuration. Please update your configuration to use DSN format.' . $th->getMessage());
$configChunks = \explode(";", $providerConfig);
$providerConfig = match ($providerName) {
+3 -3
View File
@@ -13,7 +13,7 @@ use Swoole\Runtime;
use Swoole\Table;
use Swoole\Timer;
use Utopia\Abuse\Abuse;
use Utopia\Abuse\Adapters\Database as AbuseDatabase;
use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\App;
use Utopia\Cache\Adapter\Sharding;
use Utopia\Cache\Cache;
@@ -463,7 +463,7 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server,
*
* Abuse limits are connecting 128 times per minute and ip address.
*/
$timeLimit = new AbuseDatabase('url:{url},ip:{ip}', 128, 60, $dbForProject);
$timeLimit = new TimeLimit('url:{url},ip:{ip}', 128, 60, $dbForProject);
$timeLimit
->setParam('{ip}', $request->getIP())
->setParam('{url}', $request->getURI());
@@ -563,7 +563,7 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re
*
* Abuse limits are sending 32 times per minute and connection.
*/
$timeLimit = new AbuseDatabase('url:{url},connection:{connection}', 32, 60, $database);
$timeLimit = new TimeLimit('url:{url},connection:{connection}', 32, 60, $database);
$timeLimit
->setParam('{connection}', $connection)
+1 -1
View File
@@ -166,7 +166,7 @@ $image = $this->getParam('image', '');
appwrite-console:
<<: *x-logging
container_name: appwrite-console
image: <?php echo $organization; ?>/console:appwrite/console:5.0.0-rc16
image: <?php echo $organization; ?>/console:5.0.4
restart: unless-stopped
networks:
- appwrite
+4 -4
View File
@@ -43,15 +43,15 @@
"ext-openssl": "*",
"ext-zlib": "*",
"ext-sockets": "*",
"appwrite/php-runtimes": "0.14.*",
"appwrite/php-runtimes": "0.15.*",
"appwrite/php-clamav": "2.0.*",
"utopia-php/abuse": "0.40.*",
"utopia-php/abuse": "0.42.0",
"utopia-php/analytics": "0.10.*",
"utopia-php/audit": "0.41.*",
"utopia-php/audit": "0.42.0",
"utopia-php/cache": "0.10.*",
"utopia-php/cli": "0.15.*",
"utopia-php/config": "0.2.*",
"utopia-php/database": "0.51.*",
"utopia-php/database": "0.52.*",
"utopia-php/domains": "0.5.*",
"utopia-php/dsn": "0.2.1",
"utopia-php/framework": "0.33.*",
Generated
+41 -41
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "f52ec59d7dc581af7f6fe7b535045f8b",
"content-hash": "eba741eab8bb748ed684c32711d472df",
"packages": [
{
"name": "adhocore/jwt",
@@ -156,16 +156,16 @@
},
{
"name": "appwrite/php-runtimes",
"version": "0.14.0",
"version": "0.15.0",
"source": {
"type": "git",
"url": "https://github.com/appwrite/runtimes.git",
"reference": "9bae5bebe7c7cb3e4bf3a05a1d36c9d6ce3a2d3e"
"reference": "68ea5bcc24c513a6d641ddf9412bbab13e5dfb94"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/appwrite/runtimes/zipball/9bae5bebe7c7cb3e4bf3a05a1d36c9d6ce3a2d3e",
"reference": "9bae5bebe7c7cb3e4bf3a05a1d36c9d6ce3a2d3e",
"url": "https://api.github.com/repos/appwrite/runtimes/zipball/68ea5bcc24c513a6d641ddf9412bbab13e5dfb94",
"reference": "68ea5bcc24c513a6d641ddf9412bbab13e5dfb94",
"shasum": ""
},
"require": {
@@ -205,9 +205,9 @@
],
"support": {
"issues": "https://github.com/appwrite/runtimes/issues",
"source": "https://github.com/appwrite/runtimes/tree/0.14.0"
"source": "https://github.com/appwrite/runtimes/tree/0.15.0"
},
"time": "2024-07-03T10:18:32+00:00"
"time": "2024-08-21T10:23:45+00:00"
},
{
"name": "beberlei/assert",
@@ -1429,16 +1429,16 @@
},
{
"name": "utopia-php/abuse",
"version": "0.40.0",
"version": "0.42.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/abuse.git",
"reference": "69748a6741a9e44f0c9e430f3c2bd2b8a677c048"
"reference": "08cf17e7f4fd213966c8d8702e406f2269244f0f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/abuse/zipball/69748a6741a9e44f0c9e430f3c2bd2b8a677c048",
"reference": "69748a6741a9e44f0c9e430f3c2bd2b8a677c048",
"url": "https://api.github.com/repos/utopia-php/abuse/zipball/08cf17e7f4fd213966c8d8702e406f2269244f0f",
"reference": "08cf17e7f4fd213966c8d8702e406f2269244f0f",
"shasum": ""
},
"require": {
@@ -1446,7 +1446,7 @@
"ext-pdo": "*",
"ext-redis": "*",
"php": ">=8.0",
"utopia-php/database": "0.51.*"
"utopia-php/database": "0.52.*"
},
"require-dev": {
"laravel/pint": "1.5.*",
@@ -1474,9 +1474,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/abuse/issues",
"source": "https://github.com/utopia-php/abuse/tree/0.40.0"
"source": "https://github.com/utopia-php/abuse/tree/0.42.0"
},
"time": "2024-08-16T06:08:24+00:00"
"time": "2024-08-21T08:24:01+00:00"
},
{
"name": "utopia-php/analytics",
@@ -1526,21 +1526,21 @@
},
{
"name": "utopia-php/audit",
"version": "0.41.0",
"version": "0.42.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/audit.git",
"reference": "77f1d0a95ea791e38a38a8bc1b7728ffcedcd2d1"
"reference": "9dc168470625bcf11ff8cd9ab5660db09129f618"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/audit/zipball/77f1d0a95ea791e38a38a8bc1b7728ffcedcd2d1",
"reference": "77f1d0a95ea791e38a38a8bc1b7728ffcedcd2d1",
"url": "https://api.github.com/repos/utopia-php/audit/zipball/9dc168470625bcf11ff8cd9ab5660db09129f618",
"reference": "9dc168470625bcf11ff8cd9ab5660db09129f618",
"shasum": ""
},
"require": {
"php": ">=8.0",
"utopia-php/database": "0.51.*"
"utopia-php/database": "0.52.*"
},
"require-dev": {
"laravel/pint": "1.5.*",
@@ -1567,9 +1567,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/audit/issues",
"source": "https://github.com/utopia-php/audit/tree/0.41.0"
"source": "https://github.com/utopia-php/audit/tree/0.42.0"
},
"time": "2024-08-16T06:08:00+00:00"
"time": "2024-08-21T08:24:08+00:00"
},
{
"name": "utopia-php/cache",
@@ -1723,16 +1723,16 @@
},
{
"name": "utopia-php/database",
"version": "0.51.1",
"version": "0.52.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
"reference": "845783a54cced784e00db084a29486fdb96d3d58"
"reference": "d22a316a010699c5ebb4768c1020167c192b9c6b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/database/zipball/845783a54cced784e00db084a29486fdb96d3d58",
"reference": "845783a54cced784e00db084a29486fdb96d3d58",
"url": "https://api.github.com/repos/utopia-php/database/zipball/d22a316a010699c5ebb4768c1020167c192b9c6b",
"reference": "d22a316a010699c5ebb4768c1020167c192b9c6b",
"shasum": ""
},
"require": {
@@ -1744,14 +1744,14 @@
"utopia-php/mongo": "0.3.*"
},
"require-dev": {
"fakerphp/faker": "^1.14",
"laravel/pint": "1.13.*",
"pcov/clobber": "^2.0",
"phpstan/phpstan": "1.10.*",
"phpunit/phpunit": "^9.4",
"rregeer/phpunit-coverage-check": "^0.3.1",
"swoole/ide-helper": "4.8.0",
"utopia-php/cli": "^0.14.0"
"fakerphp/faker": "1.23.*",
"laravel/pint": "1.17.*",
"pcov/clobber": "2.0.*",
"phpstan/phpstan": "1.11.*",
"phpunit/phpunit": "9.6.*",
"rregeer/phpunit-coverage-check": "0.3.*",
"swoole/ide-helper": "5.1.3",
"utopia-php/cli": "0.14.*"
},
"type": "library",
"autoload": {
@@ -1773,9 +1773,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
"source": "https://github.com/utopia-php/database/tree/0.51.1"
"source": "https://github.com/utopia-php/database/tree/0.52.1"
},
"time": "2024-08-16T10:54:25+00:00"
"time": "2024-08-23T02:43:43+00:00"
},
{
"name": "utopia-php/domains",
@@ -2993,16 +2993,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
"version": "0.39.13",
"version": "0.39.18",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
"reference": "1130d024dd667d132be0b843c970bee82e593aaf"
"reference": "3f12532d3a41f6e3e7528f41c0e79a6d473c4a4c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/1130d024dd667d132be0b843c970bee82e593aaf",
"reference": "1130d024dd667d132be0b843c970bee82e593aaf",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/3f12532d3a41f6e3e7528f41c0e79a6d473c4a4c",
"reference": "3f12532d3a41f6e3e7528f41c0e79a6d473c4a4c",
"shasum": ""
},
"require": {
@@ -3038,9 +3038,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.39.13"
"source": "https://github.com/appwrite/sdk-generator/tree/0.39.18"
},
"time": "2024-08-21T10:45:26+00:00"
"time": "2024-08-27T11:22:14+00:00"
},
{
"name": "doctrine/annotations",
+2 -1
View File
@@ -103,6 +103,7 @@ services:
- _APP_CONSOLE_HOSTNAMES
- _APP_SYSTEM_EMAIL_NAME
- _APP_SYSTEM_EMAIL_ADDRESS
- _APP_SYSTEM_TEAM_EMAIL
- _APP_EMAIL_SECURITY
- _APP_SYSTEM_RESPONSE_FORMAT
- _APP_OPTIONS_ABUSE
@@ -195,7 +196,7 @@ services:
appwrite-console:
<<: *x-logging
container_name: appwrite-console
image: appwrite/console:5.0.0-rc16
image: appwrite/console:5.0.4
restart: unless-stopped
networks:
- appwrite
@@ -3,7 +3,7 @@ import 'package:dart_appwrite/dart_appwrite.dart';
Client client = Client()
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with
.setKey('<YOUR_API_KEY>'); // Your secret API key
Functions functions = Functions(client);
@@ -3,7 +3,7 @@ import { Client, Functions } from "https://deno.land/x/appwrite/mod.ts";
const client = new Client()
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with
.setKey('<YOUR_API_KEY>'); // Your secret API key
const functions = new Functions(client);
@@ -5,7 +5,7 @@ using Appwrite.Services;
Client client = new Client()
.SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.SetProject("<YOUR_PROJECT_ID>") // Your project ID
.SetSession(""); // The user session to authenticate with
.SetKey("<YOUR_API_KEY>"); // Your secret API key
Functions functions = new Functions(client);
@@ -11,7 +11,7 @@ func main() {
client.SetEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
client.SetProject("<YOUR_PROJECT_ID>") // Your project ID
client.SetSession("") // The user session to authenticate with
client.SetKey("<YOUR_API_KEY>") // Your secret API key
service := functions.NewFunctions(client)
response, error := service.GetDeploymentDownload(
@@ -11,6 +11,7 @@ query {
resourceType
entrypoint
size
buildSize
buildId
activate
status
@@ -14,6 +14,7 @@ query {
resourceType
entrypoint
size
buildSize
buildId
activate
status
@@ -5,7 +5,7 @@ import io.appwrite.services.Functions;
Client client = new Client()
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
.setSession(""); // The user session to authenticate with
.setKey("<YOUR_API_KEY>"); // Your secret API key
Functions functions = new Functions(client);
@@ -5,7 +5,7 @@ import io.appwrite.services.Functions
val client = Client()
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
.setSession("") // The user session to authenticate with
.setKey("<YOUR_API_KEY>") // Your secret API key
val functions = Functions(client)
@@ -3,7 +3,7 @@ const sdk = require('node-appwrite');
const client = new sdk.Client()
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with
.setKey('<YOUR_API_KEY>'); // Your secret API key
const functions = new sdk.Functions(client);
@@ -6,7 +6,7 @@ use Appwrite\Services\Functions;
$client = (new Client())
->setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
->setProject('<YOUR_PROJECT_ID>') // Your project ID
->setSession(''); // The user session to authenticate with
->setKey('<YOUR_API_KEY>'); // Your secret API key
$functions = new Functions($client);
@@ -3,7 +3,7 @@ from appwrite.client import Client
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
client.set_project('<YOUR_PROJECT_ID>') # Your project ID
client.set_session('') # The user session to authenticate with
client.set_key('<YOUR_API_KEY>') # Your secret API key
functions = Functions(client)
@@ -3,7 +3,6 @@ Host: cloud.appwrite.io
Content-Type: application/json
X-Appwrite-Response-Format: 1.6.0
X-Appwrite-Project: <YOUR_PROJECT_ID>
X-Appwrite-Session:
X-Appwrite-Key: <YOUR_API_KEY>
X-Appwrite-JWT: <YOUR_JWT>
@@ -5,7 +5,7 @@ include Appwrite
client = Client.new
.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
.set_project('<YOUR_PROJECT_ID>') # Your project ID
.set_session('') # The user session to authenticate with
.set_key('<YOUR_API_KEY>') # Your secret API key
functions = Functions.new(client)
@@ -3,7 +3,7 @@ import Appwrite
let client = Client()
.setEndpoint("https://cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
.setSession("") // The user session to authenticate with
.setKey("<YOUR_API_KEY>") // Your secret API key
let functions = Functions(client)
+25
View File
@@ -1,3 +1,28 @@
## 12.0.0
* Support for Appwrite 1.6
* Added `key` attribute to `Runtime` response model.
* Added `buildSize` attribute to `Deployments` response model.
* Added `scheduledAt` attribute to `Executions` response model.
* Added `scopes` attribute to `Functions` response model.
* Added `specifications` attribute to `Functions` response model.
* Added new response model for `Specifications`.
* Added new response model for `Builds`.
* Added `createJWT()` : Enables creating a JWT using the `userId`.
* Added `listSpecifications()`: Enables listing available runtime specifications.
* Added `deleteExecution()` : Enables deleting executions.
* Added `updateDeploymentBuild()`: Enables cancelling a deployment.
* Added `scheduledAt` parameter to `createExecution()`: Enables creating a delayed execution
* Breaking changes:
* Removed `otp` parameter from `deleteMFAAuthenticator`.
* Added `scopes` parameter for create/update function.
* Renamed `templateBranch` to `templateVersion` in `createFunction()`.
* Renamed `downloadDeployment()` to `getDeploymentDownload()`
You can find the new syntax for breaking changes in the [Appwrite API references](https://appwrite.io/docs/references). Select version `1.6.x`.
**Please note: This version is compatible with Appwrite 1.6 and later only. If you do not update your Appwrite SDK, old SDKs will not break your app. Appwrite APIs are backwards compatible.**
## 11.0.3
* Minor bugfixes
+14
View File
@@ -1,3 +1,17 @@
## 13.0.0
* Fixed realtime reconnection issues
* Support for Appwrite 1.6
* Update dependencies
* Added `scheduledAt` attribute to `Execution` response model
* Added `scheduledAt` parameter to `createExecution()`: Enables creating a delayed execution
* Breaking changes:
* Removed `otp` parameter from `deleteMFAAuthenticator`.
You can find the new syntax for breaking changes in the [Appwrite API references](https://appwrite.io/docs/references). Select version `1.6.x`.
**Please note: This version is compatible with Appwrite 1.6 and later only. If you do not update your Appwrite SDK, old SDKs will not break your app. Appwrite APIs are backwards compatible.**
## 12.0.4
* Fixed concurrent modification error when closing realtime socket
+9 -1
View File
@@ -74,6 +74,14 @@ class V21 extends Migration
Console::warning("'accessedAt' from {$id}: {$th->getMessage()}");
}
break;
case 'platforms':
// Increase 'type' length to 255
try {
$this->projectDB->updateAttribute($id, 'type', size: 255);
} catch (Throwable $th) {
Console::warning("'type' from {$id}: {$th->getMessage()}");
}
break;
case 'schedules':
// Create data attribute
try {
@@ -189,7 +197,7 @@ class V21 extends Migration
*
* @return void
*/
private function migrateBuckets()
private function migrateBuckets(): void
{
foreach ($this->documentsIterator('buckets') as $bucket) {
$bucketId = 'bucket_' . $bucket['$internalId'];
@@ -21,6 +21,8 @@ class Origin extends Validator
public const CLIENT_TYPE_APPLE_TVOS = 'apple-tvos';
public const CLIENT_TYPE_ANDROID = 'android';
public const CLIENT_TYPE_UNITY = 'unity';
public const CLIENT_TYPE_REACT_NATIVE_IOS = 'react-native-ios';
public const CLIENT_TYPE_REACT_NATIVE_ANDROID = 'react-native-android';
public const SCHEME_TYPE_HTTP = 'http';
@@ -88,6 +90,8 @@ class Origin extends Validator
case self::CLIENT_TYPE_APPLE_MACOS:
case self::CLIENT_TYPE_APPLE_WATCHOS:
case self::CLIENT_TYPE_APPLE_TVOS:
case self::CLIENT_TYPE_REACT_NATIVE_IOS:
case self::CLIENT_TYPE_REACT_NATIVE_ANDROID:
$this->clients[] = (isset($platform['key'])) ? $platform['key'] : '';
break;
+3 -3
View File
@@ -7,7 +7,7 @@ use Appwrite\Extend\Exception;
use Executor\Executor;
use Throwable;
use Utopia\Abuse\Abuse;
use Utopia\Abuse\Adapters\Database as AbuseDatabase;
use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\Audit\Audit;
use Utopia\Cache\Adapter\Filesystem;
use Utopia\Cache\Cache;
@@ -493,7 +493,7 @@ class Deletes extends Action
$projectCollectionIds = [
...\array_keys(Config::getParam('collections', [])['projects']),
Audit::COLLECTION,
AbuseDatabase::COLLECTION,
TimeLimit::COLLECTION,
];
$limit = \count($projectCollectionIds) + 25;
@@ -686,7 +686,7 @@ class Deletes extends Action
{
$projectId = $project->getId();
$dbForProject = $getProjectDB($project);
$timeLimit = new AbuseDatabase("", 0, 1, $dbForProject);
$timeLimit = new TimeLimit("", 0, 1, $dbForProject);
$abuse = new Abuse($timeLimit);
try {
@@ -40,9 +40,9 @@ class UsageProject extends Model
'default' => 0,
'example' => 0,
])
->addRule('deploymentsStorageTotal', [
->addRule('functionsStorageTotal', [
'type' => self::TYPE_INTEGER,
'description' => 'Total aggregated sum of deployments storage size (in bytes).',
'description' => 'Total aggregated sum of functions storage size (in bytes).',
'default' => 0,
'example' => 0,
])
@@ -120,9 +120,9 @@ class UsageProject extends Model
'example' => [],
'array' => true
])
->addRule('deploymentsStorageBreakdown', [
->addRule('functionsStorageBreakdown', [
'type' => Response::MODEL_METRIC_BREAKDOWN,
'description' => 'Aggregated breakdown in totals of deployments storage size (in bytes).',
'description' => 'Aggregated breakdown in totals of functions storage size (in bytes).',
'default' => [],
'example' => [],
'array' => true