diff --git a/packages/webapp/src/routes/deploy/+layout.ts b/packages/webapp/src/routes/deploy/+layout.ts index 4f2fd310b..771688d91 100644 --- a/packages/webapp/src/routes/deploy/+layout.ts +++ b/packages/webapp/src/routes/deploy/+layout.ts @@ -4,16 +4,38 @@ import type { LayoutLoad } from './$types'; import { DotrainOrderGui } from '@rainlanguage/orderbook/js_api'; export const load: LayoutLoad = async ({ url }) => { - // get the registry url from the url params const registry = url.searchParams.get('registry'); + try { + const registryDotrains = await fetchRegistryDotrains(registry || REGISTRY_URL); + if (!registryDotrains || registryDotrains.length === 0) { + throw new Error('No strategy registry found at URL'); + } + const strategyDetails = await Promise.all( + registryDotrains.map(async (registryDotrain) => { + try { + const details = await DotrainOrderGui.getStrategyDetails(registryDotrain.dotrain); + if (!details) { + throw new Error('This registry contains invalid Dotrain documents.'); + } + return { ...registryDotrain, details }; + } catch (error) { + throw new Error(error instanceof Error ? error.message : String(error)); + } + }) + ); - const registryDotrains = await fetchRegistryDotrains(registry || REGISTRY_URL); - const strategyDetails = await Promise.all( - registryDotrains.map(async (registryDotrain) => { - const details = await DotrainOrderGui.getStrategyDetails(registryDotrain.dotrain); - return { ...registryDotrain, details }; - }) - ); - - return { registry: registry || REGISTRY_URL, registryDotrains, strategyDetails }; + return { + registry: registry || REGISTRY_URL, + registryDotrains, + strategyDetails, + error: null + }; + } catch (error: unknown) { + return { + registry: registry || REGISTRY_URL, + registryDotrains: [], + strategyDetails: [], + error: error instanceof Error ? error.message : 'Unknown error occurred' + }; + } }; diff --git a/packages/webapp/src/routes/deploy/+page.svelte b/packages/webapp/src/routes/deploy/+page.svelte index bb35c3f3a..4c248a7fd 100644 --- a/packages/webapp/src/routes/deploy/+page.svelte +++ b/packages/webapp/src/routes/deploy/+page.svelte @@ -3,7 +3,7 @@ import { Button, Input, Toggle } from 'flowbite-svelte'; import { page } from '$app/stores'; - const { strategyDetails } = $page.data; + const { strategyDetails, error } = $page.data; let newRegistryUrl = ''; let advancedMode = false; @@ -42,24 +42,32 @@