Add headers for event triggered executions

This commit is contained in:
Khushboo Verma
2025-07-28 10:26:20 +05:30
parent aeb497a02a
commit 3e74e39d1d
4 changed files with 14 additions and 5 deletions
+3 -3
View File
@@ -70,8 +70,11 @@ $eventDatabaseListener = function (Document $project, Document $document, Respon
->setParam('userId', $document->getId())
->setPayload($response->output($document, Response::MODEL_USER));
$scheduledAt = new \DateTime();
// Trigger functions, webhooks, and realtime events
$queueForFunctions
->setHeaders(['x-appwrite-scheduled-at' => $scheduledAt->format('Y-m-d\TH:i:s.v\Z')])
->from($queueForEvents)
->trigger();
@@ -713,10 +716,7 @@ App::shutdown()
$queueForEvents->setPayload($responsePayload);
}
$scheduledAt = new \DateTime();
$queueForFunctions
->setHeaders(['x-appwrite-scheduled-at' => $scheduledAt->format('Y-m-d\TH:i:s.v\Z')])
->from($queueForEvents)
->trigger();
+1 -1
View File
@@ -142,7 +142,7 @@ const APP_AUTH_TYPE_ADMIN = 'Admin';
// Response related
const MAX_OUTPUT_CHUNK_SIZE = 10 * 1024 * 1024; // 10MB
// Function headers
const FUNCTION_ALLOWLIST_HEADERS_REQUEST = ['content-type', 'agent', 'content-length', 'host', 'x-appwrite-scheduled-at'];
const FUNCTION_ALLOWLIST_HEADERS_REQUEST = ['content-type', 'agent', 'content-length', 'host', 'x-appwrite-scheduled-at', 'x-appwrite-execution-delay', 'x-appwrite-executed-at'];
const FUNCTION_ALLOWLIST_HEADERS_RESPONSE = ['content-type', 'content-length'];
// Message types
const MESSAGE_TYPE_EMAIL = 'email';
+2 -1
View File
@@ -164,7 +164,8 @@ class Functions extends Action
method: 'POST',
headers: [
'user-agent' => 'Appwrite/' . APP_VERSION_STABLE,
'content-type' => 'application/json'
'content-type' => 'application/json',
'x-appwrite-scheduled-at' => $headers['x-appwrite-scheduled-at'] ?? '',
],
data: null,
user: $user,
@@ -1508,6 +1508,14 @@ class FunctionsCustomServerTest extends Scope
$this->assertEquals(204, $lastExecution['responseStatusCode']);
$this->assertStringContainsString($userId, $lastExecution['logs']);
$this->assertStringContainsString('Event User', $lastExecution['logs']);
$requestHeaders = array_column($lastExecution['requestHeaders'], 'value', 'name');
$this->assertArrayHasKey('x-appwrite-scheduled-at', $requestHeaders);
$this->assertArrayHasKey('x-appwrite-executed-at', $requestHeaders);
$this->assertArrayHasKey('x-appwrite-execution-delay', $requestHeaders);
$this->assertIsNumeric($requestHeaders['x-appwrite-execution-delay']);
$this->assertGreaterThan($requestHeaders['x-appwrite-scheduled-at'], $requestHeaders['x-appwrite-executed-at']);
}, 10000, 500);
$this->cleanupFunction($functionId);