Merge branch 'main' of github.com:appwrite/console into feat-credit-flow

This commit is contained in:
Arman
2024-05-24 18:09:38 +02:00
12 changed files with 310 additions and 24 deletions
+9 -9
View File
@@ -7,8 +7,8 @@
"name": "@appwrite/console",
"dependencies": {
"@appwrite.io/console": "^0.6.2",
"@appwrite.io/pink": "0.20.0",
"@appwrite.io/pink-icons": "0.20.0",
"@appwrite.io/pink": "0.23.0",
"@appwrite.io/pink-icons": "0.23.0",
"@popperjs/core": "^2.11.8",
"@sentry/svelte": "^7.66.0",
"@sentry/tracing": "^7.66.0",
@@ -162,19 +162,19 @@
"integrity": "sha512-3qYknuFwhvTN2GnPB8G1w5DgxfVorGtfj4uuEaXbTmMUmjA8fHaW5VkJriuUxCi6/TpxDxqV/hhEkdoXL+5H4w=="
},
"node_modules/@appwrite.io/pink": {
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.20.0.tgz",
"integrity": "sha512-17anov7EL+Ic/4fNtCYgG3wA+hoeBXn/j+ZjkfZFfX3g66M8XzVTaQfsAH+EMZ3YjvWuKlHtn+bY4BkGwvMIzQ==",
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.23.0.tgz",
"integrity": "sha512-AGV0o0pjcKEHFc77TBDUEVGdlxwxB66n9XyPWn/meN9amVMPCEWuYcjhI4I5H6mdmPgW1YaFmaUZ2bIsXtyWBA==",
"dependencies": {
"@appwrite.io/pink-icons": "0.20.0",
"@appwrite.io/pink-icons": "0.23.0",
"normalize.css": "^8.0.1",
"the-new-css-reset": "^1.11.2"
}
},
"node_modules/@appwrite.io/pink-icons": {
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.20.0.tgz",
"integrity": "sha512-nfDy7qE6FQWVO1eC+3nwGjXkj/Zm2V50rhvyj0/HKq8RyWNWFGX31BZoMSim01vl/N5irBilpkaER6mLPp7oEw=="
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.23.0.tgz",
"integrity": "sha512-hIvAWf+LxedFePGEckVzM3TO5qkhNn/biBx25itVTWWEF5vI8fBnGfG6Vkv73Yy4PPAScryOc10uJxkWGEWCqw=="
},
"node_modules/@babel/code-frame": {
"version": "7.24.2",
+2 -2
View File
@@ -20,8 +20,8 @@
},
"dependencies": {
"@appwrite.io/console": "^0.6.2",
"@appwrite.io/pink": "0.20.0",
"@appwrite.io/pink-icons": "0.20.0",
"@appwrite.io/pink": "0.23.0",
"@appwrite.io/pink-icons": "0.23.0",
"@popperjs/core": "^2.11.8",
"@sentry/svelte": "^7.66.0",
"@sentry/tracing": "^7.66.0",
@@ -56,7 +56,7 @@
interactiveOutput
let:option={o}>
<svelte:fragment slot="output" let:option={o}>
<output class="input-text">
<output class="input-text u-cursor-pointer">
<span class="u-flex u-gap-16 u-flex-vertical">
<span class="u-flex u-gap-16">
<span class="u-flex u-cross-center u-gap-8" style="padding-inline:0.25rem">
+2 -2
View File
@@ -90,8 +90,8 @@
</a>
{#if isCloud}
<div
class="tag eyebrow-heading-3"
style="--p-tag-height: 1.785rem; --p-tag-content-height: 1.15rem; padding-block: 0.25rem;">
class="tag eyebrow-heading-3 u-padding-block-4"
style="--p-tag-height: 1.785rem; --p-tag-content-height: 1.2rem;">
<span class="text u-x-small" style="font-weight: 500">Beta</span>
</div>
{/if}
+6 -1
View File
@@ -4,6 +4,7 @@
import { createEventDispatcher } from 'svelte';
export let show = false;
export let href: string = null;
const dispatch = createEventDispatcher();
function handleSubmit() {
@@ -25,6 +26,10 @@
</p>
<svelte:fragment slot="footer">
<Button text on:click={() => (show = false)}>Cancel</Button>
<Button secondary submit>Exit</Button>
{#if href}
<Button secondary {href}>Exit</Button>
{:else}
<Button secondary submit>Exit</Button>
{/if}
</svelte:fragment>
</Modal>
+33 -1
View File
@@ -1,13 +1,32 @@
<script lang="ts">
import { trackEvent } from '$lib/actions/analytics';
import { Heading } from '$lib/components';
import { Button } from '$lib/elements/forms';
import WizardExitModal from './wizardExitModal.svelte';
let show = false;
export let showExitModal = false;
export let href: string;
</script>
<header class="wizard-secondary-header">
<div class="u-flex u-main-space-between u-gap-32 u-cross-center">
<Heading size={5} tag="h1"><slot /></Heading>
<Button text round class="u-margin-block-start-8" ariaLabel="close modal" {href}>
<Button
text
round
class="u-margin-block-start-8"
ariaLabel="close modal"
href={showExitModal ? null : href}
on:click={() => {
if (showExitModal) {
show = true;
} else {
trackEvent('wizard_exit', {
from: 'button'
});
}
}}>
<span class="icon-x u-font-size-20" aria-hidden="true"></span>
</Button>
</div>
@@ -15,3 +34,16 @@
<p class="body-text-2"><slot name="description" /></p>
{/if}
</header>
{#if show}
<WizardExitModal
{href}
bind:show
on:exit={() => {
trackEvent('wizard_exit', {
from: 'prompt'
});
}}>
<slot name="exit">this process</slot>
</WizardExitModal>
{/if}
+238
View File
@@ -77,6 +77,244 @@ export const marketplace: MarketplaceTemplate[] = [
}
]
},
{
icon: 'icon-upstash',
id: 'query-upstash-vector',
name: 'Query Upstash Vector',
tagline: 'Vector database that stores text embeddings and context retrieval for LLMs',
permissions: ['any'],
events: [],
cron: '',
timeout: 15,
usecases: ['Databases'],
runtimes: [
...getRuntimes(
TemplateRuntimes.NODE,
'npm install',
'src/main.js',
'node/query-upstash-vector'
)
],
instructions: `For documentation and instructions check out <a target="_blank" rel="noopener noreferrer" class="link" href="https://github.com/appwrite/templates/tree/main/node/query-upstash-vector">file</a>.`,
vcsProvider: 'github',
providerRepositoryId: 'templates',
providerOwner: 'appwrite',
providerBranch: 'main',
variables: [
{
name: 'UPSTASH_URL',
description: `The endpoint to connect to your Upstash Vector database. <a class="u-bold" target="_blank" href="https://upstash.com/docs/vector/overall/getstarted">Learn more</a>.`,
value: '',
placeholder: 'https://resolved-mallard-84564-eu1-vector.upstash.io',
required: true,
type: 'text'
},
{
name: 'UPSTASH_TOKEN',
description: `Authentication token to access your Upstash Vector database. <a class="u-bold" target="_blank" href="https://upstash.com/docs/vector/overall/getstarted">Learn more</a>.`,
value: '',
placeholder:
'oe4wNTbwHVLcDNa6oceZfhBEABsCNYh43ii6Xdq4bKBH7mq7qJkUmc4cs3ABbYyuVKWZTxVQjiNjYgydn2dkhABNes4NAuDpj7qxUAmZYqGJT78',
required: true,
type: 'password'
}
]
},
{
icon: 'icon-redis',
id: 'query-redis-labs',
name: 'Query Redis Labs',
tagline: 'Key-value database with advanced caching capabilities.',
permissions: ['any'],
events: [],
cron: '',
timeout: 15,
usecases: ['Databases'],
runtimes: [
...getRuntimes(
TemplateRuntimes.NODE,
'npm install',
'src/main.js',
'node/query-redis-labs'
)
],
instructions: `For documentation and instructions check out <a target="_blank" rel="noopener noreferrer" class="link" href="https://github.com/appwrite/templates/tree/main/node/query-redis-labs">file</a>.`,
vcsProvider: 'github',
providerRepositoryId: 'templates',
providerOwner: 'appwrite',
providerBranch: 'main',
variables: [
{
name: 'REDIS_HOST',
description: `The endpoint to connect to your Redis database. <a class="u-bold" target="_blank" href="https://redis.io/docs/latest/operate/rc/rc-quickstart/">Learn more</a>.`,
value: '',
placeholder: 'redis-13258.c35.eu-central-1-1.ec2.redns.redis-cloud.com',
required: true,
type: 'text'
},
{
name: 'REDIS_PASSWORD',
description: `Authentication password to access your Redis database. <a class="u-bold" target="_blank" href="https://redis.io/docs/latest/operate/rc/rc-quickstart/">Learn more</a>.`,
value: '',
placeholder: 'efNNehiACfcZiwsTAjcK6xiwPyu6Dpdq',
required: true,
type: 'password'
}
]
},
{
icon: 'icon-neo4j',
id: 'query-neo4j-auradb',
name: 'Query Neo4j AuraDB',
tagline: 'Graph database with focus on relations between data.',
permissions: ['any'],
events: [],
cron: '',
timeout: 15,
usecases: ['Databases'],
runtimes: [
...getRuntimes(
TemplateRuntimes.NODE,
'npm install',
'src/main.js',
'node/query-neo4j-auradb'
)
],
instructions: `For documentation and instructions check out <a target="_blank" rel="noopener noreferrer" class="link" href="https://github.com/appwrite/templates/tree/main/node/query-neo4j-auradb">file</a>.`,
vcsProvider: 'github',
providerRepositoryId: 'templates',
providerOwner: 'appwrite',
providerBranch: 'main',
variables: [
{
name: 'NEO4J_URI',
description: `The endpoint to connect to your Neo4j database. <a class="u-bold" target="_blank" href="https://neo4j.com/docs/aura/auradb/getting-started/connect-database/">Learn more</a>.`,
value: '',
placeholder: 'neo4j+s://4tg4mddo.databases.neo4j.io',
required: true,
type: 'text'
},
{
name: 'NEO4J_USER',
description: `Authentication user to access your Neo4j database. <a class="u-bold" target="_blank" href="https://neo4j.com/docs/aura/auradb/getting-started/connect-database/">Learn more</a>.`,
value: '',
placeholder: 'neo4j',
required: true,
type: 'text'
},
{
name: 'NEO4J_PASSWORD',
description: `Authentication password to access your Neo4j database. <a class="u-bold" target="_blank" href="https://neo4j.com/docs/aura/auradb/getting-started/connect-database/">Learn more</a>.`,
value: '',
placeholder: 'mCUc4PbVUQN-_NkTLJLisb6ccnwzQKKhrkF77YMctzx',
required: true,
type: 'password'
}
]
},
{
icon: 'icon-mongodb',
id: 'query-mongo-atlas',
name: 'Query MongoDB Atlas',
tagline:
'Realtime NoSQL document database with geospecial, graph, search, and vector suport.',
permissions: ['any'],
events: [],
cron: '',
timeout: 15,
usecases: ['Databases'],
runtimes: [
...getRuntimes(
TemplateRuntimes.NODE,
'npm install',
'src/main.js',
'node/query-mongo-atlas'
)
],
instructions: `For documentation and instructions check out <a target="_blank" rel="noopener noreferrer" class="link" href="https://github.com/appwrite/templates/tree/main/node/query-mongo-atlas">file</a>.`,
vcsProvider: 'github',
providerRepositoryId: 'templates',
providerOwner: 'appwrite',
providerBranch: 'main',
variables: [
{
name: 'MONGO_URI',
description: `The endpoint to connect to your Mongo database. <a class="u-bold" target="_blank" href="https://www.mongodb.com/docs/atlas/getting-started/">Learn more</a>.`,
value: '',
placeholder:
'mongodb+srv://appwrite:Yx42hafg7Q4fgkxe@cluster0.7mslfog.mongodb.net/?retryWrites=true&w=majority&appName=Appwrite',
required: true,
type: 'password'
}
]
},
{
icon: 'icon-neon',
id: 'query-neon-postgres',
name: 'Query Neon Postgres',
tagline:
'Reliable SQL database with replication, point-in-time recovery, and pgvector support.',
permissions: ['any'],
events: [],
cron: '',
timeout: 15,
usecases: ['Databases'],
runtimes: [
...getRuntimes(
TemplateRuntimes.NODE,
'npm install',
'src/main.js',
'node/query-neon-postgres'
)
],
instructions: `For documentation and instructions check out <a target="_blank" rel="noopener noreferrer" class="link" href="https://github.com/appwrite/templates/tree/main/node/query-neon-postgres">file</a>.`,
vcsProvider: 'github',
providerRepositoryId: 'templates',
providerOwner: 'appwrite',
providerBranch: 'main',
variables: [
{
name: 'PGHOST',
description: `The endpoint to connect to your Postgres database. <a class="u-bold" target="_blank" href="https://neon.tech/docs/get-started-with-neon/signing-up/">Learn more</a>.`,
value: '',
placeholder: 'ep-still-sea-a792sh84.eu-central-1.aws.neon.tech',
required: true,
type: 'text'
},
{
name: 'PGDATABASE',
description: `Name of our Postgres database. <a class="u-bold" target="_blank" href="https://neon.tech/docs/get-started-with-neon/signing-up/">Learn more</a>.`,
value: '',
placeholder: 'main',
required: true,
type: 'text'
},
{
name: 'PGUSER',
description: `Name of our Postgres user for authentication. <a class="u-bold" target="_blank" href="https://neon.tech/docs/get-started-with-neon/signing-up/">Learn more</a>.`,
value: '',
placeholder: 'main_owner',
required: true,
type: 'text'
},
{
name: 'PGPASSWORD',
description: `Password of our Postgres user for authentication. <a class="u-bold" target="_blank" href="https://neon.tech/docs/get-started-with-neon/signing-up/">Learn more</a>.`,
value: '',
placeholder: 'iQCfaUaaWB3B',
required: true,
type: 'password'
},
{
name: 'ENDPOINT_ID',
description: `Endpoint ID provided for your Postgres database. <a class="u-bold" target="_blank" href="https://neon.tech/docs/get-started-with-neon/signing-up/">Learn more</a>.`,
value: '',
placeholder: 'ep-still-sea-a792sh84',
required: true,
type: 'text'
}
]
},
{
icon: 'icon-open-ai',
id: 'prompt-chatgpt',
+11 -4
View File
@@ -13,6 +13,7 @@
import MfaRecoveryCodes from './mfaRecoveryCodes.svelte';
import type { Models } from '@appwrite.io/console';
import MfaRegenerateCodes from './mfaRegenerateCodes.svelte';
import { Pill } from '$lib/elements';
let showSetup: boolean = false;
let showDelete: boolean = false;
@@ -144,8 +145,11 @@
<div class="avatar is-size-x-small">
<span class="icon-mail" aria-hidden="true" />
</div>
<div class="u-flex-vertical u-gap-4 body-text-2">
<span class="u-bold">Email verification</span>
<div class="u-flex-vertical u-gap-4">
<div class="u-flex u-gap-4 u-cross-center">
<span class="body-text-2 u-bold">Email</span>
<Pill>verified</Pill>
</div>
<span>One-time codes will be sent to: {$user.email}</span>
</div>
</div>
@@ -160,8 +164,11 @@
<div class="avatar is-size-x-small">
<span class="icon-send" aria-hidden="true" />
</div>
<div class="u-flex-vertical u-gap-4 body-text-2">
<span class="u-bold">SMS verification</span>
<div class="u-flex-vertical u-gap-4">
<div class="u-flex u-gap-4 u-cross-center">
<span class="body-text-2 u-bold">SMS</span>
<Pill>verified</Pill>
</div>
<span>One-time codes will be sent to: {$user.phone}</span>
</div>
</div>
@@ -186,7 +186,9 @@
</svelte:head>
<WizardSecondaryContainer>
<WizardSecondaryHeader href={previousPage}>Create organization</WizardSecondaryHeader>
<WizardSecondaryHeader href={previousPage} showExitModal>
Create organization
</WizardSecondaryHeader>
<WizardSecondaryContent>
<Form bind:this={formComponent} onSubmit={create} bind:isSubmitting>
<FormList>
@@ -147,7 +147,9 @@
}}></span>
</span>
<div class="body-text-2 u-margin-inline-start-auto">
{formatCurrency(currentInvoice?.amount ?? 0)}
{$organization?.billingPlan === BillingPlan.STARTER
? formatCurrency(0)
: formatCurrency(currentInvoice?.amount ?? 0)}
</div>
</CollapsibleItem>
</Collapsible>
@@ -253,7 +253,7 @@
</svelte:head>
<WizardSecondaryContainer>
<WizardSecondaryHeader href={previousPage}>Change plan</WizardSecondaryHeader>
<WizardSecondaryHeader href={previousPage} showExitModal>Change plan</WizardSecondaryHeader>
<WizardSecondaryContent>
<Form bind:this={formComponent} onSubmit={handleSubmit} bind:isSubmitting>
<Label class="label u-margin-block-start-16">Select plan</Label>
@@ -62,7 +62,7 @@
{abbreviateNumber(limit)} function executions
</li>
<li>
${hoursToDays(logs)} of logs
{hoursToDays(logs)} of logs
</li>
</ul>
{#if $organization?.billingPlan === BillingPlan.STARTER}