diff --git a/package.json b/package.json index 72e8ca1..92471a2 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "react-native-appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API", - "version": "0.5.0", + "version": "0.6.0", "license": "BSD-3-Clause", "main": "dist/cjs/sdk.js", "exports": { diff --git a/src/client.ts b/src/client.ts index 27f6763..c2a0d25 100644 --- a/src/client.ts +++ b/src/client.ts @@ -49,7 +49,17 @@ type RealtimeRequestAuthenticate = { type Realtime = { socket?: WebSocket; + + /** + * Timeout for reconnect operations. + */ timeout?: number; + + /** + * Heartbeat interval for the realtime connection. + */ + heartbeat?: number; + url?: string; lastMessage?: RealtimeResponse; channels: Set; @@ -63,6 +73,7 @@ type Realtime = { getTimeout: () => number; connect: () => void; createSocket: () => void; + createHeartbeat: () => void; cleanUp: (channels: string[]) => void; onMessage: (event: MessageEvent) => void; } @@ -103,7 +114,7 @@ class Client { 'x-sdk-name': 'React Native', 'x-sdk-platform': 'client', 'x-sdk-language': 'reactnative', - 'x-sdk-version': '0.5.0', + 'x-sdk-version': '0.6.0', 'X-Appwrite-Response-Format': '1.6.0', }; @@ -212,6 +223,7 @@ class Client { private realtime: Realtime = { socket: undefined, timeout: undefined, + heartbeat: undefined, url: '', channels: new Set(), subscriptions: new Map(), @@ -237,6 +249,17 @@ class Client { return 60_000; } }, + createHeartbeat: () => { + if (this.realtime.heartbeat) { + clearTimeout(this.realtime.heartbeat); + } + + this.realtime.heartbeat = window?.setInterval(() => { + this.realtime.socket?.send(JSON.stringify({ + type: 'ping' + })); + }, 20_000); + }, createSocket: () => { if (this.realtime.channels.size < 1) { this.realtime.reconnect = false; @@ -275,6 +298,7 @@ class Client { this.realtime.socket.addEventListener('message', this.realtime.onMessage); this.realtime.socket.addEventListener('open', _event => { this.realtime.reconnectAttempts = 0; + this.realtime.createHeartbeat(); }); this.realtime.socket.addEventListener('close', event => { if ( diff --git a/src/enums/image-format.ts b/src/enums/image-format.ts index 7e96fd8..8599e30 100644 --- a/src/enums/image-format.ts +++ b/src/enums/image-format.ts @@ -4,4 +4,5 @@ export enum ImageFormat { Gif = 'gif', Png = 'png', Webp = 'webp', + Avif = 'avif', } \ No newline at end of file diff --git a/src/models.ts b/src/models.ts index 874d37a..0239438 100644 --- a/src/models.ts +++ b/src/models.ts @@ -839,11 +839,11 @@ export namespace Models { */ userId: string; /** - * User name. + * User name. Hide this attribute by toggling membership privacy in the Console. */ userName: string; /** - * User email address. + * User email address. Hide this attribute by toggling membership privacy in the Console. */ userEmail: string; /** @@ -867,7 +867,7 @@ export namespace Models { */ confirm: boolean; /** - * Multi factor authentication status, true if the user has MFA enabled or false otherwise. + * Multi factor authentication status, true if the user has MFA enabled or false otherwise. Hide this attribute by toggling membership privacy in the Console. */ mfa: boolean; /** @@ -1195,5 +1195,9 @@ export namespace Models { * The target identifier. */ identifier: string; + /** + * Is the target expired. + */ + expired: boolean; } } diff --git a/src/services/account.ts b/src/services/account.ts index b9e315d..3c00b97 100644 --- a/src/services/account.ts +++ b/src/services/account.ts @@ -134,7 +134,7 @@ export class Account extends Service { } /** - * List Identities + * List identities * * Get the list of identities for the currently logged in user. * @@ -253,7 +253,7 @@ export class Account extends Service { } /** - * Create Authenticator + * Create authenticator * * Add an authenticator app to be used as an MFA factor. Verify the * authenticator using the [verify @@ -279,7 +279,7 @@ export class Account extends Service { } /** - * Verify Authenticator + * Verify authenticator * * Verify an authenticator app after adding it using the [add * authenticator](/docs/references/cloud/client-web/account#createMfaAuthenticator) @@ -313,7 +313,7 @@ export class Account extends Service { } /** - * Delete Authenticator + * Delete authenticator * * Delete an authenticator for a user by ID. * @@ -336,7 +336,7 @@ export class Account extends Service { } /** - * Create MFA Challenge + * Create MFA challenge * * Begin the process of MFA verification after sign-in. Finish the flow with * [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) @@ -365,7 +365,7 @@ export class Account extends Service { } /** - * Create MFA Challenge (confirmation) + * Create MFA challenge (confirmation) * * Complete the MFA challenge by providing the one-time password. Finish the * process of MFA verification by providing the one-time password. To begin @@ -405,7 +405,7 @@ export class Account extends Service { } /** - * List Factors + * List factors * * List the factors available on the account to be used as a MFA challange. * @@ -423,7 +423,7 @@ export class Account extends Service { } /** - * Get MFA Recovery Codes + * Get MFA recovery codes * * Get recovery codes that can be used as backup for MFA flow. Before getting * codes, they must be generated using @@ -444,7 +444,7 @@ export class Account extends Service { } /** - * Create MFA Recovery Codes + * Create MFA recovery codes * * Generate recovery codes as backup for MFA flow. It's recommended to * generate and show then immediately after user successfully adds their @@ -466,7 +466,7 @@ export class Account extends Service { } /** - * Regenerate MFA Recovery Codes + * Regenerate MFA recovery codes * * Regenerate recovery codes that can be used as backup for MFA flow. Before * regenerating codes, they must be first generated using diff --git a/src/services/locale.ts b/src/services/locale.ts index de62cfb..7850948 100644 --- a/src/services/locale.ts +++ b/src/services/locale.ts @@ -37,7 +37,7 @@ export class Locale extends Service { } /** - * List Locale Codes + * List locale codes * * List of all locale codes in [ISO * 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). diff --git a/src/services/storage.ts b/src/services/storage.ts index 1f1ebd4..2606501 100644 --- a/src/services/storage.ts +++ b/src/services/storage.ts @@ -237,7 +237,7 @@ export class Storage extends Service { } /** - * Delete File + * Delete file * * Delete a file by its unique ID. Only users with write permissions have * access to delete this resource. diff --git a/src/services/teams.ts b/src/services/teams.ts index 88a71ec..6191720 100644 --- a/src/services/teams.ts +++ b/src/services/teams.ts @@ -168,7 +168,8 @@ export class Teams extends Service { * List team memberships * * Use this endpoint to list a team's members using the team's ID. All team - * members have read access to this endpoint. + * members have read access to this endpoint. Hide sensitive attributes from + * the response by toggling membership privacy in the Console. * * @param {string} teamId * @param {string[]} queries @@ -279,7 +280,8 @@ export class Teams extends Service { * Get team membership * * Get a team member by the membership unique id. All team members have read - * access for this resource. + * access for this resource. Hide sensitive attributes from the response by + * toggling membership privacy in the Console. * * @param {string} teamId * @param {string} membershipId