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
-
\ No newline at end of file
+
\ 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'];
}>;