An (unofficial) enhancement for official SDK of Appwrite which runs on Node.js 18+ or later.
Execute the following command from your project folder, where your package.json file is stored:
npm i @marcelkloubert/appwrite-sdk
import { Query } from "node-appwrite";
import { AppwriteProject } from "@marcelkloubert/appwrite-sdk";
interface BarCollection {
buzz: number;
}
// set environment variables `APPWRITE_API_KEY` and `APPWRITE_PROJECT_ID`
// with correct values
const project = new AppwriteProject();
// initialize project and make it available
// as a singleton instance if possible
await project.init({ withDatabase: true });
for (const database of project.databases) {
console.log("Database:", database.name);
// `database` is an iterator of collections
for (const collection of database) {
console.log("\tCollection:", collection.name);
// `collection` is an iterator of attributes
for (const attribute of collection) {
console.log("\tAttribute:", attribute.name);
}
}
}
// get existing database `foo`
const foo = project.databases.getDatabase("foo");
// get existing collection `bar` inside `foo`
const bar = foo.getCollection("bar").wrap<BarCollection>();
// insert a new document
const newDoc = await bar.insertOne({ buzz: 42 });
// update an existing document
const updatedDoc = await bar.updateOne(newDoc, { buzz: 666 });
// remove a document
await bar.deleteOne(updatedDoc);
// query multiple documents
const asyncCursor = bar.query({
queries: [Query.greaterThan("$createdAt", new Date().toISOString())],
});
for await (const document of asyncCursor) {
console.log("Document:", document.$id);
}
// query a single document
const maybeExistingDoc = await bar.queryOne({
queries: [Query.equal("buzz", 667)],
});
if (maybeExistingDoc) {
console.log("Document with buzz=667 exists as:", maybeExistingDoc.$id);
} else {
console.log("Document with buzz=667 does not exist");
}
The project is currently under heavy development.
Currently the following features running have a "quite stable" beta status:
The API documentation can be found here.
MIT © Marcel Joachim Kloubert