aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/routes
diff options
context:
space:
mode:
authorivar <i@oiee.no>2026-06-22 00:46:09 +0200
committerivar <i@oiee.no>2026-06-22 00:46:09 +0200
commitb8b6e229281be13258715870ddd0c2e1866dee12 (patch)
treecc136a2d0c2d9c031ec0b21f62c8a9f302e0ff57 /app/src/routes
parent1aa60ed7f0b0af6c55df4a32bf2620934df63e6d (diff)
downloadsparebank1-actualbudget-b8b6e229281be13258715870ddd0c2e1866dee12.tar.xz
sparebank1-actualbudget-b8b6e229281be13258715870ddd0c2e1866dee12.zip
Remove webappHEADmaster
Diffstat (limited to 'app/src/routes')
-rw-r--r--app/src/routes/+page.server.ts15
-rw-r--r--app/src/routes/+page.svelte94
-rw-r--r--app/src/routes/methods.remote.ts38
-rw-r--r--app/src/routes/sb1-authorize/+server.ts48
-rw-r--r--app/src/routes/status.svelte17
5 files changed, 0 insertions, 212 deletions
diff --git a/app/src/routes/+page.server.ts b/app/src/routes/+page.server.ts
deleted file mode 100644
index df076d7..0000000
--- a/app/src/routes/+page.server.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import type { PageServerLoad } from './$types';
-import actual from '$lib/server/actual';
-import sb1 from "$lib/server/sb1"
-
-export const load = (async () => {
- return {
- actual: {
- budgets: await actual.budget.get_budgets(),
- accounts: await actual.budget.get_accounts(),
- },
- sb1: {
- accounts: (await sb1.data.get_accounts())?.accounts
- }
- };
-}) satisfies PageServerLoad; \ No newline at end of file
diff --git a/app/src/routes/+page.svelte b/app/src/routes/+page.svelte
deleted file mode 100644
index 693a430..0000000
--- a/app/src/routes/+page.svelte
+++ /dev/null
@@ -1,94 +0,0 @@
-<script lang="ts">
- import Button from "$lib/ui/button.svelte";
- import {
- clear_auth_session,
- init_auth_session,
- do_import,
- } from "./methods.remote";
- import type { PageProps } from "./$types";
- import type { ImportForm } from "$lib/shared";
-
- let { data }: PageProps = $props();
- let navigating = $state(false);
- let form = $state<ImportForm>({
- budgetId: "",
- mappings: [],
- dryRun: true,
- });
-
- async function run(e: SubmitEvent) {
- e.preventDefault();
- if (!form.mappings.length) {
- return;
- }
- await do_import(form);
- }
-
- async function authorize() {
- navigating = true;
- location.href = await init_auth_session();
- }
-
- async function logout() {
- navigating = true;
- await clear_auth_session();
- location.reload();
- }
-
- function onMappingChanged(sb1Id: string, actualId: string) {
- let mappings = form.mappings;
- if (mappings.find((c) => c.sb1Id === sb1Id))
- mappings = mappings.filter((c) => c.sb1Id !== sb1Id);
- mappings.push({ sb1Id, actualId });
- form.mappings = mappings;
- }
-</script>
-
-<main>
- {#if data.sb1.accounts?.length}
- <form onsubmit={run}>
- <h3>Importer</h3>
- <fieldset>
- <h4>Kontoer</h4>
- {#each data.sb1.accounts as account}
- {@const actualId = `mapping-${account.key}-actual`}
- <div>
- <code>{account.name}</code>
- <span>&#8594;</span>
- <label for={actualId}>Actual</label>
- <select
- name={actualId}
- id={actualId}
- onchange={(e) =>
- onMappingChanged(
- account.key,
- e.currentTarget.value,
- )}
- >
- <option value="-" selected>-</option>
- {#each data.actual.accounts as actual}
- <option value={actual.id}>
- {actual.name}
- </option>
- {/each}
- </select>
- </div>
- {/each}
- <h4>Ellers</h4>
- <input
- type="checkbox"
- id="dry"
- bind:checked={form.dryRun}
- /><label for="dry">Tørrkjøring</label><br /><br />
- <input type="submit" />
- </fieldset>
- </form>
- <h3>Annet</h3>
- <Button onclick={logout} loading={navigating}>Logg ut</Button>
- <div></div>
- {:else}
- <Button onclick={authorize} loading={navigating}
- >Autentisér hos Sparebanken 1</Button
- >
- {/if}
-</main>
diff --git a/app/src/routes/methods.remote.ts b/app/src/routes/methods.remote.ts
deleted file mode 100644
index d6fd908..0000000
--- a/app/src/routes/methods.remote.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { db } from "$lib/server/db";
-import { SyncSessionTable } from "$lib/server/db/schema";
-import { command, query } from "$app/server";
-import sb1 from "$lib/server/sb1";
-import actual from "$lib/server/actual";
-import { ImportForm } from "$lib/shared";
-
-const init_auth_session = command(async () => {
- return await sb1.auth.init_auth_session()
-})
-
-const clear_auth_session = query(async () => {
- await db.delete(SyncSessionTable)
-})
-
-const do_import = command(ImportForm, async (form) => {
- for (const mapping of form.mappings) {
- const transactions = await sb1.data.get_transactions(mapping.sb1Id)
- if (!transactions?.length) continue
- console.log(await actual.budget.import_transactions(mapping.actualId, transactions, form.dryRun))
- }
-})
-
-const init_sb1 = command(async () => {
- return await sb1.init()
-})
-
-const init_actual = command(async () => {
- return await actual.init()
-})
-
-export {
- init_auth_session,
- do_import,
- init_actual,
- init_sb1,
- clear_auth_session
-}
diff --git a/app/src/routes/sb1-authorize/+server.ts b/app/src/routes/sb1-authorize/+server.ts
deleted file mode 100644
index d6b8fbf..0000000
--- a/app/src/routes/sb1-authorize/+server.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { error, redirect, json } from '@sveltejs/kit';
-import type { RequestHandler } from './$types';
-import { db } from '$lib/server/db';
-import { SyncSessionTable } from '$lib/server/db/schema';
-import { eq } from 'drizzle-orm';
-import { SB1_ID, SB1_REDIRECT_URI, SB1_SECRET } from '$env/static/private';
-import { Temporal } from "temporal-polyfill"
-import sb1 from "$lib/server/sb1"
-
-export const GET: RequestHandler = async ({ url }) => {
- const code = url.searchParams.get('code')
- const state = url.searchParams.get('state');
-
- if (!code) error(400, "?code is missing")
- if (!state) error(400, "?state is missing")
-
- const session = await db.select().from(SyncSessionTable).where(eq(SyncSessionTable.authzState, state))
- const { id } = session[0]
- if (!id) return error(500, "Ingen session")
-
- const fd = new URLSearchParams()
-
- fd.set("client_id", SB1_ID)
- fd.set("client_secret", SB1_SECRET)
- fd.set("redirect_uri", SB1_REDIRECT_URI)
- fd.set("code", code)
- fd.set("state", state)
- fd.set("grant_type", "authorization_code")
-
- const response = await fetch("https://api.sparebank1.no/oauth/token", {
- method: "post",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded"
- },
- body: fd
- })
-
- const responseJson = await response.json()
-
- if (response.ok) {
- const epoch = Temporal.Now.instant().epochMilliseconds
- await db.update(SyncSessionTable).set({ tokens: responseJson, accessTokenCreated: epoch.toString(), refreshTokenCreated: epoch.toString() }).where(eq(SyncSessionTable.id, id))
- await sb1.init()
- redirect(302, "/")
- } else {
- return json(responseJson)
- }
-}
diff --git a/app/src/routes/status.svelte b/app/src/routes/status.svelte
deleted file mode 100644
index fe09193..0000000
--- a/app/src/routes/status.svelte
+++ /dev/null
@@ -1,17 +0,0 @@
-<script lang="ts">
- type Props = {
- type: "sb1" | "actual";
- };
- import { onMount } from "svelte";
- let { type }: Props = $props();
-
- onMount(() => {});
-</script>
-
-<div>
- <span>{type}</span>
- <div class="status"></div>
- <div class="refresh">&#10226;</div>
-</div>
-
-<style></style>