API
API with first two endpoint to fetch information from Tahoe to SvelteKit.
This commit is contained in:
parent
22e8576cab
commit
463e18015f
6 changed files with 107 additions and 10 deletions
1
packages/.env.example
Normal file
1
packages/.env.example
Normal file
|
@ -0,0 +1 @@
|
||||||
|
TAHOE_API=http://x.x.x.x:xxxx
|
|
@ -22,5 +22,8 @@
|
||||||
"svelte": "^5.0.0",
|
"svelte": "^5.0.0",
|
||||||
"vite": "^5.0.3",
|
"vite": "^5.0.3",
|
||||||
"vitest": "^2.0.4"
|
"vitest": "^2.0.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"dotenv": "^16.4.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10
packages/pnpm-lock.yaml
generated
10
packages/pnpm-lock.yaml
generated
|
@ -7,6 +7,10 @@ settings:
|
||||||
importers:
|
importers:
|
||||||
|
|
||||||
.:
|
.:
|
||||||
|
dependencies:
|
||||||
|
dotenv:
|
||||||
|
specifier: ^16.4.5
|
||||||
|
version: 16.4.5
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@sveltejs/adapter-auto':
|
'@sveltejs/adapter-auto':
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
|
@ -419,6 +423,10 @@ packages:
|
||||||
devalue@5.1.1:
|
devalue@5.1.1:
|
||||||
resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
|
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:
|
esbuild@0.21.5:
|
||||||
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
|
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -941,6 +949,8 @@ snapshots:
|
||||||
|
|
||||||
devalue@5.1.1: {}
|
devalue@5.1.1: {}
|
||||||
|
|
||||||
|
dotenv@16.4.5: {}
|
||||||
|
|
||||||
esbuild@0.21.5:
|
esbuild@0.21.5:
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@esbuild/aix-ppc64': 0.21.5
|
'@esbuild/aix-ppc64': 0.21.5
|
||||||
|
|
41
packages/src/routes/api/[slug]/+server.js
Normal file
41
packages/src/routes/api/[slug]/+server.js
Normal file
|
@ -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 })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,36 @@
|
||||||
import { fail } from '@sveltejs/kit'
|
import { fail } from '@sveltejs/kit'
|
||||||
|
|
||||||
export const actions = {
|
export const actions = {
|
||||||
createCapKey: async ({ request }) => {
|
createCapKey: async ({ request, fetch }) => {
|
||||||
try {
|
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) {
|
} catch (err) {
|
||||||
console.log({ err })
|
console.log({ err })
|
||||||
return fail(500, { endpoint: 'createCapKey', error: 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 })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import { enhance } from '$app/forms'
|
import { enhance } from '$app/forms'
|
||||||
import { beforeNavigate } from '$app/navigation'
|
import { beforeNavigate } from '$app/navigation'
|
||||||
|
|
||||||
|
let { form } = $props()
|
||||||
let capKey = $state()
|
let capKey = $state()
|
||||||
let capKeyInput = $state()
|
let capKeyInput = $state()
|
||||||
let newCapKey = $state()
|
let newCapKey = $state()
|
||||||
|
@ -19,8 +20,18 @@
|
||||||
const enhanceForm = () => {
|
const enhanceForm = () => {
|
||||||
return async ({ result, update }) => {
|
return async ({ result, update }) => {
|
||||||
await update()
|
await update()
|
||||||
|
|
||||||
|
if (result.status === 200) {
|
||||||
|
switch (result.data.endpoint) {
|
||||||
|
case 'createCapKey': {
|
||||||
newCapKey = result.data.capKey
|
newCapKey = result.data.capKey
|
||||||
}
|
}
|
||||||
|
case 'listDirectories': {
|
||||||
|
capKey = result.data.capKey
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
beforeNavigate(({ cancel }) => {
|
beforeNavigate(({ cancel }) => {
|
||||||
|
@ -29,6 +40,12 @@
|
||||||
alert('Please confirm you copied and saved the cap key.')
|
alert('Please confirm you copied and saved the cap key.')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (form?.error) console.log({ error: form.error })
|
||||||
|
})
|
||||||
|
|
||||||
|
$effect(() => console.log({ form }))
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
|
@ -37,19 +54,20 @@
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
<h1>Dashboard</h1>
|
<h1>Dashboard</h1>
|
||||||
|
|
||||||
{#if !capKey && !newCapKey}
|
{#if !form?.capKey && !newCapKey}
|
||||||
<div class='cap-key-div add'>
|
<div class='cap-key-div add'>
|
||||||
<div class='cap-key'>
|
<form action='?/listDirectories' class='cap-key' method='post' enctype='form-data' use:enhance={enhanceForm}>
|
||||||
<label for='capKeyInput'>Cap key:</label>
|
<label for='capKeyInput'>Cap key:</label>
|
||||||
<input type='text' name='capKeyInput' bind:value={capKeyInput} />
|
<input type='text' name='capKeyInput' />
|
||||||
<button onclick={submitKey}>Submit</button>
|
|
||||||
</div>
|
<button type='submit'>Submit</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
<form action='?/createCapKey' method='post' enctype='form-data' use:enhance={enhanceForm}>
|
<form action='?/createCapKey' method='post' enctype='form-data' use:enhance={enhanceForm}>
|
||||||
<button type='submit'>New cap key</button>
|
<button type='submit'>New cap key</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{:else if !capKey && newCapKey}
|
{:else if !form?.capKey && newCapKey}
|
||||||
<div class='cap-key-div get'>
|
<div class='cap-key-div get'>
|
||||||
<label for='newCapKey'><h2>New cap key</h2></label>
|
<label for='newCapKey'><h2>New cap key</h2></label>
|
||||||
<input type='text' id='newCapKey' name='newCapKey' value={newCapKey} />
|
<input type='text' id='newCapKey' name='newCapKey' value={newCapKey} />
|
||||||
|
@ -73,7 +91,7 @@
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<h2>File tree</h2>
|
<h2>File tree</h2>
|
||||||
<p>{capKey}</p>
|
<p>{form.capKey}</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue