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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
# Change Log

## 14.0.0

* Breaking: Removed `getDatabaseMetrics`, `getDatabaseInsights`, `getDatabaseSchema`, and `createDatabaseSchemaPreview` from `Compute` service
* Breaking: Removed `region` and `type` parameters from `createDatabase` on `Compute` service
* Breaking: Replaced `highAvailability` and `highAvailabilityReplicaCount` with `replicas` on `createDatabase` and `updateDatabase`
* Breaking: Removed `type`, `region`, and `highAvailability` fields from `DedicatedDatabase` model
* Breaking: Removed `DedicatedDatabaseMetrics`, `DedicatedDatabaseSchema`, `DedicatedDatabaseSchemaPreview`, and performance insights models
* Breaking: Removed OS, client, and device fields from `ActivityEvent` model
* Breaking: Removed `internal` parameter and field from `Apps` service and `App` model
* Breaking: `getInvoiceDownload` and `getInvoiceView` on `Organizations` now return a URL string
* Breaking: Geometric attribute and column models now type `default` as number arrays instead of `any[]`
* Added: OAuth2 Device Authorization Grant support with `deviceFlow` on apps and device code settings on `updateOAuth2Server`
* Added: Consent metadata on `Apps` service (`description`, `clientUri`, `logoUri`, `privacyPolicyUrl`, `termsUrl`, `contacts`)
* Added: `authorizationDetailsTypes` parameter on `updateOAuth2Server` for RFC 9396 support
* Added: `dedicatedDatabaseId` parameter on `create` for `TablesDB`, `DocumentsDB`, and `VectorsDB`
* Added: `api` parameter on `createDatabase` and `DedicatedDatabasesExecute` key scope
* Added: `userAccessedAt` membership privacy setting and field on `Membership` model
* Added: Email classification fields on `User` model (`emailCanonical`, `emailIsFree`, `emailIsDisposable`, `emailIsCorporate`, `emailIsCanonical`)
* Added: Connection details on `Branch` model and TCP connection fields on dedicated database connection model
* Added: `type` field on backup policies for full or incremental backups
* Added: `hint` field on app secret models for identifying secrets
* Updated: SQL API allowed statements now support DDL and DCL types as opt-in
* Updated: All requests now send an explicit `accept` header

## 13.2.0

* Added: `Apps` service for managing OAuth2 apps, secrets, and tokens
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import { Client, Account } from "@appwrite.io/console";
To install with a CDN (content delivery network) add the following scripts to the bottom of your <body> tag, but before you use any Appwrite services:

```html
<script src="https://cdn.jsdelivr.net/npm/@appwrite.io/console@13.2.0"></script>
<script src="https://cdn.jsdelivr.net/npm/@appwrite.io/console@14.0.0"></script>
```


Expand Down
2 changes: 1 addition & 1 deletion docs/examples/account/create.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const account = new Account(client);
const result = await account.create({
userId: '<USER_ID>',
email: 'email@example.com',
password: '',
password: 'password',
name: '<NAME>' // optional
});

Expand Down
4 changes: 2 additions & 2 deletions docs/examples/account/update-password.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ const client = new Client()
const account = new Account(client);

const result = await account.updatePassword({
password: '',
oldPassword: '<OLD_PASSWORD>' // optional
password: 'password',
oldPassword: 'password' // optional
});

console.log(result);
Expand Down
2 changes: 1 addition & 1 deletion docs/examples/account/update-recovery.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const account = new Account(client);
const result = await account.updateRecovery({
userId: '<USER_ID>',
secret: '<SECRET>',
password: ''
password: 'password'
});

console.log(result);
Expand Down
8 changes: 7 additions & 1 deletion docs/examples/apps/create.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,15 @@ const result = await apps.create({
appId: '<APP_ID>',
name: '<NAME>',
redirectUris: [],
description: '<DESCRIPTION>', // optional
clientUri: 'https://example.com', // optional
logoUri: 'https://example.com', // optional
privacyPolicyUrl: 'https://example.com', // optional
termsUrl: 'https://example.com', // optional
contacts: [], // optional
enabled: false, // optional
internal: false, // optional
type: 'public', // optional
deviceFlow: false, // optional
teamId: '<TEAM_ID>' // optional
});

