diff --git a/app/views/docs/functions.phtml b/app/views/docs/functions.phtml index 822da19ea..dbcd55b33 100644 --- a/app/views/docs/functions.phtml +++ b/app/views/docs/functions.phtml @@ -40,186 +40,149 @@ $runtimes = $this->getParam('runtimes', []);

Node.js

-
const fetch = require("node-fetch");
-
-module.exports = async (request, response) => {
-    const payload = JSON.parse(request.payload ? request.payload : "{}");
-    const env = request.env;
-
-    const randomNumber = Math.floor(Math.random() * 100) + 1;
-    const todo = await fetch(`https://jsonplaceholder.typicode.com/todos/${randomNumber}`).then(r => r.json());
-
-    let task = {
-        message: 'Hello from Appwrite Functions 👋',
-        ...todo
-    };
-
-    switch(env.APPWRITE_FUNCTION_TRIGGER) {
-        case 'http': 
-            task['trigger'] = 'HTTP'; 
-            break;
-        case 'schedule': 
-            task['trigger'] = 'CRON'; 
-            break;
-        case 'event': 
-            task['trigger'] = 'Event'; 
-            break;
-        default: 
-            task['trigger'] = 'Unknown'; 
-            break;
-    }
+            
module.exports = async (req, res) => {
+  const payload =
+    req.payload ||
+    'No payload provided. Add custom data when executing function.';
 
-    response.json(task);
-}
+ const secretKey = + req.env.SECRET_KEY || + 'SECRET_KEY environment variable not found. You can set it in Function settings.'; + + const randomNumber = Math.random(); + + const trigger = req.env.APPWRITE_FUNCTION_TRIGGER; + + res.json({ + message: 'Hello from Appwrite!', + payload, + secretKey, + randomNumber, + trigger, + }); +};
Installing Dependencies -

Include a package.json along with your function, and Appwrite handles the rest! The best practice is to make sure node_modules folder is not part of your tarball. This example uses the node-fetch package

+

