Skip to content

lukas-heinrich/appwrite-function-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Appwrite Functions Tools

License: MIT Appwrite Version

A TypeScript utility library for Appwrite Functions, providing type definitions and utilities to interact with requests and handle errors.

⚠️ This package was designed to be used in different runtimes, but it has only been tested using bun-1.0. If you notice any problems feel free to create a pull request.

Features

  • 🦺 Type definitions for Appwrite Functions
  • 🛠️ Error handling utilities
  • 🔍 Request validation utilities
  • 📦 Lightweight path-based router using route-recognizer

Usage

Installation

# npm
npm install appwrite-function-tools

# pnpm
pnpm add appwrite-function-tools

# bun
bun add appwrite-function-tools

Type Definitions

See the following example based on the appwrite starter function for a basic usage of the type definitions:

import { FunctionEntrypoint } from 'appwrite-function-tools';

export default async ({ req, res, log, error }: FunctionEntrypoint) => {
	// ⬇️ Type Safe access to the request, response, logger and error handler
	// You can use the Appwrite SDK to interact with other services
	// For this example, we're using the Users service
	const client = new Client()
		.setEndpoint(Bun.env['APPWRITE_FUNCTION_API_ENDPOINT']) // ⬅️ Type Safe access to the environment variables
		.setProject(Bun.env['APPWRITE_FUNCTION_PROJECT_ID'])
		.setKey(req.headers['x-appwrite-key'] ?? '');
	const users = new Users(client);

	try {
		const response = await users.list();
		// Log messages and errors to the Appwrite Console
		// These logs won't be seen by your end users
		log(`Total users: ${response.total}`);
	} catch (err) {
		error('Could not list users: ' + asError(err).message); // ⬅️ Type Safe error handling
	}

	// The req object contains the request data
	if (req.path === '/ping') {
		// Use res object to respond with text(), json(), or binary()
		// Don't forget to return a response!
		return res.text('Pong');
	}

	return res.json({
		motto: 'Build like a team of hundreds_',
		learn: 'https://appwrite.io/docs',
		connect: 'https://appwrite.io/discord',
		getInspired: 'https://builtwith.appwrite.io',
	});
};

To use the global types, you need to create a global.d.ts file in the root of your project. You may want to use it to declare the environment variables or provide type safety for the Appwrite functions runtime without importing the types.

import type { FunctionEnvironment } from 'appwrite-function-tools';

// Declare Bun environment variables for the Appwrite functions runtime
declare module 'bun' {
	interface Env extends FunctionEnvironment {}
}

export {};

Validation and Routing

... Coming Soon

About

A collection of utility functions and type definitions for Appwrite functions

Topics

Resources

License

Stars

Watchers

Forks