appwrite-server-wrapper
Version:
Wrapper library to handle Appwrite methods including server handling using SSR with NextJS v15 (useActionState, useAction,...)
124 lines (123 loc) • 3.84 kB
JavaScript
import { Client, Account, Teams, Functions, Databases, Storage, Messaging, Locale, Users, Avatars, } from "node-appwrite";
import { Client as RealtimeClient } from "./appwriteRealtimeClient";
import { apwManager } from "./utils";
import { cookies, headers } from "next/headers";
import { projectId, endpoint, apiKeySsr, cookieName } from "./appwriteConfig";
/**
* Creates a realtime session client for the current user.
*/
export async function createRealtimeSessionClient(params = {}) {
const { selfSigned = false } = params;
const locale = apwManager.getLocale();
const client = new RealtimeClient()
.setEndpoint(endpoint)
.setProject(projectId)
.setSelfSigned(selfSigned)
.setLocale(locale);
const cookiesList = await cookies();
const session = cookiesList.get(cookieName);
if (!session || !session.value) {
throw new Error("APW-WRAPPER - Error: No session found in cookies while calling createSessionClient()");
}
client.setSession(session.value);
const headersList = await headers();
client.setForwardedUserAgent(headersList["user-agent"]);
return {
get client() {
return client;
},
};
}
/**
* Creates a session client for the current user.
*/
export async function createSessionClient(params = {}) {
const { selfSigned = false } = params;
const locale = apwManager.getLocale();
const client = new Client()
.setEndpoint(endpoint)
.setProject(projectId)
.setSelfSigned(selfSigned)
.setLocale(locale);
const cookiesList = await cookies();
const session = cookiesList.get(cookieName);
if (!session || !session.value) {
throw new Error("APW-WRAPPER - Error: No session found in cookies while calling createSessionClient()");
}
client.setSession(session.value);
const headersList = await headers();
client.setForwardedUserAgent(headersList["user-agent"]);
return {
get account() {
return new Account(client);
},
get teams() {
return new Teams(client);
},
get databases() {
return new Databases(client);
},
get storage() {
return new Storage(client);
},
get functions() {
return new Functions(client);
},
get messaging() {
return new Messaging(client);
},
get locale() {
return new Locale(client);
},
get avatars() {
return new Avatars(client);
},
get users() {
return new Users(client);
},
};
}
/**
* Creates an admin client with elevated privileges.
*/
export async function createAdminClient(params = {}) {
const { selfSigned = false } = params;
const locale = apwManager.getLocale();
const client = new Client()
.setEndpoint(endpoint)
.setProject(projectId)
.setSelfSigned(selfSigned)
.setLocale(locale)
.setKey(apiKeySsr);
const headersList = await headers();
client.setForwardedUserAgent(headersList["user-agent"]);
return {
get account() {
return new Account(client);
},
get teams() {
return new Teams(client);
},
get databases() {
return new Databases(client);
},
get storage() {
return new Storage(client);
},
get functions() {
return new Functions(client);
},
get messaging() {
return new Messaging(client);
},
get locale() {
return new Locale(client);
},
get avatars() {
return new Avatars(client);
},
get users() {
return new Users(client);
},
};
}