diff --git a/gql-queries-generator/doc/queries.graphql b/gql-queries-generator/doc/queries.graphql index 9b50b9d25..f8b32d672 100644 --- a/gql-queries-generator/doc/queries.graphql +++ b/gql-queries-generator/doc/queries.graphql @@ -1924,10 +1924,6 @@ mutation consoleDeleteAccountMembership($accountName: String!, $memberId: ID!) { accounts_removeAccountMembership(accountName: $accountName, memberId: $memberId) } -mutation consoleVerifyInviteCode($invitationCode: String!) { - auth_verifyInviteCode(invitationCode: $invitationCode) -} - query consoleGetCredToken($username: String!) { cr_getCredToken(username: $username) } diff --git a/lib/server/helpers/minimal-auth.ts b/lib/server/helpers/minimal-auth.ts index 7809357a5..1cc2993e9 100644 --- a/lib/server/helpers/minimal-auth.ts +++ b/lib/server/helpers/minimal-auth.ts @@ -53,10 +53,6 @@ export const minimalAuth = async (ctx: IExtRemixCtx) => { return redirect(`${authBaseUrl}/verify-email`); } - if (whoAmI.data && !whoAmI.data.approved) { - return redirect(`${consoleBaseUrl}/invite-code`); - } - ctx.authProps = (props: MapType) => { return { ...props, diff --git a/package.json b/package.json index 027606336..619a19c82 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@jengaicons/react": "1.6.0", "@mdx-js/react": "^2.3.0", "@monaco-editor/react": "^4.6.0", - "@oshq/react-select": "^1.4.2", + "@oshq/react-select": "^1.4.4", "@radix-ui/primitive": "^1.0.1", "@radix-ui/react-alert-dialog": "1.0.4", "@radix-ui/react-checkbox": "^1.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 275a7d09f..ba52b6d77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ dependencies: specifier: ^4.6.0 version: 4.6.0(monaco-editor@0.49.0)(react-dom@18.3.1)(react@18.2.0) '@oshq/react-select': - specifier: ^1.4.2 - version: 1.4.2(@radix-ui/react-portal@1.0.4)(classnames@2.5.1)(framer-motion@11.2.9)(rc-virtual-list@3.14.2)(react@18.2.0) + specifier: ^1.4.4 + version: 1.4.4(@radix-ui/react-portal@1.0.4)(classnames@2.5.1)(framer-motion@11.2.9)(rc-virtual-list@3.14.2)(react@18.2.0) '@radix-ui/primitive': specifier: ^1.0.1 version: 1.0.1 @@ -2554,8 +2554,8 @@ packages: json-parse-even-better-errors: 2.3.1 dev: true - /@oshq/react-select@1.4.2(@radix-ui/react-portal@1.0.4)(classnames@2.5.1)(framer-motion@11.2.9)(rc-virtual-list@3.14.2)(react@18.2.0): - resolution: {integrity: sha512-yQwzBxFb5z2XwmuEZHLdJGmpzn1+Xo+zn5u/DV1FzvUKlRUWXo/ChQ73ZG62uN/mODTEJhsUW8SbPiP93G89iw==} + /@oshq/react-select@1.4.4(@radix-ui/react-portal@1.0.4)(classnames@2.5.1)(framer-motion@11.2.9)(rc-virtual-list@3.14.2)(react@18.2.0): + resolution: {integrity: sha512-jfMSnookesY0ge/q1amjpj16cmG09MU6YAjfHlpJ3GDxB5vjo/60I+cv9pWzTUcKNlZd1tuRZd9zKjggALz3IA==} peerDependencies: '@radix-ui/react-portal': ^1.0.4 classnames: ^2.3.2 diff --git a/src/apps/console/routes/_main+/$account+/env+/$environment+/new-app/app-network.tsx b/src/apps/console/routes/_main+/$account+/env+/$environment+/new-app/app-network.tsx index 207dd460f..e97badfb4 100644 --- a/src/apps/console/routes/_main+/$account+/env+/$environment+/new-app/app-network.tsx +++ b/src/apps/console/routes/_main+/$account+/env+/$environment+/new-app/app-network.tsx @@ -162,6 +162,7 @@ const ExposedRoute = () => { // error={!!portError} // message={portError} disableWhileLoading + createLabel="Exposed Domains" /> ); @@ -219,6 +220,7 @@ export const ExposedPorts = () => { error={!!portError} message={portError} disableWhileLoading + createLabel="Exposed ports" /> diff --git a/src/apps/console/routes/_main+/_index.tsx b/src/apps/console/routes/_main+/_index.tsx index da4852812..7c104e7ff 100644 --- a/src/apps/console/routes/_main+/_index.tsx +++ b/src/apps/console/routes/_main+/_index.tsx @@ -1,11 +1,5 @@ import { redirect } from '@remix-run/node'; -import { GQLServerHandler } from '~/root/lib/server/gql/saved-queries'; -import { IRemixCtx } from '~/root/lib/types/common'; -export const loader = async (ctx: IRemixCtx) => { - const { data } = await GQLServerHandler(ctx.request).whoAmI(); - if (data && !data.approved) { - return redirect(`/invite-code`); - } +export const loader = async () => { return redirect('/teams'); }; diff --git a/src/apps/console/routes/invite-code.tsx b/src/apps/console/routes/invite-code.tsx deleted file mode 100644 index fdf1aaf1d..000000000 --- a/src/apps/console/routes/invite-code.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { redirect } from '@remix-run/node'; -import { useNavigate } from '@remix-run/react'; -import { BrandLogo } from '~/components/branding/brand-logo'; -import { toast } from '~/components/molecule/toast'; -import { useConsoleApi } from '~/console/server/gql/api-provider'; -import useForm from '~/root/lib/client/hooks/use-form'; -import Yup from '~/root/lib/server/helpers/yup'; -import { IRemixCtx } from '~/root/lib/types/common'; -import { GQLServerHandler } from '~/lib/server/gql/saved-queries'; -import { Badge } from '~/components/atoms/badge'; -import TextInputLg from '~/console/components/text-input-lg'; - -const InviteCode = () => { - const api = useConsoleApi(); - const navigate = useNavigate(); - - const { values, handleChange, submit, handleSubmit } = useForm({ - initialValues: { - inviteCode: '', - }, - validationSchema: Yup.object({ - inviteCode: Yup.string().required('invite code is required'), - }), - onSubmit: async (v) => { - try { - const { errors } = await api.verifyInviteCode({ - invitationCode: v.inviteCode, - }); - if (errors) { - throw new Error(errors[0].message); - } - toast.success('Invitation code verification successful.'); - navigate('/teams'); - } catch (err) { - const errorMessage = - err instanceof Error - ? err.message - : 'An error occurred. Please try again.'; - toast.error(errorMessage); - } - }, - }); - - return ( -
- - - 🔥 Amazing curated{' '} - Open-Source{' '} - remote local envs - - - Unlock early access now! - - - Dont miss the chance to try our product. Enter your referral code now to - move up the waitlist and secure early access! - -
-
- -
-
-
- ); -}; - -export const loader = async (ctx: IRemixCtx) => { - const { data, errors } = await GQLServerHandler(ctx.request).whoAmI(); - - if (!data || errors) { - return redirect('/'); - } - - const { approved } = data || {}; - - if (approved) { - return redirect('/teams'); - } - - return {}; -}; - -export default InviteCode; diff --git a/src/apps/console/server/gql/queries/access-queries.ts b/src/apps/console/server/gql/queries/access-queries.ts index a92b83a1e..8256426dc 100644 --- a/src/apps/console/server/gql/queries/access-queries.ts +++ b/src/apps/console/server/gql/queries/access-queries.ts @@ -20,8 +20,6 @@ import { ConsoleRejectInvitationMutationVariables, ConsoleDeleteAccountMembershipMutation, ConsoleDeleteAccountMembershipMutationVariables, - ConsoleVerifyInviteCodeMutation, - ConsoleVerifyInviteCodeMutationVariables, } from '~/root/src/generated/gql/server'; export type IInvites = NN< @@ -210,17 +208,4 @@ export const accessQueries = (executor: IExecutor) => ({ vars(_: ConsoleDeleteAccountMembershipMutationVariables) {}, } ), - - verifyInviteCode: executor( - gql` - mutation Auth_verifyInviteCode($invitationCode: String!) { - auth_verifyInviteCode(invitationCode: $invitationCode) - } - `, - { - transformer: (data: ConsoleVerifyInviteCodeMutation) => - data.auth_verifyInviteCode, - vars(_: ConsoleVerifyInviteCodeMutationVariables) {}, - } - ), }); diff --git a/src/apps/devdoc/pages/docs/_meta.json b/src/apps/devdoc/pages/docs/_meta.json index 0ea4d74b5..266171589 100644 --- a/src/apps/devdoc/pages/docs/_meta.json +++ b/src/apps/devdoc/pages/docs/_meta.json @@ -16,15 +16,13 @@ "title":"Getting Started" }, "--reference--":{ - "title":"Features", + "title":"Remote Env", "type":"separator" }, - "managed-services":{ - "title":"Managed Services" - }, - "local-devices":{ - "title":"Local Dev Containers" + "integrated-services":{ + "title":"Integrated Services" }, + "any-wireguard":{ "title":"Wireguard devices" }, @@ -34,6 +32,13 @@ "work-in-progress":{ "title":"Work in progress.." }, + "--develop-environment--":{ + "title":"Dev Env", + "type":"separator" + }, + "local-devices":{ + "title":"Dev Containers" + }, "---references-":{ "title":"Reference", "type":"separator" diff --git a/src/apps/devdoc/pages/docs/architecture.mdx b/src/apps/devdoc/pages/docs/architecture.mdx index 8a1081d8a..49bcd1246 100644 --- a/src/apps/devdoc/pages/docs/architecture.mdx +++ b/src/apps/devdoc/pages/docs/architecture.mdx @@ -1,3 +1,3 @@ # Architecture -dev-hell \ No newline at end of file +dev-hell \ No newline at end of file diff --git a/src/apps/devdoc/pages/docs/getting-started.mdx b/src/apps/devdoc/pages/docs/getting-started.mdx index 72a7ec88a..bac9b56db 100644 --- a/src/apps/devdoc/pages/docs/getting-started.mdx +++ b/src/apps/devdoc/pages/docs/getting-started.mdx @@ -1,10 +1,10 @@ import Steps from "~/app/components/steps"; -## 4 Steps to Get Started +## 5 Steps to Get Started ### Attach Your Cluster -Attach your cluster to Kloudlite using a Helm chart. First, create a cluster reference in Kloudlite, then follow the steps to attach the cluster. +First, create a cluster reference in Kloudlite, then follow the steps to attach the cluster. @@ -22,12 +22,40 @@ and import resources into the environment. Once environment is created you can add configs, secrets, apps to it. You can also import managed resources of managed services. +### Setup Kloudlite CLI +Kloudlite CLI is a command line tool that allows you to interact with Kloudlite. It provides a set of commands to manage clusters, environments, and other resources. + +Setup kloudlite cli. Follow the below instructions or click [here](https://github.com/kloudlite/kl). +```bash +# Prerequisites: +docker run + +# Install latest with curl +curl 'https://kl.kloudlite.io/kloudlite/kl!?select=kl' | bash + +# Install latest with wget +wget -qO- 'https://kl.kloudlite.io/kloudlite/kl!?select=kl' | bash + +# Install specific version +curl 'https://kl.kloudlite.io/kloudlite/kl@v1.0.0!?select=kl' | bash +``` + +Authentication: +```bash +# Login to Kloudlite +kl auth login + +# Logout from Kloudlite +kl auth logout + +# Status of Kloudlite authentication +kl auth status +``` + ### Set Up Your Local Machine Once enviroment is created you can set up your local machine to connect to the environment using the Kloudlite CLI. -Setup kloudlite cli. Follow the instructions [here](https://github.com/kloudlite/kl). - Choose your workspace directory and create a `kl.yaml` file with the following command: ```bash kl init diff --git a/src/apps/devdoc/pages/docs/integrated-services/_meta.json b/src/apps/devdoc/pages/docs/integrated-services/_meta.json new file mode 100644 index 000000000..3a056c72b --- /dev/null +++ b/src/apps/devdoc/pages/docs/integrated-services/_meta.json @@ -0,0 +1,8 @@ +{ + "supported-services":{ + "title": "Supported Services" + }, + "kompose":{ + "title": "Kompose" + } +} diff --git a/src/apps/devdoc/pages/docs/integrated-services/kompose.mdx b/src/apps/devdoc/pages/docs/integrated-services/kompose.mdx new file mode 100644 index 000000000..22bac0a76 --- /dev/null +++ b/src/apps/devdoc/pages/docs/integrated-services/kompose.mdx @@ -0,0 +1,2 @@ +# Kompose +coming soon... \ No newline at end of file diff --git a/src/apps/devdoc/pages/docs/integrated-services/supported-services.mdx b/src/apps/devdoc/pages/docs/integrated-services/supported-services.mdx new file mode 100644 index 000000000..c13986355 --- /dev/null +++ b/src/apps/devdoc/pages/docs/integrated-services/supported-services.mdx @@ -0,0 +1,10 @@ +# Supported Services +Currently these are the list of services that are supported by kloudlite. + +- PostgreSQL +- MySQL +- MongoDB +- Redis + +You can create these services and respective resources seamlessly from kloudlite dashboard. +You will be able to import resources of the services inside your environment. \ No newline at end of file diff --git a/src/apps/devdoc/pages/docs/managed-services.mdx b/src/apps/devdoc/pages/docs/managed-services.mdx deleted file mode 100644 index f40f3e9e7..000000000 --- a/src/apps/devdoc/pages/docs/managed-services.mdx +++ /dev/null @@ -1,2 +0,0 @@ -# Managed Services -Coming soon... diff --git a/src/apps/devdoc/public/arch.png b/src/apps/devdoc/public/arch.png deleted file mode 100644 index 03d2f25c9..000000000 Binary files a/src/apps/devdoc/public/arch.png and /dev/null differ diff --git a/src/apps/devdoc/public/arch1.png b/src/apps/devdoc/public/arch1.png new file mode 100644 index 000000000..2a212b8fa Binary files /dev/null and b/src/apps/devdoc/public/arch1.png differ diff --git a/src/design-system/components/atoms/select.tsx b/src/design-system/components/atoms/select.tsx index 9301a0886..dc8685da7 100644 --- a/src/design-system/components/atoms/select.tsx +++ b/src/design-system/components/atoms/select.tsx @@ -97,6 +97,7 @@ const Select = ( noOptionMessage, open, disableWhileLoading, + createLabel, } = props; return ( @@ -161,6 +162,7 @@ const Select = ( searchable={searchable} noOptionMessage={noOptionMessage} disableWhileLoading={disableWhileLoading} + createLabel={createLabel} /> diff --git a/src/generated/gql/server.ts b/src/generated/gql/server.ts index cb06f54fe..7be9e999a 100644 --- a/src/generated/gql/server.ts +++ b/src/generated/gql/server.ts @@ -3633,14 +3633,6 @@ export type ConsoleDeleteAccountMembershipMutation = { accounts_removeAccountMembership: boolean; }; -export type ConsoleVerifyInviteCodeMutationVariables = Exact<{ - invitationCode: Scalars['String']['input']; -}>; - -export type ConsoleVerifyInviteCodeMutation = { - auth_verifyInviteCode: boolean; -}; - export type ConsoleGetCredTokenQueryVariables = Exact<{ username: Scalars['String']['input']; }>;