diff --git a/apps/backend/environments/local.toml b/apps/backend/environments/local.toml new file mode 100644 index 0000000..a7fe2e2 --- /dev/null +++ b/apps/backend/environments/local.toml @@ -0,0 +1,44 @@ +[server] + host = "127.0.0.1" + port = 8000 + gqlPath = "/graphql" + [server.session] + secret = "ANY234234oldstslklting" + # Frontend webapp URL origin + appOriginUrl = "http://localhost:3000" + # Set to true if server running behind proxy + trustProxy = false + # Backend URL hostname + domain = "localhost" + +[database] + dbPath = "db/snowball" + +[gitHub] + webhookUrl = "https://cd91-75-164-238-42.ngrok-free.app" + [gitHub.oAuth] + clientId = "Ov23li29Afs0s2Hw2VV1" + clientSecret = "90389f168b7e07547a2c8796f95404f5b58a2913" +[registryConfig] + fetchDeploymentRecordDelay = 5000 +# restEndpoint = "http://localhost:1317" + # gqlEndpoint = "http://localhost:9473/api" + restEndpoint = "https://audubon.app" + gqlEndpoint = "https://audubon.app/api" + # chainId = "laconic-testnet-2" + chainId = "laconic-testnet-2" + privateKey = "0xe374dcccb706f6b2922a1ef9d81e10fe22913b82e5c9ce8fb3917f6e5a5b52db" + bondId = "" + authority = "" # TODO: Add authority ID if needed + [registryConfig.fee] + gas = "" + fees = "" + gasPrice = "1alnt" + +# Durations are set to 2 mins as deployers may take time with ongoing deployments and auctions +[auction] + commitFee = "100000" + commitsDuration = "120s" + revealFee = "100000" + revealsDuration = "120s" + denom = "alnt" \ No newline at end of file diff --git a/apps/deploy-fe/package.json b/apps/deploy-fe/package.json index 6a7314e..932f321 100644 --- a/apps/deploy-fe/package.json +++ b/apps/deploy-fe/package.json @@ -49,23 +49,28 @@ "@radix-ui/react-tooltip": "^1.1.8", "@radix-ui/react-visually-hidden": "^1.1.2", "@workspace/ui": "workspace:*", + "axios": "^1.8.4", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "1.0.4", "date-fns": "^4.1.0", + "downshift": "^9.0.9", "embla-carousel-react": "^8.5.2", "input-otp": "^1.4.2", "lucide-react": "0.477.0", "next": "^15.2.1", "next-themes": "^0.4.4", + "octokit": "^3.1.2", "react": "^19.0.0", "react-day-picker": "8.10.1", "react-dom": "^19.0.0", "react-hook-form": "^7.54.2", "react-resizable-panels": "^2.1.7", "recharts": "^2.15.1", + "siwe": "^3.0.0", "sonner": "^2.0.1", "tailwind-merge": "^3.0.2", + "usehooks-ts": "^3.1.1", "vaul": "^1.1.2", "zod": "^3.23.8", "zustand": "^5.0.3" @@ -74,6 +79,7 @@ "@types/node": "^20", "@types/react": "18.3.0", "@types/react-dom": "18.3.1", + "@workspace/gql-client": "workspace:*", "@workspace/typescript-config": "workspace:*", "dotenv": "^16.4.7", "postcss": "^8", diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(configure)/cf/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(configure)/cf/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(configure)/cf/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(configure)/cf/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(deploy)/dp/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(deploy)/dp/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(deploy)/dp/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(deploy)/dp/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(success)/sc/[id]/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(success)/sc/[id]/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(success)/sc/[id]/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(success)/sc/[id]/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(configure)/cf/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(configure)/cf/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(configure)/cf/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(configure)/cf/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(deploy)/dp/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(deploy)/dp/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(deploy)/dp/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(deploy)/dp/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(deployments)/dep/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(deployments)/dep/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(deployments)/dep/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(deployments)/dep/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(integrations)/int/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(integrations)/int/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(integrations)/int/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(integrations)/int/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(collaborators)/col/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(collaborators)/col/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(collaborators)/col/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(collaborators)/col/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/cf/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/cf/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/cf/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/cf/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/config/cf/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/config/cf/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/config/cf/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/config/cf/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(environment-variables)/env/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(environment-variables)/env/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(environment-variables)/env/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(environment-variables)/env/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(git)/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(git)/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(git)/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(git)/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/deployments/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/deployments/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/deployments/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/deployments/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/layout.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/layout.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/layout.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/layout.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/loading.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/loading.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/loading.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/loading.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(settings)/set/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(settings)/set/page.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(settings)/set/page.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/(settings)/set/page.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/error.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/error.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/error.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/error.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/loading.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/loading.tsx similarity index 100% rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/loading.tsx rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/loading.tsx diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/page.tsx new file mode 100644 index 0000000..3b7aa46 --- /dev/null +++ b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/projects/[provider]/[orgSlug]/page.tsx @@ -0,0 +1,59 @@ +'use client' +import { PageWrapper } from '@/components/foundation' +import CheckBalanceIframe from '@/components/iframe/check-balance-iframe/CheckBalanceIframe' +import type { Project } from '@octokit/webhooks-types' +import { useParams } from 'next/navigation' +import { useState } from 'react' + +export default function ProjectsPage() { + const [isBalanceSufficient, setIsBalanceSufficient] = useState() + const [projects, setProjects] = useState([]) + // const { isReady } = useWallet() + + // const client = useGQLClient() + const { orgSlug } = useParams() + + // const fetchProjects = useCallback(async () => { + // if (!orgSlug) return + + // const { projectsInOrganization } = + // await client.getProjectsInOrganization(orgSlug) + // setProjects(projectsInOrganization) + // // }, [orgSlug, client]) + // }, [orgSlug]) + + // useEffect(() => { + // if (isReady && orgSlug) { + // fetchProjects() + // } + // }, [fetchProjects, orgSlug, isReady]) + // // }, [fetchProjects, orgSlug, isReady]) + + // useEffect(() => { + // if (isBalanceSufficient === false) { + // router.push('/buy-prepaid-service') + // } + // }, [isBalanceSufficient, navigate]) + return ( + +
+ {projects.length > 0 && + projects.map((project) => ( + // +
{project.name}
+ ))} +
+ + +
+ ) +} diff --git a/apps/deploy-fe/src/components/iframe/check-balance-iframe/CheckBalanceIframe.tsx b/apps/deploy-fe/src/components/iframe/check-balance-iframe/CheckBalanceIframe.tsx new file mode 100644 index 0000000..f6bc6ee --- /dev/null +++ b/apps/deploy-fe/src/components/iframe/check-balance-iframe/CheckBalanceIframe.tsx @@ -0,0 +1,87 @@ +'use client' + +import { VisuallyHidden } from '@radix-ui/react-visually-hidden' +import { Dialog } from '@workspace/ui/components/dialog' +import { useEffect, useState } from 'react' +import useCheckBalance from './useCheckBalance' + +const CHECK_BALANCE_INTERVAL = 5000 +const IFRAME_ID = 'checkBalanceIframe' + +/** + * CheckBalanceIframe component that checks the balance using an iframe. + * @param {Object} props - The component props. + * @param {function} props.onBalanceChange - Callback function to be called when the balance changes. + * @param {boolean} props.isPollingEnabled - Determines whether to poll the balance periodically. + * @param {string} props.amount - The amount to check against the balance. + * @returns {JSX.Element} - The CheckBalanceIframe component. + */ +const CheckBalanceIframe = ({ + onBalanceChange, + isPollingEnabled, + amount +}: { + onBalanceChange: (value: boolean | undefined) => void + isPollingEnabled: boolean + amount: string +}) => { + const { isBalanceSufficient, checkBalance } = useCheckBalance( + amount, + IFRAME_ID + ) + + const [isLoaded, setIsLoaded] = useState(false) + + /** + * useEffect hook that calls checkBalance when the component is loaded or the amount changes. + */ + useEffect(() => { + if (!isLoaded) { + return + } + checkBalance() + }, [checkBalance, isLoaded]) + /** + * useEffect hook that sets up an interval to poll the balance if polling is enabled. + * Clears the interval when the component unmounts, balance is sufficient, or polling is disabled. + */ + useEffect(() => { + if (!isPollingEnabled || !isLoaded || isBalanceSufficient) { + return + } + + const interval = setInterval(() => { + checkBalance() + }, CHECK_BALANCE_INTERVAL) + + return () => { + clearInterval(interval) + } + }, [isBalanceSufficient, isPollingEnabled, checkBalance, isLoaded]) + + /** + * useEffect hook that calls the onBalanceChange callback when the isBalanceSufficient state changes. + */ + useEffect(() => { + onBalanceChange(isBalanceSufficient) + }, [isBalanceSufficient, onBalanceChange]) + + return ( + + +