1.0.0 • Published 4 months ago

appwrite-function-tools v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

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

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

1.0.0

4 months ago