Expand Down
10 changes: 8 additions & 2 deletions docs/examples/apps/update.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ const apps = new Apps(client);
const result = await apps.update({
appId: '<APP_ID>',
name: '<NAME>',
description: '<DESCRIPTION>', // optional
clientUri: 'https://example.com', // optional
logoUri: 'https://example.com', // optional
privacyPolicyUrl: 'https://example.com', // optional
termsUrl: 'https://example.com', // optional
contacts: [], // optional
enabled: false, // optional
internal: false, // optional
redirectUris: [], // optional
type: 'public' // optional
type: 'public', // optional
deviceFlow: false // optional
});

console.log(result);
Expand Down
3 changes: 2 additions & 1 deletion docs/examples/avatars/get-browser.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Avatars, Browser } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const avatars = new Avatars(client);

Expand Down
3 changes: 2 additions & 1 deletion docs/examples/avatars/get-credit-card.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Avatars, CreditCard } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const avatars = new Avatars(client);

Expand Down
3 changes: 2 additions & 1 deletion docs/examples/avatars/get-favicon.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Avatars } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const avatars = new Avatars(client);

Expand Down
3 changes: 2 additions & 1 deletion docs/examples/avatars/get-flag.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Avatars, Flag } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const avatars = new Avatars(client);

Expand Down
3 changes: 2 additions & 1 deletion docs/examples/avatars/get-image.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Avatars } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const avatars = new Avatars(client);

Expand Down
3 changes: 2 additions & 1 deletion docs/examples/avatars/get-initials.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Avatars } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const avatars = new Avatars(client);

Expand Down
3 changes: 2 additions & 1 deletion docs/examples/avatars/get-qr.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Avatars } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const avatars = new Avatars(client);

Expand Down
3 changes: 2 additions & 1 deletion docs/examples/avatars/get-screenshot.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Avatars, BrowserTheme, Timezone, BrowserPermission, ImageFormat

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const avatars = new Avatars(client);

Expand Down
16 changes: 0 additions & 16 deletions docs/examples/compute/create-database-schema-preview.md

This file was deleted.