Include a package.json along with your function, and Appwrite handles the rest! The best practice is to make sure node_modules folder is not part of your tarball.

  • PHP

    -
    <?php 
    -
    -return function($request, $response) {
    -    $payload = json_decode($request['payload']);
    -    $env = $request['env'];
    -
    -    $randomNumber = rand(1, 100);
    -    $todo = json_decode(file_get_contents("https://jsonplaceholder.typicode.com/todos/$randomNumber"), true);
    -
    -    $task = array_merge($todo, [
    -        'message' => 'Hello from Appwrite Functions 👋',
    -    ]);
    -
    -    switch($env['APPWRITE_FUNCTION_TRIGGER']) {
    -        case 'http': 
    -            $task['trigger'] = 'HTTP'; 
    -            break;
    -        case 'schedule': 
    -            $task['trigger'] = 'CRON'; 
    -            break;
    -        case 'event': 
    -            $task['trigger'] = 'Event'; 
    -            break;
    -        default: 
    -            $task['trigger'] = 'Unknown'; 
    -            break;
    -    }
    +            
    <?php
    +
    +return function ($req, $res) {
    +  $payload =
    +    $req['payload'] ?:
    +    'No payload provided. Add custom data when executing function.';
    +
    +  $secretKey =
    +    $req['env']['SECRET_KEY'] ?:
    +    'SECRET_KEY environment variable not found. You can set it in Function settings.';
     
    -    $response->json($task);
    +  $randomNumber = \mt_rand() / \mt_getrandmax();
    +
    +  $trigger = $req['env']['APPWRITE_FUNCTION_TRIGGER'];
    +
    +  $res->json([
    +    'message' => 'Hello from Appwrite!',
    +    'payload' => $payload,
    +    'secretKey' => $secretKey,
    +    'randomNumber' => $randomNumber,
    +    'trigger' => $trigger,
    +  ]);
     };
    Installing Dependencies -

    Adding dependencies to PHP requires you to have a composer.json file. The best practice is to make sure vendor directory is not part of your tarball.

    +

    Include a composer.json file in your function, make sure to require autoload.php from vendor folder, and Appwrite will handle the rest!. The best practice is to make sure vendor directory is not part of your tarball.

  • Python

    -
    import json
    -import requests
    -import random
    +            
    import random
     
    -def main(request, response):
    -    payload = json.loads(request.payload or '{}')
    -    env = request.env
    +def main(req, res):
    +  payload = req.payload or 'No payload provided. Add custom data when executing function.'
     
    -    randomNumber = random.randint(1, 100)
    -    todo = requests.get(f"https://jsonplaceholder.typicode.com/todos/{randomNumber}").json()
    +  secretKey = req.env.get(
    +    'SECRET_KEY',
    +    'SECRET_KEY environment variable not found. You can set it in Function settings.'
    +  )
     
    -    task = {
    -        "message": "Hello from Appwrite Functions 👋",
    -        **todo
    -    }
    +  randomNumber = random.random()
     
    -    task["trigger"] = {
    -        "http": "HTTP",
    -        "schedule": "CRON",
    -        "event": "Event",
    -        "unknown": "Unknown"
    -    }[env['APPWRITE_FUNCTION_TRIGGER']]
    +  trigger = req.env['APPWRITE_FUNCTION_TRIGGER']
     
    -    return response.json(task)
    + return res.json({ + 'message': 'Hello from Appwrite!', + 'payload': payload, + 'secretKey': secretKey, + 'randomNumber': randomNumber, + 'trigger': trigger, + })
    Installing Dependencies -

    Include a requirements.txt file in your function, Appwrite will handle the rest! This example uses the requests package

    +

    Include a requirements.txt file in your function, Appwrite will handle the rest!

  • Ruby

    -
    require 'httparty'
    -require 'json'
    -
    -def main(request, response)
    -    payload = JSON.parse(request.payload.empty? ? '{}' : request.payload)
    -    env = request.env
    -    
    -    randomNumber = rand(100) + 1
    -    todo = JSON.parse(HTTParty.get('https://jsonplaceholder.typicode.com/todos/' + randomNumber.to_s).body)
    -    
    -    task = {
    -        message: 'Hello from Appwrite Functions 👋',
    -        **todo
    -    }
    -
    -    case env['APPWRITE_FUNCTION_TRIGGER']
    -    when 'http'
    -        task['trigger'] = 'HTTP'
    -    when 'schedule'
    -        task['trigger'] = 'CRON'
    -    when 'event'
    -        task['trigger'] = 'Event'
    -    else
    -        task['trigger'] = 'Unknown'
    -    end
    -
    -    return response.json(task)
    +            
    def main(req, res)
    +  payload =
    +    !req.payload.empty? ? req.payload :
    +    'No payload provided. Add custom data when executing function.'
    +
    +  secretKey =
    +    req.env['SECRET_KEY'] ||
    +    'SECRET_KEY environment variable not found. You can set it in Function settings.'
    +
    +  randomNumber = rand()
    +
    +  trigger = req.env['APPWRITE_FUNCTION_TRIGGER']
    +
    +  return res.json({
    +    :message => 'Hello from Appwrite!',
    +    :payload => payload,
    +    :secretKey => secretKey,
    +    :randomNumber => randomNumber,
    +    :trigger => trigger,
    +  })
     end
    Installing Dependencies -

    Include a Gemfile in your function, Appwrite handles the rest! This example uses the httparty package

    +

    Include a Gemfile in your function, Appwrite handles the rest!

  • Deno

    -
    import axiod from "https://deno.land/x/axiod/mod.ts";
    -
    -export default async function(request: any, response: any) {
    -    const payload = JSON.parse(request.payload ? request.payload : "{}");
    -    const env = request.env;
    -
    -    const randomNumber = Math.floor(Math.random() * 100) + 1;
    -    const todo = (await axiod.get(`https://jsonplaceholder.typicode.com/todos/${randomNumber}`)).data;
    -
    -    let task = {
    -        message: 'Hello from Appwrite Functions 👋',
    -        ...todo
    -    };
    -
    -    switch(env.APPWRITE_FUNCTION_TRIGGER) {
    -        case 'http': 
    -            task['trigger'] = 'HTTP'; 
    -            break;
    -        case 'schedule': 
    -            task['trigger'] = 'CRON'; 
    -            break;
    -        case 'event': 
    -            task['trigger'] = 'Event'; 
    -            break;
    -        default: 
    -            task['trigger'] = 'Unknown'; 
    -            break;
    -    }
    +            
    export default async function (req: any, res: any) {
    +  const payload =
    +    req.payload ||
    +    'No payload provided. Add custom data when executing function.';
     
    -    response.json(task);
    -}
    + const secretKey = + req.env.SECRET_KEY || + 'SECRET_KEY environment variable not found. You can set it in Function settings.'; + + const randomNumber = Math.random(); + + const trigger = req.env.APPWRITE_FUNCTION_TRIGGER; + + res.json({ + message: 'Hello from Appwrite!', + payload, + secretKey, + randomNumber, + trigger, + }); +};
    Installing Dependencies

    No special steps are required for Deno, Appwrite handles everything!

    @@ -231,98 +194,56 @@ export default async function(request: any, response: any) {
    import 'dart:math';
     import 'dart:async';
    -import 'dart:convert';
    -import 'package:dio/dio.dart' hide Response;
     
    -Future start(final request, final response) async {
    -    final env = request.env;
    -    final payload = jsonDecode(request.payload.isEmpty ? '{}' : request.payload);
    -    
    -    final randomNumber = Random().nextInt(100) + 1;
    -    final todo = await Dio().get('https://jsonplaceholder.typicode.com/todos/$randomNumber');
    -    
    -    final task = {
    -        'message': 'Hello from Appwrite Functions 👋',
    -        'userId': todo.data['userId'],
    -        'id': todo.data['id'],
    -        'title': todo.data['title'],
    -        'completed': todo.data['completed']
    -    };
    -    
    -    switch (env['APPWRITE_FUNCTION_TRIGGER']) {
    -        case 'http':
    -        task['trigger'] = 'HTTP';
    -        break;
    -        case 'schedule':
    -        task['trigger'] = 'CRON';
    -        break;
    -        case 'event':
    -        task['trigger'] = 'Event';
    -        break;
    -        default:
    -        task['trigger'] = 'Unknown';
    -        break;
    -    }
    +Future <void> start(final req, final res) async {
    +  final payload =
    +    !req.payload?.isEmpty ? req.payload :
    +    'No payload provided. Add custom data when executing function.';
    +
    +  final secretKey =
    +    req.env['SECRET_KEY'] ??
    +    'SECRET_KEY environment variable not found. You can set it in Function settings.';
     
    -    response.json(task);
    +  final randomNumber = new Random().nextDouble();
    +
    +  final trigger = req.env['APPWRITE_FUNCTION_TRIGGER'];
    +
    +  res.json({
    +    'message': 'Hello from Appwrite!',
    +    'payload': payload,
    +    'secretKey': secretKey,
    +    'randomNumber': randomNumber,
    +    'trigger': trigger,
    +  });
     }
    Installing Dependencies -

    Include a pubspec.yaml file with your function, Appwrite handles the rest! This example uses the Dio package

    +

    Include a pubspec.yaml file with your function, Appwrite handles the rest!

  • Swift

    -
    import Foundation
    -#if canImport(FoundationNetworking)
    -import FoundationNetworking
    -#endif
    -
    -func main(req: RequestValue, res: RequestResponse) throws -> RequestResponse {
    +            
    func main(req: RequestValue, res: RequestResponse) throws -> RequestResponse {
    +    let payload = req.payload.isEmpty 
    +        ? "No payload provided. Add custom data when executing function" 
    +        : req.payload
         
    -    let env = req.env
    +    let secretKey = req.env["SECRET_KEY"] 
    +        ?? "SECRET_KEY environment variable not found. You can set it in Function settings."
     
    -    guard let data = (req.payload.isEmpty ? "{}" : req.payload).data(using: .utf8),
    -        let payload = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else {
    -            return res.json(data: ["error": "Invalid payload."])
    -    }
    -    
    -    let group = DispatchGroup()
    -
    -    var todo: [String: Any]? = nil
    -    let randomNumber = Int.random(in: 1...100)
    -    let url = URL(string: "https://jsonplaceholder.typicode.com/todos/\(randomNumber)")!
    -    let fetchTask = URLSession.shared.dataTask(with: url) { (data, response, error) in
    -        defer { group.leave() }
    -        guard let data = data else { return }
    -        todo = try! JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
    -    }
    -    group.enter()
    -    fetchTask.resume()
    -    group.wait()
    -
    -    var task = [
    -        "message": "Hello from Appwrite Functions 👋",
    -        "userId": todo?["userId"] ?? "",
    -        "id": todo?["id"] ?? "",
    -        "title": todo?["title"] ?? "",
    -        "completed": todo?["completed"] ?? ""
    -    ]
    -    
    -    switch (env["APPWRITE_FUNCTION_TRIGGER"]) {
    -    case "http":
    -        task["trigger"] = "HTTP"
    -    case "schedule":
    -        task["trigger"] = "CRON"
    -    case "event":
    -        task["trigger"] = "Event"
    -    default:
    -        task["trigger"] = "Unknown"
    -    }
    +    let randomNumber = Double.random(in: 0...1)
    +
    +    let trigger = req.env["APPWRITE_FUNCTION_TRIGGER"]
     
    -    return res.json(data: task)
    +    return res.json(data: [
    +        "message": "Hello from Appwrite!",
    +        "payload": payload,
    +        "secretKey": secretKey,
    +        "randomNumber": randomNumber,
    +        "trigger": trigger,
    +    ])
     }

    With Swift, your entrypoint can be empty since Appwrite automatically infers it from the location of your main() function. Just ensure that your cloud function has a single declaration of main() across your source files.

    diff --git a/app/views/docs/getting-started-for-server.phtml b/app/views/docs/getting-started-for-server.phtml index dae5a8225..f3f293f2d 100644 --- a/app/views/docs/getting-started-for-server.phtml +++ b/app/views/docs/getting-started-for-server.phtml @@ -145,7 +145,6 @@ $client

    Python

    from appwrite.client import Client
    -from appwrite.services.users import Users
     
     client = Client()
     
    diff --git a/app/views/docs/webhooks.phtml b/app/views/docs/webhooks.phtml
    index 026dc8764..fd22c2e0e 100644
    --- a/app/views/docs/webhooks.phtml
    +++ b/app/views/docs/webhooks.phtml
    @@ -74,17 +74,14 @@ $events = $this->getParam('events', []);
         
         
         
    -     $data):
    -        $description = $data['description'] ?? '';
    -        $model = $data['model'] ?? '';
    -        $note = $data['note'] ?? '';
    +    
         
             
    -            escape($event); ?>
    -            
    -                

    escape($note); ?>

    - + escape($pattern); ?>