Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
69 changes: 67 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Appwrite Node.js SDK

![License](https://img.shields.io/github/license/appwrite/sdk-for-node.svg?style=flat-square)
![Version](https://img.shields.io/badge/api%20version-1.7.4-blue.svg?style=flat-square)
![Version](https://img.shields.io/badge/api%20version-1.8.0-blue.svg?style=flat-square)
[![Build Status](https://img.shields.io/travis/com/appwrite/sdk-generator?style=flat-square)](https://travis-ci.com/appwrite/sdk-generator)
[![Twitter Account](https://img.shields.io/twitter/follow/appwrite?color=00acee&label=twitter&style=flat-square)](https://twitter.com/appwrite)
[![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord)

**This SDK is compatible with Appwrite server version 1.7.x. For older versions, please check [previous releases](https://github.com/appwrite/sdk-for-node/releases).**
**This SDK is compatible with Appwrite server version 1.8.x. For older versions, please check [previous releases](https://github.com/appwrite/sdk-for-node/releases).**

> This is the Node.js SDK for integrating with Appwrite from your Node.js server-side code.
If you're looking to integrate from the browser, you should check [appwrite/sdk-for-web](https://github.com/appwrite/sdk-for-web)
Expand All @@ -27,6 +27,7 @@ npm install node-appwrite --save
## Getting Started

### Init your SDK

Initialize your SDK with your Appwrite server API endpoint and project ID which can be found in your project settings page and your new API secret Key project API keys section.

```js
Expand All @@ -43,6 +44,7 @@ client
```

### Make Your First Request

Once your SDK object is set, create any of the Appwrite service objects and choose any request to send. Full documentation for any service method you would like to use can be found in your SDK documentation or in the [API References](https://appwrite.io/docs) section.

```js
Expand Down Expand Up @@ -80,7 +82,70 @@ promise.then(function (response) {
});
```

### Type Safety with Models

The Appwrite Node SDK provides type safety when working with database documents through generic methods. Methods like `listDocuments`, `getDocument`, and others accept a generic type parameter that allows you to specify your custom model type for full type safety.

**TypeScript:**
```typescript
interface Book {
name: string;
author: string;
releaseYear?: string;
category?: string;
genre?: string[];
isCheckedOut: boolean;
}

const databases = new Databases(client);

try {
const documents = await databases.listDocuments<Book>(
'your-database-id',
'your-collection-id'
);

documents.documents.forEach(book => {
console.log(`Book: ${book.name} by ${book.author}`); // Now you have full type safety
});
} catch (error) {
console.error('Appwrite error:', error);
}
```

**JavaScript (with JSDoc for type hints):**
```javascript
/**
* @typedef {Object} Book
* @property {string} name
* @property {string} author
* @property {string} [releaseYear]
* @property {string} [category]
* @property {string[]} [genre]
* @property {boolean} isCheckedOut
*/

const databases = new Databases(client);

try {
/** @type {Models.DocumentList<Book>} */
const documents = await databases.listDocuments(
'your-database-id',
'your-collection-id'
);

documents.documents.forEach(book => {
console.log(`Book: ${book.name} by ${book.author}`); // Type hints available in IDE
});
} catch (error) {
console.error('Appwrite error:', error);
}
```

**Tip**: You can use the `appwrite types` command to automatically generate TypeScript interfaces based on your Appwrite database schema. Learn more about [type generation](https://appwrite.io/docs/products/databases/type-generation).

### Error Handling

The Appwrite Node SDK raises `AppwriteException` object with `message`, `code` and `response` properties. You can handle any errors by catching `AppwriteException` and present the `message` to the user or handle it yourself based on the provided error information. Below is an example.

```js
Expand Down
8 changes: 4 additions & 4 deletions docs/examples/account/create-email-password-session.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createEmailPasswordSession(
'[email protected]', // email
'password' // password
);
const result = await account.createEmailPasswordSession({
email: '[email protected]',
password: 'password'
});
10 changes: 5 additions & 5 deletions docs/examples/account/create-email-token.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createEmailToken(
'<USER_ID>', // userId
'[email protected]', // email
false // phrase (optional)
);
const result = await account.createEmailToken({
userId: '<USER_ID>',
email: '[email protected]',
phrase: false
});
12 changes: 12 additions & 0 deletions docs/examples/account/create-m-f-a-authenticator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const sdk = require('node-appwrite');

const client = new sdk.Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with

const account = new sdk.Account(client);

const result = await account.createMFAAuthenticator({
type: sdk.AuthenticatorType.Totp
});
11 changes: 11 additions & 0 deletions docs/examples/account/create-m-f-a-challenge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const sdk = require('node-appwrite');

const client = new sdk.Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID

const account = new sdk.Account(client);

const result = await account.createMFAChallenge({
factor: sdk.AuthenticationFactor.Email
});
10 changes: 10 additions & 0 deletions docs/examples/account/create-m-f-a-recovery-codes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const sdk = require('node-appwrite');

const client = new sdk.Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with

const account = new sdk.Account(client);

const result = await account.createMFARecoveryCodes();
12 changes: 6 additions & 6 deletions docs/examples/account/create-magic-u-r-l-token.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createMagicURLToken(
'<USER_ID>', // userId
'[email protected]', // email
'https://example.com', // url (optional)
false // phrase (optional)
);
const result = await account.createMagicURLToken({
userId: '<USER_ID>',
email: '[email protected]',
url: 'https://example.com',
phrase: false
});
6 changes: 3 additions & 3 deletions docs/examples/account/create-mfa-authenticator.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createMfaAuthenticator(
sdk.AuthenticatorType.Totp // type
);
const result = await account.createMfaAuthenticator({
type: sdk.AuthenticatorType.Totp
});
6 changes: 3 additions & 3 deletions docs/examples/account/create-mfa-challenge.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createMfaChallenge(
sdk.AuthenticationFactor.Email // factor
);
const result = await account.createMfaChallenge({
factor: sdk.AuthenticationFactor.Email
});
12 changes: 6 additions & 6 deletions docs/examples/account/create-o-auth2token.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createOAuth2Token(
sdk.OAuthProvider.Amazon, // provider
'https://example.com', // success (optional)
'https://example.com', // failure (optional)
[] // scopes (optional)
);
const result = await account.createOAuth2Token({
provider: sdk.OAuthProvider.Amazon,
success: 'https://example.com',
failure: 'https://example.com',
scopes: []
});
8 changes: 4 additions & 4 deletions docs/examples/account/create-phone-token.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createPhoneToken(
'<USER_ID>', // userId
'+12065550100' // phone
);
const result = await account.createPhoneToken({
userId: '<USER_ID>',
phone: '+12065550100'
});
8 changes: 4 additions & 4 deletions docs/examples/account/create-recovery.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createRecovery(
'[email protected]', // email
'https://example.com' // url
);
const result = await account.createRecovery({
email: '[email protected]',
url: 'https://example.com'
});
8 changes: 4 additions & 4 deletions docs/examples/account/create-session.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createSession(
'<USER_ID>', // userId
'<SECRET>' // secret
);
const result = await account.createSession({
userId: '<USER_ID>',
secret: '<SECRET>'
});
6 changes: 3 additions & 3 deletions docs/examples/account/create-verification.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.createVerification(
'https://example.com' // url
);
const result = await account.createVerification({
url: 'https://example.com'
});
12 changes: 6 additions & 6 deletions docs/examples/account/create.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.create(
'<USER_ID>', // userId
'[email protected]', // email
'', // password
'<NAME>' // name (optional)
);
const result = await account.create({
userId: '<USER_ID>',
email: '[email protected]',
password: '',
name: '<NAME>'
});
6 changes: 3 additions & 3 deletions docs/examples/account/delete-identity.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.deleteIdentity(
'<IDENTITY_ID>' // identityId
);
const result = await account.deleteIdentity({
identityId: '<IDENTITY_ID>'
});
12 changes: 12 additions & 0 deletions docs/examples/account/delete-m-f-a-authenticator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const sdk = require('node-appwrite');

const client = new sdk.Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with

const account = new sdk.Account(client);

const result = await account.deleteMFAAuthenticator({
type: sdk.AuthenticatorType.Totp
});
6 changes: 3 additions & 3 deletions docs/examples/account/delete-mfa-authenticator.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.deleteMfaAuthenticator(
sdk.AuthenticatorType.Totp // type
);
const result = await account.deleteMfaAuthenticator({
type: sdk.AuthenticatorType.Totp
});
6 changes: 3 additions & 3 deletions docs/examples/account/delete-session.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.deleteSession(
'<SESSION_ID>' // sessionId
);
const result = await account.deleteSession({
sessionId: '<SESSION_ID>'
});
10 changes: 10 additions & 0 deletions docs/examples/account/get-m-f-a-recovery-codes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const sdk = require('node-appwrite');

const client = new sdk.Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with

const account = new sdk.Account(client);

const result = await account.getMFARecoveryCodes();
6 changes: 3 additions & 3 deletions docs/examples/account/get-session.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.getSession(
'<SESSION_ID>' // sessionId
);
const result = await account.getSession({
sessionId: '<SESSION_ID>'
});
6 changes: 3 additions & 3 deletions docs/examples/account/list-identities.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.listIdentities(
[] // queries (optional)
);
const result = await account.listIdentities({
queries: []
});
6 changes: 3 additions & 3 deletions docs/examples/account/list-logs.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.listLogs(
[] // queries (optional)
);
const result = await account.listLogs({
queries: []
});
10 changes: 10 additions & 0 deletions docs/examples/account/list-m-f-a-factors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const sdk = require('node-appwrite');

const client = new sdk.Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with

const account = new sdk.Account(client);

const result = await account.listMFAFactors();
8 changes: 4 additions & 4 deletions docs/examples/account/update-email.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const client = new sdk.Client()

const account = new sdk.Account(client);

const result = await account.updateEmail(
'[email protected]', // email
'password' // password
);
const result = await account.updateEmail({
email: '[email protected]',
password: 'password'
});
13 changes: 13 additions & 0 deletions docs/examples/account/update-m-f-a-authenticator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const sdk = require('node-appwrite');

const client = new sdk.Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setSession(''); // The user session to authenticate with

const account = new sdk.Account(client);

const result = await account.updateMFAAuthenticator({
type: sdk.AuthenticatorType.Totp,
otp: '<OTP>'
});
Loading