8 changes: 3 additions & 5 deletions docs/examples/compute/create-database.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,14 @@ const result = await compute.createDatabase({
database: '<DATABASE>', // optional
engine: 'postgres', // optional
version: '17', // optional
region: 'fra', // optional
type: 'shared', // optional
specification: '<SPECIFICATION>', // optional
backend: 'prisma', // optional
cpu: 125, // optional
memory: 128, // optional
storage: 1, // optional
storageClass: 'ssd', // optional
storageMaxGb: 0, // optional
highAvailability: false, // optional
highAvailabilityReplicaCount: 0, // optional
replicas: 0, // optional
highAvailabilitySyncMode: 'async', // optional
networkMaxConnections: 10, // optional
networkIdleTimeoutSeconds: 60, // optional
Expand All @@ -38,7 +35,8 @@ const result = await compute.createDatabase({
storageAutoscalingThresholdPercent: 50, // optional
storageAutoscalingMaxGb: 0, // optional
metricsEnabled: false, // optional
poolerEnabled: false // optional
poolerEnabled: false, // optional
api: 'compute' // optional
});

console.log(result);
Expand Down
17 changes: 0 additions & 17 deletions docs/examples/compute/get-database-insights.md

This file was deleted.

16 changes: 0 additions & 16 deletions docs/examples/compute/get-database-metrics.md

This file was deleted.

15 changes: 0 additions & 15 deletions docs/examples/compute/get-database-schema.md

This file was deleted.

3 changes: 1 addition & 2 deletions docs/examples/compute/update-database.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ const result = await compute.updateDatabase({
memory: 128, // optional
storage: 1, // optional
storageClass: 'ssd', // optional
highAvailability: false, // optional
highAvailabilityReplicaCount: 0, // optional
replicas: 0, // optional
highAvailabilitySyncMode: 'async', // optional
networkMaxConnections: 10, // optional
networkIdleTimeoutSeconds: 60, // optional
Expand Down
3 changes: 2 additions & 1 deletion docs/examples/documentsdb/create.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ const documentsDB = new DocumentsDB(client);
const result = await documentsDB.create({
databaseId: '<DATABASE_ID>',
name: '<NAME>',
enabled: false // optional
enabled: false, // optional
dedicatedDatabaseId: '<DEDICATED_DATABASE_ID>' // optional
});

console.log(result);
Expand Down
3 changes: 2 additions & 1 deletion docs/examples/functions/get-deployment-download.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { Client, Functions, DeploymentDownloadType } from "@appwrite.io/console"

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const functions = new Functions(client);

Expand Down
2 changes: 1 addition & 1 deletion docs/examples/messaging/create-smtp-provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const result = await messaging.createSMTPProvider({
host: '<HOST>',
port: 1, // optional
username: '<USERNAME>', // optional
password: '<PASSWORD>', // optional
password: 'password', // optional
encryption: SmtpEncryption.None, // optional
autoTLS: false, // optional
mailer: '<MAILER>', // optional
Expand Down
2 changes: 1 addition & 1 deletion docs/examples/messaging/update-smtp-provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const result = await messaging.updateSMTPProvider({
host: '<HOST>', // optional
port: 1, // optional
username: '<USERNAME>', // optional
password: '<PASSWORD>', // optional
password: 'password', // optional
encryption: SmtpEncryption.None, // optional
autoTLS: false, // optional
mailer: '<MAILER>', // optional
Expand Down
2 changes: 1 addition & 1 deletion docs/examples/migrations/create-n-host-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const result = await migrations.createNHostMigration({
adminSecret: '<ADMIN_SECRET>',
database: '<DATABASE>',
username: '<USERNAME>',
password: '<PASSWORD>',
password: 'password',
port: null // optional
});

Expand Down
2 changes: 1 addition & 1 deletion docs/examples/migrations/create-supabase-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const result = await migrations.createSupabaseMigration({
apiKey: '<API_KEY>',
databaseHost: '<DATABASE_HOST>',
username: '<USERNAME>',
password: '<PASSWORD>',
password: 'password',
port: null // optional
});

Expand Down
2 changes: 1 addition & 1 deletion docs/examples/migrations/get-n-host-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const result = await migrations.getNHostReport({
adminSecret: '<ADMIN_SECRET>',
database: '<DATABASE>',
username: '<USERNAME>',
password: '<PASSWORD>',
password: 'password',
port: null // optional
});

Expand Down
2 changes: 1 addition & 1 deletion docs/examples/migrations/get-supabase-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const result = await migrations.getSupabaseReport({
apiKey: '<API_KEY>',
databaseHost: '<DATABASE_HOST>',
username: '<USERNAME>',
password: '<PASSWORD>',
password: 'password',
port: null // optional
});

Expand Down
5 changes: 3 additions & 2 deletions docs/examples/organizations/get-invoice-download.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ import { Client, Organizations } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const organizations = new Organizations(client);

const result = await organizations.getInvoiceDownload({
const result = organizations.getInvoiceDownload({
organizationId: '<ORGANIZATION_ID>',
invoiceId: '<INVOICE_ID>'
});
Expand Down
5 changes: 3 additions & 2 deletions docs/examples/organizations/get-invoice-view.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ import { Client, Organizations } from "@appwrite.io/console";

const client = new Client()
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
.setProject('<YOUR_PROJECT_ID>') // Your project ID
.setImpersonateUserId(''); // Impersonate a user by ID on an already user-authenticated request. Requires the current request to be authenticated as a user with impersonator capability; X-Appwrite-Key alone is not sufficient. Impersonator users are intentionally granted users.read so they can discover a target before impersonation begins. Internal audit logs still attribute actions to the original impersonator and record the impersonated target only in internal audit payload data.

const organizations = new Organizations(client);

const result = await organizations.getInvoiceView({
const result = organizations.getInvoiceView({
organizationId: '<ORGANIZATION_ID>',
invoiceId: '<INVOICE_ID>'
});
Expand Down
Loading
Loading