From 463e18015fdaa07975e2ff03801f29ed7c23feaa Mon Sep 17 00:00:00 2001 From: Rodrigo Pinto Date: Mon, 2 Dec 2024 01:48:51 -0300 Subject: [PATCH] API API with first two endpoint to fetch information from Tahoe to SvelteKit. --- packages/.env.example | 1 + packages/package.json | 3 ++ packages/pnpm-lock.yaml | 10 +++++ packages/src/routes/api/[slug]/+server.js | 41 +++++++++++++++++++ packages/src/routes/dashboard/+page.server.js | 28 ++++++++++++- packages/src/routes/dashboard/+page.svelte | 34 +++++++++++---- 6 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 packages/.env.example create mode 100644 packages/src/routes/api/[slug]/+server.js diff --git a/packages/.env.example b/packages/.env.example new file mode 100644 index 0000000..735a2f8 --- /dev/null +++ b/packages/.env.example @@ -0,0 +1 @@ +TAHOE_API=http://x.x.x.x:xxxx diff --git a/packages/package.json b/packages/package.json index 1aa2ec1..2667812 100644 --- a/packages/package.json +++ b/packages/package.json @@ -22,5 +22,8 @@ "svelte": "^5.0.0", "vite": "^5.0.3", "vitest": "^2.0.4" + }, + "dependencies": { + "dotenv": "^16.4.5" } } diff --git a/packages/pnpm-lock.yaml b/packages/pnpm-lock.yaml index 500f8fc..8011f10 100644 --- a/packages/pnpm-lock.yaml +++ b/packages/pnpm-lock.yaml @@ -7,6 +7,10 @@ settings: importers: .: + dependencies: + dotenv: + specifier: ^16.4.5 + version: 16.4.5 devDependencies: '@sveltejs/adapter-auto': specifier: ^3.0.0 @@ -419,6 +423,10 @@ packages: devalue@5.1.1: resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -941,6 +949,8 @@ snapshots: devalue@5.1.1: {} + dotenv@16.4.5: {} + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 diff --git a/packages/src/routes/api/[slug]/+server.js b/packages/src/routes/api/[slug]/+server.js new file mode 100644 index 0000000..5fb2ed2 --- /dev/null +++ b/packages/src/routes/api/[slug]/+server.js @@ -0,0 +1,41 @@ +import { json } from '@sveltejs/kit' +import { env } from '$env/dynamic/private' + +export const POST = async ({ params, request }) => { + const { slug } = params + const body = await request.json() + + switch (slug) { + case 'createAlias': { + try { + const url = `${env.TAHOE_API}/uri?t=mkdir` + const response = await fetch(url, { method: 'POST' }) + const capKey = await response.json() + + return json({ success: true, capKey }) + } catch (err) { + console.log({ err }) + return json({ success: false, code: 500, error: err }) + } + } + + case 'listDirectories': { + try { + const encodedCapKey = body.capKey.replace(/:/g, '%3A') + const url = `${env.TAHOE_API}/uri/${encodedCapKey}?t=json` + const response = await fetch(url, { method: 'GET' }) + const list = await response.json() + console.log({ url, list }) + + return json({ success: true, list }) + } catch (err) { + console.log({ err }) + return json({ success: false, code: 500, error: err }) + } + } + + default: { + return json({ success: true }) + } + } +} diff --git a/packages/src/routes/dashboard/+page.server.js b/packages/src/routes/dashboard/+page.server.js index 31d7b35..9022ddb 100644 --- a/packages/src/routes/dashboard/+page.server.js +++ b/packages/src/routes/dashboard/+page.server.js @@ -1,12 +1,36 @@ import { fail } from '@sveltejs/kit' export const actions = { - createCapKey: async ({ request }) => { + createCapKey: async ({ request, fetch }) => { try { - return { success: true, endpoint: 'createCapKey', capKey: 123 } + const response = await fetch('/api/createAlias', { method: 'POST' }) + const jsonResponse = await response.json() + + return { endpoint: 'createCapKey', capKey: jsonResponse.capKey } } catch (err) { console.log({ err }) return fail(500, { endpoint: 'createCapKey', error: err }) } + }, + + listDirectories: async ({ request, fetch }) => { + const formData = await request.formData() + const capKey = formData.get('capKeyInput') + const encoded = encodeURIComponent(capKey) + + try { + const response = await fetch('/api/listDirectories', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ capKey: encoded }) + }) + const jsonResponse = await response.json() + if (!jsonResponse.success) throw new Error(jsonResponse.error) + + return { endpoint: 'listDirectories', list: jsonResponse.list, capKey } + } catch (err) { + console.log({ err }) + return fail(500, { endpoint: 'listDirectories', error: err }) + } } } diff --git a/packages/src/routes/dashboard/+page.svelte b/packages/src/routes/dashboard/+page.svelte index 12e2e50..5f61d7d 100644 --- a/packages/src/routes/dashboard/+page.svelte +++ b/packages/src/routes/dashboard/+page.svelte @@ -2,6 +2,7 @@ import { enhance } from '$app/forms' import { beforeNavigate } from '$app/navigation' + let { form } = $props() let capKey = $state() let capKeyInput = $state() let newCapKey = $state() @@ -19,7 +20,17 @@ const enhanceForm = () => { return async ({ result, update }) => { await update() - newCapKey = result.data.capKey + + if (result.status === 200) { + switch (result.data.endpoint) { + case 'createCapKey': { + newCapKey = result.data.capKey + } + case 'listDirectories': { + capKey = result.data.capKey + } + } + } } } @@ -29,6 +40,12 @@ alert('Please confirm you copied and saved the cap key.') } }) + + $effect(() => { + if (form?.error) console.log({ error: form.error }) + }) + + $effect(() => console.log({ form })) @@ -37,19 +54,20 @@

Dashboard

-{#if !capKey && !newCapKey} +{#if !form?.capKey && !newCapKey}
-
+
- - -
+ + + +
-{:else if !capKey && newCapKey} +{:else if !form?.capKey && newCapKey}
@@ -73,7 +91,7 @@
{:else}

File tree

-

{capKey}

+

{form.capKey}

{/if}