mirror of
https://github.com/LukeHagar/website.git
synced 2025-12-06 04:22:07 +00:00
Merge branch 'main' into #1499-update-contributing-guide
This commit is contained in:
29
.github/workflows/tests.yml
vendored
29
.github/workflows/tests.yml
vendored
@@ -7,6 +7,35 @@ on:
|
|||||||
permissions: read-all
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
format:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
- name: Install corepack
|
||||||
|
run: npm i -g corepack@latest
|
||||||
|
- name: Install pnpm
|
||||||
|
run: corepack enable
|
||||||
|
- name: Get pnpm store directory
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
|
||||||
|
- uses: actions/cache@v4
|
||||||
|
name: Setup pnpm cache
|
||||||
|
with:
|
||||||
|
path: ${{ env.STORE_PATH }}
|
||||||
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pnpm-store-
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
- name: Check formatting
|
||||||
|
run: pnpm format:check
|
||||||
|
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
18
CONTENT.md
18
CONTENT.md
@@ -49,9 +49,9 @@ Create ordered (numbered) and unordered (bulleted) lists using 1., \*, or -.
|
|||||||
**Unordered List**:
|
**Unordered List**:
|
||||||
|
|
||||||
```md
|
```md
|
||||||
- Apple
|
- Apple
|
||||||
- Banana
|
- Banana
|
||||||
- Cherry
|
- Cherry
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Links
|
#### Links
|
||||||
@@ -130,18 +130,18 @@ Alternatively, use markdoc tables.
|
|||||||
```md
|
```md
|
||||||
{% table %}
|
{% table %}
|
||||||
|
|
||||||
- Heading 1
|
- Heading 1
|
||||||
- Heading 2
|
- Heading 2
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- Row 1 Cell 1
|
- Row 1 Cell 1
|
||||||
- Row 1 Cell 2
|
- Row 1 Cell 2
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- Row 2 Cell 1
|
- Row 2 Cell 1
|
||||||
- Row 2 cell 2
|
- Row 2 cell 2
|
||||||
|
|
||||||
{% /table %}
|
{% /table %}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -62,11 +62,11 @@ doc-548-submit-a-pull-request-section-to-contribution-guide
|
|||||||
|
|
||||||
When `TYPE` can be:
|
When `TYPE` can be:
|
||||||
|
|
||||||
- **feat** - is a new feature
|
- **feat** - is a new feature
|
||||||
- **doc** - documentation only changes
|
- **doc** - documentation only changes
|
||||||
- **cicd** - changes related to CI/CD system
|
- **cicd** - changes related to CI/CD system
|
||||||
- **fix** - a bug fix
|
- **fix** - a bug fix
|
||||||
- **refactor** - code change that neither fixes a bug nor adds a feature
|
- **refactor** - code change that neither fixes a bug nor adds a feature
|
||||||
|
|
||||||
**All PRs must include a commit message with a description of the changes made!**
|
**All PRs must include a commit message with a description of the changes made!**
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ The Appwrite Website repo features the main Appwrite website, including our [hom
|
|||||||
|
|
||||||
The Appwrite Website has been built with the following frameworks:
|
The Appwrite Website has been built with the following frameworks:
|
||||||
|
|
||||||
- [Svelte](https://svelte.dev/)
|
- [Svelte](https://svelte.dev/)
|
||||||
- [SvelteKit](https://kit.svelte.dev/)
|
- [SvelteKit](https://kit.svelte.dev/)
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
|||||||
192
STYLE.md
192
STYLE.md
@@ -6,17 +6,17 @@ Read this document carefully before making PRs to the Appwrite Website repo.
|
|||||||
|
|
||||||
The Appwrite documentation is meant to provide general guidance that's:
|
The Appwrite documentation is meant to provide general guidance that's:
|
||||||
|
|
||||||
- Unopinionated
|
- Unopinionated
|
||||||
- Focused on the correct use of Appwrite product
|
- Focused on the correct use of Appwrite product
|
||||||
- Includes examples for all relevant and applicable SDKs
|
- Includes examples for all relevant and applicable SDKs
|
||||||
- Agnostic to the user's implementation and stack.
|
- Agnostic to the user's implementation and stack.
|
||||||
|
|
||||||
Examples of things not fit for docs, and better as a blog or video:
|
Examples of things not fit for docs, and better as a blog or video:
|
||||||
|
|
||||||
- General programming advice
|
- General programming advice
|
||||||
- Opinionated implementation patterns like MVVM, factory methods, etc.
|
- Opinionated implementation patterns like MVVM, factory methods, etc.
|
||||||
- Examples that only include a select subset of Appwrite SDKs.
|
- Examples that only include a select subset of Appwrite SDKs.
|
||||||
- Examples that do not work for all developers using Appwrite, but specific to Appwrite + technology.
|
- Examples that do not work for all developers using Appwrite, but specific to Appwrite + technology.
|
||||||
|
|
||||||
Note that the tutorials and blogs available on the Appwrite blog and docs are meant for these types of information.
|
Note that the tutorials and blogs available on the Appwrite blog and docs are meant for these types of information.
|
||||||
|
|
||||||
@@ -28,39 +28,39 @@ Appwrite's navigation increases in complexity from top down. We expect users to
|
|||||||
|
|
||||||
Introduction Section:
|
Introduction Section:
|
||||||
|
|
||||||
- [Homes](https://appwrite.io/docs)
|
- [Homes](https://appwrite.io/docs)
|
||||||
- [Quick start](https://appwrite.io/docs/quick-start)
|
- [Quick start](https://appwrite.io/docs/quick-start)
|
||||||
- [Tutorial](https://appwrite.io/docs/tutorial)
|
- [Tutorial](https://appwrite.io/docs/tutorial)
|
||||||
- [SDKs](https://appwrite.io/docs/sdks)
|
- [SDKs](https://appwrite.io/docs/sdks)
|
||||||
- [API references](https://appwrite.io/docs/references)
|
- [API references](https://appwrite.io/docs/references)
|
||||||
|
|
||||||
Products section:
|
Products section:
|
||||||
|
|
||||||
- [Auth](https://appwrite.io/docs/products/auth)
|
- [Auth](https://appwrite.io/docs/products/auth)
|
||||||
- [Databases](https://appwrite.io/docs/products/databases)
|
- [Databases](https://appwrite.io/docs/products/databases)
|
||||||
- [Functions](https://appwrite.io/docs/products/functions)
|
- [Functions](https://appwrite.io/docs/products/functions)
|
||||||
- [Storage](https://appwrite.io/docs/products/storage)
|
- [Storage](https://appwrite.io/docs/products/storage)
|
||||||
- [Messaging](https://appwrite.io/docs/products/messaging)
|
- [Messaging](https://appwrite.io/docs/products/messaging)
|
||||||
- [AI](https://appwrite.io/docs/products/ai)
|
- [AI](https://appwrite.io/docs/products/ai)
|
||||||
|
|
||||||
APIs section:
|
APIs section:
|
||||||
|
|
||||||
- [GraphQL](https://appwrite.io/docs/apis/graphql)
|
- [GraphQL](https://appwrite.io/docs/apis/graphql)
|
||||||
- [REST](https://appwrite.io/docs/apis/rest)
|
- [REST](https://appwrite.io/docs/apis/rest)
|
||||||
- [Realtime](https://appwrite.io/docs/apis/realtime)
|
- [Realtime](https://appwrite.io/docs/apis/realtime)
|
||||||
|
|
||||||
Tooling section:
|
Tooling section:
|
||||||
|
|
||||||
- [CLI](https://appwrite.io/docs/command-line)
|
- [CLI](https://appwrite.io/docs/command-line)
|
||||||
- [Command center](https://appwrite.io/docs/tooling/command-center)
|
- [Command center](https://appwrite.io/docs/tooling/command-center)
|
||||||
- [Assistant](https://appwrite.io/docs/tooling/assistant)
|
- [Assistant](https://appwrite.io/docs/tooling/assistant)
|
||||||
|
|
||||||
Advanced section:
|
Advanced section:
|
||||||
|
|
||||||
- [Platform](https://appwrite.io/docs/advanced/platform)
|
- [Platform](https://appwrite.io/docs/advanced/platform)
|
||||||
- [Migrations](https://appwrite.io/docs/advanced/migrations)
|
- [Migrations](https://appwrite.io/docs/advanced/migrations)
|
||||||
- [Self-hosting](https://appwrite.io/docs/advanced/self-hosting)
|
- [Self-hosting](https://appwrite.io/docs/advanced/self-hosting)
|
||||||
- [Security](https://appwrite.io/docs/advanced/security)
|
- [Security](https://appwrite.io/docs/advanced/security)
|
||||||
|
|
||||||
Here's the intended purpose and structure of each section.
|
Here's the intended purpose and structure of each section.
|
||||||
|
|
||||||
@@ -70,10 +70,10 @@ This section is focused on introducing what Appwrite is and giving examples to t
|
|||||||
Documentation here is focused on a **single flow** which means a single platform/framework + Appwrite.
|
Documentation here is focused on a **single flow** which means a single platform/framework + Appwrite.
|
||||||
Content here is not specific to a specific product, but usually covers multiple Appwrite products.
|
Content here is not specific to a specific product, but usually covers multiple Appwrite products.
|
||||||
|
|
||||||
- If your tutorial can be followed in about 15 minutes and fits on one page, write it under quick start
|
- If your tutorial can be followed in about 15 minutes and fits on one page, write it under quick start
|
||||||
- If you're writing a long piece of documentation that integrates Appwrite with another technology, with lots of details that's opinionated or isn't relevant for all use cases, write it under tutorial. This is similar to "cook book" at other organizations.
|
- If you're writing a long piece of documentation that integrates Appwrite with another technology, with lots of details that's opinionated or isn't relevant for all use cases, write it under tutorial. This is similar to "cook book" at other organizations.
|
||||||
- If you have information like helpers and methods that are only on SDKs but not the API, they go under SDK
|
- If you have information like helpers and methods that are only on SDKs but not the API, they go under SDK
|
||||||
- API references are generated from source from the appwrite/appwrite repo
|
- API references are generated from source from the appwrite/appwrite repo
|
||||||
|
|
||||||
### Products
|
### Products
|
||||||
|
|
||||||
@@ -82,17 +82,17 @@ Code examples should cover **all available SDKs**.
|
|||||||
|
|
||||||
Each product page has three main sections
|
Each product page has three main sections
|
||||||
|
|
||||||
- Introduction
|
- Introduction
|
||||||
- Overview - Describes at a high level, why you might need this product
|
- Overview - Describes at a high level, why you might need this product
|
||||||
- Quick start - Shows the most basic and quickest example to make something happen with a product. Keep it really short.
|
- Quick start - Shows the most basic and quickest example to make something happen with a product. Keep it really short.
|
||||||
- Concept
|
- Concept
|
||||||
- These pages usually align with sections shown in the product in the Appwrite Console.
|
- These pages usually align with sections shown in the product in the Appwrite Console.
|
||||||
- Focused on describing concepts a user should know, but not actions you might take.
|
- Focused on describing concepts a user should know, but not actions you might take.
|
||||||
- Cover all the details
|
- Cover all the details
|
||||||
- Journeys
|
- Journeys
|
||||||
- These pages focus on common actions and work flows
|
- These pages focus on common actions and work flows
|
||||||
- Detailed examples that span many concepts
|
- Detailed examples that span many concepts
|
||||||
- Like cookbook at other organizations' documentation.
|
- Like cookbook at other organizations' documentation.
|
||||||
|
|
||||||
### APIs section
|
### APIs section
|
||||||
|
|
||||||
@@ -106,10 +106,10 @@ Describes tools that help you work with Appwrite, but are usually non-essential
|
|||||||
|
|
||||||
For information that's not used commonly during the development cycle.
|
For information that's not used commonly during the development cycle.
|
||||||
|
|
||||||
- Platform: covers concepts that apply to the entire Appwrite Cloud platform, like API keys, rate limits, etc.
|
- Platform: covers concepts that apply to the entire Appwrite Cloud platform, like API keys, rate limits, etc.
|
||||||
- Migrations: covers migrations feature of Appwrite that helps you move data around.
|
- Migrations: covers migrations feature of Appwrite that helps you move data around.
|
||||||
- Security: purely information about measures Appwrite use to ensure security of the platform and data.
|
- Security: purely information about measures Appwrite use to ensure security of the platform and data.
|
||||||
- Self-hosting: The Appwrite self-hosted platform is meant to behave identically to Cloud after being configured corrrectly. This section focuses on how to configure Appwrite self-hosted such that it behaves like Cloud.
|
- Self-hosting: The Appwrite self-hosted platform is meant to behave identically to Cloud after being configured corrrectly. This section focuses on how to configure Appwrite self-hosted such that it behaves like Cloud.
|
||||||
|
|
||||||
## Documentation sources
|
## Documentation sources
|
||||||
|
|
||||||
@@ -117,22 +117,22 @@ The Appwrite docs are compiled from different repositories. Here are the signifi
|
|||||||
|
|
||||||
[appwrite/website](https://github.com/appwrite/website):
|
[appwrite/website](https://github.com/appwrite/website):
|
||||||
|
|
||||||
- Tutorials
|
- Tutorials
|
||||||
- Quick starts
|
- Quick starts
|
||||||
- Product, API, Tooling and Advanced sections
|
- Product, API, Tooling and Advanced sections
|
||||||
|
|
||||||
[appwrite/appwrite](https://github.com/appwrite/appwrite):
|
[appwrite/appwrite](https://github.com/appwrite/appwrite):
|
||||||
|
|
||||||
- [API Reference](https://appwrite.io/docs/references) pages
|
- [API Reference](https://appwrite.io/docs/references) pages
|
||||||
- API specification
|
- API specification
|
||||||
- API description
|
- API description
|
||||||
- API endpoint description
|
- API endpoint description
|
||||||
- API request parameters
|
- API request parameters
|
||||||
- API response model
|
- API response model
|
||||||
|
|
||||||
[appwrite/sdk-generator](https://github.com/appwrite/sdk-generator):
|
[appwrite/sdk-generator](https://github.com/appwrite/sdk-generator):
|
||||||
|
|
||||||
- Generated examples
|
- Generated examples
|
||||||
|
|
||||||
## Markdown Style guidelines
|
## Markdown Style guidelines
|
||||||
|
|
||||||
@@ -141,10 +141,10 @@ the tone and voice remains consistent.
|
|||||||
|
|
||||||
### Headings
|
### Headings
|
||||||
|
|
||||||
- All titles, headings, buttons, and labels should be written in **sentence case**. If you're not sure what sentence case should look like, check [APA's style guide](https://apastyle.apa.org/style-grammar-guidelines/capitalization/sentence-case) or check with ChatGPT and other LLMs which reliably converts titles to sentence case.
|
- All titles, headings, buttons, and labels should be written in **sentence case**. If you're not sure what sentence case should look like, check [APA's style guide](https://apastyle.apa.org/style-grammar-guidelines/capitalization/sentence-case) or check with ChatGPT and other LLMs which reliably converts titles to sentence case.
|
||||||
- All headings in a docs page begin with `# Heading` then `## Heading` and `### Heading`. Internally, they're converted to H2 to H4 tags.
|
- All headings in a docs page begin with `# Heading` then `## Heading` and `### Heading`. Internally, they're converted to H2 to H4 tags.
|
||||||
- All headings should have an ID label, for example `# Cool heading {% #cool-heading %}` the `#cool-heading` ID will be used to generate the table of contents and add links to the heading.
|
- All headings should have an ID label, for example `# Cool heading {% #cool-heading %}` the `#cool-heading` ID will be used to generate the table of contents and add links to the heading.
|
||||||
- Prefer verbs over gerunds, for example, say "Create documents" not "Creating documents".
|
- Prefer verbs over gerunds, for example, say "Create documents" not "Creating documents".
|
||||||
|
|
||||||
### Extended Markdoc components
|
### Extended Markdoc components
|
||||||
|
|
||||||
@@ -152,14 +152,14 @@ Appwrite's documentation uses extended markdown syntax. You can find all of the
|
|||||||
|
|
||||||
### Screenshots
|
### Screenshots
|
||||||
|
|
||||||
- When contributing upload original screenshots. The Appwrite design team will edit the screenshot to be consistent with other screenshots in the docs.
|
- When contributing upload original screenshots. The Appwrite design team will edit the screenshot to be consistent with other screenshots in the docs.
|
||||||
- Screenshots must be 16:9
|
- Screenshots must be 16:9
|
||||||
- Screnshots should be taken in a 1400 x 900 view port on 3x DPR in browser developer tools.
|
- Screnshots should be taken in a 1400 x 900 view port on 3x DPR in browser developer tools.
|
||||||
- Use generic and sensible organization, project, and resource names. Avoid names like `test`, `demo`, or `sdlkfj`.
|
- Use generic and sensible organization, project, and resource names. Avoid names like `test`, `demo`, or `sdlkfj`.
|
||||||
- All screenshot should be take from a user named Walter O'Brien. You can change the name of your current user by going to your Appwrite Console and clicking the **top right profile icon** > **Your Account** > **Name**.
|
- All screenshot should be take from a user named Walter O'Brien. You can change the name of your current user by going to your Appwrite Console and clicking the **top right profile icon** > **Your Account** > **Name**.
|
||||||
- Screenshots are stored in the `/images/docs/` folder, in a parent folder that is consistent with the path of the docs that reference the image.
|
- Screenshots are stored in the `/images/docs/` folder, in a parent folder that is consistent with the path of the docs that reference the image.
|
||||||
- All screenshots must be both dark and light mode, with `/path/` holding the lightmode version and `/path/dark/` holding the dark mode version.
|
- All screenshots must be both dark and light mode, with `/path/` holding the lightmode version and `/path/dark/` holding the dark mode version.
|
||||||
- Screenshots should be uploaded as un-edited original. Request help from the Appwrite design team to help you edit and refine your photos according to our guidelines.
|
- Screenshots should be uploaded as un-edited original. Request help from the Appwrite design team to help you edit and refine your photos according to our guidelines.
|
||||||
|
|
||||||
```md
|
```md
|
||||||
{% only_dark %}
|
{% only_dark %}
|
||||||
@@ -210,41 +210,41 @@ Split content such that each piece makes sense without reading dependents or exp
|
|||||||
|
|
||||||
### Release prep
|
### Release prep
|
||||||
|
|
||||||
- [ ] Add new version to [src/lib/utils/references.ts](src/lib/utils/references.ts)
|
- [ ] Add new version to [src/lib/utils/references.ts](src/lib/utils/references.ts)
|
||||||
- [ ] Point Cloud to new version in [src/routes/docs/references/[version]/[platform]/[service]/+page.server.ts](src/routes/docs/references/[version]/[platform]/[service]/+page.server.ts)
|
- [ ] Point Cloud to new version in [src/routes/docs/references/[version]/[platform]/[service]/+page.server.ts](src/routes/docs/references/[version]/[platform]/[service]/+page.server.ts)
|
||||||
- [ ] Update install command in [/workspaces/website/src/routes/docs/advanced/self-hosting/+page.markdoc](/workspaces/website/src/routes/docs/advanced/self-hosting/+page.markdoc)
|
- [ ] Update install command in [/workspaces/website/src/routes/docs/advanced/self-hosting/+page.markdoc](/workspaces/website/src/routes/docs/advanced/self-hosting/+page.markdoc)
|
||||||
- [ ] Update events [src/partials/[product]-events.md](src/partials/)
|
- [ ] Update events [src/partials/[product]-events.md](src/partials/)
|
||||||
- [ ] Update response code [src/routes/docs/advanced/platform/response-codes/+page.markdoc](src/routes/docs/advanced/platform/response-codes/+page.markdoc)
|
- [ ] Update response code [src/routes/docs/advanced/platform/response-codes/+page.markdoc](src/routes/docs/advanced/platform/response-codes/+page.markdoc)
|
||||||
- [ ] Bump latest SDK versions in SDKs page, quick start, and tutorials
|
- [ ] Bump latest SDK versions in SDKs page, quick start, and tutorials
|
||||||
- [ ] Create new sections for new products
|
- [ ] Create new sections for new products
|
||||||
- [ ] Create new concept and journey pages for new features
|
- [ ] Create new concept and journey pages for new features
|
||||||
- [ ] Update docs for breaking changes
|
- [ ] Update docs for breaking changes
|
||||||
|
|
||||||
### Documenting a new API
|
### Documenting a new API
|
||||||
|
|
||||||
- Add a new .md file describing the new API here: <https://github.com/appwrite/appwrite/tree/main/docs/references>
|
- Add a new .md file describing the new API here: <https://github.com/appwrite/appwrite/tree/main/docs/references>
|
||||||
- Add descriptions for methods and parameters in the controller code: <https://github.com/appwrite/appwrite/tree/main/app/controllers/api>
|
- Add descriptions for methods and parameters in the controller code: <https://github.com/appwrite/appwrite/tree/main/app/controllers/api>
|
||||||
- Check new response models have meaningful descriptions
|
- Check new response models have meaningful descriptions
|
||||||
|
|
||||||
### Adding a new quickstart
|
### Adding a new quickstart
|
||||||
|
|
||||||
- Copy a quick start from the [src/routes/docs/quick-starts](src/routes/docs/quick-starts) folder.
|
- Copy a quick start from the [src/routes/docs/quick-starts](src/routes/docs/quick-starts) folder.
|
||||||
- Add a new entry and logo to [src/routes/docs/quick-starts/+page.svelte](src/routes/docs/quick-starts/+page.svelte)
|
- Add a new entry and logo to [src/routes/docs/quick-starts/+page.svelte](src/routes/docs/quick-starts/+page.svelte)
|
||||||
- If you need a new logo, contact the Appwrite team to add one to Pink design.
|
- If you need a new logo, contact the Appwrite team to add one to Pink design.
|
||||||
- Update the content of your tutorial. Remember to update the front matter!
|
- Update the content of your tutorial. Remember to update the front matter!
|
||||||
- Try to be consistent in both the quickstart's content and format when compared to existing quick starts
|
- Try to be consistent in both the quickstart's content and format when compared to existing quick starts
|
||||||
- Add the quick start to the footer and front page of Appwrite
|
- Add the quick start to the footer and front page of Appwrite
|
||||||
- Use sections for steps on your page
|
- Use sections for steps on your page
|
||||||
|
|
||||||
### Adding a new tutorial
|
### Adding a new tutorial
|
||||||
|
|
||||||
- Copy a tutorial from the [src/routes/docs/tutorials](src/routes/docs/tutorials) folder.
|
- Copy a tutorial from the [src/routes/docs/tutorials](src/routes/docs/tutorials) folder.
|
||||||
- Update the `+page.ts`'s redirect, for example, the Android tutorial has this: [src/routes/docs/tutorials/android/+page.ts](src/routes/docs/tutorials/android/+page.ts)
|
- Update the `+page.ts`'s redirect, for example, the Android tutorial has this: [src/routes/docs/tutorials/android/+page.ts](src/routes/docs/tutorials/android/+page.ts)
|
||||||
- Update [src/routes/docs/tutorials/+page.svelte](src/routes/docs/tutorials/+page.svelte) and add your new tutorial
|
- Update [src/routes/docs/tutorials/+page.svelte](src/routes/docs/tutorials/+page.svelte) and add your new tutorial
|
||||||
- Update [src/routes/docs/tutorials/android/+layout.ts](src/routes/docs/tutorials/android/+layout.ts) and add your new tutorial
|
- Update [src/routes/docs/tutorials/android/+layout.ts](src/routes/docs/tutorials/android/+layout.ts) and add your new tutorial
|
||||||
- Add the content of your tutorial. Keep pages short, separated by a different distinct feature for each step.
|
- Add the content of your tutorial. Keep pages short, separated by a different distinct feature for each step.
|
||||||
- If you need a new logo, contact the Appwrite team to add one to Pink design.
|
- If you need a new logo, contact the Appwrite team to add one to Pink design.
|
||||||
- Add the tutorial to the footer and front page of Appwrite
|
- Add the tutorial to the footer and front page of Appwrite
|
||||||
|
|
||||||
## Language and diction
|
## Language and diction
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"dev": "vite dev",
|
"dev": "vite dev",
|
||||||
"download-contributors": "node ./scripts/download-contributor-data.js",
|
"download-contributors": "node ./scripts/download-contributor-data.js",
|
||||||
"format": "prettier --write .",
|
"format": "prettier --write .",
|
||||||
|
"format:check": "prettier --check .",
|
||||||
"icons:build": "node ./src/icons/build.js",
|
"icons:build": "node ./src/icons/build.js",
|
||||||
"icons:generate": "node ./src/icons/optimize.js && node ./src/icons/build.js",
|
"icons:generate": "node ./src/icons/optimize.js && node ./src/icons/build.js",
|
||||||
"icons:optimize": "node ./src/icons/optimize.js",
|
"icons:optimize": "node ./src/icons/optimize.js",
|
||||||
|
|||||||
95
src/lib/components/CommunitySupportChat.svelte
Normal file
95
src/lib/components/CommunitySupportChat.svelte
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
<ul class="web-chat-list">
|
||||||
|
<li class="web-chat-item is-user-a">
|
||||||
|
<div class="web-chat-message">
|
||||||
|
<div class="web-user-box">
|
||||||
|
<img
|
||||||
|
class="web-user-box-image"
|
||||||
|
src="/images/community/avatars/walter.avif"
|
||||||
|
height="40"
|
||||||
|
width="40"
|
||||||
|
alt="Avatar of Walter"
|
||||||
|
/>
|
||||||
|
<div class="web-user-box-name flex gap-2">
|
||||||
|
<span class="text-sub-body font-medium">Walter O'Brien</span>
|
||||||
|
<time class="text-caption web-u-color-text-tertiary">8:32 AM</time>
|
||||||
|
</div>
|
||||||
|
<div class="web-user-box-content text-caption text-primary">
|
||||||
|
Hello devs! I am getting a CORS error when sending a request to the backend. Can
|
||||||
|
you help me?
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="web-chat-item is-user-b">
|
||||||
|
<div class="web-chat-message reply">
|
||||||
|
<div class="web-user-box">
|
||||||
|
<img
|
||||||
|
class="web-user-box-image"
|
||||||
|
src="/images/avatars/steven.avif"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
alt="Avatar of Steven"
|
||||||
|
/>
|
||||||
|
<div class="web-user-box-name flex gap-2">
|
||||||
|
<span class="text-sub-body font-medium">Steven</span>
|
||||||
|
<time class="text-caption web-u-color-text-tertiary">8:38 AM</time>
|
||||||
|
</div>
|
||||||
|
<div class="web-user-box-content text-caption text-primary">
|
||||||
|
Hey Walter! Is this the message you get
|
||||||
|
<a class="web-link is-pink" href="/blog/post/cors-error" target="_blank"
|
||||||
|
>"Access blocked by CORS policy"</a
|
||||||
|
>?
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="web-chat-item is-user-a">
|
||||||
|
<div class="web-chat-message">
|
||||||
|
<div class="web-user-box">
|
||||||
|
<img
|
||||||
|
class="web-user-box-image"
|
||||||
|
src="/images/community/avatars/walter.avif"
|
||||||
|
height="40"
|
||||||
|
width="40"
|
||||||
|
alt="Avatar of Walter"
|
||||||
|
/>
|
||||||
|
<div class="web-user-box-name flex gap-2">
|
||||||
|
<span class="text-sub-body font-medium">Walter O'Brien</span>
|
||||||
|
<time class="text-caption web-u-color-text-tertiary">9:05 AM</time>
|
||||||
|
</div>
|
||||||
|
<div class="web-user-box-content text-caption text-primary">Yes!</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="web-chat-item is-user-b">
|
||||||
|
<div class="web-chat-message reply">
|
||||||
|
<div class="web-user-box">
|
||||||
|
<img
|
||||||
|
class="web-user-box-image"
|
||||||
|
src="/images/avatars/steven.avif"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
alt="Avatar of Steven"
|
||||||
|
/>
|
||||||
|
<div class="web-user-box-name flex gap-2">
|
||||||
|
<span class="text-sub-body font-medium">Steven</span>
|
||||||
|
<time class="text-caption web-u-color-text-tertiary">9:08 AM</time>
|
||||||
|
</div>
|
||||||
|
<div class="web-user-box-content text-caption text-primary">
|
||||||
|
You should be able to debug this with a few steps. Just follow this blog:
|
||||||
|
<a class="web-link is-pink" href="/blog/post/cors-error" target="_blank"
|
||||||
|
>https://appwrite.io/blog/post/cors-error</a
|
||||||
|
>. Let me know if this helps 🙂
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.web-chat-list {
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
<script lang="ts" context="module">
|
<script lang="ts" context="module">
|
||||||
|
import type { ComponentType } from 'svelte';
|
||||||
|
|
||||||
export type NavLink = {
|
export type NavLink = {
|
||||||
label: string;
|
label: string;
|
||||||
href?: string;
|
href?: string;
|
||||||
@@ -10,7 +12,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { classNames } from '$lib/utils/classnames';
|
import { classNames } from '$lib/utils/classnames';
|
||||||
import type { ComponentType } from 'svelte';
|
import { trackEvent } from '$lib/actions/analytics';
|
||||||
|
|
||||||
export let initialized = false;
|
export let initialized = false;
|
||||||
|
|
||||||
@@ -39,6 +41,12 @@
|
|||||||
href={link.href}
|
href={link.href}
|
||||||
data-initialized={initialized ? '' : undefined}
|
data-initialized={initialized ? '' : undefined}
|
||||||
data-badge={link.showBadge ? '' : undefined}
|
data-badge={link.showBadge ? '' : undefined}
|
||||||
|
on:click={() => {
|
||||||
|
trackEvent({
|
||||||
|
plausible: { name: `${link.label} in header` },
|
||||||
|
posthog: { name: `${link.label.toLowerCase()}_nav_click` }
|
||||||
|
});
|
||||||
|
}}
|
||||||
>{link.label}
|
>{link.label}
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import { products, sublinks } from './ProductsSubmenu.svelte';
|
import { products, sublinks } from './ProductsSubmenu.svelte';
|
||||||
import { dev } from '$app/environment';
|
import { dev } from '$app/environment';
|
||||||
|
import { trackEvent } from '$lib/actions/analytics';
|
||||||
|
|
||||||
export let label: string;
|
export let label: string;
|
||||||
|
|
||||||
@@ -35,6 +36,12 @@
|
|||||||
<a
|
<a
|
||||||
href={product.href}
|
href={product.href}
|
||||||
class="group flex gap-3 rounded-xl p-2 text-white outline-none transition-colors focus:bg-white/8"
|
class="group flex gap-3 rounded-xl p-2 text-white outline-none transition-colors focus:bg-white/8"
|
||||||
|
on:click={() =>
|
||||||
|
trackEvent({
|
||||||
|
plausible: {
|
||||||
|
name: `${product.name} in products submenu`
|
||||||
|
}
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="flex size-12 shrink-0 items-center justify-center rounded-lg border border-white/12 bg-white/6"
|
class="flex size-12 shrink-0 items-center justify-center rounded-lg border border-white/12 bg-white/6"
|
||||||
|
|||||||
@@ -17,12 +17,16 @@
|
|||||||
import { writable } from 'svelte/store';
|
import { writable } from 'svelte/store';
|
||||||
import { Feedback } from '$lib/components';
|
import { Feedback } from '$lib/components';
|
||||||
import { scrollToTop } from '$lib/actions/scrollToTop';
|
import { scrollToTop } from '$lib/actions/scrollToTop';
|
||||||
|
import type { Language } from '$lib/utils/code';
|
||||||
|
|
||||||
export let title: string;
|
export let title: string;
|
||||||
export let toc: Array<TocItem>;
|
export let toc: Array<TocItem>;
|
||||||
export let back: string | undefined = undefined;
|
export let back: string | undefined = undefined;
|
||||||
export let date: string | undefined = undefined;
|
export let date: string | undefined = undefined;
|
||||||
|
|
||||||
|
// Shared writable store for a selected language.
|
||||||
|
setContext('language-context', writable<Language>());
|
||||||
|
|
||||||
const reducedArticleSize = setContext('articleHasNumericBadge', writable(false));
|
const reducedArticleSize = setContext('articleHasNumericBadge', writable(false));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -93,8 +93,13 @@
|
|||||||
|
|
||||||
.overlay {
|
.overlay {
|
||||||
inset: 0;
|
inset: 0;
|
||||||
z-index: 25;
|
/* docs side nav have a z-index of 35 */
|
||||||
|
z-index: 36;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
background-color: rgba(228, 228, 228, 0.98);
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(.dark) .overlay {
|
||||||
background-color: rgba(27, 27, 27, 0.98);
|
background-color: rgba(27, 27, 27, 0.98);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,4 +19,5 @@
|
|||||||
height={sizes[size]}
|
height={sizes[size]}
|
||||||
style:width={sizes[size]}
|
style:width={sizes[size]}
|
||||||
style:vertical-align="middle"
|
style:vertical-align="middle"
|
||||||
|
style:min-width={sizes[size]}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
content: writable('')
|
content: writable('')
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const languageContext = getContext<Writable<string>>('language-context');
|
||||||
|
|
||||||
const { snippets, selected, content } = getContext<CodeContext>('multi-code');
|
const { snippets, selected, content } = getContext<CodeContext>('multi-code');
|
||||||
|
|
||||||
snippets.subscribe((n) => {
|
snippets.subscribe((n) => {
|
||||||
@@ -29,6 +31,24 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
selected.subscribe((language) => {
|
||||||
|
// apply if exists in snippets
|
||||||
|
if (language && $snippets.has(language as Language)) {
|
||||||
|
languageContext?.set(language);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
languageContext?.subscribe((language) => {
|
||||||
|
if (
|
||||||
|
language &&
|
||||||
|
language !== $selected &&
|
||||||
|
// apply if exists in snippets
|
||||||
|
$snippets.has(language as Language)
|
||||||
|
) {
|
||||||
|
selected.set(language);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
enum CopyStatus {
|
enum CopyStatus {
|
||||||
Copy = 'Copy',
|
Copy = 'Copy',
|
||||||
Copied = 'Copied!'
|
Copied = 'Copied!'
|
||||||
|
|||||||
@@ -1,174 +1,174 @@
|
|||||||
{% table %}
|
{% table %}
|
||||||
|
|
||||||
- Name
|
- Name
|
||||||
- Description
|
- Description
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*`
|
- `teams.*`
|
||||||
- This event triggers on any teams event.
|
- This event triggers on any teams event.
|
||||||
Returns [Team Object](/docs/references/cloud/models/team)
|
Returns [Team Object](/docs/references/cloud/models/team)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.create`
|
- `teams.*.create`
|
||||||
- This event triggers when a team is created.
|
- This event triggers when a team is created.
|
||||||
Returns [Team Object](/docs/references/cloud/models/team)
|
Returns [Team Object](/docs/references/cloud/models/team)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.delete`
|
- `teams.*.delete`
|
||||||
- This event triggers when a team is deleted.
|
- This event triggers when a team is deleted.
|
||||||
Returns [Team Object](/docs/references/cloud/models/team)
|
Returns [Team Object](/docs/references/cloud/models/team)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.memberships.*`
|
- `teams.*.memberships.*`
|
||||||
- This event triggers on any team memberships event.
|
- This event triggers on any team memberships event.
|
||||||
Returns [Membership Object](/docs/references/cloud/models/membership)
|
Returns [Membership Object](/docs/references/cloud/models/membership)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.memberships.*.create`
|
- `teams.*.memberships.*.create`
|
||||||
- This event triggers when a membership is created.
|
- This event triggers when a membership is created.
|
||||||
Returns [Membership Object](/docs/references/cloud/models/membership)
|
Returns [Membership Object](/docs/references/cloud/models/membership)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.memberships.*.delete`
|
- `teams.*.memberships.*.delete`
|
||||||
- This event triggers when a membership is deleted.
|
- This event triggers when a membership is deleted.
|
||||||
Returns [Membership Object](/docs/references/cloud/models/membership)
|
Returns [Membership Object](/docs/references/cloud/models/membership)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.memberships.*.update`
|
- `teams.*.memberships.*.update`
|
||||||
- This event triggers when a membership is updated.
|
- This event triggers when a membership is updated.
|
||||||
Returns [Membership Object](/docs/references/cloud/models/membership)
|
Returns [Membership Object](/docs/references/cloud/models/membership)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.memberships.*.update.status`
|
- `teams.*.memberships.*.update.status`
|
||||||
- This event triggers when a team memberships status is updated.
|
- This event triggers when a team memberships status is updated.
|
||||||
Returns [Membership Object](/docs/references/cloud/models/membership)
|
Returns [Membership Object](/docs/references/cloud/models/membership)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.update`
|
- `teams.*.update`
|
||||||
- This event triggers when a team is updated.
|
- This event triggers when a team is updated.
|
||||||
Returns [Team Object](/docs/references/cloud/models/team)
|
Returns [Team Object](/docs/references/cloud/models/team)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `teams.*.update.prefs`
|
- `teams.*.update.prefs`
|
||||||
- This event triggers when a team's preferences are updated.
|
- This event triggers when a team's preferences are updated.
|
||||||
Returns [Team Object](/docs/references/cloud/models/team)
|
Returns [Team Object](/docs/references/cloud/models/team)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*`
|
- `users.*`
|
||||||
- This event triggers on any user's event.
|
- This event triggers on any user's event.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.create`
|
- `users.*.create`
|
||||||
- This event triggers when a user is created.
|
- This event triggers when a user is created.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.delete`
|
- `users.*.delete`
|
||||||
- This event triggers when a user is deleted.
|
- This event triggers when a user is deleted.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.recovery.*`
|
- `users.*.recovery.*`
|
||||||
- This event triggers on any user's recovery token event.
|
- This event triggers on any user's recovery token event.
|
||||||
Returns [Token Object](/docs/references/cloud/models/token)
|
Returns [Token Object](/docs/references/cloud/models/token)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.recovery.*.create`
|
- `users.*.recovery.*.create`
|
||||||
- This event triggers when a recovery token for a user is created.
|
- This event triggers when a recovery token for a user is created.
|
||||||
Returns [Token Object](/docs/references/cloud/models/token)
|
Returns [Token Object](/docs/references/cloud/models/token)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.recovery.*.update`
|
- `users.*.recovery.*.update`
|
||||||
- This event triggers when a recovery token for a user is validated.
|
- This event triggers when a recovery token for a user is validated.
|
||||||
Returns [Token Object](/docs/references/cloud/models/token)
|
Returns [Token Object](/docs/references/cloud/models/token)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.sessions.*`
|
- `users.*.sessions.*`
|
||||||
- This event triggers on any user's sessions event.
|
- This event triggers on any user's sessions event.
|
||||||
Returns [Session Object](/docs/references/cloud/models/session)
|
Returns [Session Object](/docs/references/cloud/models/session)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.sessions.*.create`
|
- `users.*.sessions.*.create`
|
||||||
- This event triggers when a session for a user is created.
|
- This event triggers when a session for a user is created.
|
||||||
Returns [Session Object](/docs/references/cloud/models/session)
|
Returns [Session Object](/docs/references/cloud/models/session)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.sessions.*.delete`
|
- `users.*.sessions.*.delete`
|
||||||
- This event triggers when a session for a user is deleted.
|
- This event triggers when a session for a user is deleted.
|
||||||
Returns [Session Object](/docs/references/cloud/models/session)
|
Returns [Session Object](/docs/references/cloud/models/session)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.update`
|
- `users.*.update`
|
||||||
- This event triggers when a user is updated.
|
- This event triggers when a user is updated.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.update.email`
|
- `users.*.update.email`
|
||||||
- This event triggers when a user's email address is updated.
|
- This event triggers when a user's email address is updated.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.update.name`
|
- `users.*.update.name`
|
||||||
- This event triggers when a user's name is updated.
|
- This event triggers when a user's name is updated.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.update.password`
|
- `users.*.update.password`
|
||||||
- This event triggers when a user's password is updated.
|
- This event triggers when a user's password is updated.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.update.prefs`
|
- `users.*.update.prefs`
|
||||||
- This event triggers when a user's preferences is updated.
|
- This event triggers when a user's preferences is updated.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.update.status`
|
- `users.*.update.status`
|
||||||
- This event triggers when a user's status is updated.
|
- This event triggers when a user's status is updated.
|
||||||
Returns [User Object](/docs/references/cloud/models/user)
|
Returns [User Object](/docs/references/cloud/models/user)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.verification.*`
|
- `users.*.verification.*`
|
||||||
- This event triggers on any user's verification token event.
|
- This event triggers on any user's verification token event.
|
||||||
Returns [Token Object](/docs/references/cloud/models/token)
|
Returns [Token Object](/docs/references/cloud/models/token)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.verification.*.create`
|
- `users.*.verification.*.create`
|
||||||
- This event triggers when a verification token for a user is created.
|
- This event triggers when a verification token for a user is created.
|
||||||
Returns [Token Object](/docs/references/cloud/models/token)
|
Returns [Token Object](/docs/references/cloud/models/token)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `users.*.verification.*.update`
|
- `users.*.verification.*.update`
|
||||||
- This event triggers when a verification token for a user is validated.
|
- This event triggers when a verification token for a user is validated.
|
||||||
Returns [Token Object](/docs/references/cloud/models/token)
|
Returns [Token Object](/docs/references/cloud/models/token)
|
||||||
|
|
||||||
{% /table %}
|
{% /table %}
|
||||||
|
|||||||
@@ -69,9 +69,9 @@ In certain use cases, your app may not need to share members' personal informati
|
|||||||
|
|
||||||
These details can be made private:
|
These details can be made private:
|
||||||
|
|
||||||
- `userName` - The member's name
|
- `userName` - The member's name
|
||||||
- `userEmail` - The member's email address
|
- `userEmail` - The member's email address
|
||||||
- `mfa` - Whether the member has enabled multi-factor authentication
|
- `mfa` - Whether the member has enabled multi-factor authentication
|
||||||
|
|
||||||
# Mock phone numbers {% #mock-phone-numbers %}
|
# Mock phone numbers {% #mock-phone-numbers %}
|
||||||
|
|
||||||
|
|||||||
@@ -1,112 +1,112 @@
|
|||||||
{% table %}
|
{% table %}
|
||||||
|
|
||||||
- Name
|
- Name
|
||||||
- Description
|
- Description
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*`
|
- `databases.*`
|
||||||
- This event triggers on any database event.
|
- This event triggers on any database event.
|
||||||
Returns [Database Object](/docs/references/cloud/models/database)
|
Returns [Database Object](/docs/references/cloud/models/database)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*`
|
- `databases.*.collections.*`
|
||||||
- This event triggers on any collection event.
|
- This event triggers on any collection event.
|
||||||
Returns [Collection Object](/docs/references/cloud/models/collection)
|
Returns [Collection Object](/docs/references/cloud/models/collection)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.attributes.*`
|
- `databases.*.collections.*.attributes.*`
|
||||||
- This event triggers on any attributes event.
|
- This event triggers on any attributes event.
|
||||||
Returns [Attribute Object](/docs/references/cloud/models/attributeList)
|
Returns [Attribute Object](/docs/references/cloud/models/attributeList)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.attributes.*.create`
|
- `databases.*.collections.*.attributes.*.create`
|
||||||
- This event triggers when an attribute is created.
|
- This event triggers when an attribute is created.
|
||||||
Returns [Attribute Object](/docs/references/cloud/models/attributeList)
|
Returns [Attribute Object](/docs/references/cloud/models/attributeList)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.attributes.*.delete`
|
- `databases.*.collections.*.attributes.*.delete`
|
||||||
- This event triggers when an attribute is deleted.
|
- This event triggers when an attribute is deleted.
|
||||||
Returns [Attribute Object](/docs/references/cloud/models/attributeList)
|
Returns [Attribute Object](/docs/references/cloud/models/attributeList)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.create`
|
- `databases.*.collections.*.create`
|
||||||
- This event triggers when a collection is created.
|
- This event triggers when a collection is created.
|
||||||
Returns [Collection Object](/docs/references/cloud/models/collection)
|
Returns [Collection Object](/docs/references/cloud/models/collection)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.delete`
|
- `databases.*.collections.*.delete`
|
||||||
- This event triggers when a collection is deleted.
|
- This event triggers when a collection is deleted.
|
||||||
Returns [Collection Object](/docs/references/cloud/models/collection)
|
Returns [Collection Object](/docs/references/cloud/models/collection)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.documents.*`
|
- `databases.*.collections.*.documents.*`
|
||||||
- This event triggers on any documents event.
|
- This event triggers on any documents event.
|
||||||
Returns [Document Object](/docs/references/cloud/models/document)
|
Returns [Document Object](/docs/references/cloud/models/document)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.documents.*.create`
|
- `databases.*.collections.*.documents.*.create`
|
||||||
- This event triggers when a document is created.
|
- This event triggers when a document is created.
|
||||||
Returns [Document Object](/docs/references/cloud/models/document)
|
Returns [Document Object](/docs/references/cloud/models/document)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.documents.*.delete`
|
- `databases.*.collections.*.documents.*.delete`
|
||||||
- This event triggers when a document is deleted.
|
- This event triggers when a document is deleted.
|
||||||
Returns [Document Object](/docs/references/cloud/models/document)
|
Returns [Document Object](/docs/references/cloud/models/document)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.documents.*.update`
|
- `databases.*.collections.*.documents.*.update`
|
||||||
- This event triggers when a document is updated.
|
- This event triggers when a document is updated.
|
||||||
Returns [Document Object](/docs/references/cloud/models/document)
|
Returns [Document Object](/docs/references/cloud/models/document)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.indexes.*`
|
- `databases.*.collections.*.indexes.*`
|
||||||
- This event triggers on any indexes event.
|
- This event triggers on any indexes event.
|
||||||
Returns [Index Object](/docs/references/cloud/models/index)
|
Returns [Index Object](/docs/references/cloud/models/index)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.indexes.*.create`
|
- `databases.*.collections.*.indexes.*.create`
|
||||||
- This event triggers when an index is created.
|
- This event triggers when an index is created.
|
||||||
Returns [Index Object](/docs/references/cloud/models/index)
|
Returns [Index Object](/docs/references/cloud/models/index)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.indexes.*.delete`
|
- `databases.*.collections.*.indexes.*.delete`
|
||||||
- This event triggers when an index is deleted.
|
- This event triggers when an index is deleted.
|
||||||
Returns [Index Object](/docs/references/cloud/models/index)
|
Returns [Index Object](/docs/references/cloud/models/index)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.collections.*.update`
|
- `databases.*.collections.*.update`
|
||||||
- This event triggers when a collection is updated.
|
- This event triggers when a collection is updated.
|
||||||
Returns [Collection Object](/docs/references/cloud/models/collection)
|
Returns [Collection Object](/docs/references/cloud/models/collection)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.create`
|
- `databases.*.create`
|
||||||
- This event triggers when a database is created.
|
- This event triggers when a database is created.
|
||||||
Returns [Database Object](/docs/references/cloud/models/database)
|
Returns [Database Object](/docs/references/cloud/models/database)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.delete`
|
- `databases.*.delete`
|
||||||
- This event triggers when a database is deleted.
|
- This event triggers when a database is deleted.
|
||||||
Returns [Database Object](/docs/references/cloud/models/database)
|
Returns [Database Object](/docs/references/cloud/models/database)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `databases.*.update`
|
- `databases.*.update`
|
||||||
- This event triggers when a database is updated.
|
- This event triggers when a database is updated.
|
||||||
Returns [Database Object](/docs/references/cloud/models/database){% /table %}
|
Returns [Database Object](/docs/references/cloud/models/database){% /table %}
|
||||||
|
|||||||
@@ -1,78 +1,78 @@
|
|||||||
{% table %}
|
{% table %}
|
||||||
|
|
||||||
- Name
|
- Name
|
||||||
- Description
|
- Description
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*`
|
- `functions.*`
|
||||||
- This event triggers on any functions event.
|
- This event triggers on any functions event.
|
||||||
Returns [Function Object](/docs/references/cloud/models/function)
|
Returns [Function Object](/docs/references/cloud/models/function)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.create`
|
- `functions.*.create`
|
||||||
- This event triggers when a function is created.
|
- This event triggers when a function is created.
|
||||||
Returns [Function Object](/docs/references/cloud/models/function)
|
Returns [Function Object](/docs/references/cloud/models/function)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.delete`
|
- `functions.*.delete`
|
||||||
- This event triggers when a function is deleted.
|
- This event triggers when a function is deleted.
|
||||||
Returns [Function Object](/docs/references/cloud/models/function)
|
Returns [Function Object](/docs/references/cloud/models/function)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.deployments.*`
|
- `functions.*.deployments.*`
|
||||||
- This event triggers on any deployments event.
|
- This event triggers on any deployments event.
|
||||||
Returns [Deployment Object](/docs/references/cloud/models/deployment)
|
Returns [Deployment Object](/docs/references/cloud/models/deployment)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.deployments.*.create`
|
- `functions.*.deployments.*.create`
|
||||||
- This event triggers when a deployment is created.
|
- This event triggers when a deployment is created.
|
||||||
Returns [Deployment Object](/docs/references/cloud/models/deployment)
|
Returns [Deployment Object](/docs/references/cloud/models/deployment)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.deployments.*.delete`
|
- `functions.*.deployments.*.delete`
|
||||||
- This event triggers when a deployment is deleted.
|
- This event triggers when a deployment is deleted.
|
||||||
Returns [Deployment Object](/docs/references/cloud/models/deployment)
|
Returns [Deployment Object](/docs/references/cloud/models/deployment)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.deployments.*.update`
|
- `functions.*.deployments.*.update`
|
||||||
- This event triggers when a deployment is updated.
|
- This event triggers when a deployment is updated.
|
||||||
Returns [Deployment Object](/docs/references/cloud/models/deployment)
|
Returns [Deployment Object](/docs/references/cloud/models/deployment)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.executions.*`
|
- `functions.*.executions.*`
|
||||||
- This event triggers on any executions event.
|
- This event triggers on any executions event.
|
||||||
Returns [Execution Object](/docs/references/cloud/models/execution)
|
Returns [Execution Object](/docs/references/cloud/models/execution)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.executions.*.create`
|
- `functions.*.executions.*.create`
|
||||||
- This event triggers when an execution is created.
|
- This event triggers when an execution is created.
|
||||||
Returns [Execution Object](/docs/references/cloud/models/execution)
|
Returns [Execution Object](/docs/references/cloud/models/execution)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.executions.*.delete`
|
- `functions.*.executions.*.delete`
|
||||||
- This event triggers when an execution is deleted.
|
- This event triggers when an execution is deleted.
|
||||||
Returns [Execution Object](/docs/references/cloud/models/execution)
|
Returns [Execution Object](/docs/references/cloud/models/execution)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.executions.*.update`
|
- `functions.*.executions.*.update`
|
||||||
- This event triggers when an execution is updated.
|
- This event triggers when an execution is updated.
|
||||||
Returns [Execution Object](/docs/references/cloud/models/execution)
|
Returns [Execution Object](/docs/references/cloud/models/execution)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `functions.*.update`
|
- `functions.*.update`
|
||||||
- This event triggers when a function is updated.
|
- This event triggers when a function is updated.
|
||||||
Returns [Function Object](/docs/references/cloud/models/function)
|
Returns [Function Object](/docs/references/cloud/models/function)
|
||||||
|
|
||||||
{% /table %}
|
{% /table %}
|
||||||
|
|||||||
@@ -1,90 +1,90 @@
|
|||||||
{% table %}
|
{% table %}
|
||||||
|
|
||||||
- Name
|
- Name
|
||||||
- Description
|
- Description
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `providers.*`
|
- `providers.*`
|
||||||
- This event triggers on any providers event.
|
- This event triggers on any providers event.
|
||||||
Returns [Provider Object](/docs/references/cloud/models/provider)
|
Returns [Provider Object](/docs/references/cloud/models/provider)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `providers.*.create`
|
- `providers.*.create`
|
||||||
- This event triggers when a provider is created.
|
- This event triggers when a provider is created.
|
||||||
Returns [Provider Object](/docs/references/cloud/models/provider)
|
Returns [Provider Object](/docs/references/cloud/models/provider)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `providers.*.delete`
|
- `providers.*.delete`
|
||||||
- This event triggers when a provider is deleted.
|
- This event triggers when a provider is deleted.
|
||||||
Returns [Provider Object](/docs/references/cloud/models/provider)
|
Returns [Provider Object](/docs/references/cloud/models/provider)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `providers.*.update`
|
- `providers.*.update`
|
||||||
- This event triggers when a provider is updated.
|
- This event triggers when a provider is updated.
|
||||||
Returns [Provider Object](/docs/references/cloud/models/provider)
|
Returns [Provider Object](/docs/references/cloud/models/provider)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `topics.*`
|
- `topics.*`
|
||||||
- This event triggers on any topic event.
|
- This event triggers on any topic event.
|
||||||
Returns [Topic Object](/docs/references/cloud/models/topic)
|
Returns [Topic Object](/docs/references/cloud/models/topic)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `topics.*.create`
|
- `topics.*.create`
|
||||||
- This event triggers when a topic is created.
|
- This event triggers when a topic is created.
|
||||||
Returns [Topic Object](/docs/references/cloud/models/topic)
|
Returns [Topic Object](/docs/references/cloud/models/topic)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `topics.*.delete`
|
- `topics.*.delete`
|
||||||
- This event triggers when a topic is deleted.
|
- This event triggers when a topic is deleted.
|
||||||
Returns [Topic Object](/docs/references/cloud/models/topic)
|
Returns [Topic Object](/docs/references/cloud/models/topic)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `topics.*.update`
|
- `topics.*.update`
|
||||||
- This event triggers when a topic is updated.
|
- This event triggers when a topic is updated.
|
||||||
Returns [Topic Object](/docs/references/cloud/models/topic)
|
Returns [Topic Object](/docs/references/cloud/models/topic)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `topics.*.subscribers.*.create`
|
- `topics.*.subscribers.*.create`
|
||||||
- This event triggers when a subscriber to a topic is created.
|
- This event triggers when a subscriber to a topic is created.
|
||||||
Returns [Topic Object](/docs/references/cloud/models/topic)
|
Returns [Topic Object](/docs/references/cloud/models/topic)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `topics.*.subscribers.*.delete`
|
- `topics.*.subscribers.*.delete`
|
||||||
- This event triggers when a subscriber to a topic is deleted.
|
- This event triggers when a subscriber to a topic is deleted.
|
||||||
Returns [Topic Object](/docs/references/cloud/models/topic)
|
Returns [Topic Object](/docs/references/cloud/models/topic)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `messages.*`
|
- `messages.*`
|
||||||
- This event triggers on any message event.
|
- This event triggers on any message event.
|
||||||
Returns [Message Object](/docs/references/cloud/models/message)
|
Returns [Message Object](/docs/references/cloud/models/message)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `messages.*.create`
|
- `messages.*.create`
|
||||||
- This event triggers when a message is created.
|
- This event triggers when a message is created.
|
||||||
Returns [Message Object](/docs/references/cloud/models/message)
|
Returns [Message Object](/docs/references/cloud/models/message)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `messages.*.delete`
|
- `messages.*.delete`
|
||||||
- This event triggers when a message is deleted.
|
- This event triggers when a message is deleted.
|
||||||
Returns [Message Object](/docs/references/cloud/models/message)
|
Returns [Message Object](/docs/references/cloud/models/message)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `messages.*.update`
|
- `messages.*.update`
|
||||||
- This event triggers when a message is updated.
|
- This event triggers when a message is updated.
|
||||||
Returns [Message Object](/docs/references/cloud/models/message)
|
Returns [Message Object](/docs/references/cloud/models/message)
|
||||||
|
|
||||||
{% /table %}
|
{% /table %}
|
||||||
|
|||||||
@@ -2,18 +2,18 @@
|
|||||||
|
|
||||||
The following actions are prohibited on the Appwrite platform and may lead to immediate suspension or termination:
|
The following actions are prohibited on the Appwrite platform and may lead to immediate suspension or termination:
|
||||||
|
|
||||||
- **Illegal and harmful content:** Sharing any content that is illegal, infringing (e.g., copyright infringement), harmful, threatening, defamatory, obscene, harassing, or otherwise objectionable. This includes distributing malware, viruses, or any malicious code.
|
- **Illegal and harmful content:** Sharing any content that is illegal, infringing (e.g., copyright infringement), harmful, threatening, defamatory, obscene, harassing, or otherwise objectionable. This includes distributing malware, viruses, or any malicious code.
|
||||||
- **Unauthorized access and disruption:** Accessing or attempting to access any system, data, or account without authorization. This includes:
|
- **Unauthorized access and disruption:** Accessing or attempting to access any system, data, or account without authorization. This includes:
|
||||||
- Hacking
|
- Hacking
|
||||||
- Penetration testing without approval
|
- Penetration testing without approval
|
||||||
- Denial-of-Service (DoS) attacks
|
- Denial-of-Service (DoS) attacks
|
||||||
- Disrupting Appwrite Cloud's integrity or performance (e.g., excessive resource usage, unauthorized load testing)
|
- Disrupting Appwrite Cloud's integrity or performance (e.g., excessive resource usage, unauthorized load testing)
|
||||||
- **Deceptive practices:** Engaging in any fraudulent or deceptive activity, such as:
|
- **Deceptive practices:** Engaging in any fraudulent or deceptive activity, such as:
|
||||||
- Phishing
|
- Phishing
|
||||||
- Misleading others
|
- Misleading others
|
||||||
- Circumventing payment obligations
|
- Circumventing payment obligations
|
||||||
- **Unsolicited communications:** Sending spam, unauthorized advertising, or any form of improper solicitation.
|
- **Unsolicited communications:** Sending spam, unauthorized advertising, or any form of improper solicitation.
|
||||||
- **Misuse of resources:**
|
- **Misuse of resources:**
|
||||||
- Using Appwrite Cloud for cryptocurrency mining without authorization
|
- Using Appwrite Cloud for cryptocurrency mining without authorization
|
||||||
- Violating any applicable laws or regulations
|
- Violating any applicable laws or regulations
|
||||||
- Using the Education plan for non-educational or commercial purposes
|
- Using the Education plan for non-educational or commercial purposes
|
||||||
|
|||||||
@@ -7,41 +7,41 @@ You can check your organization's resource usage for the current billing cycle b
|
|||||||
Reaching your organization's resource limits will have the following effects until the current billing period ends.
|
Reaching your organization's resource limits will have the following effects until the current billing period ends.
|
||||||
{% table %}
|
{% table %}
|
||||||
|
|
||||||
- Component
|
- Component
|
||||||
- Consequence
|
- Consequence
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Bandwidth** {% rowspan=3 %}
|
- **Bandwidth** {% rowspan=3 %}
|
||||||
- More bandwidth will be purchased automatically until your organization reaches a budget cap. If the organization uses a Free plan or a budget cap is reached, API access will be denied until your organization's plan is upgraded or your budget cap is increased.
|
- More bandwidth will be purchased automatically until your organization reaches a budget cap. If the organization uses a Free plan or a budget cap is reached, API access will be denied until your organization's plan is upgraded or your budget cap is increased.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- Importing projects via migrations disabled, but you can still export your projects.
|
- Importing projects via migrations disabled, but you can still export your projects.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- Platform creation disabled.
|
- Platform creation disabled.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Users**
|
- **Users**
|
||||||
- Creating new accounts and team invitations disabled.
|
- Creating new accounts and team invitations disabled.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Compute**
|
- **Compute**
|
||||||
- Function executions are disabled.
|
- Function executions are disabled.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Realtime**
|
- **Realtime**
|
||||||
- Realtime subscriptions disabled.
|
- Realtime subscriptions disabled.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Storage**
|
- **Storage**
|
||||||
- File uploads are disabled. Persists across billing periods until the amount of storage used is below the plan limit.
|
- File uploads are disabled. Persists across billing periods until the amount of storage used is below the plan limit.
|
||||||
|
|
||||||
{% /table %}
|
{% /table %}
|
||||||
|
|
||||||
@@ -55,37 +55,37 @@ The following consequences should also apply at the project level if the Free pl
|
|||||||
|
|
||||||
{% table %}
|
{% table %}
|
||||||
|
|
||||||
- Component
|
- Component
|
||||||
- Action
|
- Action
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Platforms**
|
- **Platforms**
|
||||||
- If more than 3 platforms have been created, disable them in order of date created (oldest ones first).
|
- If more than 3 platforms have been created, disable them in order of date created (oldest ones first).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Webhooks**
|
- **Webhooks**
|
||||||
- If more than 2 webhooks have been created, disable them in order of date created (oldest ones first).
|
- If more than 2 webhooks have been created, disable them in order of date created (oldest ones first).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Teams**
|
- **Teams**
|
||||||
- If more than 100 teams have been created, disable them in order of date created (oldest ones first).
|
- If more than 100 teams have been created, disable them in order of date created (oldest ones first).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Databases**
|
- **Databases**
|
||||||
- If more than 1 database has been created, disable them in order of date created (oldest ones first).
|
- If more than 1 database has been created, disable them in order of date created (oldest ones first).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Buckets**
|
- **Buckets**
|
||||||
- If more than 3 buckets have been created, disable them in order of date created (oldest ones first).
|
- If more than 3 buckets have been created, disable them in order of date created (oldest ones first).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **Functions**
|
- **Functions**
|
||||||
- If more than 5 functions have been created, disable them in order of date created (oldest ones first).
|
- If more than 5 functions have been created, disable them in order of date created (oldest ones first).
|
||||||
|
|
||||||
{% /table %}
|
{% /table %}
|
||||||
|
|||||||
@@ -1,54 +1,54 @@
|
|||||||
{% table %}
|
{% table %}
|
||||||
|
|
||||||
- Name
|
- Name
|
||||||
- Description
|
- Description
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `buckets.*`
|
- `buckets.*`
|
||||||
- This event triggers on any buckets event.
|
- This event triggers on any buckets event.
|
||||||
Returns [Bucket Object](/docs/references/cloud/models/bucket)
|
Returns [Bucket Object](/docs/references/cloud/models/bucket)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `buckets.*.create`
|
- `buckets.*.create`
|
||||||
- This event triggers when a bucket is created.
|
- This event triggers when a bucket is created.
|
||||||
Returns [Bucket Object](/docs/references/cloud/models/bucket)
|
Returns [Bucket Object](/docs/references/cloud/models/bucket)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `buckets.*.delete`
|
- `buckets.*.delete`
|
||||||
- This event triggers when a bucket is deleted.
|
- This event triggers when a bucket is deleted.
|
||||||
Returns [Bucket Object](/docs/references/cloud/models/bucket)
|
Returns [Bucket Object](/docs/references/cloud/models/bucket)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `buckets.*.files.*`
|
- `buckets.*.files.*`
|
||||||
- This event triggers on any files event.
|
- This event triggers on any files event.
|
||||||
Returns [File Object](/docs/references/cloud/models/file)
|
Returns [File Object](/docs/references/cloud/models/file)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `buckets.*.files.*.create`
|
- `buckets.*.files.*.create`
|
||||||
- Since the Appwrite SDK chunks files in 5MB increments, this event will trigger for each 5MB chunk. A file is fully uploaded when `chunksTotal` equals `chunksUploaded`.
|
- Since the Appwrite SDK chunks files in 5MB increments, this event will trigger for each 5MB chunk. A file is fully uploaded when `chunksTotal` equals `chunksUploaded`.
|
||||||
Returns [File Object](/docs/references/cloud/models/file)
|
Returns [File Object](/docs/references/cloud/models/file)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `buckets.*.files.*.delete`
|
- `buckets.*.files.*.delete`
|
||||||
- This event triggers when a file is deleted.
|
- This event triggers when a file is deleted.
|
||||||
Returns [File Object](/docs/references/cloud/models/file)
|
Returns [File Object](/docs/references/cloud/models/file)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `buckets.*.files.*.update`
|
- `buckets.*.files.*.update`
|
||||||
- This event triggers when a file is updated.
|
- This event triggers when a file is updated.
|
||||||
Returns [File Object](/docs/references/cloud/models/file)
|
Returns [File Object](/docs/references/cloud/models/file)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- `buckets.*.update`
|
- `buckets.*.update`
|
||||||
- This event triggers when a bucket is updated.
|
- This event triggers when a bucket is updated.
|
||||||
Returns [Bucket Object](/docs/references/cloud/models/bucket)
|
Returns [Bucket Object](/docs/references/cloud/models/bucket)
|
||||||
|
|
||||||
{% /table %}
|
{% /table %}
|
||||||
|
|||||||
@@ -11,7 +11,8 @@
|
|||||||
import Copy from './Copy.svelte';
|
import Copy from './Copy.svelte';
|
||||||
|
|
||||||
const title = 'Assets' + TITLE_SUFFIX;
|
const title = 'Assets' + TITLE_SUFFIX;
|
||||||
const description = "This page features Appwrite's key brand assets including the logotype, colors, product visuals, and practical guidelines for their usage.";
|
const description =
|
||||||
|
"This page features Appwrite's key brand assets including the logotype, colors, product visuals, and practical guidelines for their usage.";
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
|
|
||||||
enum Section {
|
enum Section {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ In this blog, we’ll learn to build a URL shortener using Appwrite Functions te
|
|||||||
You can find the source code on our [templates GitHub repository](https://github.com/appwrite/templates/tree/main/node/url-shortener).
|
You can find the source code on our [templates GitHub repository](https://github.com/appwrite/templates/tree/main/node/url-shortener).
|
||||||
|
|
||||||
# Setting up the Template
|
# Setting up the Template
|
||||||
To get started, you need to navigate to the functions page on the **[Appwrite](https://appwrite.io/cloud)** console. From there, we will select the **Templates** tab, search for and select the **URL Shortener** function template.
|
To get started, you need to navigate to the functions page on the **[Appwrite](https://cloud.appwrite.io/)** console. From there, we will select the **Templates** tab, search for and select the **URL Shortener** function template.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -62,5 +62,5 @@ We’ve covered the basics, and now it’s your time to shine! With a few change
|
|||||||
For more information about Appwrite and Appwrite Functions:
|
For more information about Appwrite and Appwrite Functions:
|
||||||
|
|
||||||
1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: These documents provide more information on how to use Appwrite Functions.
|
1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: These documents provide more information on how to use Appwrite Functions.
|
||||||
2. **[Appwrite Cloud](https://appwrite.io/cloud)**: Try our cloud service to get started quickly.
|
2. **[Appwrite Cloud](https://cloud.appwrite.io/)**: Try our cloud service to get started quickly.
|
||||||
3. **[Appwrite Discord](https://discord.com/invite/appwrite)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration.
|
3. **[Appwrite Discord](https://discord.com/invite/appwrite)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration.
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
|
|
||||||
const seo = {
|
const seo = {
|
||||||
title: 'Changelog' + TITLE_SUFFIX,
|
title: 'Changelog' + TITLE_SUFFIX,
|
||||||
description: "Explore Appwrite's changelog to stay on top of all the product updates and track our journey.",
|
description:
|
||||||
|
"Explore Appwrite's changelog to stay on top of all the product updates and track our journey.",
|
||||||
ogImage: `${DEFAULT_HOST}/images/open-graph/website.png`
|
ogImage: `${DEFAULT_HOST}/images/open-graph/website.png`
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
import { DEFAULT_DESCRIPTION, DEFAULT_HOST } from '$lib/utils/metadata';
|
import { DEFAULT_DESCRIPTION, DEFAULT_HOST } from '$lib/utils/metadata';
|
||||||
|
|
||||||
const title = 'Company' + TITLE_SUFFIX;
|
const title = 'Company' + TITLE_SUFFIX;
|
||||||
const description = "At Appwrite, we aim to remove technical barriers with our backend solutions. Click here to learn more about our organization, its mission and goals.";
|
const description =
|
||||||
|
'At Appwrite, we aim to remove technical barriers with our backend solutions. Click here to learn more about our organization, its mission and goals.';
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const title = 'Contact us' + TITLE_SUFFIX;
|
const title = 'Contact us' + TITLE_SUFFIX;
|
||||||
const description = "Fill in this short form to get in touch with the Appwrite team. Questions, feature requests or bug reports - all input is welcome!";
|
const description =
|
||||||
|
'Fill in this short form to get in touch with the Appwrite team. Questions, feature requests or bug reports - all input is welcome!';
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const title = 'Enterprise' + TITLE_SUFFIX;
|
const title = 'Enterprise' + TITLE_SUFFIX;
|
||||||
const description = "Want to learn more about Appwrite's Enterprise plan? Send us a message, and we'll propose a pricing solution that fits your unique use case.";
|
const description =
|
||||||
|
"Want to learn more about Appwrite's Enterprise plan? Send us a message, and we'll propose a pricing solution that fits your unique use case.";
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -128,6 +128,11 @@
|
|||||||
new: true,
|
new: true,
|
||||||
label: 'Fair use',
|
label: 'Fair use',
|
||||||
href: '/docs/advanced/platform/fair-use-policy'
|
href: '/docs/advanced/platform/fair-use-policy'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new: true,
|
||||||
|
label: 'Abuse',
|
||||||
|
href: '/docs/advanced/platform/abuse'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
14
src/routes/docs/advanced/platform/abuse/+page.markdoc
Normal file
14
src/routes/docs/advanced/platform/abuse/+page.markdoc
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
layout: article
|
||||||
|
title: Abuse policy
|
||||||
|
description: Guidelines on abusive behavior, prohibited activities, and reporting mechanisms under our Fair Use Policy.
|
||||||
|
---
|
||||||
|
|
||||||
|
Appwrite is committed to providing a fair, secure, and high-quality experience for all users. This Abuse Policy, as part of our overall Fair Use Policy, outlines unacceptable behaviors and the steps you can take to report any suspected abuse. Our goal is to maintain a safe environment where everyone can build, innovate, and collaborate without fear of harmful or illegal activity.
|
||||||
|
|
||||||
|
{% partial file="prohibited-activities.md" /%}
|
||||||
|
|
||||||
|
# Reporting Abuse {% #reporting-abuse %}
|
||||||
|
If you observe or suspect any prohibited activity, please report it as soon as possible to [abuse@appwrite.io](mailto:abuse@appwrite.io).
|
||||||
|
|
||||||
|
Please include any relevant details (e.g., specific URLs, project IDs, or screenshots) so that we can effectively investigate and address the issue. We will review each report confidentially and take any necessary actions, which may include account suspension, service termination, or referral to law enforcement.
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 38 KiB |
@@ -1,5 +1,5 @@
|
|||||||
<script>
|
<script lang="ts">
|
||||||
import Chat from '../(assets)/chat.png';
|
import CommunitySupportChat from '$lib/components/CommunitySupportChat.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="container grid items-center gap-8 md:grid-cols-2">
|
<div class="container grid items-center gap-8 md:grid-cols-2">
|
||||||
@@ -9,8 +9,8 @@
|
|||||||
</h2>
|
</h2>
|
||||||
<p class="text-secondary text-pretty">
|
<p class="text-secondary text-pretty">
|
||||||
Join a growing community of developers and students who use Appwrite to build their
|
Join a growing community of developers and students who use Appwrite to build their
|
||||||
products. Gain access to a wealth of knowledge, support, and shared experiences
|
products. Gain access to a wealth of knowledge, support, and shared experiences needed
|
||||||
needed to grow and advance your tech career.
|
to grow and advance your tech career.
|
||||||
</p>
|
</p>
|
||||||
<a
|
<a
|
||||||
href="/discord"
|
href="/discord"
|
||||||
@@ -20,5 +20,8 @@
|
|||||||
Join our Discord</a
|
Join our Discord</a
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<img src={Chat} alt="Chat" class="mx-auto" />
|
|
||||||
|
<div class="px-4">
|
||||||
|
<CommunitySupportChat />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: 'Who is eligible to apply?',
|
question: 'Who is eligible to apply?',
|
||||||
answer: 'Any student enrolled in the GitHub Student Developer Pack can apply for free and receive Appwrite\'s Education plan until graduation.'
|
answer: "Any student enrolled in the GitHub Student Developer Pack can apply for free and receive Appwrite's Education plan until graduation."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: 'How do I apply?',
|
question: 'How do I apply?',
|
||||||
|
|||||||
@@ -21,8 +21,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Join a vibrant community',
|
label: 'Join a vibrant community',
|
||||||
description:
|
description: 'Get community support in the Appwrite Discord server.',
|
||||||
'Get community support in the Appwrite Discord server.',
|
|
||||||
icon: ChatIcon
|
icon: ChatIcon
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="font-medium">
|
<p class="font-medium">
|
||||||
This credit is available only for users who are verified through the GitHub program
|
This credit is available only for users who are verified through the GitHub program as
|
||||||
as students. The plan is valid until you graduate from GitHub Education.
|
students. The plan is valid until you graduate from GitHub Education.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<img src={Kickstart} alt="Kickstart" class="mx-auto" />
|
<img src={Kickstart} alt="Kickstart" class="mx-auto" />
|
||||||
|
|||||||
@@ -11,7 +11,8 @@
|
|||||||
import Faq from './(components)/FAQ.svelte';
|
import Faq from './(components)/FAQ.svelte';
|
||||||
|
|
||||||
const title = 'Education' + TITLE_SUFFIX;
|
const title = 'Education' + TITLE_SUFFIX;
|
||||||
const description = "Students, here's your chance to expand your skillset without spending a penny. Sign up for Appwrite Education program to get access to our Pro plan.";
|
const description =
|
||||||
|
"Students, here's your chance to expand your skillset without spending a penny. Sign up for Appwrite Education program to get access to our Pro plan.";
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,8 @@
|
|||||||
import FloatingHead from '$lib/components/FloatingHead.svelte';
|
import FloatingHead from '$lib/components/FloatingHead.svelte';
|
||||||
|
|
||||||
const title = 'Heroes' + TITLE_SUFFIX;
|
const title = 'Heroes' + TITLE_SUFFIX;
|
||||||
const description = "If you're passionate about helping developers build great products with Appwrite - join our Heroes program and get access to a number of exclusive perks.";
|
const description =
|
||||||
|
"If you're passionate about helping developers build great products with Appwrite - join our Heroes program and get access to a number of exclusive perks.";
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
|
|
||||||
const heroCards: HeroCardProps[] = [
|
const heroCards: HeroCardProps[] = [
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
export let data;
|
export let data;
|
||||||
|
|
||||||
const title = 'Integrations' + TITLE_SUFFIX;
|
const title = 'Integrations' + TITLE_SUFFIX;
|
||||||
const description = "Connect your favorite apps to Appwrite for one unified tech stack. Explore our catalog of integrations now.";
|
const description =
|
||||||
|
'Connect your favorite apps to Appwrite for one unified tech stack. Explore our catalog of integrations now.';
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
|
|
||||||
// search functionality
|
// search functionality
|
||||||
|
|||||||
@@ -54,7 +54,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const title = 'Become a Technology Partner' + TITLE_SUFFIX;
|
const title = 'Become a Technology Partner' + TITLE_SUFFIX;
|
||||||
const description = "Want to integrate your app with Appwrite's API? Apply to our Technology Partners program by filling a short form.";
|
const description =
|
||||||
|
"Want to integrate your app with Appwrite's API? Apply to our Technology Partners program by filling a short form.";
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -49,10 +49,10 @@
|
|||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4">
|
||||||
<h1 class="font-aeonik-pro text-title text-primary text-pretty">Partner Tiers</h1>
|
<h1 class="font-aeonik-pro text-title text-primary text-pretty">Partner Tiers</h1>
|
||||||
<p class="text-body text-secondary text-pretty font-medium">
|
<p class="text-body text-secondary text-pretty font-medium">
|
||||||
As you continue to grow, so do your opportunities with Appwrite.
|
As you continue to grow, so do your opportunities with Appwrite. Our Partner
|
||||||
Our Partner Program is designed to scale with you as you grow.
|
Program is designed to scale with you as you grow. With flexible tiers tailored
|
||||||
With flexible tiers tailored to your success. A partnership built to
|
to your success. A partnership built to scale together for lasting success in a
|
||||||
scale together for lasting success in a competitive market.
|
competitive market.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
import Features from './(components)/features/Features.svelte';
|
import Features from './(components)/features/Features.svelte';
|
||||||
|
|
||||||
const title = 'Auth' + TITLE_SUFFIX;
|
const title = 'Auth' + TITLE_SUFFIX;
|
||||||
const description = 'Enable secure and reliable user login with Appwrite Auth. We support multiple authentication methods with compliance features out of the box.';
|
const description =
|
||||||
|
'Enable secure and reliable user login with Appwrite Auth. We support multiple authentication methods with compliance features out of the box.';
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
import { PUBLIC_APPWRITE_DASHBOARD } from '$env/static/public';
|
import { PUBLIC_APPWRITE_DASHBOARD } from '$env/static/public';
|
||||||
|
|
||||||
const title = 'Functions' + TITLE_SUFFIX;
|
const title = 'Functions' + TITLE_SUFFIX;
|
||||||
const description = "Appwrite Functions offer everything you need to deploy and scale serverless functions easily, without any server management overhead.";
|
const description =
|
||||||
|
'Appwrite Functions offer everything you need to deploy and scale serverless functions easily, without any server management overhead.';
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
import { PUBLIC_APPWRITE_DASHBOARD } from '$env/static/public';
|
import { PUBLIC_APPWRITE_DASHBOARD } from '$env/static/public';
|
||||||
|
|
||||||
const title = 'Messaging' + TITLE_SUFFIX;
|
const title = 'Messaging' + TITLE_SUFFIX;
|
||||||
const description = "Appwrite Messaging allows you to communicate with your audience across various mediums. Push notifications, SMS and emails - set up within minutes!";
|
const description =
|
||||||
|
'Appwrite Messaging allows you to communicate with your audience across various mediums. Push notifications, SMS and emails - set up within minutes!';
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
|
|
||||||
const codeTopic = [
|
const codeTopic = [
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
import Optimized from './(components)/Optimized.svelte';
|
import Optimized from './(components)/Optimized.svelte';
|
||||||
|
|
||||||
const title = 'Storage' + TITLE_SUFFIX;
|
const title = 'Storage' + TITLE_SUFFIX;
|
||||||
const description = "Get to know Appwrite Storage - our robust infrastructure allows you to store, optimize and encrypt all of your project files in one place.";
|
const description =
|
||||||
|
'Get to know Appwrite Storage - our robust infrastructure allows you to store, optimize and encrypt all of your project files in one place.';
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -20,9 +20,11 @@
|
|||||||
import { PUBLIC_GROWTH_ENDPOINT } from '$env/static/public';
|
import { PUBLIC_GROWTH_ENDPOINT } from '$env/static/public';
|
||||||
import Faq from './faq.svelte';
|
import Faq from './faq.svelte';
|
||||||
import { getReferrerAndUtmSource } from '$lib/utils/utm';
|
import { getReferrerAndUtmSource } from '$lib/utils/utm';
|
||||||
|
import CommunitySupportChat from '$lib/components/CommunitySupportChat.svelte';
|
||||||
|
|
||||||
const title = 'Startups' + TITLE_SUFFIX;
|
const title = 'Startups' + TITLE_SUFFIX;
|
||||||
const description = "Get $20,000 in cloud credits to fulfill all your startup's backend needs. Apply for Appwrite's Startups Program today.";
|
const description =
|
||||||
|
"Get $20,000 in cloud credits to fulfill all your startup's backend needs. Apply for Appwrite's Startups Program today.";
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
|
|
||||||
let personName: string;
|
let personName: string;
|
||||||
@@ -481,145 +483,7 @@
|
|||||||
<div
|
<div
|
||||||
class="web-chat web-u-max-width-580 web-u-margin-block-start-40-mobile"
|
class="web-chat web-u-max-width-580 web-u-margin-block-start-40-mobile"
|
||||||
>
|
>
|
||||||
<ul class="web-chat-list">
|
<CommunitySupportChat />
|
||||||
<li class="web-chat-item is-user-a">
|
|
||||||
<div class="web-chat-message">
|
|
||||||
<div class="web-user-box">
|
|
||||||
<img
|
|
||||||
class="web-user-box-image"
|
|
||||||
src="/images/community/avatars/walter.avif"
|
|
||||||
height="40"
|
|
||||||
width="40"
|
|
||||||
alt="Avatar of Walter"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
class="web-user-box-name flex gap-2"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="text-sub-body font-medium"
|
|
||||||
>Walter O'Brien</span
|
|
||||||
>
|
|
||||||
<time
|
|
||||||
class="text-caption web-u-color-text-tertiary"
|
|
||||||
>8:32 AM</time
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="web-user-box-content text-caption text-primary"
|
|
||||||
>
|
|
||||||
Hello devs! I am getting a CORS
|
|
||||||
error when sending a request to the
|
|
||||||
backend. Can you help me?
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="web-chat-item is-user-b">
|
|
||||||
<div class="web-chat-message">
|
|
||||||
<div class="web-user-box">
|
|
||||||
<img
|
|
||||||
class="web-user-box-image"
|
|
||||||
src="/images/avatars/steven.avif"
|
|
||||||
width="48"
|
|
||||||
height="48"
|
|
||||||
alt="Avatar of Steven"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
class="web-user-box-name flex gap-2"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="text-sub-body font-medium"
|
|
||||||
>Steven</span
|
|
||||||
>
|
|
||||||
<time
|
|
||||||
class="text-caption web-u-color-text-tertiary"
|
|
||||||
>8:38 AM</time
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="web-user-box-content text-caption text-primary"
|
|
||||||
>
|
|
||||||
Hey Louis! Is this the message you
|
|
||||||
get
|
|
||||||
<a
|
|
||||||
class="web-link is-pink"
|
|
||||||
href="/blog/post/cors-error"
|
|
||||||
target="_blank"
|
|
||||||
>"Access blocked by CORS policy"</a
|
|
||||||
>?
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="web-chat-item is-user-a">
|
|
||||||
<div class="web-chat-message">
|
|
||||||
<div class="web-user-box">
|
|
||||||
<img
|
|
||||||
class="web-user-box-image"
|
|
||||||
src="/images/community/avatars/walter.avif"
|
|
||||||
height="40"
|
|
||||||
width="40"
|
|
||||||
alt="Avatar of Walter"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
class="web-user-box-name flex gap-2"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="text-sub-body font-medium"
|
|
||||||
>Walter O'Brien</span
|
|
||||||
>
|
|
||||||
<time
|
|
||||||
class="text-caption web-u-color-text-tertiary"
|
|
||||||
>9:05 AM</time
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="web-user-box-content text-caption text-primary"
|
|
||||||
>
|
|
||||||
Yes!
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="web-chat-item is-user-b">
|
|
||||||
<div class="web-chat-message">
|
|
||||||
<div class="web-user-box">
|
|
||||||
<img
|
|
||||||
class="web-user-box-image"
|
|
||||||
src="/images/avatars/steven.avif"
|
|
||||||
width="48"
|
|
||||||
height="48"
|
|
||||||
alt="Avatar of Steven"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
class="web-user-box-name flex gap-2"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="text-sub-body font-medium"
|
|
||||||
>Steven</span
|
|
||||||
>
|
|
||||||
<time
|
|
||||||
class="text-caption web-u-color-text-tertiary"
|
|
||||||
>9:08 AM</time
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="web-user-box-content text-caption text-primary"
|
|
||||||
>
|
|
||||||
You should be able to debug this
|
|
||||||
with a few steps. Just follow this
|
|
||||||
blog:
|
|
||||||
<a
|
|
||||||
class="web-link is-pink"
|
|
||||||
href="/blog/post/cors-error"
|
|
||||||
target="_blank"
|
|
||||||
>https://appwrite.io/blog/post/cors-error</a
|
|
||||||
>. Let me know if this helps 🙂
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="web-mx-auto-mobile ml-auto flex flex-col gap-4">
|
<div class="web-mx-auto-mobile ml-auto flex flex-col gap-4">
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ title: Terms and Conditions
|
|||||||
description: Review our Terms of Service to understand the rules and guidelines for using our open-source backend-as-a-service platform.
|
description: Review our Terms of Service to understand the rules and guidelines for using our open-source backend-as-a-service platform.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
These Terms and Conditions ("Terms," "Terms and Conditions") govern your relationship with [Appwrite](https://appwrite.io) website (the "Service") operated by Appwrite ("Us," "We," or "Our").
|
||||||
These Terms and Conditions ("Terms," "Terms and Conditions") govern your relationship with [Appwrite (https://appwrite.io)](https://appwrite.io) website (the "Service") operated by Appwrite ("Us," "We," or "Our").
|
|
||||||
|
|
||||||
Please read these Terms and Conditions carefully before using the Service.
|
Please read these Terms and Conditions carefully before using the Service.
|
||||||
|
|
||||||
@@ -13,36 +12,28 @@ Your access to and use of the Service is conditioned on your acceptance of and c
|
|||||||
|
|
||||||
By accessing or using the Service, you agree to be bound by these Terms. If you disagree with any part of the terms, then you may not access the Service.
|
By accessing or using the Service, you agree to be bound by these Terms. If you disagree with any part of the terms, then you may not access the Service.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Subscriptions
|
# Subscriptions
|
||||||
|
|
||||||
Some parts of the Service are billed on a subscription basis ("Subscriptions"). You will be billed in advance on a recurring and periodic basis ("Billing Cycle"). Billing cycles are set on a monthly basis.
|
Some parts of the Service are billed on a subscription basis ("Subscriptions"). You will be billed in advance on a recurring and periodic basis ("Billing Cycle"). Billing cycles are set on a monthly basis.
|
||||||
|
|
||||||
At the end of each Billing Cycle, your Subscription will automatically renew under the exact same conditions unless you cancel it or Appwrite cancels it. You may cancel your Subscription renewal either through your online account management page or by contacting Appwrite customer support team.
|
At the end of each Billing Cycle, your Subscription will automatically renew under the exact same conditions unless you cancel it or Appwrite cancels it. You may cancel your Subscription renewal either through your online account management page or by contacting the Appwrite customer support team.
|
||||||
|
|
||||||
A valid payment method, including credit card or PayPal, is required to process the payment for your Subscription. You shall provide Appwrite with accurate and complete billing information, including full name, address, state, zip code, telephone number, and valid payment method information. By submitting such payment information, you automatically authorize Appwrite to charge all Subscription fees incurred through your account to any such payment instruments.
|
A valid payment method, including credit card or PayPal, is required to process the payment for your Subscription. You shall provide Appwrite with accurate and complete billing information, including full name, address, state, zip code, telephone number, and valid payment method information. By submitting such payment information, you automatically authorize Appwrite to charge all Subscription fees incurred through your account to any such payment instruments.
|
||||||
|
|
||||||
Should automatic billing fail to occur for any reason, Appwrite will issue an electronic invoice indicating that you must proceed manually, within a certain deadline date, with the full payment corresponding to the billing period as indicated on the invoice.
|
Should automatic billing fail to occur for any reason, Appwrite will issue an electronic invoice indicating that you must proceed manually, within a certain deadline date, with the full payment corresponding to the billing period as indicated on the invoice.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Fee Changes
|
# Fee Changes
|
||||||
|
|
||||||
Appwrite, in its sole discretion and at any time, may modify the Subscription fees for the Subscriptions. Any Subscription fee change will become effective at the end of the then-current Billing Cycle.
|
Appwrite, in its sole discretion and at any time, may modify the Subscription fees for the Subscriptions. Any Subscription fee change will become effective at the end of the then-current Billing Cycle.
|
||||||
|
|
||||||
Appwrite will provide you with a reasonable prior notice of any change in Subscription fees to give you an opportunity to terminate your Subscription before such change becomes effective.
|
Appwrite will provide you with reasonable prior notice of any change in Subscription fees to give you an opportunity to terminate your Subscription before such change becomes effective.
|
||||||
|
|
||||||
Your continued use of the Service after the Subscription fee change comes into effect constitutes your agreement to pay the modified Subscription fee amount.
|
Your continued use of the Service after the Subscription fee change comes into effect constitutes your agreement to pay the modified Subscription fee amount.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Refunds
|
# Refunds
|
||||||
|
|
||||||
Certain refund requests for Subscriptions may be considered by Appwrite on a case-by-case basis and granted in the sole discretion of Appwrite.
|
Certain refund requests for Subscriptions may be considered by Appwrite on a case-by-case basis and granted in the sole discretion of Appwrite.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Content
|
# Content
|
||||||
|
|
||||||
Our Service allows you to post, link, store, share, and otherwise make available certain information, text, graphics, videos, or other material ("Content"). You are responsible for the Content that you post to the Service, including its legality, reliability, and appropriateness.
|
Our Service allows you to post, link, store, share, and otherwise make available certain information, text, graphics, videos, or other material ("Content"). You are responsible for the Content that you post to the Service, including its legality, reliability, and appropriateness.
|
||||||
@@ -51,10 +42,9 @@ By posting Content to the Service, you grant us the right and license to use, mo
|
|||||||
|
|
||||||
You represent and warrant that: (i) the Content is yours (you own it) or you have the right to use it and grant us the rights and license as provided in these Terms, and (ii) the posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights, or any other rights of any person.
|
You represent and warrant that: (i) the Content is yours (you own it) or you have the right to use it and grant us the rights and license as provided in these Terms, and (ii) the posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights, or any other rights of any person.
|
||||||
|
|
||||||
|
|
||||||
# Accounts
|
# Accounts
|
||||||
|
|
||||||
When you create an account with us, you must provide us information that is accurate, complete, and current at all times. Failure to do so constitutes a breach of the Terms, which may result in immediate termination of your account on our Service.
|
When you create an account with us, you must provide information that is accurate, complete, and current at all times. Failure to do so constitutes a breach of the Terms, which may result in immediate termination of your account on our Service.
|
||||||
|
|
||||||
You are responsible for safeguarding the password that you use to access the Service and for any activities or actions under your password, whether your password is with our Service or a third-party service.
|
You are responsible for safeguarding the password that you use to access the Service and for any activities or actions under your password, whether your password is with our Service or a third-party service.
|
||||||
|
|
||||||
@@ -64,29 +54,25 @@ You agree not to disclose your password to any third party. You must notify us i
|
|||||||
|
|
||||||
The Service and its original content (excluding Content provided by users), features, and functionality are and will remain the exclusive property of Appwrite and its licensors. The Service is protected by copyright, trademark, and other laws of both Israel and foreign countries. Our trademarks and trade dress may not be used in connection with any product or service without the prior written consent of Appwrite.
|
The Service and its original content (excluding Content provided by users), features, and functionality are and will remain the exclusive property of Appwrite and its licensors. The Service is protected by copyright, trademark, and other laws of both Israel and foreign countries. Our trademarks and trade dress may not be used in connection with any product or service without the prior written consent of Appwrite.
|
||||||
|
|
||||||
Notwithstanding any other provision of these Terms, to the maximum extent permitted by law, we may collect, generate, process, use and/or publish Anonymous Information (defined below) relating to your, your users’ use of the Service, and/or disclose it, in order to provide, improve and publicize the Service and our products and services, in order to track general industry trends, develop and publish white papers, reports and summaries, and for other legitimate business purposes, all the foregoing without restriction or limitation of any kind. “Anonymous Information” means information that does not enable the identification of an individual, such as aggregated and analytics information. For clarity, Anonymous Information will not include any personally identifiable information, and Appwrite shall own all Anonymous Information collected or obtained by Appwrite.
|
Notwithstanding any other provision of these Terms, to the maximum extent permitted by law, we may collect, generate, process, use, and/or publish Anonymous Information (defined below) relating to your and your users’ use of the Service, and/or disclose it, in order to provide, improve, and publicize the Service and our products and services, track general industry trends, develop and publish white papers, reports, and summaries, and for other legitimate business purposes, all without restriction or limitation of any kind. "Anonymous Information" means information that does not enable the identification of an individual, such as aggregated and analytics information. For clarity, Anonymous Information will not include any personally identifiable information, and Appwrite shall own all Anonymous Information collected or obtained by Appwrite.
|
||||||
|
|
||||||
# Prohibited Use of the SMS Messages Service
|
{% partial file="prohibited-activities.md" /%}
|
||||||
|
|
||||||
You agree not to use the Service for the sending of unsolicited or spam SMS messages. This includes but is not limited to the prohibition of
|
## Prohibited Use of the SMS Messages Service
|
||||||
- using the Service in connection with any content, product, or service the recipient has not explicitly requested.
|
|
||||||
- sending SMS messages through the Service unless you have obtained prior express consent from the recipients, as required by applicable law.
|
|
||||||
|
|
||||||
Failure to adhere to these prohibitions and/or any applicable law relating to the use of such SMS Service can result in immediate termination of your account and further legal action. You shall comply with any and all applicable laws and regulations.
|
You agree not to use the Service for the sending of unsolicited or spam SMS messages. This includes but is not limited to the prohibition of:
|
||||||
|
|
||||||
|
- Using the Service in connection with any content, product, or service the recipient has not explicitly requested.
|
||||||
|
|
||||||
|
- Sending SMS messages through the Service unless you have obtained prior express consent from the recipients, as required by applicable law.
|
||||||
|
|
||||||
|
Failure to adhere to these prohibitions and any applicable laws relating to the use of the SMS Service can result in immediate termination of your account and further legal action. You shall comply with all applicable laws and regulations.
|
||||||
|
|
||||||
Furthermore, you agree to indemnify and hold harmless Appwrite, its affiliates, directors, employees, and agents against any claims, proceedings, damages, liabilities, fines, or costs arising from your misuse of the SMS services, which includes, but is not limited to the sending of unsolicited SMS messages, your failure to secure the necessary consents from recipients or not adhering to applicable laws and regulations in relevant jurisdictions.
|
Furthermore, you agree to indemnify and hold harmless Appwrite, its affiliates, directors, employees, and agents against any claims, proceedings, damages, liabilities, fines, or costs arising from your misuse of the SMS services, which includes, but is not limited to the sending of unsolicited SMS messages, your failure to secure the necessary consents from recipients or not adhering to applicable laws and regulations in relevant jurisdictions.
|
||||||
|
|
||||||
# Privacy
|
# Reporting Abuse
|
||||||
|
|
||||||
Appwrite’s privacy policy is available at [https://appwrite.io/privacy](https://appwrite.io/privacy).
|
If you become aware of any misuse of the Service, including any prohibited conduct or content, please report it immediately to us at [abuse@appwrite.io](mailto:abuse@appwrite.io).
|
||||||
|
|
||||||
# Links To Other Web Sites
|
|
||||||
|
|
||||||
Our Service may contain links to third-party web sites or services that are not owned or controlled by Appwrite.
|
|
||||||
|
|
||||||
Appwrite has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third-party web sites or services. You further acknowledge and agree that Appwrite shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods, or services available on or through any such web sites or services.
|
|
||||||
|
|
||||||
We strongly advise you to read the terms and conditions and privacy policies of any third-party web sites or services that you visit.
|
|
||||||
|
|
||||||
# Termination
|
# Termination
|
||||||
|
|
||||||
@@ -94,20 +80,25 @@ We may terminate or suspend your account immediately, without prior notice or li
|
|||||||
|
|
||||||
Upon termination, your right to use the Service will immediately cease. If you wish to terminate your account, you may simply discontinue using the Service.
|
Upon termination, your right to use the Service will immediately cease. If you wish to terminate your account, you may simply discontinue using the Service.
|
||||||
|
|
||||||
# Limitation Of Liability
|
# Limitation of Liability
|
||||||
|
|
||||||
In no event shall Appwrite, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from (I) your access to or use of or inability to access or use the Service; (II) any conduct or content of any third party on the Service; (III) any content obtained from the Service; and (IV) unauthorized access, use, or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.
|
In no event shall Appwrite, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from (I) your access to or use of or inability to access or use the Service; (II) any conduct or content of any third party on the Service; (III) any content obtained from the Service; and (IV) unauthorized access, use, or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.
|
||||||
|
|
||||||
|
Whether based on warranty, contract, tort (including negligence), or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.
|
||||||
|
|
||||||
# Disclaimer
|
# Disclaimer
|
||||||
|
|
||||||
Your use of the Service is at your sole risk. The Service is provided on an "AS IS" and "AS AVAILABLE" basis. The Service is provided without warranties of any kind, whether express or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, non-infringement or course of performance.
|
Your use of the Service is at your sole risk. The Service is provided on an "AS IS" and "AS AVAILABLE" basis. The Service is provided without warranties of any kind, whether express or implied, including but not limited to, implied warranties of merchantability, fitness for a particular purpose, non-infringement, or course of performance.
|
||||||
|
|
||||||
Appwrite its subsidiaries, affiliates, and its licensors do not warrant that:
|
Appwrite, its subsidiaries, affiliates, and its licensors do not warrant that:
|
||||||
- the Service will function uninterrupted, secure or available at any particular time or location;
|
|
||||||
- any errors or defects will be corrected;
|
- The Service will function uninterrupted, secure, or available at any particular time or location.
|
||||||
- the Service is free of viruses or other harmful components; or
|
|
||||||
- the results of using the Service will meet your requirements.
|
- Any errors or defects will be corrected.
|
||||||
|
|
||||||
|
- The Service is free of viruses or other harmful components.
|
||||||
|
|
||||||
|
- The results of using the Service will meet your requirements.
|
||||||
|
|
||||||
# Governing Law
|
# Governing Law
|
||||||
|
|
||||||
@@ -121,6 +112,21 @@ We reserve the right, at our sole discretion, to modify or replace these Terms a
|
|||||||
|
|
||||||
By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service.
|
By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service.
|
||||||
|
|
||||||
|
# Privacy
|
||||||
|
|
||||||
|
Appwrite’s privacy policy is available at [https://appwrite.io/privacy](https://appwrite.io/privacy).
|
||||||
|
|
||||||
|
# Links to Other Websites
|
||||||
|
|
||||||
|
Our Service may contain links to third-party websites or services that are not owned or controlled by Appwrite.
|
||||||
|
|
||||||
|
Appwrite has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third-party websites or services. You further acknowledge and agree that Appwrite shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods, or services available on or through any such websites or services.
|
||||||
|
|
||||||
|
We strongly advise you to read the terms and conditions and privacy policies of any third-party websites or services that you visit.
|
||||||
|
|
||||||
# Contact Us
|
# Contact Us
|
||||||
|
|
||||||
If you have any questions about these Terms, please [contact us](/contact-us).
|
If you have any questions about these Terms, please [contact us](/contact-us).
|
||||||
|
|
||||||
|
To report abuse or violations, please contact us at [abuse@appwrite.io](mailto:abuse@appwrite.io).
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
import Input from '$lib/components/ui/Input.svelte';
|
import Input from '$lib/components/ui/Input.svelte';
|
||||||
|
|
||||||
const title = 'Threads' + TITLE_SUFFIX;
|
const title = 'Threads' + TITLE_SUFFIX;
|
||||||
const description = "Appwrite's Threads page showcases our community interactions on Discord. Join the conversation, ask questions, or assist other members with their issues.";
|
const description =
|
||||||
|
"Appwrite's Threads page showcases our community interactions on Discord. Join the conversation, ask questions, or assist other members with their issues.";
|
||||||
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
@use '../abstract' as *;
|
@use '../abstract' as *;
|
||||||
|
|
||||||
.#{$p}-select {
|
.#{$p}-select {
|
||||||
--p-select-min-width: #{pxToRem(130)};
|
--p-select-min-width: #{pxToRem(145)};
|
||||||
|
|
||||||
all:unset; display:flex; align-items:center; position:relative; line-height:1; user-select:none; cursor:pointer;
|
all:unset; display:flex; align-items:center; position:relative; line-height:1; user-select:none; cursor:pointer;
|
||||||
color:hsl(var(--web-color-primary)); font-size:pxToRem(14); min-width: var(--p-select-min-width); height: pxToRem(30);
|
color:hsl(var(--web-color-primary)); font-size:pxToRem(14); min-width: var(--p-select-min-width); height: pxToRem(30);
|
||||||
|
|||||||
@@ -21,6 +21,22 @@
|
|||||||
@media #{$break1} {
|
@media #{$break1} {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* reversed arrow on replies */
|
||||||
|
&.reply {
|
||||||
|
&::before {
|
||||||
|
rotate: 180deg;
|
||||||
|
inset-block-end: auto;
|
||||||
|
inset-block-start: pxToRem(-16);
|
||||||
|
background-color: var(--border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
rotate: 180deg;
|
||||||
|
inset-block-start: pxToRem(-14.5);
|
||||||
|
inset-block-end: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* user 'b' messages */
|
/* user 'b' messages */
|
||||||
|
|||||||
Reference in New Issue
Block a user