JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 44
  • Score
    100M100P100Q50391F
  • License MIT

Create Appwrite apps with your server-side rendering

Package Exports

  • appwrite-ssr
  • appwrite-ssr/package.json

Readme

appwrite-ssr

appwrite-ssr will help you to create ssr applications with appwrite.

you can find example code on github: https://github.com/Ota-Prokopec/appwrite-ssr-example

Appwrite is an open-source backend as a service server that abstract and simplify complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way. Use the Web SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools. For full API documentation and tutorials go to https://appwrite.io/docs

🛠️ Installation Steps:

npm i appwrite-ssr
  or
yarn add appwrite-ssr

import appwrite-ssr

import appwrite from 'appwrite-ssr'

set Appwrite project

set up appwrite project endpoint, project id and hostname of your server (you can also set apiKey if you want to use admin actions - it is optional) and create your own instance

import appwrite from 'appwrite-ssr'

export const myAppwriteInstance = appwriteSSR.setProject({
    endPoint: 'https://cloud.appwrite.io/v1',
    projectId: 'your-project-id',
    hostname: 'your-server-hostname',
    apiKey: 'your-api-key',
})

how to begin?

Connect user to your Appwrite by setting users session, or use setAdmin to act like admin

// passing users session
const { Collection } = myAppwriteInstance.setSession('users session here')
//authorizate by passing users cookies
const { Collection } = myAppwriteInstance.setCookie([{ name: '', value: '' }])
//dont authorizate user - use this for signing user into app
const { Collection } = myAppwriteInstance.none()
//act as admin (use your apiKey)
const { Collection } = myAppwriteInstance.setAdmin()

Auth

log user into your application using email

const { account } = myAppwriteInstance.none()
const { sessionLegacyToken, sessionToken } = await account.loginViaEmail('email', 'password')
event.cookies.set(sessionToken.name, sessionToken.value)

log user into your application using oAuth2

on client side use:

import { account } from 'appwrite' // https://www.npmjs.com/package/appwrite
await account.createOAuth2Session(platform, `${location.origin}/auth/oauth2/success`, `${location.origin}/oauth2/failure`)

on server side use:

//the path for this function has to be /auth/oauth2/success (strictly)
const { account } = myAppwriteInstance.none()
const url = 'whole URL'
const { sessionLegacyToken, sessionToken } = await account.oauth2Login(url)
event.cookies.set(sessionToken.name, sessionToken.value)

if you set the session into cookies of users browser, you will not have to take care or creating session on client side - you will be able to use client appwrite sdk with appwrite-ssr authorization

log user out or your application

const { account } = myAppwriteInstance.none()
const { sessionLegacyToken, sessionToken } = await account.logOut()
event.cookies.delete(sessionToken.name)

example code (collections)

import type { PageServerLoad } from './$types'
import type { Types } from 'appwrite-ssr'

type GrassDocumentGet = Types.Document<{
    grassName: string
    grassOptionalDescription: string //optional value with default value
    grassEnumValue: null | 'value' | 'value2'
}>
type GrassDocumentCreate = {
    grassName: string
    grassOptionalDescription?: string
    grassEnumValue: null | 'value' | 'value2'
}
// key2 is optional but there is always a default value

const { Collection } = myAppwriteInstance.setCookie(cookies)

const collectionGrass = new Collection<GrassDocumentGet, GrassDocumentCreate>('your-database-id', 'your-collection-id')

const grassQuery = Query<GrassDocumentGet>()

const query = grassQuery.equal('grassName', 'nameOfGrass')
const res = await collectionGrass.getDocument([query])

example code (buckets)

import appwrite, { permissions, type Types } from 'appwrite-ssr'

const { Bucket } = appwrite
    .setProject({
        endPoint: 'https://cloud.appwrite.io/v1',
        projectId: 'fads',
    })
    .setCookie(cookies)

const bucketGrass = new Bucket('myBucketId')

return { bucketGrass }

const buckets = setCookie(event.cookies.getAll())
const base64 = ''
const res = bucketGrass.createFile(base64, permissions.owner('myUserId'))

used packages/technologies:

Appwrite

🛡️ License:

This project is licensed under the MIT

💖 Any questions?

otaprokopec@gmail.com