From df71664f20312e81134ee90ad561f55d3020ee0a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 30 Aug 2024 20:04:29 -0700 Subject: typescript --- src/routes/(app)/+layout.server.js | 48 ------ src/routes/(app)/+layout.server.ts | 48 ++++++ .../(app)/[username]/(profile)/+layout.server.js | 26 --- .../(app)/[username]/(profile)/+layout.server.ts | 26 +++ .../(app)/[username]/(profile)/+page.server.js | 11 -- .../(app)/[username]/(profile)/+page.server.ts | 11 ++ .../(profile)/event/[id]/+page.server.js | 12 -- .../(profile)/event/[id]/+page.server.ts | 12 ++ src/routes/(app)/[username]/+layout.server.js | 18 -- src/routes/(app)/[username]/+layout.server.ts | 18 ++ .../(app)/[username]/address/+page.server.js | 10 -- .../(app)/[username]/address/+page.server.ts | 10 ++ .../(app)/[username]/card/[serial]/+page.server.js | 16 -- .../(app)/[username]/card/[serial]/+page.server.ts | 16 ++ src/routes/(app)/[username]/funds/+page.server.js | 0 src/routes/(app)/[username]/funds/+page.server.ts | 0 src/routes/(app)/[username]/generate/+server.js | 11 -- src/routes/(app)/[username]/generate/+server.ts | 11 ++ src/routes/(app)/[username]/invoice/+server.js | 7 - src/routes/(app)/[username]/invoice/+server.ts | 7 + .../[username]/invoice/[id]/+layout.server.js | 39 ----- .../[username]/invoice/[id]/+layout.server.ts | 39 +++++ .../(app)/[username]/invoice/[id]/+page.server.js | 5 - .../(app)/[username]/invoice/[id]/+page.server.ts | 5 + .../[username]/invoice/[id]/memo/+page.server.js | 13 -- .../[username]/invoice/[id]/memo/+page.server.ts | 13 ++ .../[username]/invoice/[id]/tip/+page.server.js | 12 -- .../[username]/invoice/[id]/tip/+page.server.ts | 12 ++ .../(app)/[username]/items/[id]/+page.server.js | 21 --- .../(app)/[username]/items/[id]/+page.server.ts | 21 +++ .../(app)/[username]/items/create/+page.server.js | 16 -- .../(app)/[username]/items/create/+page.server.ts | 16 ++ src/routes/(app)/[username]/map/+page.server.js | 12 -- src/routes/(app)/[username]/map/+page.server.ts | 12 ++ .../(app)/[username]/messages/+page.server.js | 33 ---- .../(app)/[username]/messages/+page.server.ts | 33 ++++ .../messages/[recipient]/+page.server.js | 23 --- .../messages/[recipient]/+page.server.ts | 23 +++ .../[username]/payments/[...page]/+page.server.js | 26 --- .../[username]/payments/[...page]/+page.server.ts | 26 +++ .../(app)/[username]/payments/[...page]/+server.js | 18 -- .../(app)/[username]/payments/[...page]/+server.ts | 18 ++ .../[username]/receive/[...param]/+page.server.js | 20 --- .../[username]/receive/[...param]/+page.server.ts | 20 +++ src/routes/(app)/[username]/reset/+server.js | 10 -- src/routes/(app)/[username]/reset/+server.ts | 10 ++ .../[username]/settings/[...tab]/+page.server.js | 34 ---- .../[username]/settings/[...tab]/+page.server.ts | 34 ++++ src/routes/(app)/[username]/shopify.js/+server.js | 191 --------------------- src/routes/(app)/[username]/shopify.js/+server.ts | 191 +++++++++++++++++++++ .../(app)/[username]/verify/[code]/+page.server.js | 14 -- .../(app)/[username]/verify/[code]/+page.server.ts | 14 ++ src/routes/(app)/admin/+layout.server.js | 11 -- src/routes/(app)/admin/+layout.server.ts | 11 ++ src/routes/(app)/admin/+page.server.js | 12 -- src/routes/(app)/admin/+page.server.ts | 12 ++ src/routes/(app)/buy/+page.server.js | 28 --- src/routes/(app)/buy/+page.server.ts | 28 +++ src/routes/(app)/disable2fa/+server.js | 13 -- src/routes/(app)/disable2fa/+server.ts | 13 ++ src/routes/(app)/ecash/[id]/+layout.server.js | 10 -- src/routes/(app)/ecash/[id]/+layout.server.ts | 10 ++ src/routes/(app)/ecash/[id]/+page.server.js | 21 --- src/routes/(app)/ecash/[id]/+page.server.ts | 21 +++ src/routes/(app)/enable2fa/+server.js | 8 - src/routes/(app)/enable2fa/+server.ts | 8 + src/routes/(app)/events/+server.js | 6 - src/routes/(app)/events/+server.ts | 6 + src/routes/(app)/forgot/+page.server.js | 14 -- src/routes/(app)/forgot/+page.server.ts | 14 ++ src/routes/(app)/fund/[id]/+page.server.js | 23 --- src/routes/(app)/fund/[id]/+page.server.ts | 23 +++ src/routes/(app)/fund/[id]/sweep/+page.server.js | 13 -- src/routes/(app)/fund/[id]/sweep/+page.server.ts | 13 ++ .../(app)/fund/[id]/withdraw/+page.server.js | 20 --- .../(app)/fund/[id]/withdraw/+page.server.ts | 20 +++ src/routes/(app)/fund/[id]/withdraw/+server.js | 6 - src/routes/(app)/fund/[id]/withdraw/+server.ts | 6 + src/routes/(app)/ln/[lnurl]/+page.server.js | 75 -------- src/routes/(app)/ln/[lnurl]/+page.server.ts | 75 ++++++++ src/routes/(app)/locations/+server.js | 15 -- src/routes/(app)/locations/+server.ts | 15 ++ src/routes/(app)/login/+page.server.js | 29 ---- src/routes/(app)/login/+page.server.ts | 29 ++++ src/routes/(app)/logout/+page.server.js | 14 -- src/routes/(app)/logout/+page.server.ts | 14 ++ src/routes/(app)/otpsecret/+server.js | 17 -- src/routes/(app)/otpsecret/+server.ts | 17 ++ src/routes/(app)/password/+server.js | 7 - src/routes/(app)/password/+server.ts | 7 + .../pay/[username]/[...amount]/+page.server.js | 50 ------ .../pay/[username]/[...amount]/+page.server.ts | 50 ++++++ src/routes/(app)/payment/[id]/+page.server.js | 7 - src/routes/(app)/payment/[id]/+page.server.ts | 7 + src/routes/(app)/payment/[id]/bump/+server.js | 12 -- src/routes/(app)/payment/[id]/bump/+server.ts | 12 ++ .../(app)/payment/[id]/plain/+page.server.js | 6 - .../(app)/payment/[id]/plain/+page.server.ts | 6 + src/routes/(app)/payment/[id]/print/+server.js | 7 - src/routes/(app)/payment/[id]/print/+server.ts | 7 + src/routes/(app)/pin/+server.js | 7 - src/routes/(app)/pin/+server.ts | 7 + src/routes/(app)/qr/[text]/+page.server.js | 8 - src/routes/(app)/qr/[text]/+page.server.ts | 8 + .../(app)/receive/[...token]/+page.server.js | 17 -- .../(app)/receive/[...token]/+page.server.ts | 17 ++ src/routes/(app)/register/+page.server.js | 41 ----- src/routes/(app)/register/+page.server.ts | 41 +++++ src/routes/(app)/reset/[code]/+page.server.js | 30 ---- src/routes/(app)/reset/[code]/+page.server.ts | 30 ++++ src/routes/(app)/send/[...text]/+page.server.js | 19 -- src/routes/(app)/send/[...text]/+page.server.ts | 19 ++ .../[amount]/[...feeRate]/+page.server.js | 35 ---- .../[amount]/[...feeRate]/+page.server.ts | 35 ++++ src/routes/(app)/send/ecash/+page.server.js | 19 -- src/routes/(app)/send/ecash/+page.server.ts | 19 ++ .../send/fund/[name]/[...amount]/+page.server.js | 17 -- .../send/fund/[name]/[...amount]/+page.server.ts | 17 ++ src/routes/(app)/send/invoice/[id]/+page.server.js | 37 ---- src/routes/(app)/send/invoice/[id]/+page.server.ts | 37 ++++ .../(app)/send/lightning/[payreq]/+page.server.js | 24 --- .../(app)/send/lightning/[payreq]/+page.server.ts | 24 +++ src/routes/(app)/sent/+page.server.js | 6 - src/routes/(app)/sent/+page.server.ts | 6 + src/routes/(app)/support/+server.js | 9 - src/routes/(app)/support/+server.ts | 9 + src/routes/(app)/withdraw/+server.js | 10 -- src/routes/(app)/withdraw/+server.ts | 10 ++ src/routes/(static)/+layout.server.js | 16 -- src/routes/(static)/+layout.server.ts | 16 ++ src/routes/(static)/docs/+page.server.js | 4 - src/routes/(static)/docs/+page.server.ts | 4 + src/routes/+layout.js | 14 -- src/routes/+layout.server.js | 46 ----- src/routes/+layout.server.ts | 46 +++++ src/routes/+layout.ts | 14 ++ src/routes/+page.server.js | 3 - src/routes/+page.server.ts | 3 + src/routes/about/+server.js | 5 - src/routes/about/+server.ts | 5 + src/routes/map/+page.server.js | 11 -- src/routes/map/+page.server.ts | 11 ++ src/routes/start/+server.js | 10 -- src/routes/start/+server.ts | 10 ++ 144 files changed, 1458 insertions(+), 1458 deletions(-) delete mode 100644 src/routes/(app)/+layout.server.js create mode 100644 src/routes/(app)/+layout.server.ts delete mode 100644 src/routes/(app)/[username]/(profile)/+layout.server.js create mode 100644 src/routes/(app)/[username]/(profile)/+layout.server.ts delete mode 100644 src/routes/(app)/[username]/(profile)/+page.server.js create mode 100644 src/routes/(app)/[username]/(profile)/+page.server.ts delete mode 100644 src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js create mode 100644 src/routes/(app)/[username]/(profile)/event/[id]/+page.server.ts delete mode 100644 src/routes/(app)/[username]/+layout.server.js create mode 100644 src/routes/(app)/[username]/+layout.server.ts delete mode 100644 src/routes/(app)/[username]/address/+page.server.js create mode 100644 src/routes/(app)/[username]/address/+page.server.ts delete mode 100644 src/routes/(app)/[username]/card/[serial]/+page.server.js create mode 100644 src/routes/(app)/[username]/card/[serial]/+page.server.ts delete mode 100644 src/routes/(app)/[username]/funds/+page.server.js create mode 100644 src/routes/(app)/[username]/funds/+page.server.ts delete mode 100644 src/routes/(app)/[username]/generate/+server.js create mode 100644 src/routes/(app)/[username]/generate/+server.ts delete mode 100644 src/routes/(app)/[username]/invoice/+server.js create mode 100644 src/routes/(app)/[username]/invoice/+server.ts delete mode 100644 src/routes/(app)/[username]/invoice/[id]/+layout.server.js create mode 100644 src/routes/(app)/[username]/invoice/[id]/+layout.server.ts delete mode 100644 src/routes/(app)/[username]/invoice/[id]/+page.server.js create mode 100644 src/routes/(app)/[username]/invoice/[id]/+page.server.ts delete mode 100644 src/routes/(app)/[username]/invoice/[id]/memo/+page.server.js create mode 100644 src/routes/(app)/[username]/invoice/[id]/memo/+page.server.ts delete mode 100644 src/routes/(app)/[username]/invoice/[id]/tip/+page.server.js create mode 100644 src/routes/(app)/[username]/invoice/[id]/tip/+page.server.ts delete mode 100644 src/routes/(app)/[username]/items/[id]/+page.server.js create mode 100644 src/routes/(app)/[username]/items/[id]/+page.server.ts delete mode 100644 src/routes/(app)/[username]/items/create/+page.server.js create mode 100644 src/routes/(app)/[username]/items/create/+page.server.ts delete mode 100644 src/routes/(app)/[username]/map/+page.server.js create mode 100644 src/routes/(app)/[username]/map/+page.server.ts delete mode 100644 src/routes/(app)/[username]/messages/+page.server.js create mode 100644 src/routes/(app)/[username]/messages/+page.server.ts delete mode 100644 src/routes/(app)/[username]/messages/[recipient]/+page.server.js create mode 100644 src/routes/(app)/[username]/messages/[recipient]/+page.server.ts delete mode 100644 src/routes/(app)/[username]/payments/[...page]/+page.server.js create mode 100644 src/routes/(app)/[username]/payments/[...page]/+page.server.ts delete mode 100644 src/routes/(app)/[username]/payments/[...page]/+server.js create mode 100644 src/routes/(app)/[username]/payments/[...page]/+server.ts delete mode 100644 src/routes/(app)/[username]/receive/[...param]/+page.server.js create mode 100644 src/routes/(app)/[username]/receive/[...param]/+page.server.ts delete mode 100644 src/routes/(app)/[username]/reset/+server.js create mode 100644 src/routes/(app)/[username]/reset/+server.ts delete mode 100644 src/routes/(app)/[username]/settings/[...tab]/+page.server.js create mode 100644 src/routes/(app)/[username]/settings/[...tab]/+page.server.ts delete mode 100644 src/routes/(app)/[username]/shopify.js/+server.js create mode 100644 src/routes/(app)/[username]/shopify.js/+server.ts delete mode 100644 src/routes/(app)/[username]/verify/[code]/+page.server.js create mode 100644 src/routes/(app)/[username]/verify/[code]/+page.server.ts delete mode 100644 src/routes/(app)/admin/+layout.server.js create mode 100644 src/routes/(app)/admin/+layout.server.ts delete mode 100644 src/routes/(app)/admin/+page.server.js create mode 100644 src/routes/(app)/admin/+page.server.ts delete mode 100644 src/routes/(app)/buy/+page.server.js create mode 100644 src/routes/(app)/buy/+page.server.ts delete mode 100644 src/routes/(app)/disable2fa/+server.js create mode 100644 src/routes/(app)/disable2fa/+server.ts delete mode 100644 src/routes/(app)/ecash/[id]/+layout.server.js create mode 100644 src/routes/(app)/ecash/[id]/+layout.server.ts delete mode 100644 src/routes/(app)/ecash/[id]/+page.server.js create mode 100644 src/routes/(app)/ecash/[id]/+page.server.ts delete mode 100644 src/routes/(app)/enable2fa/+server.js create mode 100644 src/routes/(app)/enable2fa/+server.ts delete mode 100644 src/routes/(app)/events/+server.js create mode 100644 src/routes/(app)/events/+server.ts delete mode 100644 src/routes/(app)/forgot/+page.server.js create mode 100644 src/routes/(app)/forgot/+page.server.ts delete mode 100644 src/routes/(app)/fund/[id]/+page.server.js create mode 100644 src/routes/(app)/fund/[id]/+page.server.ts delete mode 100644 src/routes/(app)/fund/[id]/sweep/+page.server.js create mode 100644 src/routes/(app)/fund/[id]/sweep/+page.server.ts delete mode 100644 src/routes/(app)/fund/[id]/withdraw/+page.server.js create mode 100644 src/routes/(app)/fund/[id]/withdraw/+page.server.ts delete mode 100644 src/routes/(app)/fund/[id]/withdraw/+server.js create mode 100644 src/routes/(app)/fund/[id]/withdraw/+server.ts delete mode 100644 src/routes/(app)/ln/[lnurl]/+page.server.js create mode 100644 src/routes/(app)/ln/[lnurl]/+page.server.ts delete mode 100644 src/routes/(app)/locations/+server.js create mode 100644 src/routes/(app)/locations/+server.ts delete mode 100644 src/routes/(app)/login/+page.server.js create mode 100644 src/routes/(app)/login/+page.server.ts delete mode 100644 src/routes/(app)/logout/+page.server.js create mode 100644 src/routes/(app)/logout/+page.server.ts delete mode 100644 src/routes/(app)/otpsecret/+server.js create mode 100644 src/routes/(app)/otpsecret/+server.ts delete mode 100644 src/routes/(app)/password/+server.js create mode 100644 src/routes/(app)/password/+server.ts delete mode 100644 src/routes/(app)/pay/[username]/[...amount]/+page.server.js create mode 100644 src/routes/(app)/pay/[username]/[...amount]/+page.server.ts delete mode 100644 src/routes/(app)/payment/[id]/+page.server.js create mode 100644 src/routes/(app)/payment/[id]/+page.server.ts delete mode 100644 src/routes/(app)/payment/[id]/bump/+server.js create mode 100644 src/routes/(app)/payment/[id]/bump/+server.ts delete mode 100644 src/routes/(app)/payment/[id]/plain/+page.server.js create mode 100644 src/routes/(app)/payment/[id]/plain/+page.server.ts delete mode 100644 src/routes/(app)/payment/[id]/print/+server.js create mode 100644 src/routes/(app)/payment/[id]/print/+server.ts delete mode 100644 src/routes/(app)/pin/+server.js create mode 100644 src/routes/(app)/pin/+server.ts delete mode 100644 src/routes/(app)/qr/[text]/+page.server.js create mode 100644 src/routes/(app)/qr/[text]/+page.server.ts delete mode 100644 src/routes/(app)/receive/[...token]/+page.server.js create mode 100644 src/routes/(app)/receive/[...token]/+page.server.ts delete mode 100644 src/routes/(app)/register/+page.server.js create mode 100644 src/routes/(app)/register/+page.server.ts delete mode 100644 src/routes/(app)/reset/[code]/+page.server.js create mode 100644 src/routes/(app)/reset/[code]/+page.server.ts delete mode 100644 src/routes/(app)/send/[...text]/+page.server.js create mode 100644 src/routes/(app)/send/[...text]/+page.server.ts delete mode 100644 src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js create mode 100644 src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts delete mode 100644 src/routes/(app)/send/ecash/+page.server.js create mode 100644 src/routes/(app)/send/ecash/+page.server.ts delete mode 100644 src/routes/(app)/send/fund/[name]/[...amount]/+page.server.js create mode 100644 src/routes/(app)/send/fund/[name]/[...amount]/+page.server.ts delete mode 100644 src/routes/(app)/send/invoice/[id]/+page.server.js create mode 100644 src/routes/(app)/send/invoice/[id]/+page.server.ts delete mode 100644 src/routes/(app)/send/lightning/[payreq]/+page.server.js create mode 100644 src/routes/(app)/send/lightning/[payreq]/+page.server.ts delete mode 100644 src/routes/(app)/sent/+page.server.js create mode 100644 src/routes/(app)/sent/+page.server.ts delete mode 100644 src/routes/(app)/support/+server.js create mode 100644 src/routes/(app)/support/+server.ts delete mode 100644 src/routes/(app)/withdraw/+server.js create mode 100644 src/routes/(app)/withdraw/+server.ts delete mode 100644 src/routes/(static)/+layout.server.js create mode 100644 src/routes/(static)/+layout.server.ts delete mode 100644 src/routes/(static)/docs/+page.server.js create mode 100644 src/routes/(static)/docs/+page.server.ts delete mode 100644 src/routes/+layout.js delete mode 100644 src/routes/+layout.server.js create mode 100644 src/routes/+layout.server.ts create mode 100644 src/routes/+layout.ts delete mode 100644 src/routes/+page.server.js create mode 100644 src/routes/+page.server.ts delete mode 100644 src/routes/about/+server.js create mode 100644 src/routes/about/+server.ts delete mode 100644 src/routes/map/+page.server.js create mode 100644 src/routes/map/+page.server.ts delete mode 100644 src/routes/start/+server.js create mode 100644 src/routes/start/+server.ts (limited to 'src') diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js deleted file mode 100644 index 655a9425..00000000 --- a/src/routes/(app)/+layout.server.js +++ /dev/null @@ -1,48 +0,0 @@ -import { redirect } from "@sveltejs/kit"; - import { get, auth, protectedRoutes } from "$lib/utils"; - -export async function load({ cookies, request, url, params }) { - let { pathname } = url; - let token = cookies.get("token"); - let rate, - rates = { USD: 1 }; - - let user; - if (token) { - try { - user = await get("/me", auth(cookies)); - } catch (e) {} - } - - if (user?.needsMigration) { - redirect(307, `/migrate`); - } - - if ( - user && - ["/login", "/register"].includes(pathname) && - request.method === "GET" - ) { - redirect(307, `/${user.username}`); - } - - if ( - protectedRoutes.find((p) => pathname.match(p)) && - (!user || user.username !== params.username) - ) { - redirect(307, "/login"); - } - - if (user && !user.pubkey && !pathname.includes("generate")) { - redirect(303, `/${user.username}/generate`); - } - - try { - rate = await get("/rate"); - rates = await get("/rates"); - } catch (e) { - console.log(e); - } - - return { user, token, rate, rates }; -} diff --git a/src/routes/(app)/+layout.server.ts b/src/routes/(app)/+layout.server.ts new file mode 100644 index 00000000..655a9425 --- /dev/null +++ b/src/routes/(app)/+layout.server.ts @@ -0,0 +1,48 @@ +import { redirect } from "@sveltejs/kit"; + import { get, auth, protectedRoutes } from "$lib/utils"; + +export async function load({ cookies, request, url, params }) { + let { pathname } = url; + let token = cookies.get("token"); + let rate, + rates = { USD: 1 }; + + let user; + if (token) { + try { + user = await get("/me", auth(cookies)); + } catch (e) {} + } + + if (user?.needsMigration) { + redirect(307, `/migrate`); + } + + if ( + user && + ["/login", "/register"].includes(pathname) && + request.method === "GET" + ) { + redirect(307, `/${user.username}`); + } + + if ( + protectedRoutes.find((p) => pathname.match(p)) && + (!user || user.username !== params.username) + ) { + redirect(307, "/login"); + } + + if (user && !user.pubkey && !pathname.includes("generate")) { + redirect(303, `/${user.username}/generate`); + } + + try { + rate = await get("/rate"); + rates = await get("/rates"); + } catch (e) { + console.log(e); + } + + return { user, token, rate, rates }; +} diff --git a/src/routes/(app)/[username]/(profile)/+layout.server.js b/src/routes/(app)/[username]/(profile)/+layout.server.js deleted file mode 100644 index a508de92..00000000 --- a/src/routes/(app)/[username]/(profile)/+layout.server.js +++ /dev/null @@ -1,26 +0,0 @@ -import { get } from "$lib/utils"; - -export async function load({ parent }) { - let { subject, user } = await parent(); - - subject.follows = []; - subject.followers = []; - - try { - subject.follows = await get(`/${subject.pubkey}/follows`); - } catch (e) { - console.log("problem fetching follows", e); - } - - try { - subject.followers = await get(`/${subject.pubkey}/followers`); - } catch (e) { - console.log("problem fetching followers", e); - } - - if (user) { - user.follows = await get(`/${user.pubkey}/follows?tagsonly=true`); - } - - return { subject, user }; -} diff --git a/src/routes/(app)/[username]/(profile)/+layout.server.ts b/src/routes/(app)/[username]/(profile)/+layout.server.ts new file mode 100644 index 00000000..a508de92 --- /dev/null +++ b/src/routes/(app)/[username]/(profile)/+layout.server.ts @@ -0,0 +1,26 @@ +import { get } from "$lib/utils"; + +export async function load({ parent }) { + let { subject, user } = await parent(); + + subject.follows = []; + subject.followers = []; + + try { + subject.follows = await get(`/${subject.pubkey}/follows`); + } catch (e) { + console.log("problem fetching follows", e); + } + + try { + subject.followers = await get(`/${subject.pubkey}/followers`); + } catch (e) { + console.log("problem fetching followers", e); + } + + if (user) { + user.follows = await get(`/${user.pubkey}/follows?tagsonly=true`); + } + + return { subject, user }; +} diff --git a/src/routes/(app)/[username]/(profile)/+page.server.js b/src/routes/(app)/[username]/(profile)/+page.server.js deleted file mode 100644 index 59eb44d5..00000000 --- a/src/routes/(app)/[username]/(profile)/+page.server.js +++ /dev/null @@ -1,11 +0,0 @@ -import { auth, get } from "$lib/utils"; - -export async function load({ cookies, depends, parent }) { - depends("app:items"); - - let { subject } = await parent(); - let items = await get(`/${subject.id}/items`, auth(cookies)); - items.map((i) => (i.quantity = 0)); - - return { items }; -} diff --git a/src/routes/(app)/[username]/(profile)/+page.server.ts b/src/routes/(app)/[username]/(profile)/+page.server.ts new file mode 100644 index 00000000..59eb44d5 --- /dev/null +++ b/src/routes/(app)/[username]/(profile)/+page.server.ts @@ -0,0 +1,11 @@ +import { auth, get } from "$lib/utils"; + +export async function load({ cookies, depends, parent }) { + depends("app:items"); + + let { subject } = await parent(); + let items = await get(`/${subject.id}/items`, auth(cookies)); + items.map((i) => (i.quantity = 0)); + + return { items }; +} diff --git a/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js b/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js deleted file mode 100644 index 42c568c5..00000000 --- a/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js +++ /dev/null @@ -1,12 +0,0 @@ -import { get } from "$lib/utils"; -import { error } from "@sveltejs/kit"; - -export async function load({ params: { id } }) { - try { - let event = await get(`/event/${id}`); - if (!event) error(500, "Event not found"); - return { event }; - } catch (e: Error) { - error(500, e.message); - } -} diff --git a/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.ts b/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.ts new file mode 100644 index 00000000..42c568c5 --- /dev/null +++ b/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.ts @@ -0,0 +1,12 @@ +import { get } from "$lib/utils"; +import { error } from "@sveltejs/kit"; + +export async function load({ params: { id } }) { + try { + let event = await get(`/event/${id}`); + if (!event) error(500, "Event not found"); + return { event }; + } catch (e: Error) { + error(500, e.message); + } +} diff --git a/src/routes/(app)/[username]/+layout.server.js b/src/routes/(app)/[username]/+layout.server.js deleted file mode 100644 index 11e6d45c..00000000 --- a/src/routes/(app)/[username]/+layout.server.js +++ /dev/null @@ -1,18 +0,0 @@ -import { get } from "$lib/utils"; -import { error } from "@sveltejs/kit"; - -export let load = async ({ cookies, depends, params: { username } }) => { - depends("app:user"); - - try { - let subject = await get(`/users/${username}`); - - let expires = new Date(); - expires.setSeconds(expires.getSeconds() + 380 * 24 * 60 * 60); - cookies.set("username", username, { path: "/", expires }); - - return { subject }; - } catch (e) { - error(500, "Unable to retrieve user account data"); - } -}; diff --git a/src/routes/(app)/[username]/+layout.server.ts b/src/routes/(app)/[username]/+layout.server.ts new file mode 100644 index 00000000..11e6d45c --- /dev/null +++ b/src/routes/(app)/[username]/+layout.server.ts @@ -0,0 +1,18 @@ +import { get } from "$lib/utils"; +import { error } from "@sveltejs/kit"; + +export let load = async ({ cookies, depends, params: { username } }) => { + depends("app:user"); + + try { + let subject = await get(`/users/${username}`); + + let expires = new Date(); + expires.setSeconds(expires.getSeconds() + 380 * 24 * 60 * 60); + cookies.set("username", username, { path: "/", expires }); + + return { subject }; + } catch (e) { + error(500, "Unable to retrieve user account data"); + } +}; diff --git a/src/routes/(app)/[username]/address/+page.server.js b/src/routes/(app)/[username]/address/+page.server.js deleted file mode 100644 index d173594a..00000000 --- a/src/routes/(app)/[username]/address/+page.server.js +++ /dev/null @@ -1,10 +0,0 @@ -import { auth, get, post } from "$lib/utils"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ cookies, params, parent }) { - let user = (await parent()).subject; - let rates = await get("/rates"); - let invoice = { type: "bitcoin" }; - let { id } = await post(`/invoice`, { invoice, user }, auth(cookies)); - redirect(307, `/${user.username}/invoice/${id}`); -} diff --git a/src/routes/(app)/[username]/address/+page.server.ts b/src/routes/(app)/[username]/address/+page.server.ts new file mode 100644 index 00000000..d173594a --- /dev/null +++ b/src/routes/(app)/[username]/address/+page.server.ts @@ -0,0 +1,10 @@ +import { auth, get, post } from "$lib/utils"; +import { redirect } from "@sveltejs/kit"; + +export async function load({ cookies, params, parent }) { + let user = (await parent()).subject; + let rates = await get("/rates"); + let invoice = { type: "bitcoin" }; + let { id } = await post(`/invoice`, { invoice, user }, auth(cookies)); + redirect(307, `/${user.username}/invoice/${id}`); +} diff --git a/src/routes/(app)/[username]/card/[serial]/+page.server.js b/src/routes/(app)/[username]/card/[serial]/+page.server.js deleted file mode 100644 index 945eee30..00000000 --- a/src/routes/(app)/[username]/card/[serial]/+page.server.js +++ /dev/null @@ -1,16 +0,0 @@ -import { auth, get } from "$lib/utils"; -import { redirect } from "@sveltejs/kit"; - -export let load = async ({ cookies, params }) => { - let { serial } = params; - let fund; - try { - fund = await get(`/fund/${serial}`, auth(cookies)); - } catch (e) { - console.log(e); - } - - if (fund) redirect(307, `/fund/${serial}`); - - return params; -}; diff --git a/src/routes/(app)/[username]/card/[serial]/+page.server.ts b/src/routes/(app)/[username]/card/[serial]/+page.server.ts new file mode 100644 index 00000000..945eee30 --- /dev/null +++ b/src/routes/(app)/[username]/card/[serial]/+page.server.ts @@ -0,0 +1,16 @@ +import { auth, get } from "$lib/utils"; +import { redirect } from "@sveltejs/kit"; + +export let load = async ({ cookies, params }) => { + let { serial } = params; + let fund; + try { + fund = await get(`/fund/${serial}`, auth(cookies)); + } catch (e) { + console.log(e); + } + + if (fund) redirect(307, `/fund/${serial}`); + + return params; +}; diff --git a/src/routes/(app)/[username]/funds/+page.server.js b/src/routes/(app)/[username]/funds/+page.server.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/routes/(app)/[username]/funds/+page.server.ts b/src/routes/(app)/[username]/funds/+page.server.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/routes/(app)/[username]/generate/+server.js b/src/routes/(app)/[username]/generate/+server.js deleted file mode 100644 index 3e3a9358..00000000 --- a/src/routes/(app)/[username]/generate/+server.js +++ /dev/null @@ -1,11 +0,0 @@ -import { auth, post } from "$lib/utils"; -import { error, json } from "@sveltejs/kit"; - -export async function POST({ cookies, request }) { - try { - let body = await request.json(); - return json(await post(`/user`, body, auth(cookies))); - } catch (e) { - error(500, e.message); - } -} diff --git a/src/routes/(app)/[username]/generate/+server.ts b/src/routes/(app)/[username]/generate/+server.ts new file mode 100644 index 00000000..3e3a9358 --- /dev/null +++ b/src/routes/(app)/[username]/generate/+server.ts @@ -0,0 +1,11 @@ +import { auth, post } from "$lib/utils"; +import { error, json } from "@sveltejs/kit"; + +export async function POST({ cookies, request }) { + try { + let body = await request.json(); + return json(await post(`/user`, body, auth(cookies))); + } catch (e) { + error(500, e.message); + } +} diff --git a/src/routes/(app)/[username]/invoice/+server.js b/src/routes/(app)/[username]/invoice/+server.js deleted file mode 100644 index 5e3d0300..00000000 --- a/src/routes/(app)/[username]/invoice/+server.js +++ /dev/null @@ -1,7 +0,0 @@ -import { auth, post } from "$lib/utils"; -import { json } from "@sveltejs/kit"; - -export let POST = async ({ cookies: c, request: r }) => { - let j = await r.json(); - return json(await post("/invoice", j, auth(c))); -}; diff --git a/src/routes/(app)/[username]/invoice/+server.ts b/src/routes/(app)/[username]/invoice/+server.ts new file mode 100644 index 00000000..5e3d0300 --- /dev/null +++ b/src/routes/(app)/[username]/invoice/+server.ts @@ -0,0 +1,7 @@ +import { auth, post } from "$lib/utils"; +import { json } from "@sveltejs/kit"; + +export let POST = async ({ cookies: c, request: r }) => { + let j = await r.json(); + return json(await post("/invoice", j, auth(c))); +}; diff --git a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js deleted file mode 100644 index 41554c9f..00000000 --- a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js +++ /dev/null @@ -1,39 +0,0 @@ -import Qr from "qrcode-base64"; -import { get } from "$lib/utils"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ depends, params, url, parent }) { - depends("app:invoice"); - - let { subject, user } = await parent(); - let { id } = params; - let invoice = await get(`/invoice/${id}`); - let options = !!url.searchParams.get("options"); - - if ( - user && - invoice.uid !== user.id && - !(url.pathname.includes("tip") || url.pathname.includes("memo")) && - !options - ) { - redirect(307, `/send/invoice/${id}`); - } - - let { amount, pending, received } = invoice; - amount = parseInt(amount); - - let paid = - (!amount && (pending || received)) || - (amount > 0 && (pending >= amount || received >= amount)); - if (paid && !url.pathname.endsWith("paid")) { - redirect( - 307, - `/${params.username}/invoice/${id}/paid` + - (options ? "?options=true" : "") - ); - } - - let src = Qr.drawImg(invoice.text || "", { size: 340 }); - - return { id, invoice, subject, src }; -} diff --git a/src/routes/(app)/[username]/invoice/[id]/+layout.server.ts b/src/routes/(app)/[username]/invoice/[id]/+layout.server.ts new file mode 100644 index 00000000..41554c9f --- /dev/null +++ b/src/routes/(app)/[username]/invoice/[id]/+layout.server.ts @@ -0,0 +1,39 @@ +import Qr from "qrcode-base64"; +import { get } from "$lib/utils"; +import { redirect } from "@sveltejs/kit"; + +export async function load({ depends, params, url, parent }) { + depends("app:invoice"); + + let { subject, user } = await parent(); + let { id } = params; + let invoice = await get(`/invoice/${id}`); + let options = !!url.searchParams.get("options"); + + if ( + user && + invoice.uid !== user.id && + !(url.pathname.includes("tip") || url.pathname.includes("memo")) && + !options + ) { + redirect(307, `/send/invoice/${id}`); + } + + let { amount, pending, received } = invoice; + amount = parseInt(amount); + + let paid = + (!amount && (pending || received)) || + (amount > 0 && (pending >= amount || received >= amount)); + if (paid && !url.pathname.endsWith("paid")) { + redirect( + 307, + `/${params.username}/invoice/${id}/paid` + + (options ? "?options=true" : "") + ); + } + + let src = Qr.drawImg(invoice.text || "", { size: 340 }); + + return { id, invoice, subject, src }; +} diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.server.js b/src/routes/(app)/[username]/invoice/[id]/+page.server.js deleted file mode 100644 index a57efa64..00000000 --- a/src/routes/(app)/[username]/invoice/[id]/+page.server.js +++ /dev/null @@ -1,5 +0,0 @@ -import invoice from "$lib/invoice"; - -export const actions = { - default: invoice, -}; diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.server.ts b/src/routes/(app)/[username]/invoice/[id]/+page.server.ts new file mode 100644 index 00000000..a57efa64 --- /dev/null +++ b/src/routes/(app)/[username]/invoice/[id]/+page.server.ts @@ -0,0 +1,5 @@ +import invoice from "$lib/invoice"; + +export const actions = { + default: invoice, +}; diff --git a/src/routes/(app)/[username]/invoice/[id]/memo/+page.server.js b/src/routes/(app)/[username]/invoice/[id]/memo/+page.server.js deleted file mode 100644 index 58d56018..00000000 --- a/src/routes/(app)/[username]/invoice/[id]/memo/+page.server.js +++ /dev/null @@ -1,13 +0,0 @@ -import invoice from "$lib/invoice"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ parent, params }) { - let { invoice } = await parent(); - if (!invoice.amount) { - redirect(307, `/${params.username}/invoice/${invoice.id}`); - } -} - -export const actions = { - default: invoice, -}; diff --git a/src/routes/(app)/[username]/invoice/[id]/memo/+page.server.ts b/src/routes/(app)/[username]/invoice/[id]/memo/+page.server.ts new file mode 100644 index 00000000..58d56018 --- /dev/null +++ b/src/routes/(app)/[username]/invoice/[id]/memo/+page.server.ts @@ -0,0 +1,13 @@ +import invoice from "$lib/invoice"; +import { redirect } from "@sveltejs/kit"; + +export async function load({ parent, params }) { + let { invoice } = await parent(); + if (!invoice.amount) { + redirect(307, `/${params.username}/invoice/${invoice.id}`); + } +} + +export const actions = { + default: invoice, +}; diff --git a/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.js b/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.js deleted file mode 100644 index b81e2364..00000000 --- a/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.js +++ /dev/null @@ -1,12 +0,0 @@ -import invoice from "$lib/invoice"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ parent, params }) { - let { invoice } = await parent(); - if (!invoice.amount) - redirect(307, `/${params.username}/invoice/${invoice.id}`); -} - -export const actions = { - default: invoice, -}; diff --git a/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.ts b/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.ts new file mode 100644 index 00000000..b81e2364 --- /dev/null +++ b/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.ts @@ -0,0 +1,12 @@ +import invoice from "$lib/invoice"; +import { redirect } from "@sveltejs/kit"; + +export async function load({ parent, params }) { + let { invoice } = await parent(); + if (!invoice.amount) + redirect(307, `/${params.username}/invoice/${invoice.id}`); +} + +export const actions = { + default: invoice, +}; diff --git a/src/routes/(app)/[username]/items/[id]/+page.server.js b/src/routes/(app)/[username]/items/[id]/+page.server.js deleted file mode 100644 index 4cfc952c..00000000 --- a/src/routes/(app)/[username]/items/[id]/+page.server.js +++ /dev/null @@ -1,21 +0,0 @@ -import { fd, auth, get, post } from "$lib/utils"; -import { fail, redirect } from "@sveltejs/kit"; - -export let load = async ({ cookies, params: { id } }) => { - let item = await get(`/items/${id}`); - return { item }; -}; - -export const actions = { - default: async ({ cookies, request, url }) => { - let form = await fd(request); - try { - await post(`/items`, form, auth(cookies)); - } catch (e) { - return fail(400, { message: e.message }); - } - - let success = `/${url.pathname.split("/")[1]}`; - redirect(307, success); - }, -}; diff --git a/src/routes/(app)/[username]/items/[id]/+page.server.ts b/src/routes/(app)/[username]/items/[id]/+page.server.ts new file mode 100644 index 00000000..4cfc952c --- /dev/null +++ b/src/routes/(app)/[username]/items/[id]/+page.server.ts @@ -0,0 +1,21 @@ +import { fd, auth, get, post } from "$lib/utils"; +import { fail, redirect } from "@sveltejs/kit"; + +export let load = async ({ cookies, params: { id } }) => { + let item = await get(`/items/${id}`); + return { item }; +}; + +export const actions = { + default: async ({ cookies, request, url }) => { + let form = await fd(request); + try { + await post(`/items`, form, auth(cookies)); + } catch (e) { + return fail(400, { message: e.message }); + } + + let success = `/${url.pathname.split("/")[1]}`; + redirect(307, success); + }, +}; diff --git a/src/routes/(app)/[username]/items/create/+page.server.js b/src/routes/(app)/[username]/items/create/+page.server.js deleted file mode 100644 index 8cb48399..00000000 --- a/src/routes/(app)/[username]/items/create/+page.server.js +++ /dev/null @@ -1,16 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { fd, auth, get, post } from "$lib/utils"; - -export const actions = { - default: async ({ cookies, request, url }) => { - let form = await fd(request); - try { - await post("/items", form, auth(cookies)); - } catch (e) { - return fail(400, { message: e.message }); - } - - let success = `/${url.pathname.split("/")[1]}`; - redirect(307, success); - }, -}; diff --git a/src/routes/(app)/[username]/items/create/+page.server.ts b/src/routes/(app)/[username]/items/create/+page.server.ts new file mode 100644 index 00000000..8cb48399 --- /dev/null +++ b/src/routes/(app)/[username]/items/create/+page.server.ts @@ -0,0 +1,16 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { fd, auth, get, post } from "$lib/utils"; + +export const actions = { + default: async ({ cookies, request, url }) => { + let form = await fd(request); + try { + await post("/items", form, auth(cookies)); + } catch (e) { + return fail(400, { message: e.message }); + } + + let success = `/${url.pathname.split("/")[1]}`; + redirect(307, success); + }, +}; diff --git a/src/routes/(app)/[username]/map/+page.server.js b/src/routes/(app)/[username]/map/+page.server.js deleted file mode 100644 index 616d28f6..00000000 --- a/src/routes/(app)/[username]/map/+page.server.js +++ /dev/null @@ -1,12 +0,0 @@ -import { get } from "$lib/utils"; - -// export const prerender = true; -export let load = async () => { - let data = { locations: [] }; - - try { - data = await get("/locations"); - } catch (e) {} - - return data; -}; diff --git a/src/routes/(app)/[username]/map/+page.server.ts b/src/routes/(app)/[username]/map/+page.server.ts new file mode 100644 index 00000000..616d28f6 --- /dev/null +++ b/src/routes/(app)/[username]/map/+page.server.ts @@ -0,0 +1,12 @@ +import { get } from "$lib/utils"; + +// export const prerender = true; +export let load = async () => { + let data = { locations: [] }; + + try { + data = await get("/locations"); + } catch (e) {} + + return data; +}; diff --git a/src/routes/(app)/[username]/messages/+page.server.js b/src/routes/(app)/[username]/messages/+page.server.js deleted file mode 100644 index 33d9ccaa..00000000 --- a/src/routes/(app)/[username]/messages/+page.server.js +++ /dev/null @@ -1,33 +0,0 @@ -import { auth, get } from "$lib/utils"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ cookies, params, parent, url }) { - let { user } = await parent(); - if (user.username !== params.username) redirect(307, `/${params.username}`); - let { since = 0 } = params; - - let messages = [], - notes = []; - - if (user?.pubkey) { - let { pubkey } = user; - try { - messages = await get(`/${pubkey}/${since}/messages`); - messages = messages.sort((a, b) => b.created_at - a.created_at); - } catch (e) { - console.log(`failed to fetch nostr messages`, e); - } - - try { - notes = await get(`/${pubkey}/notes`); - } catch (e) { - console.log(`failed to fetch nostr notes for ${pubkey}`, e); - } - - notes.map((e) => { - e.seen = e.created_at; - }); - } - - return { messages, notes }; -} diff --git a/src/routes/(app)/[username]/messages/+page.server.ts b/src/routes/(app)/[username]/messages/+page.server.ts new file mode 100644 index 00000000..33d9ccaa --- /dev/null +++ b/src/routes/(app)/[username]/messages/+page.server.ts @@ -0,0 +1,33 @@ +import { auth, get } from "$lib/utils"; +import { redirect } from "@sveltejs/kit"; + +export async function load({ cookies, params, parent, url }) { + let { user } = await parent(); + if (user.username !== params.username) redirect(307, `/${params.username}`); + let { since = 0 } = params; + + let messages = [], + notes = []; + + if (user?.pubkey) { + let { pubkey } = user; + try { + messages = await get(`/${pubkey}/${since}/messages`); + messages = messages.sort((a, b) => b.created_at - a.created_at); + } catch (e) { + console.log(`failed to fetch nostr messages`, e); + } + + try { + notes = await get(`/${pubkey}/notes`); + } catch (e) { + console.log(`failed to fetch nostr notes for ${pubkey}`, e); + } + + notes.map((e) => { + e.seen = e.created_at; + }); + } + + return { messages, notes }; +} diff --git a/src/routes/(app)/[username]/messages/[recipient]/+page.server.js b/src/routes/(app)/[username]/messages/[recipient]/+page.server.js deleted file mode 100644 index 6936a06b..00000000 --- a/src/routes/(app)/[username]/messages/[recipient]/+page.server.js +++ /dev/null @@ -1,23 +0,0 @@ -import { get } from "$lib/utils"; - -export async function load({ params, parent, url }) { - let { user } = await parent(); - let { since = 0 } = params; - - let messages = []; - let recipient = await get(`/users/${params.recipient}`); - - try { - messages = await get(`/${user.pubkey}/${since}/messages`); - - messages = messages - .filter( - (m) => m.recipient?.id === recipient.id || m.author?.id === recipient.id - ) - .sort((a, b) => a.created_at - b.created_at); - } catch (e) { - console.log(`failed to fetch nostr messages`, e); - } - - return { messages, recipient, user }; -} diff --git a/src/routes/(app)/[username]/messages/[recipient]/+page.server.ts b/src/routes/(app)/[username]/messages/[recipient]/+page.server.ts new file mode 100644 index 00000000..6936a06b --- /dev/null +++ b/src/routes/(app)/[username]/messages/[recipient]/+page.server.ts @@ -0,0 +1,23 @@ +import { get } from "$lib/utils"; + +export async function load({ params, parent, url }) { + let { user } = await parent(); + let { since = 0 } = params; + + let messages = []; + let recipient = await get(`/users/${params.recipient}`); + + try { + messages = await get(`/${user.pubkey}/${since}/messages`); + + messages = messages + .filter( + (m) => m.recipient?.id === recipient.id || m.author?.id === recipient.id + ) + .sort((a, b) => a.created_at - b.created_at); + } catch (e) { + console.log(`failed to fetch nostr messages`, e); + } + + return { messages, recipient, user }; +} diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.server.js b/src/routes/(app)/[username]/payments/[...page]/+page.server.js deleted file mode 100644 index 4a539e43..00000000 --- a/src/routes/(app)/[username]/payments/[...page]/+page.server.js +++ /dev/null @@ -1,26 +0,0 @@ -import { get, auth } from "$lib/utils"; - -let limit = 25; - -export async function load({ cookies, depends, params, request }) { - depends("app:payments"); - - let parts = params.page.split("/"); - - let start, end, page; - if (parts.length === 1) [page] = parts; - if (parts.length === 2) [start, page] = parts; - if (parts.length === 3) [start, end, page] = parts; - if (!parseInt(page)) page = 1; - - let offset = (page - 1) * limit; - if (!start) start = Date.now() / 1000 - 24 * 60 * 60; - - let url = `/payments?start=${start * 1000}&limit=${limit}&offset=${offset}`; - if (end) url += `&end=${end * 1000}`; - - let { count, payments, incoming, outgoing } = await get(url, auth(cookies)); - let pages = new Array(Math.ceil(count / limit)); - - return { payments, page, pages, start, end, incoming, outgoing }; -} diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.server.ts b/src/routes/(app)/[username]/payments/[...page]/+page.server.ts new file mode 100644 index 00000000..4a539e43 --- /dev/null +++ b/src/routes/(app)/[username]/payments/[...page]/+page.server.ts @@ -0,0 +1,26 @@ +import { get, auth } from "$lib/utils"; + +let limit = 25; + +export async function load({ cookies, depends, params, request }) { + depends("app:payments"); + + let parts = params.page.split("/"); + + let start, end, page; + if (parts.length === 1) [page] = parts; + if (parts.length === 2) [start, page] = parts; + if (parts.length === 3) [start, end, page] = parts; + if (!parseInt(page)) page = 1; + + let offset = (page - 1) * limit; + if (!start) start = Date.now() / 1000 - 24 * 60 * 60; + + let url = `/payments?start=${start * 1000}&limit=${limit}&offset=${offset}`; + if (end) url += `&end=${end * 1000}`; + + let { count, payments, incoming, outgoing } = await get(url, auth(cookies)); + let pages = new Array(Math.ceil(count / limit)); + + return { payments, page, pages, start, end, incoming, outgoing }; +} diff --git a/src/routes/(app)/[username]/payments/[...page]/+server.js b/src/routes/(app)/[username]/payments/[...page]/+server.js deleted file mode 100644 index a81faaf3..00000000 --- a/src/routes/(app)/[username]/payments/[...page]/+server.js +++ /dev/null @@ -1,18 +0,0 @@ -import { get, auth } from "$lib/utils"; -import { json } from "@sveltejs/kit"; - -export async function GET({ cookies, params }) { - let parts = params.page.split("/"); - - let start, end; - if (parts.length === 1) [start] = parts; - if (parts.length === 2) [start, end] = parts; - - if (!start) start = Date.now() / 1000 - 24 * 60 * 60; - - let url = `/payments?start=${start * 1000}`; - if (end) url += `&end=${end * 1000}`; - - let { payments } = await get(url, auth(cookies)); - return json({ payments }); -} diff --git a/src/routes/(app)/[username]/payments/[...page]/+server.ts b/src/routes/(app)/[username]/payments/[...page]/+server.ts new file mode 100644 index 00000000..a81faaf3 --- /dev/null +++ b/src/routes/(app)/[username]/payments/[...page]/+server.ts @@ -0,0 +1,18 @@ +import { get, auth } from "$lib/utils"; +import { json } from "@sveltejs/kit"; + +export async function GET({ cookies, params }) { + let parts = params.page.split("/"); + + let start, end; + if (parts.length === 1) [start] = parts; + if (parts.length === 2) [start, end] = parts; + + if (!start) start = Date.now() / 1000 - 24 * 60 * 60; + + let url = `/payments?start=${start * 1000}`; + if (end) url += `&end=${end * 1000}`; + + let { payments } = await get(url, auth(cookies)); + return json({ payments }); +} diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.server.js b/src/routes/(app)/[username]/receive/[...param]/+page.server.js deleted file mode 100644 index 953954e9..00000000 --- a/src/routes/(app)/[username]/receive/[...param]/+page.server.js +++ /dev/null @@ -1,20 +0,0 @@ -import { redirect } from "@sveltejs/kit"; -import { auth, post } from "$lib/utils"; -import invoice from "$lib/invoice"; - -export let load = async ({ cookies, parent }) => { - let {subject, user, rates } = await parent(); - - let invoice = { - type: "lightning", - rate: rates[user?.currency || subject?.currency], - }; - - if(!user) user = subject; - invoice = await post("/invoice", { invoice, user }, auth(cookies)); - let { id } = invoice; - - if (invoice.memoPrompt && !invoice.memo) { - redirect(307, `/${user.username}/invoice/${id}/memo`); - } else redirect(307, `/${user.username}/invoice/${id}`); -}; diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.server.ts b/src/routes/(app)/[username]/receive/[...param]/+page.server.ts new file mode 100644 index 00000000..953954e9 --- /dev/null +++ b/src/routes/(app)/[username]/receive/[...param]/+page.server.ts @@ -0,0 +1,20 @@ +import { redirect } from "@sveltejs/kit"; +import { auth, post } from "$lib/utils"; +import invoice from "$lib/invoice"; + +export let load = async ({ cookies, parent }) => { + let {subject, user, rates } = await parent(); + + let invoice = { + type: "lightning", + rate: rates[user?.currency || subject?.currency], + }; + + if(!user) user = subject; + invoice = await post("/invoice", { invoice, user }, auth(cookies)); + let { id } = invoice; + + if (invoice.memoPrompt && !invoice.memo) { + redirect(307, `/${user.username}/invoice/${id}/memo`); + } else redirect(307, `/${user.username}/invoice/${id}`); +}; diff --git a/src/routes/(app)/[username]/reset/+server.js b/src/routes/(app)/[username]/reset/+server.js deleted file mode 100644 index f7dba02c..00000000 --- a/src/routes/(app)/[username]/reset/+server.js +++ /dev/null @@ -1,10 +0,0 @@ -import { json } from "@sveltejs/kit"; -import { auth, post } from "$lib/utils"; - -export async function POST({ cookies, request, params }) { - let { username } = params; - let r = await request.json(); - let { password } = r; - let result = await post("/reset", { password, username }, auth(cookies)); - return json(result); -} diff --git a/src/routes/(app)/[username]/reset/+server.ts b/src/routes/(app)/[username]/reset/+server.ts new file mode 100644 index 00000000..f7dba02c --- /dev/null +++ b/src/routes/(app)/[username]/reset/+server.ts @@ -0,0 +1,10 @@ +import { json } from "@sveltejs/kit"; +import { auth, post } from "$lib/utils"; + +export async function POST({ cookies, request, params }) { + let { username } = params; + let r = await request.json(); + let { password } = r; + let result = await post("/reset", { password, username }, auth(cookies)); + return json(result); +} diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js deleted file mode 100644 index 5ff691f0..00000000 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js +++ /dev/null @@ -1,34 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { fd, auth, get, post } from "$lib/utils"; - -export function load({ cookies, params, url }) { - if (url.pathname.endsWith("settings")) - redirect(307, url.pathname + "/account"); - params.cookies = cookies.getAll(); - return { cookies: cookies.getAll(), tab: params.tab }; -} - -export const actions = { - default: async ({ cookies, request }) => { - let form = await fd(request); - - if (form.tab === "pos") { - form.notify = form.notify === "on"; - form.nip5 = form.nip5 === "on"; - form.prompt = form.prompt === "on"; - form.autowithdraw = form.autowithdraw === "on"; - } - - let user = { ...(await get("/me", auth(cookies))), ...form }; - - try { - ({ user } = await post(`/user`, user, auth(cookies))); - } catch (e) { - return fail(400, { message: e.message }); - } - - if (user.language) cookies.set("lang", user.language, { path: "/" }); - - return { user, success: true }; - }, -}; diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.ts b/src/routes/(app)/[username]/settings/[...tab]/+page.server.ts new file mode 100644 index 00000000..5ff691f0 --- /dev/null +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.ts @@ -0,0 +1,34 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { fd, auth, get, post } from "$lib/utils"; + +export function load({ cookies, params, url }) { + if (url.pathname.endsWith("settings")) + redirect(307, url.pathname + "/account"); + params.cookies = cookies.getAll(); + return { cookies: cookies.getAll(), tab: params.tab }; +} + +export const actions = { + default: async ({ cookies, request }) => { + let form = await fd(request); + + if (form.tab === "pos") { + form.notify = form.notify === "on"; + form.nip5 = form.nip5 === "on"; + form.prompt = form.prompt === "on"; + form.autowithdraw = form.autowithdraw === "on"; + } + + let user = { ...(await get("/me", auth(cookies))), ...form }; + + try { + ({ user } = await post(`/user`, user, auth(cookies))); + } catch (e) { + return fail(400, { message: e.message }); + } + + if (user.language) cookies.set("lang", user.language, { path: "/" }); + + return { user, success: true }; + }, +}; diff --git a/src/routes/(app)/[username]/shopify.js/+server.js b/src/routes/(app)/[username]/shopify.js/+server.js deleted file mode 100644 index c93ac729..00000000 --- a/src/routes/(app)/[username]/shopify.js/+server.js +++ /dev/null @@ -1,191 +0,0 @@ -export async function GET({ cookies, params, url }) { - let { username } = params; - - let js = ` -var qrcode=function(r,_){var t=r,e=QRErrorCorrectLevel[_],n=null,$=0,o=null,a=[],f={},i=function(r,_){n=function(r){for(var _=Array(r),t=0;t=7&&h(r),null==o&&(o=x(t,e,a)),s(o,_)},u=function(r,_){for(var t=-1;t<=7;t+=1)if(!(r+t<=-1)&&!($<=r+t))for(var e=-1;e<=7;e+=1)_+e<=-1||$<=_+e||(0<=t&&t<=6&&(0==e||6==e)||0<=e&&e<=6&&(0==t||6==t)||2<=t&&t<=4&&2<=e&&e<=4?n[r+t][_+e]=!0:n[r+t][_+e]=!1)},c=function(){for(var r=0,_=0,t=0;t<8;t+=1){i(!0,t);var e=QRUtil.getLostPoint(f);(0==t||r>e)&&(r=e,_=t)}return _},g=function(){for(var r=8;r<$-8;r+=1)null==n[r][6]&&(n[r][6]=r%2==0);for(var _=8;_<$-8;_+=1)null==n[6][_]&&(n[6][_]=_%2==0)},l=function(){for(var r=QRUtil.getPatternPosition(t),_=0;_>e&1)==1;n[Math.floor(e/3)][e%3+$-8-3]=o}for(var e=0;e<18;e+=1){var o=!r&&(_>>e&1)==1;n[e%3+$-8-3][Math.floor(e/3)]=o}},v=function(r,_){for(var t=QRUtil.getBCHTypeInfo(e<<3|_),o=0;o<15;o+=1){var a=!r&&(t>>o&1)==1;o<6?n[o][8]=a:o<8?n[o+1][8]=a:n[$-15+o][8]=a}for(var o=0;o<15;o+=1){var a=!r&&(t>>o&1)==1;o<8?n[8][$-o-1]=a:o<9?n[8][15-o-1+1]=a:n[8][15-o-1]=a}n[$-8][8]=!r},s=function(r,_){for(var t=-1,e=$-1,o=7,a=0,f=QRUtil.getMaskFunction(_),i=$-1;i>0;i-=2)for(6==i&&(i-=1);;){for(var u=0;u<2;u+=1)if(null==n[e][i-u]){var c=!1;a>>o&1)==1),f(e,i-u)&&(c=!c),n[e][i-u]=c,-1==(o-=1)&&(a+=1,o=7)}if((e+=t)<0||$<=e){e-=t,t=-t;break}}},d=function(r,_){for(var t=0,e=0,n=0,$=Array(_.length),o=Array(_.length),a=0;a<_.length;a+=1){var f=_[a].dataCount,i=_[a].totalCount-f;e=Math.max(e,f),n=Math.max(n,i),$[a]=Array(f);for(var u=0;u<$[a].length;u+=1)$[a][u]=255&r.getBuffer()[u+t];t+=f;var c=QRUtil.getErrorCorrectPolynomial(i),g=qrPolynomial($[a],c.getLength()-1).mod(c);o[a]=Array(c.getLength()-1);for(var u=0;u=0?g.getAt(l):0}}for(var h=0,u=0;u<_.length;u+=1)h+=_[u].totalCount;for(var v=Array(h),s=0,u=0;u8*a)throw Error("code length overflow. ("+n.getLengthInBits()+">"+8*a+")");for(n.getLengthInBits()+4<=8*a&&n.put(0,4);n.getLengthInBits()%8!=0;)n.putBit(!1);for(;!(n.getLengthInBits()>=8*a)&&(n.put(236,8),!(n.getLengthInBits()>=8*a));){;n.put(17,8)}return d(n,e)};return f.addData=function(r){var _=qr8BitByte(r);a.push(_),o=null},f.isDark=function(r,_){if(r<0||$<=r||_<0||$<=_)throw Error(r+","+_);return n[r][_]},f.getModuleCount=function(){return $},f.make=function(){i(!1,c())},f.createTableTag=function(r,_){r=r||2;var t="";t+='',t+="";for(var e=0;e";for(var n=0;n';t+=""}return t+="",t+="
"},f.createImgTag=function(r,_,t){r=r||2;var e=_=void 0===_?4*r:_,n=f.getModuleCount()*r+_;return createImgTag(t,t,function(_,t){if(!(e<=_)||!(_>>8),_.push(255&$)):_.push(63)}}return _}};var QRMode={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},QRErrorCorrectLevel={L:1,M:0,Q:3,H:2},QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},QRUtil=function(){var r=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],_={},t=function(r){for(var _=0;0!=r;)_+=1,r>>>=1;return _};return _.getBCHTypeInfo=function(r){for(var _=r<<10;t(_)-t(1335)>=0;)_^=1335<=0;)_^=7973<5&&(t+=3+$-5)}for(var e=0;e<_-1;e+=1)for(var n=0;n<_-1;n+=1){var i=0;r.isDark(e,n)&&(i+=1),r.isDark(e+1,n)&&(i+=1),r.isDark(e,n+1)&&(i+=1),r.isDark(e+1,n+1)&&(i+=1),(0==i||4==i)&&(t+=3)}for(var e=0;e<_;e+=1)for(var n=0;n<_-6;n+=1)r.isDark(e,n)&&!r.isDark(e,n+1)&&r.isDark(e,n+2)&&r.isDark(e,n+3)&&r.isDark(e,n+4)&&!r.isDark(e,n+5)&&r.isDark(e,n+6)&&(t+=40);for(var n=0;n<_;n+=1)for(var e=0;e<_-6;e+=1)r.isDark(e,n)&&!r.isDark(e+1,n)&&r.isDark(e+2,n)&&r.isDark(e+3,n)&&r.isDark(e+4,n)&&!r.isDark(e+5,n)&&r.isDark(e+6,n)&&(t+=40);for(var u=0,n=0;n<_;n+=1)for(var e=0;e<_;e+=1)r.isDark(e,n)&&(u+=1);return t+10*(Math.abs(100*u/_/_-50)/5)},_}(),QRMath=function(){for(var r=Array(256),_=Array(256),t=0;t<8;t+=1)r[t]=1<=256;)_-=255;return r[_]},e}();function qrPolynomial(r,_){if(void 0===r.length)throw Error(r.length+"/"+_);var t=function(){for(var t=0;t>>7-_%8&1)==1},t.put=function(r,_){for(var e=0;e<_;e+=1)t.putBit((r>>>_-e-1&1)==1)},t.getLengthInBits=function(){return _},t.putBit=function(t){var e=Math.floor(_/8);r.length<=e&&r.push(0),t&&(r[e]|=128>>>_%8),_+=1},t},qr8BitByte=function(r){for(var _=QRMode.MODE_8BIT_BYTE,t=r,e=[],n={},$=0,o=t.length;$65536?(a[0]=240|(1835008&f)>>>18,a[1]=128|(258048&f)>>>12,a[2]=128|(4032&f)>>>6,a[3]=128|63&f):f>2048?(a[0]=224|(61440&f)>>>12,a[1]=128|(4032&f)>>>6,a[2]=128|63&f):f>128?(a[0]=192|(1984&f)>>>6,a[1]=128|63&f):a[0]=f,e.push(a)}(e=Array.prototype.concat.apply([],e)).length!=t.length&&(e.unshift(191),e.unshift(187),e.unshift(239));var i=e;return n.getMode=function(){return _},n.getLength=function(r){return i.length},n.write=function(r){for(var _=0;_>>8)},_.writeBytes=function(r,t,e){t=t||0,e=e||r.length;for(var n=0;n0&&(_+=","),_+=r[t];return _+"]"},_},base64EncodeOutputStream=function(){var r=0,_=0,t=0,e="",n={},$=function(r){e+=String.fromCharCode(o(63&r))},o=function(r){if(r<0);else if(r<26)return 65+r;else if(r<52)return 97+(r-26);else if(r<62)return 48+(r-52);else if(62==r)return 43;else if(63==r)return 47;throw Error("n:"+r)};return n.writeByte=function(e){for(r=r<<8|255&e,_+=8,t+=1;_>=6;)$(r>>>_-6),_-=6},n.flush=function(){if(_>0&&($(r<<6-_),r=0,_=0),t%3!=0)for(var n=3-t%3,o=0;o=_.length){if(0==n)return -1;throw Error("unexpected end of file./"+n)}var r=_.charAt(t);if(t+=1,"="==r)return n=0,-1;!r.match(/^\s$/)&&(e=e<<6|o(r.charCodeAt(0)),n+=6)}var $=e>>>n-8&255;return n-=8,$};var o=function(r){if(65<=r&&r<=90)return r-65;if(97<=r&&r<=122)return r-97+26;if(48<=r&&r<=57)return r-48+52;if(43==r)return 62;if(47==r)return 63;else throw Error("c:"+r)};return $},gifImage=function(r,_){var t=r,e=_,n=Array(r*_),$={};$.setPixel=function(r,_,e){n[_*t+r]=e},$.write=function(r){r.writeString("GIF87a"),r.writeShort(t),r.writeShort(e),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(t),r.writeShort(e),r.writeByte(0);var _=a(2);r.writeByte(2);for(var n=0;_.length-n>255;)r.writeByte(255),r.writeBytes(_,n,255),n+=255;r.writeByte(_.length-n),r.writeBytes(_,n,_.length-n),r.writeByte(0),r.writeString(";")};var o=function(r){var _=r,t=0,e=0,n={};return n.write=function(r,n){if(r>>>n!=0)throw Error("length over");for(;t+n>=8;)_.writeByte(255&(r<>>=8-t,e=0,t=0;e=r<0&&_.writeByte(e)},n},a=function(r){for(var _=1<$.size()&&($.size()==1<=40))return drawImg(r,{size:$,errorCorrectLevel:n,typeNumber:e+1});throw Error("Text too long to encode")}var a=parseInt($/t.getModuleCount()),f=parseInt(($-t.getModuleCount()*a)/2);return t.createImgTag(a,f,$)}; - - -window.addEventListener('load', async () => { - let sleep = (n) => new Promise((r) => setTimeout(r, n)); - let wait = async (f, n = 100, s = 300) => { - let i = 0; - while (!(await f()) && i < s) (await sleep(n)) && i++; - if (i >= s) throw new Error('timeout'); - return f(); - }; - - await wait(() => ["coinos", "bitcoin", "btc", "btcpayserver", "btcpay server"].some(v => ~(document.querySelector(".payment-method-list__item__info").innerText.toLowerCase().indexOf(v)))); - - let sat = (s) => { - s = Math.abs(s); - let p = Math.floor(Math.log(s) / Math.LN10 + 0.000000001); - let d = Math.floor((p + 1) / 3); - - return ( - '⚡️' + - (parseInt(s) > 0 - ? new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format( - s / Math.pow(1000, d) - ) + ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z'][d] - : 0 - ).toString() - ); - }; - - let copy = (text) => { - navigator.clipboard.writeText(text); - }; - - let f = (s, currency) => - new Intl.NumberFormat('en-US', { - style: 'currency', - currency - }) - .format(s) - .replace('CA', ''); - - let s = (s) => new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format(s); - - let link = document.createElement('link'); - link.setAttribute('rel', 'stylesheet'); - link.setAttribute('type', 'text/css'); - link.setAttribute( - 'href', - 'https://fonts.googleapis.com/css?family=Public+Sans:400italic,400,300,700' - ); - - var style = document.createElement('style'); - style.innerHTML = \`#check { - transform: scale(0.5); - transition: transform 1s; - } - \`; - document.head.appendChild(style); - - document.head.appendChild(link); - document.title = 'Pay With Bitcoin'; - - let fiat = Shopify.checkout.payment_due; - let main = document.querySelector('main'); - main.style.fontFamily = 'Public Sans, sans-serif'; - - let data = await fetch('https://${url.host}/api/invoice', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json', - accept: 'application/json', - }, - body: JSON.stringify({ - invoice: { - fiat, - type: 'lightning', - webhook: \`https://${url.host}/api/shopify/\${Shopify.checkout.order_id}\` - }, - user: { username: '${username}' } - }) - }) - .then(function (response) { - return response.json(); - }) - .catch(console.log); - - let base64 = drawImg(data.hash, { size: 300 }); - - main.innerHTML = \` -
- -
-
-
-
-
\${f( - (data.amount * data.rate) / 100000000, - data.currency - )}
-
\${sat(data.amount)}
-
-
\${ - data.hash - }
- - \`; - - let copyButton = document.getElementById('copy'); - copyButton.addEventListener('click', (e) => { - e.preventDefault(); - copy(data.hash); - let copied = document.createElement('div'); - copied.textContent = 'Copied!'; - main.appendChild(copied); - setTimeout(() => copied.remove(), 3000); - }); - - let qr = document.getElementById('qrcode'); - qr.style.margin = 'auto'; - qr.style.marginTop = '40px'; - qr.style.border = '12px white solid'; - qr.style.zIndex = 10; - - new QRCode(qr, data.hash); - - let bg = document.getElementById('bg'); - bg.style.position = 'absolute'; - bg.style.margin = 'auto'; - bg.style.left = '0'; - bg.style.right = '0'; - bg.style.width = '400px'; - bg.style.height = '400px'; - bg.style.borderRadius = '50%'; - bg.style.background = 'linear-gradient(to right, #F2F6FC, #E1E3FF)'; - bg.style.zIndex = '0'; - - let ws = new WebSocket('wss://${url.host}/ws'); - ws.onmessage = ({ data }) => { - try { - let { type, data: d } = JSON.parse(data); - if (type === 'payment') { - main.innerHTML = - \`
Check
- -

Payment received!

- -
-
\${f( - (d.amount * d.rate) / 100000000, - d.currency - )}
-
\${sat(d.amount)}
-
- -
Continue shopping
-
\`; - - var image = document.getElementById('check'); - image.addEventListener('load', function () { - image.style.transform = 'scale(1)'; - }); - } - } catch (e) { - console.log(e); - } - }; - ws.onopen = () => { - ws.send(JSON.stringify({ type: 'subscribe', data })); - }; -}); - `; - - return new Response(js, { - headers: { - "Content-Type": "application/javascript", - }, - }); -} diff --git a/src/routes/(app)/[username]/shopify.js/+server.ts b/src/routes/(app)/[username]/shopify.js/+server.ts new file mode 100644 index 00000000..c93ac729 --- /dev/null +++ b/src/routes/(app)/[username]/shopify.js/+server.ts @@ -0,0 +1,191 @@ +export async function GET({ cookies, params, url }) { + let { username } = params; + + let js = ` +var qrcode=function(r,_){var t=r,e=QRErrorCorrectLevel[_],n=null,$=0,o=null,a=[],f={},i=function(r,_){n=function(r){for(var _=Array(r),t=0;t=7&&h(r),null==o&&(o=x(t,e,a)),s(o,_)},u=function(r,_){for(var t=-1;t<=7;t+=1)if(!(r+t<=-1)&&!($<=r+t))for(var e=-1;e<=7;e+=1)_+e<=-1||$<=_+e||(0<=t&&t<=6&&(0==e||6==e)||0<=e&&e<=6&&(0==t||6==t)||2<=t&&t<=4&&2<=e&&e<=4?n[r+t][_+e]=!0:n[r+t][_+e]=!1)},c=function(){for(var r=0,_=0,t=0;t<8;t+=1){i(!0,t);var e=QRUtil.getLostPoint(f);(0==t||r>e)&&(r=e,_=t)}return _},g=function(){for(var r=8;r<$-8;r+=1)null==n[r][6]&&(n[r][6]=r%2==0);for(var _=8;_<$-8;_+=1)null==n[6][_]&&(n[6][_]=_%2==0)},l=function(){for(var r=QRUtil.getPatternPosition(t),_=0;_>e&1)==1;n[Math.floor(e/3)][e%3+$-8-3]=o}for(var e=0;e<18;e+=1){var o=!r&&(_>>e&1)==1;n[e%3+$-8-3][Math.floor(e/3)]=o}},v=function(r,_){for(var t=QRUtil.getBCHTypeInfo(e<<3|_),o=0;o<15;o+=1){var a=!r&&(t>>o&1)==1;o<6?n[o][8]=a:o<8?n[o+1][8]=a:n[$-15+o][8]=a}for(var o=0;o<15;o+=1){var a=!r&&(t>>o&1)==1;o<8?n[8][$-o-1]=a:o<9?n[8][15-o-1+1]=a:n[8][15-o-1]=a}n[$-8][8]=!r},s=function(r,_){for(var t=-1,e=$-1,o=7,a=0,f=QRUtil.getMaskFunction(_),i=$-1;i>0;i-=2)for(6==i&&(i-=1);;){for(var u=0;u<2;u+=1)if(null==n[e][i-u]){var c=!1;a>>o&1)==1),f(e,i-u)&&(c=!c),n[e][i-u]=c,-1==(o-=1)&&(a+=1,o=7)}if((e+=t)<0||$<=e){e-=t,t=-t;break}}},d=function(r,_){for(var t=0,e=0,n=0,$=Array(_.length),o=Array(_.length),a=0;a<_.length;a+=1){var f=_[a].dataCount,i=_[a].totalCount-f;e=Math.max(e,f),n=Math.max(n,i),$[a]=Array(f);for(var u=0;u<$[a].length;u+=1)$[a][u]=255&r.getBuffer()[u+t];t+=f;var c=QRUtil.getErrorCorrectPolynomial(i),g=qrPolynomial($[a],c.getLength()-1).mod(c);o[a]=Array(c.getLength()-1);for(var u=0;u=0?g.getAt(l):0}}for(var h=0,u=0;u<_.length;u+=1)h+=_[u].totalCount;for(var v=Array(h),s=0,u=0;u8*a)throw Error("code length overflow. ("+n.getLengthInBits()+">"+8*a+")");for(n.getLengthInBits()+4<=8*a&&n.put(0,4);n.getLengthInBits()%8!=0;)n.putBit(!1);for(;!(n.getLengthInBits()>=8*a)&&(n.put(236,8),!(n.getLengthInBits()>=8*a));){;n.put(17,8)}return d(n,e)};return f.addData=function(r){var _=qr8BitByte(r);a.push(_),o=null},f.isDark=function(r,_){if(r<0||$<=r||_<0||$<=_)throw Error(r+","+_);return n[r][_]},f.getModuleCount=function(){return $},f.make=function(){i(!1,c())},f.createTableTag=function(r,_){r=r||2;var t="";t+='',t+="";for(var e=0;e";for(var n=0;n';t+=""}return t+="",t+="
"},f.createImgTag=function(r,_,t){r=r||2;var e=_=void 0===_?4*r:_,n=f.getModuleCount()*r+_;return createImgTag(t,t,function(_,t){if(!(e<=_)||!(_>>8),_.push(255&$)):_.push(63)}}return _}};var QRMode={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},QRErrorCorrectLevel={L:1,M:0,Q:3,H:2},QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},QRUtil=function(){var r=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],_={},t=function(r){for(var _=0;0!=r;)_+=1,r>>>=1;return _};return _.getBCHTypeInfo=function(r){for(var _=r<<10;t(_)-t(1335)>=0;)_^=1335<=0;)_^=7973<5&&(t+=3+$-5)}for(var e=0;e<_-1;e+=1)for(var n=0;n<_-1;n+=1){var i=0;r.isDark(e,n)&&(i+=1),r.isDark(e+1,n)&&(i+=1),r.isDark(e,n+1)&&(i+=1),r.isDark(e+1,n+1)&&(i+=1),(0==i||4==i)&&(t+=3)}for(var e=0;e<_;e+=1)for(var n=0;n<_-6;n+=1)r.isDark(e,n)&&!r.isDark(e,n+1)&&r.isDark(e,n+2)&&r.isDark(e,n+3)&&r.isDark(e,n+4)&&!r.isDark(e,n+5)&&r.isDark(e,n+6)&&(t+=40);for(var n=0;n<_;n+=1)for(var e=0;e<_-6;e+=1)r.isDark(e,n)&&!r.isDark(e+1,n)&&r.isDark(e+2,n)&&r.isDark(e+3,n)&&r.isDark(e+4,n)&&!r.isDark(e+5,n)&&r.isDark(e+6,n)&&(t+=40);for(var u=0,n=0;n<_;n+=1)for(var e=0;e<_;e+=1)r.isDark(e,n)&&(u+=1);return t+10*(Math.abs(100*u/_/_-50)/5)},_}(),QRMath=function(){for(var r=Array(256),_=Array(256),t=0;t<8;t+=1)r[t]=1<=256;)_-=255;return r[_]},e}();function qrPolynomial(r,_){if(void 0===r.length)throw Error(r.length+"/"+_);var t=function(){for(var t=0;t>>7-_%8&1)==1},t.put=function(r,_){for(var e=0;e<_;e+=1)t.putBit((r>>>_-e-1&1)==1)},t.getLengthInBits=function(){return _},t.putBit=function(t){var e=Math.floor(_/8);r.length<=e&&r.push(0),t&&(r[e]|=128>>>_%8),_+=1},t},qr8BitByte=function(r){for(var _=QRMode.MODE_8BIT_BYTE,t=r,e=[],n={},$=0,o=t.length;$65536?(a[0]=240|(1835008&f)>>>18,a[1]=128|(258048&f)>>>12,a[2]=128|(4032&f)>>>6,a[3]=128|63&f):f>2048?(a[0]=224|(61440&f)>>>12,a[1]=128|(4032&f)>>>6,a[2]=128|63&f):f>128?(a[0]=192|(1984&f)>>>6,a[1]=128|63&f):a[0]=f,e.push(a)}(e=Array.prototype.concat.apply([],e)).length!=t.length&&(e.unshift(191),e.unshift(187),e.unshift(239));var i=e;return n.getMode=function(){return _},n.getLength=function(r){return i.length},n.write=function(r){for(var _=0;_>>8)},_.writeBytes=function(r,t,e){t=t||0,e=e||r.length;for(var n=0;n0&&(_+=","),_+=r[t];return _+"]"},_},base64EncodeOutputStream=function(){var r=0,_=0,t=0,e="",n={},$=function(r){e+=String.fromCharCode(o(63&r))},o=function(r){if(r<0);else if(r<26)return 65+r;else if(r<52)return 97+(r-26);else if(r<62)return 48+(r-52);else if(62==r)return 43;else if(63==r)return 47;throw Error("n:"+r)};return n.writeByte=function(e){for(r=r<<8|255&e,_+=8,t+=1;_>=6;)$(r>>>_-6),_-=6},n.flush=function(){if(_>0&&($(r<<6-_),r=0,_=0),t%3!=0)for(var n=3-t%3,o=0;o=_.length){if(0==n)return -1;throw Error("unexpected end of file./"+n)}var r=_.charAt(t);if(t+=1,"="==r)return n=0,-1;!r.match(/^\s$/)&&(e=e<<6|o(r.charCodeAt(0)),n+=6)}var $=e>>>n-8&255;return n-=8,$};var o=function(r){if(65<=r&&r<=90)return r-65;if(97<=r&&r<=122)return r-97+26;if(48<=r&&r<=57)return r-48+52;if(43==r)return 62;if(47==r)return 63;else throw Error("c:"+r)};return $},gifImage=function(r,_){var t=r,e=_,n=Array(r*_),$={};$.setPixel=function(r,_,e){n[_*t+r]=e},$.write=function(r){r.writeString("GIF87a"),r.writeShort(t),r.writeShort(e),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(t),r.writeShort(e),r.writeByte(0);var _=a(2);r.writeByte(2);for(var n=0;_.length-n>255;)r.writeByte(255),r.writeBytes(_,n,255),n+=255;r.writeByte(_.length-n),r.writeBytes(_,n,_.length-n),r.writeByte(0),r.writeString(";")};var o=function(r){var _=r,t=0,e=0,n={};return n.write=function(r,n){if(r>>>n!=0)throw Error("length over");for(;t+n>=8;)_.writeByte(255&(r<>>=8-t,e=0,t=0;e=r<0&&_.writeByte(e)},n},a=function(r){for(var _=1<$.size()&&($.size()==1<=40))return drawImg(r,{size:$,errorCorrectLevel:n,typeNumber:e+1});throw Error("Text too long to encode")}var a=parseInt($/t.getModuleCount()),f=parseInt(($-t.getModuleCount()*a)/2);return t.createImgTag(a,f,$)}; + + +window.addEventListener('load', async () => { + let sleep = (n) => new Promise((r) => setTimeout(r, n)); + let wait = async (f, n = 100, s = 300) => { + let i = 0; + while (!(await f()) && i < s) (await sleep(n)) && i++; + if (i >= s) throw new Error('timeout'); + return f(); + }; + + await wait(() => ["coinos", "bitcoin", "btc", "btcpayserver", "btcpay server"].some(v => ~(document.querySelector(".payment-method-list__item__info").innerText.toLowerCase().indexOf(v)))); + + let sat = (s) => { + s = Math.abs(s); + let p = Math.floor(Math.log(s) / Math.LN10 + 0.000000001); + let d = Math.floor((p + 1) / 3); + + return ( + '⚡️' + + (parseInt(s) > 0 + ? new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format( + s / Math.pow(1000, d) + ) + ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z'][d] + : 0 + ).toString() + ); + }; + + let copy = (text) => { + navigator.clipboard.writeText(text); + }; + + let f = (s, currency) => + new Intl.NumberFormat('en-US', { + style: 'currency', + currency + }) + .format(s) + .replace('CA', ''); + + let s = (s) => new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format(s); + + let link = document.createElement('link'); + link.setAttribute('rel', 'stylesheet'); + link.setAttribute('type', 'text/css'); + link.setAttribute( + 'href', + 'https://fonts.googleapis.com/css?family=Public+Sans:400italic,400,300,700' + ); + + var style = document.createElement('style'); + style.innerHTML = \`#check { + transform: scale(0.5); + transition: transform 1s; + } + \`; + document.head.appendChild(style); + + document.head.appendChild(link); + document.title = 'Pay With Bitcoin'; + + let fiat = Shopify.checkout.payment_due; + let main = document.querySelector('main'); + main.style.fontFamily = 'Public Sans, sans-serif'; + + let data = await fetch('https://${url.host}/api/invoice', { + method: 'POST', + mode: 'cors', + headers: { + 'Content-Type': 'application/json', + accept: 'application/json', + }, + body: JSON.stringify({ + invoice: { + fiat, + type: 'lightning', + webhook: \`https://${url.host}/api/shopify/\${Shopify.checkout.order_id}\` + }, + user: { username: '${username}' } + }) + }) + .then(function (response) { + return response.json(); + }) + .catch(console.log); + + let base64 = drawImg(data.hash, { size: 300 }); + + main.innerHTML = \` +
+ +
+
+
+
+
\${f( + (data.amount * data.rate) / 100000000, + data.currency + )}
+
\${sat(data.amount)}
+
+
\${ + data.hash + }
+ + \`; + + let copyButton = document.getElementById('copy'); + copyButton.addEventListener('click', (e) => { + e.preventDefault(); + copy(data.hash); + let copied = document.createElement('div'); + copied.textContent = 'Copied!'; + main.appendChild(copied); + setTimeout(() => copied.remove(), 3000); + }); + + let qr = document.getElementById('qrcode'); + qr.style.margin = 'auto'; + qr.style.marginTop = '40px'; + qr.style.border = '12px white solid'; + qr.style.zIndex = 10; + + new QRCode(qr, data.hash); + + let bg = document.getElementById('bg'); + bg.style.position = 'absolute'; + bg.style.margin = 'auto'; + bg.style.left = '0'; + bg.style.right = '0'; + bg.style.width = '400px'; + bg.style.height = '400px'; + bg.style.borderRadius = '50%'; + bg.style.background = 'linear-gradient(to right, #F2F6FC, #E1E3FF)'; + bg.style.zIndex = '0'; + + let ws = new WebSocket('wss://${url.host}/ws'); + ws.onmessage = ({ data }) => { + try { + let { type, data: d } = JSON.parse(data); + if (type === 'payment') { + main.innerHTML = + \`
Check
+ +

Payment received!

+ +
+
\${f( + (d.amount * d.rate) / 100000000, + d.currency + )}
+
\${sat(d.amount)}
+
+ +
Continue shopping
+
\`; + + var image = document.getElementById('check'); + image.addEventListener('load', function () { + image.style.transform = 'scale(1)'; + }); + } + } catch (e) { + console.log(e); + } + }; + ws.onopen = () => { + ws.send(JSON.stringify({ type: 'subscribe', data })); + }; +}); + `; + + return new Response(js, { + headers: { + "Content-Type": "application/javascript", + }, + }); +} diff --git a/src/routes/(app)/[username]/verify/[code]/+page.server.js b/src/routes/(app)/[username]/verify/[code]/+page.server.js deleted file mode 100644 index 19453d9d..00000000 --- a/src/routes/(app)/[username]/verify/[code]/+page.server.js +++ /dev/null @@ -1,14 +0,0 @@ -import { get } from "$lib/utils"; -import { error, redirect } from "@sveltejs/kit"; - -export let load = async ({ params: { code } }) => { - let user; - try { - user = await get(`/verify/${code}`); - } catch (e) { - console.log(e); - return { error: "Verification failed" }; - } - - redirect(307, `/${user.username}/settings/account?verified=true`); -}; diff --git a/src/routes/(app)/[username]/verify/[code]/+page.server.ts b/src/routes/(app)/[username]/verify/[code]/+page.server.ts new file mode 100644 index 00000000..19453d9d --- /dev/null +++ b/src/routes/(app)/[username]/verify/[code]/+page.server.ts @@ -0,0 +1,14 @@ +import { get } from "$lib/utils"; +import { error, redirect } from "@sveltejs/kit"; + +export let load = async ({ params: { code } }) => { + let user; + try { + user = await get(`/verify/${code}`); + } catch (e) { + console.log(e); + return { error: "Verification failed" }; + } + + redirect(307, `/${user.username}/settings/account?verified=true`); +}; diff --git a/src/routes/(app)/admin/+layout.server.js b/src/routes/(app)/admin/+layout.server.js deleted file mode 100644 index 9250a7d4..00000000 --- a/src/routes/(app)/admin/+layout.server.js +++ /dev/null @@ -1,11 +0,0 @@ -import { auth, get } from "$lib/utils"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ cookies, parent }) { - let token = cookies.get("token"); - if (!token) redirect(307, "/login"); - let user = await get("/me", auth(cookies)); - if (!user) redirect(307, "/login"); - - return { user }; -} diff --git a/src/routes/(app)/admin/+layout.server.ts b/src/routes/(app)/admin/+layout.server.ts new file mode 100644 index 00000000..9250a7d4 --- /dev/null +++ b/src/routes/(app)/admin/+layout.server.ts @@ -0,0 +1,11 @@ +import { auth, get } from "$lib/utils"; +import { redirect } from "@sveltejs/kit"; + +export async function load({ cookies, parent }) { + let token = cookies.get("token"); + if (!token) redirect(307, "/login"); + let user = await get("/me", auth(cookies)); + if (!user) redirect(307, "/login"); + + return { user }; +} diff --git a/src/routes/(app)/admin/+page.server.js b/src/routes/(app)/admin/+page.server.js deleted file mode 100644 index 96a1cd78..00000000 --- a/src/routes/(app)/admin/+page.server.js +++ /dev/null @@ -1,12 +0,0 @@ -import { auth, get } from "$lib/utils"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ cookies, parent }) { - let { user } = await parent(); - if (!user) redirect(307, "/login"); - - let users = (await get("/users", auth(cookies))).sort( - (a, b) => b.balance - a.balance - ); - return { users }; -} diff --git a/src/routes/(app)/admin/+page.server.ts b/src/routes/(app)/admin/+page.server.ts new file mode 100644 index 00000000..96a1cd78 --- /dev/null +++ b/src/routes/(app)/admin/+page.server.ts @@ -0,0 +1,12 @@ +import { auth, get } from "$lib/utils"; +import { redirect } from "@sveltejs/kit"; + +export async function load({ cookies, parent }) { + let { user } = await parent(); + if (!user) redirect(307, "/login"); + + let users = (await get("/users", auth(cookies))).sort( + (a, b) => b.balance - a.balance + ); + return { users }; +} diff --git a/src/routes/(app)/buy/+page.server.js b/src/routes/(app)/buy/+page.server.js deleted file mode 100644 index b8897741..00000000 --- a/src/routes/(app)/buy/+page.server.js +++ /dev/null @@ -1,28 +0,0 @@ -import { env } from "$env/dynamic/private"; -import { error, fail, redirect } from "@sveltejs/kit"; -import { post, auth } from "$lib/utils"; -import { createTicket } from "$lib/ticket"; - -export const actions = { - default: async ({ cookies, request }) => { - let form = await request.formData(); - - let amount = parseFloat(form.get("amount")); - if (!amount || amount < 0 || amount > 500) - return fail(400, { message: "Invalid amount" }); - - await post( - "/buy", - { - amount: form.get("amount"), - number: form.get("number").replace(/\s+/g, ""), - month: form.get("expiry").slice(0, 2), - year: form.get("expiry").slice(-2), - cvc: form.get("cvc"), - }, - auth(cookies) - ); - - redirect(307, `/${form.get("username")}/payments`); - }, -}; diff --git a/src/routes/(app)/buy/+page.server.ts b/src/routes/(app)/buy/+page.server.ts new file mode 100644 index 00000000..b8897741 --- /dev/null +++ b/src/routes/(app)/buy/+page.server.ts @@ -0,0 +1,28 @@ +import { env } from "$env/dynamic/private"; +import { error, fail, redirect } from "@sveltejs/kit"; +import { post, auth } from "$lib/utils"; +import { createTicket } from "$lib/ticket"; + +export const actions = { + default: async ({ cookies, request }) => { + let form = await request.formData(); + + let amount = parseFloat(form.get("amount")); + if (!amount || amount < 0 || amount > 500) + return fail(400, { message: "Invalid amount" }); + + await post( + "/buy", + { + amount: form.get("amount"), + number: form.get("number").replace(/\s+/g, ""), + month: form.get("expiry").slice(0, 2), + year: form.get("expiry").slice(-2), + cvc: form.get("cvc"), + }, + auth(cookies) + ); + + redirect(307, `/${form.get("username")}/payments`); + }, +}; diff --git a/src/routes/(app)/disable2fa/+server.js b/src/routes/(app)/disable2fa/+server.js deleted file mode 100644 index 0afda3b9..00000000 --- a/src/routes/(app)/disable2fa/+server.js +++ /dev/null @@ -1,13 +0,0 @@ -import { error, json } from "@sveltejs/kit"; -import { auth, post } from "$lib/utils"; - -export async function POST({ cookies, request }) { - try { - let body = await request.json(); - let res = await post("/disable2fa", body, auth(cookies)); - - return json(res); - } catch (e) { - error(500, "Problem disabling 2fa"); - } -} diff --git a/src/routes/(app)/disable2fa/+server.ts b/src/routes/(app)/disable2fa/+server.ts new file mode 100644 index 00000000..0afda3b9 --- /dev/null +++ b/src/routes/(app)/disable2fa/+server.ts @@ -0,0 +1,13 @@ +import { error, json } from "@sveltejs/kit"; +import { auth, post } from "$lib/utils"; + +export async function POST({ cookies, request }) { + try { + let body = await request.json(); + let res = await post("/disable2fa", body, auth(cookies)); + + return json(res); + } catch (e) { + error(500, "Problem disabling 2fa"); + } +} diff --git a/src/routes/(app)/ecash/[id]/+layout.server.js b/src/routes/(app)/ecash/[id]/+layout.server.js deleted file mode 100644 index 0b8b2917..00000000 --- a/src/routes/(app)/ecash/[id]/+layout.server.js +++ /dev/null @@ -1,10 +0,0 @@ -import { auth, get } from "$lib/utils"; -import { fail, redirect } from "@sveltejs/kit"; -import parse from "$lib/parse"; - -export async function load({ cookies, params, request, url }) { - let { id } = params; - let { token, status } = await get(`/cash/${id}`); - let { spent, total, mint, external } = status; - return { id, token, spent, total, mint, external }; -} diff --git a/src/routes/(app)/ecash/[id]/+layout.server.ts b/src/routes/(app)/ecash/[id]/+layout.server.ts new file mode 100644 index 00000000..0b8b2917 --- /dev/null +++ b/src/routes/(app)/ecash/[id]/+layout.server.ts @@ -0,0 +1,10 @@ +import { auth, get } from "$lib/utils"; +import { fail, redirect } from "@sveltejs/kit"; +import parse from "$lib/parse"; + +export async function load({ cookies, params, request, url }) { + let { id } = params; + let { token, status } = await get(`/cash/${id}`); + let { spent, total, mint, external } = status; + return { id, token, spent, total, mint, external }; +} diff --git a/src/routes/(app)/ecash/[id]/+page.server.js b/src/routes/(app)/ecash/[id]/+page.server.js deleted file mode 100644 index 624ac314..00000000 --- a/src/routes/(app)/ecash/[id]/+page.server.js +++ /dev/null @@ -1,21 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { auth, fd, post } from "$lib/utils"; - -export const actions = { - default: async ({ cookies, request, url }) => { - if (!cookies.get("username")) - redirect(307, `/register?redirect=${url.pathname}`); - - let { token } = await fd(request); - let claimed; - try { - claimed = await post(`/claim`, { token }, auth(cookies)); - claimed = { ok: true }; - } catch (e) { - return fail(400, { error: e.message }); - } - if (claimed?.ok) { - redirect(307, `/${cookies.get("username")}/payments`); - } - }, -}; diff --git a/src/routes/(app)/ecash/[id]/+page.server.ts b/src/routes/(app)/ecash/[id]/+page.server.ts new file mode 100644 index 00000000..624ac314 --- /dev/null +++ b/src/routes/(app)/ecash/[id]/+page.server.ts @@ -0,0 +1,21 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { auth, fd, post } from "$lib/utils"; + +export const actions = { + default: async ({ cookies, request, url }) => { + if (!cookies.get("username")) + redirect(307, `/register?redirect=${url.pathname}`); + + let { token } = await fd(request); + let claimed; + try { + claimed = await post(`/claim`, { token }, auth(cookies)); + claimed = { ok: true }; + } catch (e) { + return fail(400, { error: e.message }); + } + if (claimed?.ok) { + redirect(307, `/${cookies.get("username")}/payments`); + } + }, +}; diff --git a/src/routes/(app)/enable2fa/+server.js b/src/routes/(app)/enable2fa/+server.js deleted file mode 100644 index 6917ae21..00000000 --- a/src/routes/(app)/enable2fa/+server.js +++ /dev/null @@ -1,8 +0,0 @@ -import { auth, post } from "$lib/utils"; - -export async function POST({ cookies, request }) { - let body = await request.json(); - let res = await post("/2fa", body, auth(cookies)); - - return new Response(JSON.stringify(res)); -} diff --git a/src/routes/(app)/enable2fa/+server.ts b/src/routes/(app)/enable2fa/+server.ts new file mode 100644 index 00000000..6917ae21 --- /dev/null +++ b/src/routes/(app)/enable2fa/+server.ts @@ -0,0 +1,8 @@ +import { auth, post } from "$lib/utils"; + +export async function POST({ cookies, request }) { + let body = await request.json(); + let res = await post("/2fa", body, auth(cookies)); + + return new Response(JSON.stringify(res)); +} diff --git a/src/routes/(app)/events/+server.js b/src/routes/(app)/events/+server.js deleted file mode 100644 index 95df0bc5..00000000 --- a/src/routes/(app)/events/+server.js +++ /dev/null @@ -1,6 +0,0 @@ -import { auth, post } from "$lib/utils"; -import { json } from "@sveltejs/kit"; - -export async function POST({ cookies, request }) { - return json(post("/event", await request.json(), auth(cookies))); -} diff --git a/src/routes/(app)/events/+server.ts b/src/routes/(app)/events/+server.ts new file mode 100644 index 00000000..95df0bc5 --- /dev/null +++ b/src/routes/(app)/events/+server.ts @@ -0,0 +1,6 @@ +import { auth, post } from "$lib/utils"; +import { json } from "@sveltejs/kit"; + +export async function POST({ cookies, request }) { + return json(post("/event", await request.json(), auth(cookies))); +} diff --git a/src/routes/(app)/forgot/+page.server.js b/src/routes/(app)/forgot/+page.server.js deleted file mode 100644 index 48411539..00000000 --- a/src/routes/(app)/forgot/+page.server.js +++ /dev/null @@ -1,14 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { fd, post, login } from "$lib/utils"; - -export const actions = { - default: async ({ request }) => { - try { - let { email } = await fd(request); - await post("/forgot", { email }); - return { success: true }; - } catch (e) { - return fail(400, { error: e.message }); - } - }, -}; diff --git a/src/routes/(app)/forgot/+page.server.ts b/src/routes/(app)/forgot/+page.server.ts new file mode 100644 index 00000000..48411539 --- /dev/null +++ b/src/routes/(app)/forgot/+page.server.ts @@ -0,0 +1,14 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { fd, post, login } from "$lib/utils"; + +export const actions = { + default: async ({ request }) => { + try { + let { email } = await fd(request); + await post("/forgot", { email }); + return { success: true }; + } catch (e) { + return fail(400, { error: e.message }); + } + }, +}; diff --git a/src/routes/(app)/fund/[id]/+page.server.js b/src/routes/(app)/fund/[id]/+page.server.js deleted file mode 100644 index c5c8db2f..00000000 --- a/src/routes/(app)/fund/[id]/+page.server.js +++ /dev/null @@ -1,23 +0,0 @@ -import { error, redirect } from "@sveltejs/kit"; -import { auth, get, post } from "$lib/utils"; -import Qr from "qrcode-base64"; - -export let load = async ({ params: { id }, url }) => { - let { amount, payments } = await get(`/fund/${id}`); - - let src = Qr.drawImg(url.href, { size: 300 }); - return { amount, payments, src }; -}; - -export const actions = { - default: async ({ cookies, locals, params, request }) => { - let { user } = locals; - - if (user) { - await post("/redeem", params, auth(cookies)); - redirect(307, `/${user.username}/payments`); - } - - redirect(307, "/register"); - }, -}; diff --git a/src/routes/(app)/fund/[id]/+page.server.ts b/src/routes/(app)/fund/[id]/+page.server.ts new file mode 100644 index 00000000..c5c8db2f --- /dev/null +++ b/src/routes/(app)/fund/[id]/+page.server.ts @@ -0,0 +1,23 @@ +import { error, redirect } from "@sveltejs/kit"; +import { auth, get, post } from "$lib/utils"; +import Qr from "qrcode-base64"; + +export let load = async ({ params: { id }, url }) => { + let { amount, payments } = await get(`/fund/${id}`); + + let src = Qr.drawImg(url.href, { size: 300 }); + return { amount, payments, src }; +}; + +export const actions = { + default: async ({ cookies, locals, params, request }) => { + let { user } = locals; + + if (user) { + await post("/redeem", params, auth(cookies)); + redirect(307, `/${user.username}/payments`); + } + + redirect(307, "/register"); + }, +}; diff --git a/src/routes/(app)/fund/[id]/sweep/+page.server.js b/src/routes/(app)/fund/[id]/sweep/+page.server.js deleted file mode 100644 index 613cf8e2..00000000 --- a/src/routes/(app)/fund/[id]/sweep/+page.server.js +++ /dev/null @@ -1,13 +0,0 @@ -import { get, auth, post } from "$lib/utils"; -import { redirect } from "@sveltejs/kit"; - -export async function load({ cookies, params, parent }) { - let { user } = await parent(); - let { id } = params; - let { amount } = await get(`/fund/${id}`); - - if (!amount) redirect(307, `/fund/${id}`); - if (!user) redirect(307, `/register?redirect=/fund/${id}/sweep`); - await post("/take", { amount, id }, auth(cookies)); - return { amount, id }; -} diff --git a/src/routes/(app)/fund/[id]/sweep/+page.server.ts b/src/routes/(app)/fund/[id]/sweep/+page.server.ts new file mode 100644 index 00000000..613cf8e2 --- /dev/null +++ b/src/routes/(app)/fund/[id]/sweep/+page.server.ts @@ -0,0 +1,13 @@ +import { get, auth, post } from "$lib/utils"; +import { redirect } from "@sveltejs/kit"; + +export async function load({ cookies, params, parent }) { + let { user } = await parent(); + let { id } = params; + let { amount } = await get(`/fund/${id}`); + + if (!amount) redirect(307, `/fund/${id}`); + if (!user) redirect(307, `/register?redirect=/fund/${id}/sweep`); + await post("/take", { amount, id }, auth(cookies)); + return { amount, id }; +} diff --git a/src/routes/(app)/fund/[id]/withdraw/+page.server.js b/src/routes/(app)/fund/[id]/withdraw/+page.server.js deleted file mode 100644 index 1da349f8..00000000 --- a/src/routes/(app)/fund/[id]/withdraw/+page.server.js +++ /dev/null @@ -1,20 +0,0 @@ -import { fail, json, redirect } from "@sveltejs/kit"; -import { fd, auth, post } from "$lib/utils"; - -export async function load({ parent }) { - let { user } = await parent(); - if (!user) redirect(307, "/register"); -} - -export const actions = { - default: async ({ cookies, request }) => { - let body = await fd(request); - try { - await post("/take", body, auth(cookies)); - } catch (e) { - return fail(400, { message: e.message }); - } - - redirect(307, `/fund/${body.id}`); - }, -}; diff --git a/src/routes/(app)/fund/[id]/withdraw/+page.server.ts b/src/routes/(app)/fund/[id]/withdraw/+page.server.ts new file mode 100644 index 00000000..1da349f8 --- /dev/null +++ b/src/routes/(app)/fund/[id]/withdraw/+page.server.ts @@ -0,0 +1,20 @@ +import { fail, json, redirect } from "@sveltejs/kit"; +import { fd, auth, post } from "$lib/utils"; + +export async function load({ parent }) { + let { user } = await parent(); + if (!user) redirect(307, "/register"); +} + +export const actions = { + default: async ({ cookies, request }) => { + let body = await fd(request); + try { + await post("/take", body, auth(cookies)); + } catch (e) { + return fail(400, { message: e.message }); + } + + redirect(307, `/fund/${body.id}`); + }, +}; diff --git a/src/routes/(app)/fund/[id]/withdraw/+server.js b/src/routes/(app)/fund/[id]/withdraw/+server.js deleted file mode 100644 index 96d66413..00000000 --- a/src/routes/(app)/fund/[id]/withdraw/+server.js +++ /dev/null @@ -1,6 +0,0 @@ -import { json } from "@sveltejs/kit"; -import { auth, post } from "$lib/utils"; - -export async function POST({ cookies, request }) { - return json(await post("/take", await request.json(), auth(cookies))); -} diff --git a/src/routes/(app)/fund/[id]/withdraw/+server.ts b/src/routes/(app)/fund/[id]/withdraw/+server.ts new file mode 100644 index 00000000..96d66413 --- /dev/null +++ b/src/routes/(app)/fund/[id]/withdraw/+server.ts @@ -0,0 +1,6 @@ +import { json } from "@sveltejs/kit"; +import { auth, post } from "$lib/utils"; + +export async function POST({ cookies, request }) { + return json(await post("/take", await request.json(), auth(cookies))); +} diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js deleted file mode 100644 index 7f0536c1..00000000 --- a/src/routes/(app)/ln/[lnurl]/+page.server.js +++ /dev/null @@ -1,75 +0,0 @@ -import { fd, auth, get, post } from "$lib/utils"; -import { error, fail, redirect } from "@sveltejs/kit"; - -export async function load({ params, parent }) { - let { user } = await parent(); - if (!user) redirect(307, "/register"); - - let data; - - try { - let { lnurl } = params; - data = await get(`/decode?text=${lnurl}`); - } catch (e) { - error(500, e.message); - } - - if (!["payRequest", "withdrawRequest"].includes(data.tag)) - error(500, "We only support LNURLp and LNURLw at this time"); - - return data; -} - -export const actions = { - pay: async ({ cookies, fetch, request }) => { - let error; - - let { callback, amount, minSendable, maxSendable } = await fd(request); - minSendable = Math.round(minSendable / 1000); - maxSendable = Math.round(maxSendable / 1000); - - if (amount < minSendable) - error = `Amount must be at least ${minSendable} sats`; - if (amount > maxSendable) - error = `Amount must be at most ${maxSendable} sats`; - if (error) return fail(400, { error }); - - let { pr } = await fetch(`${callback}?amount=${amount * 1000}`).then((r) => - r.json() - ); - redirect(307, `/send/lightning/${pr}`); - }, - - withdraw: async ({ cookies, fetch, request }) => { - let error; - - let { - callback, - amount, - username, - currency, - minWithdrawable, - maxWithdrawable, - k1, - } = await fd(request); - - minWithdrawable = Math.round(minWithdrawable / 1000); - maxWithdrawable = Math.round(maxWithdrawable / 1000); - - if (amount < minWithdrawable) - error = `Amount must be at least ${minWithdrawable} sats`; - if (amount > maxWithdrawable) - error = `Amount must be at most ${maxWithdrawable} sats`; - if (error) return fail(400, { error }); - - let invoice = { amount, type: "lightning" }; - let user = { username, currency }; - - let { text: pr } = await post("/invoice", { invoice, user }, auth(cookies)); - - let c = callback.includes("?") ? "&" : "?"; - await fetch(`${callback}${c}k1=${k1}&pr=${pr}`).then((r) => r.json()); - - redirect(307, `/${username}/payments`); - }, -}; diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.ts b/src/routes/(app)/ln/[lnurl]/+page.server.ts new file mode 100644 index 00000000..7f0536c1 --- /dev/null +++ b/src/routes/(app)/ln/[lnurl]/+page.server.ts @@ -0,0 +1,75 @@ +import { fd, auth, get, post } from "$lib/utils"; +import { error, fail, redirect } from "@sveltejs/kit"; + +export async function load({ params, parent }) { + let { user } = await parent(); + if (!user) redirect(307, "/register"); + + let data; + + try { + let { lnurl } = params; + data = await get(`/decode?text=${lnurl}`); + } catch (e) { + error(500, e.message); + } + + if (!["payRequest", "withdrawRequest"].includes(data.tag)) + error(500, "We only support LNURLp and LNURLw at this time"); + + return data; +} + +export const actions = { + pay: async ({ cookies, fetch, request }) => { + let error; + + let { callback, amount, minSendable, maxSendable } = await fd(request); + minSendable = Math.round(minSendable / 1000); + maxSendable = Math.round(maxSendable / 1000); + + if (amount < minSendable) + error = `Amount must be at least ${minSendable} sats`; + if (amount > maxSendable) + error = `Amount must be at most ${maxSendable} sats`; + if (error) return fail(400, { error }); + + let { pr } = await fetch(`${callback}?amount=${amount * 1000}`).then((r) => + r.json() + ); + redirect(307, `/send/lightning/${pr}`); + }, + + withdraw: async ({ cookies, fetch, request }) => { + let error; + + let { + callback, + amount, + username, + currency, + minWithdrawable, + maxWithdrawable, + k1, + } = await fd(request); + + minWithdrawable = Math.round(minWithdrawable / 1000); + maxWithdrawable = Math.round(maxWithdrawable / 1000); + + if (amount < minWithdrawable) + error = `Amount must be at least ${minWithdrawable} sats`; + if (amount > maxWithdrawable) + error = `Amount must be at most ${maxWithdrawable} sats`; + if (error) return fail(400, { error }); + + let invoice = { amount, type: "lightning" }; + let user = { username, currency }; + + let { text: pr } = await post("/invoice", { invoice, user }, auth(cookies)); + + let c = callback.includes("?") ? "&" : "?"; + await fetch(`${callback}${c}k1=${k1}&pr=${pr}`).then((r) => r.json()); + + redirect(307, `/${username}/payments`); + }, +}; diff --git a/src/routes/(app)/locations/+server.js b/src/routes/(app)/locations/+server.js deleted file mode 100644 index 8a046475..00000000 --- a/src/routes/(app)/locations/+server.js +++ /dev/null @@ -1,15 +0,0 @@ -import { get } from "$lib/utils"; -import { json } from "@sveltejs/kit"; - -export async function GET({ fetch, setHeaders }) { - let locations = []; - - try { - ({ locations } = await get("/locations")); - setHeaders({ "cache-control": "public, max-age=600" }); - } catch (e) { - console.log("failed to fetch locations"); - } - - return json({ locations }); -} diff --git a/src/routes/(app)/locations/+server.ts b/src/routes/(app)/locations/+server.ts new file mode 100644 index 00000000..8a046475 --- /dev/null +++ b/src/routes/(app)/locations/+server.ts @@ -0,0 +1,15 @@ +import { get } from "$lib/utils"; +import { json } from "@sveltejs/kit"; + +export async function GET({ fetch, setHeaders }) { + let locations = []; + + try { + ({ locations } = await get("/locations")); + setHeaders({ "cache-control": "public, max-age=600" }); + } catch (e) { + console.log("failed to fetch locations"); + } + + return json({ locations }); +} diff --git a/src/routes/(app)/login/+page.server.js b/src/routes/(app)/login/+page.server.js deleted file mode 100644 index 7fb1a6b3..00000000 --- a/src/routes/(app)/login/+page.server.js +++ /dev/null @@ -1,29 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { login, fd } from "$lib/utils"; - -export const load = async ({ parent, url }) => { - let { user } = await parent(); - if (user?.pubkey) redirect(307, `/${user.username}`); -}; - -export const actions = { - default: async ({ cookies, request }) => { - let form = await fd(request); - let { username, password, token, loginRedirect } = form; - let user = { username, password, token }; - - if (loginRedirect === "undefined") loginRedirect = undefined; - - try { - let r = await login( - user, - cookies, - request.headers.get("cf-connecting-ip") - ); - } catch (e) { - return fail(400, { error: "Login failed", message: e.message, ...form }); - } - - redirect(307, loginRedirect || `/${user.username}`); - }, -}; diff --git a/src/routes/(app)/login/+page.server.ts b/src/routes/(app)/login/+page.server.ts new file mode 100644 index 00000000..7fb1a6b3 --- /dev/null +++ b/src/routes/(app)/login/+page.server.ts @@ -0,0 +1,29 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { login, fd } from "$lib/utils"; + +export const load = async ({ parent, url }) => { + let { user } = await parent(); + if (user?.pubkey) redirect(307, `/${user.username}`); +}; + +export const actions = { + default: async ({ cookies, request }) => { + let form = await fd(request); + let { username, password, token, loginRedirect } = form; + let user = { username, password, token }; + + if (loginRedirect === "undefined") loginRedirect = undefined; + + try { + let r = await login( + user, + cookies, + request.headers.get("cf-connecting-ip") + ); + } catch (e) { + return fail(400, { error: "Login failed", message: e.message, ...form }); + } + + redirect(307, loginRedirect || `/${user.username}`); + }, +}; diff --git a/src/routes/(app)/logout/+page.server.js b/src/routes/(app)/logout/+page.server.js deleted file mode 100644 index ab5df7b9..00000000 --- a/src/routes/(app)/logout/+page.server.js +++ /dev/null @@ -1,14 +0,0 @@ -import { redirect } from "@sveltejs/kit"; - -const opts = { - expires: new Date(0), - path: "/", -}; - -export async function load({ cookies }) { - let lang = cookies.get("lang"); - cookies.set("lang", "", opts); - cookies.set("username", "", opts); - cookies.set("token", "", opts); - redirect(307, `/login?lang=${lang}`); -} diff --git a/src/routes/(app)/logout/+page.server.ts b/src/routes/(app)/logout/+page.server.ts new file mode 100644 index 00000000..ab5df7b9 --- /dev/null +++ b/src/routes/(app)/logout/+page.server.ts @@ -0,0 +1,14 @@ +import { redirect } from "@sveltejs/kit"; + +const opts = { + expires: new Date(0), + path: "/", +}; + +export async function load({ cookies }) { + let lang = cookies.get("lang"); + cookies.set("lang", "", opts); + cookies.set("username", "", opts); + cookies.set("token", "", opts); + redirect(307, `/login?lang=${lang}`); +} diff --git a/src/routes/(app)/otpsecret/+server.js b/src/routes/(app)/otpsecret/+server.js deleted file mode 100644 index 63d06849..00000000 --- a/src/routes/(app)/otpsecret/+server.js +++ /dev/null @@ -1,17 +0,0 @@ -import { auth, post } from "$lib/utils"; -import Qr from "qrcode-base64"; -import { error } from "@sveltejs/kit"; - -export async function POST({ cookies, request }) { - try { - let body = await request.json(); - let { username, secret } = await post("/otpsecret", body, auth(cookies)); - let uri = `otpauth://totp/coinos:${username}?secret=${secret}&period=30&digits=6&algorithm=SHA1&issuer=coinos`; - return new Response( - JSON.stringify({ secret, uri, qr: Qr.drawImg(uri, { size: 600 }) }) - ); - } catch (e) { - if (e.message.includes("pin")) throw e; - throw new error(500, "Problem saving secret"); - } -} diff --git a/src/routes/(app)/otpsecret/+server.ts b/src/routes/(app)/otpsecret/+server.ts new file mode 100644 index 00000000..63d06849 --- /dev/null +++ b/src/routes/(app)/otpsecret/+server.ts @@ -0,0 +1,17 @@ +import { auth, post } from "$lib/utils"; +import Qr from "qrcode-base64"; +import { error } from "@sveltejs/kit"; + +export async function POST({ cookies, request }) { + try { + let body = await request.json(); + let { username, secret } = await post("/otpsecret", body, auth(cookies)); + let uri = `otpauth://totp/coinos:${username}?secret=${secret}&period=30&digits=6&algorithm=SHA1&issuer=coinos`; + return new Response( + JSON.stringify({ secret, uri, qr: Qr.drawImg(uri, { size: 600 }) }) + ); + } catch (e) { + if (e.message.includes("pin")) throw e; + throw new error(500, "Problem saving secret"); + } +} diff --git a/src/routes/(app)/password/+server.js b/src/routes/(app)/password/+server.js deleted file mode 100644 index 26ed3858..00000000 --- a/src/routes/(app)/password/+server.js +++ /dev/null @@ -1,7 +0,0 @@ -import { json } from "@sveltejs/kit"; -import { auth, post } from "$lib/utils"; - -export async function POST({ cookies, request }) { - let result = await post("/password", await request.json(), auth(cookies)); - return json(result); -} diff --git a/src/routes/(app)/password/+server.ts b/src/routes/(app)/password/+server.ts new file mode 100644 index 00000000..26ed3858 --- /dev/null +++ b/src/routes/(app)/password/+server.ts @@ -0,0 +1,7 @@ +import { json } from "@sveltejs/kit"; +import { auth, post } from "$lib/utils"; + +export async function POST({ cookies, request }) { + let result = await post("/password", await request.json(), auth(cookies)); + return json(result); +} diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.server.js b/src/routes/(app)/pay/[username]/[...amount]/+page.server.js deleted file mode 100644 index 884e3eee..00000000 --- a/src/routes/(app)/pay/[username]/[...amount]/+page.server.js +++ /dev/null @@ -1,50 +0,0 @@ -import { error, fail, redirect } from "@sveltejs/kit"; -import { types, sats, fd, auth, get, post } from "$lib/utils"; - -export async function load({ cookies, params, parent }) { - let subject = await get(`/users/${params.username}`); - - let { rates, user } = await parent(); - let { username } = params; - let [amount, currency] = params.amount.split("/"); - - let rate; - if (amount) { - rate = rates[currency ? currency.toUpperCase() : subject.currency]; - if (!rate) error(500, "Invalid currency symbol"); - if (currency) amount = (amount * sats) / rate; - - let { id } = await post( - "/invoice", - { - invoice: { - amount, - currency: currency === subject.currency ? currency : undefined, - prompt: false, - rate: currency === subject.currency ? rate : undefined, - type: types.lightning, - }, - user: { username }, - }, - auth(cookies) - ); - - redirect(307, `/${username}/invoice/${id}`); - } - - return { amount, rate, subject }; -} - -export const actions = { - default: async ({ cookies, request }) => { - try { - let body = await fd(request); - await post("/payments", body, auth(cookies)); - } catch (e) { - console.log(e); - return fail(400, { message: e.message }); - } - - redirect(307, "/sent"); - }, -}; diff --git a/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts new file mode 100644 index 00000000..884e3eee --- /dev/null +++ b/src/routes/(app)/pay/[username]/[...amount]/+page.server.ts @@ -0,0 +1,50 @@ +import { error, fail, redirect } from "@sveltejs/kit"; +import { types, sats, fd, auth, get, post } from "$lib/utils"; + +export async function load({ cookies, params, parent }) { + let subject = await get(`/users/${params.username}`); + + let { rates, user } = await parent(); + let { username } = params; + let [amount, currency] = params.amount.split("/"); + + let rate; + if (amount) { + rate = rates[currency ? currency.toUpperCase() : subject.currency]; + if (!rate) error(500, "Invalid currency symbol"); + if (currency) amount = (amount * sats) / rate; + + let { id } = await post( + "/invoice", + { + invoice: { + amount, + currency: currency === subject.currency ? currency : undefined, + prompt: false, + rate: currency === subject.currency ? rate : undefined, + type: types.lightning, + }, + user: { username }, + }, + auth(cookies) + ); + + redirect(307, `/${username}/invoice/${id}`); + } + + return { amount, rate, subject }; +} + +export const actions = { + default: async ({ cookies, request }) => { + try { + let body = await fd(request); + await post("/payments", body, auth(cookies)); + } catch (e) { + console.log(e); + return fail(400, { message: e.message }); + } + + redirect(307, "/sent"); + }, +}; diff --git a/src/routes/(app)/payment/[id]/+page.server.js b/src/routes/(app)/payment/[id]/+page.server.js deleted file mode 100644 index 1dfc0c09..00000000 --- a/src/routes/(app)/payment/[id]/+page.server.js +++ /dev/null @@ -1,7 +0,0 @@ -import { auth, get } from "$lib/utils"; - -export async function load({ cookies, depends, params }) { - depends("app:payments"); - let payment = await get(`/payments/${params.id}`, auth(cookies)); - return { payment }; -} diff --git a/src/routes/(app)/payment/[id]/+page.server.ts b/src/routes/(app)/payment/[id]/+page.server.ts new file mode 100644 index 00000000..1dfc0c09 --- /dev/null +++ b/src/routes/(app)/payment/[id]/+page.server.ts @@ -0,0 +1,7 @@ +import { auth, get } from "$lib/utils"; + +export async function load({ cookies, depends, params }) { + depends("app:payments"); + let payment = await get(`/payments/${params.id}`, auth(cookies)); + return { payment }; +} diff --git a/src/routes/(app)/payment/[id]/bump/+server.js b/src/routes/(app)/payment/[id]/bump/+server.js deleted file mode 100644 index 513198b0..00000000 --- a/src/routes/(app)/payment/[id]/bump/+server.js +++ /dev/null @@ -1,12 +0,0 @@ -import { auth, post } from "$lib/utils"; -import { json, error } from "@sveltejs/kit"; - -export async function POST({ cookies, request }) { - let body = await request.json(); - try { - let res = await post("/replace", body, auth(cookies)); - return json(res); - } catch (e) { - error(400, e.message); - } -} diff --git a/src/routes/(app)/payment/[id]/bump/+server.ts b/src/routes/(app)/payment/[id]/bump/+server.ts new file mode 100644 index 00000000..513198b0 --- /dev/null +++ b/src/routes/(app)/payment/[id]/bump/+server.ts @@ -0,0 +1,12 @@ +import { auth, post } from "$lib/utils"; +import { json, error } from "@sveltejs/kit"; + +export async function POST({ cookies, request }) { + let body = await request.json(); + try { + let res = await post("/replace", body, auth(cookies)); + return json(res); + } catch (e) { + error(400, e.message); + } +} diff --git a/src/routes/(app)/payment/[id]/plain/+page.server.js b/src/routes/(app)/payment/[id]/plain/+page.server.js deleted file mode 100644 index 5a364c65..00000000 --- a/src/routes/(app)/payment/[id]/plain/+page.server.js +++ /dev/null @@ -1,6 +0,0 @@ -import { auth, get } from "$lib/utils"; - -export async function load({ cookies, params }) { - let payment = await get(`/payments/${params.id}`, auth(cookies)); - return { payment }; -} diff --git a/src/routes/(app)/payment/[id]/plain/+page.server.ts b/src/routes/(app)/payment/[id]/plain/+page.server.ts new file mode 100644 index 00000000..5a364c65 --- /dev/null +++ b/src/routes/(app)/payment/[id]/plain/+page.server.ts @@ -0,0 +1,6 @@ +import { auth, get } from "$lib/utils"; + +export async function load({ cookies, params }) { + let payment = await get(`/payments/${params.id}`, auth(cookies)); + return { payment }; +} diff --git a/src/routes/(app)/payment/[id]/print/+server.js b/src/routes/(app)/payment/[id]/print/+server.js deleted file mode 100644 index 2fdfc8c1..00000000 --- a/src/routes/(app)/payment/[id]/print/+server.js +++ /dev/null @@ -1,7 +0,0 @@ -import { auth, post } from "$lib/utils"; -import { json } from "@sveltejs/kit"; - -export async function POST({ cookies, request }) { - let body = await request.json(); - return json(post("/print", body, auth(cookies))); -} diff --git a/src/routes/(app)/payment/[id]/print/+server.ts b/src/routes/(app)/payment/[id]/print/+server.ts new file mode 100644 index 00000000..2fdfc8c1 --- /dev/null +++ b/src/routes/(app)/payment/[id]/print/+server.ts @@ -0,0 +1,7 @@ +import { auth, post } from "$lib/utils"; +import { json } from "@sveltejs/kit"; + +export async function POST({ cookies, request }) { + let body = await request.json(); + return json(post("/print", body, auth(cookies))); +} diff --git a/src/routes/(app)/pin/+server.js b/src/routes/(app)/pin/+server.js deleted file mode 100644 index 76d407bf..00000000 --- a/src/routes/(app)/pin/+server.js +++ /dev/null @@ -1,7 +0,0 @@ -import { json } from "@sveltejs/kit"; -import { auth, post } from "$lib/utils"; - -export async function POST({ cookies, request }) { - let result = await post("/pin", await request.json(), auth(cookies)); - return json(result); -} diff --git a/src/routes/(app)/pin/+server.ts b/src/routes/(app)/pin/+server.ts new file mode 100644 index 00000000..76d407bf --- /dev/null +++ b/src/routes/(app)/pin/+server.ts @@ -0,0 +1,7 @@ +import { json } from "@sveltejs/kit"; +import { auth, post } from "$lib/utils"; + +export async function POST({ cookies, request }) { + let result = await post("/pin", await request.json(), auth(cookies)); + return json(result); +} diff --git a/src/routes/(app)/qr/[text]/+page.server.js b/src/routes/(app)/qr/[text]/+page.server.js deleted file mode 100644 index 5eaafe57..00000000 --- a/src/routes/(app)/qr/[text]/+page.server.js +++ /dev/null @@ -1,8 +0,0 @@ -import Qr from "qrcode-base64"; - -export async function load({ params }) { - let { text } = params; - let src = Qr.drawImg(text, { size: 600 }); - - return { src, text }; -} diff --git a/src/routes/(app)/qr/[text]/+page.server.ts b/src/routes/(app)/qr/[text]/+page.server.ts new file mode 100644 index 00000000..5eaafe57 --- /dev/null +++ b/src/routes/(app)/qr/[text]/+page.server.ts @@ -0,0 +1,8 @@ +import Qr from "qrcode-base64"; + +export async function load({ params }) { + let { text } = params; + let src = Qr.drawImg(text, { size: 600 }); + + return { src, text }; +} diff --git a/src/routes/(app)/receive/[...token]/+page.server.js b/src/routes/(app)/receive/[...token]/+page.server.js deleted file mode 100644 index 30b42f32..00000000 --- a/src/routes/(app)/receive/[...token]/+page.server.js +++ /dev/null @@ -1,17 +0,0 @@ -import { auth, fd, get, post } from "$lib/utils"; -import { error, fail, redirect } from "@sveltejs/kit"; -import parse from "$lib/parse"; - -export async function load({ cookies, params, parent, url }) { - let { user } = await parent(); - if (!user) redirect(307, `/register?redirect=${url.pathname}`); - await parse(params.token, url.host, cookies); -} - -export const actions = { - default: async ({ cookies, request, url }) => { - let { text } = await fd(request); - let msg = await parse(text, url.host, cookies); - return fail(400, { error: msg || "default" }); - }, -}; diff --git a/src/routes/(app)/receive/[...token]/+page.server.ts b/src/routes/(app)/receive/[...token]/+page.server.ts new file mode 100644 index 00000000..30b42f32 --- /dev/null +++ b/src/routes/(app)/receive/[...token]/+page.server.ts @@ -0,0 +1,17 @@ +import { auth, fd, get, post } from "$lib/utils"; +import { error, fail, redirect } from "@sveltejs/kit"; +import parse from "$lib/parse"; + +export async function load({ cookies, params, parent, url }) { + let { user } = await parent(); + if (!user) redirect(307, `/register?redirect=${url.pathname}`); + await parse(params.token, url.host, cookies); +} + +export const actions = { + default: async ({ cookies, request, url }) => { + let { text } = await fd(request); + let msg = await parse(text, url.host, cookies); + return fail(400, { error: msg || "default" }); + }, +}; diff --git a/src/routes/(app)/register/+page.server.js b/src/routes/(app)/register/+page.server.js deleted file mode 100644 index 9cbb777e..00000000 --- a/src/routes/(app)/register/+page.server.js +++ /dev/null @@ -1,41 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { fd, post, login } from "$lib/utils"; - -export const load = async ({ parent }) => { - let { user } = await parent(); - if (user) redirect(307, `/${user.username}`); - - let index = Math.floor(Math.random() * 64) + 1; - - return { index }; -}; - -export const actions = { - default: async ({ cookies, request }) => { - let ip = request.headers.get("cf-connecting-ip"); - - let form = await fd(request); - let { profile, username, password, cipher, salt, pubkey, loginRedirect } = - form; - let user = { profile, username, password, cipher, salt, pubkey }; - let error; - - if (loginRedirect === "undefined") loginRedirect = undefined; - - try { - await post("/register", { user }, { "cf-connecting-ip": ip }); - } catch (e) { - error = e.message; - } - - try { - await login(user, cookies, ip); - error = null; - } catch (e) { - error ||= e.message; - } - - if (error) return fail(400, { error }); - redirect(307, loginRedirect || `/${user.username}`); - }, -}; diff --git a/src/routes/(app)/register/+page.server.ts b/src/routes/(app)/register/+page.server.ts new file mode 100644 index 00000000..9cbb777e --- /dev/null +++ b/src/routes/(app)/register/+page.server.ts @@ -0,0 +1,41 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { fd, post, login } from "$lib/utils"; + +export const load = async ({ parent }) => { + let { user } = await parent(); + if (user) redirect(307, `/${user.username}`); + + let index = Math.floor(Math.random() * 64) + 1; + + return { index }; +}; + +export const actions = { + default: async ({ cookies, request }) => { + let ip = request.headers.get("cf-connecting-ip"); + + let form = await fd(request); + let { profile, username, password, cipher, salt, pubkey, loginRedirect } = + form; + let user = { profile, username, password, cipher, salt, pubkey }; + let error; + + if (loginRedirect === "undefined") loginRedirect = undefined; + + try { + await post("/register", { user }, { "cf-connecting-ip": ip }); + } catch (e) { + error = e.message; + } + + try { + await login(user, cookies, ip); + error = null; + } catch (e) { + error ||= e.message; + } + + if (error) return fail(400, { error }); + redirect(307, loginRedirect || `/${user.username}`); + }, +}; diff --git a/src/routes/(app)/reset/[code]/+page.server.js b/src/routes/(app)/reset/[code]/+page.server.js deleted file mode 100644 index 67f2d919..00000000 --- a/src/routes/(app)/reset/[code]/+page.server.js +++ /dev/null @@ -1,30 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { fd, post, login } from "$lib/utils"; - -export const actions = { - default: async ({ cookies, params, request }) => { - let ip = request.headers.get("cf-connecting-ip"); - let error; - - let { code } = params; - let { password } = await fd(request); - - try { - let user = await post("/reset", { code, password }); - user.password = password; - - try { - await login(user, cookies, ip); - error = null; - } catch (e) { - error ||= e.message; - } - - if (error) return fail(400, { error }); - redirect(307, `/${user.username}`); - } catch (e) { - console.log(e.message); - return fail(400, { error: e.message }); - } - }, -}; diff --git a/src/routes/(app)/reset/[code]/+page.server.ts b/src/routes/(app)/reset/[code]/+page.server.ts new file mode 100644 index 00000000..67f2d919 --- /dev/null +++ b/src/routes/(app)/reset/[code]/+page.server.ts @@ -0,0 +1,30 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { fd, post, login } from "$lib/utils"; + +export const actions = { + default: async ({ cookies, params, request }) => { + let ip = request.headers.get("cf-connecting-ip"); + let error; + + let { code } = params; + let { password } = await fd(request); + + try { + let user = await post("/reset", { code, password }); + user.password = password; + + try { + await login(user, cookies, ip); + error = null; + } catch (e) { + error ||= e.message; + } + + if (error) return fail(400, { error }); + redirect(307, `/${user.username}`); + } catch (e) { + console.log(e.message); + return fail(400, { error: e.message }); + } + }, +}; diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js deleted file mode 100644 index ba5d6190..00000000 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ /dev/null @@ -1,19 +0,0 @@ -import { auth, fd, get } from "$lib/utils"; -import { fail, redirect } from "@sveltejs/kit"; -import parse from "$lib/parse"; - -export async function load({ cookies, params, request, url }) { - let { text } = params; - - await parse(text, url.host, cookies); - let contacts = await get("/contacts", auth(cookies)); - return { contacts }; -} - -export const actions = { - default: async ({ cookies, request, url }) => { - let { text } = await fd(request); - let msg = await parse(text, url.host, cookies); - return fail(400, { error: msg || "default" }); - }, -}; diff --git a/src/routes/(app)/send/[...text]/+page.server.ts b/src/routes/(app)/send/[...text]/+page.server.ts new file mode 100644 index 00000000..ba5d6190 --- /dev/null +++ b/src/routes/(app)/send/[...text]/+page.server.ts @@ -0,0 +1,19 @@ +import { auth, fd, get } from "$lib/utils"; +import { fail, redirect } from "@sveltejs/kit"; +import parse from "$lib/parse"; + +export async function load({ cookies, params, request, url }) { + let { text } = params; + + await parse(text, url.host, cookies); + let contacts = await get("/contacts", auth(cookies)); + return { contacts }; +} + +export const actions = { + default: async ({ cookies, request, url }) => { + let { text } = await fd(request); + let msg = await parse(text, url.host, cookies); + return fail(400, { error: msg || "default" }); + }, +}; diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js deleted file mode 100644 index d4498b39..00000000 --- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js +++ /dev/null @@ -1,35 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { auth, post, fd } from "$lib/utils"; - -let seen = {}; - -export async function load({ params: { address, amount, feeRate }, cookies }) { - try { - let { fee, fees, ourfee, hex } = await post( - "/bitcoin/fee", - { address, amount, feeRate }, - auth(cookies) - ); - - return { amount, address, fee, fees, feeRate, ourfee, hex }; - } catch (e) { - return { amount, address, feeRate, message: e.message }; - } -} - -export const actions = { - default: async ({ - cookies, - params: { address, amount, feeRate }, - request, - }) => { - try { - let r = await post("/bitcoin/send", await fd(request), auth(cookies)); - } catch (e) { - console.log("problem sending bitcoin", e); - return fail(400, { address, amount, feeRate, message: e.message }); - } - - redirect(307, "/sent"); - }, -}; diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts new file mode 100644 index 00000000..d4498b39 --- /dev/null +++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts @@ -0,0 +1,35 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { auth, post, fd } from "$lib/utils"; + +let seen = {}; + +export async function load({ params: { address, amount, feeRate }, cookies }) { + try { + let { fee, fees, ourfee, hex } = await post( + "/bitcoin/fee", + { address, amount, feeRate }, + auth(cookies) + ); + + return { amount, address, fee, fees, feeRate, ourfee, hex }; + } catch (e) { + return { amount, address, feeRate, message: e.message }; + } +} + +export const actions = { + default: async ({ + cookies, + params: { address, amount, feeRate }, + request, + }) => { + try { + let r = await post("/bitcoin/send", await fd(request), auth(cookies)); + } catch (e) { + console.log("problem sending bitcoin", e); + return fail(400, { address, amount, feeRate, message: e.message }); + } + + redirect(307, "/sent"); + }, +}; diff --git a/src/routes/(app)/send/ecash/+page.server.js b/src/routes/(app)/send/ecash/+page.server.js deleted file mode 100644 index cef1ba78..00000000 --- a/src/routes/(app)/send/ecash/+page.server.js +++ /dev/null @@ -1,19 +0,0 @@ -import { error, redirect, Cookies } from "@sveltejs/kit"; -import { auth, post, fd } from "$lib/utils"; -import { v4 } from "uuid"; - -export const actions = { - default: async ({ cookies, request }) => { - let id; - let body = await fd(request); - - try { - ({ id } = await post("/mint", body, auth(cookies))); - } catch (e) { - console.log("problem creating ecash", e); - error(400, { message: e.message }); - } - - redirect(307, `/ecash/${id}`); - }, -}; diff --git a/src/routes/(app)/send/ecash/+page.server.ts b/src/routes/(app)/send/ecash/+page.server.ts new file mode 100644 index 00000000..cef1ba78 --- /dev/null +++ b/src/routes/(app)/send/ecash/+page.server.ts @@ -0,0 +1,19 @@ +import { error, redirect, Cookies } from "@sveltejs/kit"; +import { auth, post, fd } from "$lib/utils"; +import { v4 } from "uuid"; + +export const actions = { + default: async ({ cookies, request }) => { + let id; + let body = await fd(request); + + try { + ({ id } = await post("/mint", body, auth(cookies))); + } catch (e) { + console.log("problem creating ecash", e); + error(400, { message: e.message }); + } + + redirect(307, `/ecash/${id}`); + }, +}; diff --git a/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.js b/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.js deleted file mode 100644 index 51277e5d..00000000 --- a/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.js +++ /dev/null @@ -1,17 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { auth, fd, post } from "$lib/utils"; - -export const actions = { - default: async ({ cookies, request }) => { - let body = await fd(request); - let p; - - try { - p = await post("/payments", body, auth(cookies)); - } catch (e) { - return fail(400, { message: e.message }); - } - - if (p) redirect(307, `/fund/${body.name}`); - }, -}; diff --git a/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.ts b/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.ts new file mode 100644 index 00000000..51277e5d --- /dev/null +++ b/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.ts @@ -0,0 +1,17 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { auth, fd, post } from "$lib/utils"; + +export const actions = { + default: async ({ cookies, request }) => { + let body = await fd(request); + let p; + + try { + p = await post("/payments", body, auth(cookies)); + } catch (e) { + return fail(400, { message: e.message }); + } + + if (p) redirect(307, `/fund/${body.name}`); + }, +}; diff --git a/src/routes/(app)/send/invoice/[id]/+page.server.js b/src/routes/(app)/send/invoice/[id]/+page.server.js deleted file mode 100644 index 2662e771..00000000 --- a/src/routes/(app)/send/invoice/[id]/+page.server.js +++ /dev/null @@ -1,37 +0,0 @@ -import { error, redirect } from "@sveltejs/kit"; -import { fd, auth, get, post } from "$lib/utils"; - -export async function load({ params: { id }, parent, url }) { - let { rates, user } = await parent(); - - let invoice = await get(`/invoice/${id}`); - - if (invoice.prompt && invoice.tip === null) - redirect(307, `/${invoice.user.username}/invoice/${id}/tip`); - - if (invoice.memoPrompt && invoice.memo === null) - redirect(307, `/${invoice.user.username}/invoice/${id}/memo`); - - if (invoice.user.username === user?.username) - error(500, { message: "Cannot send to self" }); - - if (!user) redirect(307, `/${invoice.user.username}/invoice/${id}`); - - return { invoice, rates, user }; -} - -export const actions = { - default: async ({ cookies, params: { id }, request }) => { - try { - let body = await fd(request); - body.hash = id; - - await post("/payments", body, auth(cookies)); - } catch (e) { - console.log("payment failed", id, e); - error(500, e.message); - } - - redirect(307, "/sent"); - }, -}; diff --git a/src/routes/(app)/send/invoice/[id]/+page.server.ts b/src/routes/(app)/send/invoice/[id]/+page.server.ts new file mode 100644 index 00000000..2662e771 --- /dev/null +++ b/src/routes/(app)/send/invoice/[id]/+page.server.ts @@ -0,0 +1,37 @@ +import { error, redirect } from "@sveltejs/kit"; +import { fd, auth, get, post } from "$lib/utils"; + +export async function load({ params: { id }, parent, url }) { + let { rates, user } = await parent(); + + let invoice = await get(`/invoice/${id}`); + + if (invoice.prompt && invoice.tip === null) + redirect(307, `/${invoice.user.username}/invoice/${id}/tip`); + + if (invoice.memoPrompt && invoice.memo === null) + redirect(307, `/${invoice.user.username}/invoice/${id}/memo`); + + if (invoice.user.username === user?.username) + error(500, { message: "Cannot send to self" }); + + if (!user) redirect(307, `/${invoice.user.username}/invoice/${id}`); + + return { invoice, rates, user }; +} + +export const actions = { + default: async ({ cookies, params: { id }, request }) => { + try { + let body = await fd(request); + body.hash = id; + + await post("/payments", body, auth(cookies)); + } catch (e) { + console.log("payment failed", id, e); + error(500, e.message); + } + + redirect(307, "/sent"); + }, +}; diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.js b/src/routes/(app)/send/lightning/[payreq]/+page.server.js deleted file mode 100644 index 89bcc3c3..00000000 --- a/src/routes/(app)/send/lightning/[payreq]/+page.server.js +++ /dev/null @@ -1,24 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { fd, auth, post } from "$lib/utils"; - -export async function load({ cookies, params }) { - return post("/parse", params, auth(cookies)); -} - -export const actions = { - setAmount: async ({ cookies, request }) => fd(request), - - send: async ({ cookies, request }) => { - try { - let body = await fd(request); - - await post("/payments", body, auth(cookies)); - } catch (e) { - if (e.message.includes("unusable")) - e.message = "Failed to route payment, try sending a lower amount"; - return fail(400, { message: e.message }); - } - - redirect(307, "/sent"); - }, -}; diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.ts b/src/routes/(app)/send/lightning/[payreq]/+page.server.ts new file mode 100644 index 00000000..89bcc3c3 --- /dev/null +++ b/src/routes/(app)/send/lightning/[payreq]/+page.server.ts @@ -0,0 +1,24 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { fd, auth, post } from "$lib/utils"; + +export async function load({ cookies, params }) { + return post("/parse", params, auth(cookies)); +} + +export const actions = { + setAmount: async ({ cookies, request }) => fd(request), + + send: async ({ cookies, request }) => { + try { + let body = await fd(request); + + await post("/payments", body, auth(cookies)); + } catch (e) { + if (e.message.includes("unusable")) + e.message = "Failed to route payment, try sending a lower amount"; + return fail(400, { message: e.message }); + } + + redirect(307, "/sent"); + }, +}; diff --git a/src/routes/(app)/sent/+page.server.js b/src/routes/(app)/sent/+page.server.js deleted file mode 100644 index 62a4d9b4..00000000 --- a/src/routes/(app)/sent/+page.server.js +++ /dev/null @@ -1,6 +0,0 @@ -import { get, auth } from "$lib/utils"; - -export let load = async ({ cookies }) => { - let { payments } = await get("/payments", auth(cookies)); - return { payments }; -}; diff --git a/src/routes/(app)/sent/+page.server.ts b/src/routes/(app)/sent/+page.server.ts new file mode 100644 index 00000000..62a4d9b4 --- /dev/null +++ b/src/routes/(app)/sent/+page.server.ts @@ -0,0 +1,6 @@ +import { get, auth } from "$lib/utils"; + +export let load = async ({ cookies }) => { + let { payments } = await get("/payments", auth(cookies)); + return { payments }; +}; diff --git a/src/routes/(app)/support/+server.js b/src/routes/(app)/support/+server.js deleted file mode 100644 index e9a16cfc..00000000 --- a/src/routes/(app)/support/+server.js +++ /dev/null @@ -1,9 +0,0 @@ -import { json } from "@sveltejs/kit"; -import { auth, post } from "$lib/utils"; - -export const prerender = false; - -export async function POST({ cookies, request }) { - let result = await post("/email", await request.json(), auth(cookies)); - return json(result); -} diff --git a/src/routes/(app)/support/+server.ts b/src/routes/(app)/support/+server.ts new file mode 100644 index 00000000..e9a16cfc --- /dev/null +++ b/src/routes/(app)/support/+server.ts @@ -0,0 +1,9 @@ +import { json } from "@sveltejs/kit"; +import { auth, post } from "$lib/utils"; + +export const prerender = false; + +export async function POST({ cookies, request }) { + let result = await post("/email", await request.json(), auth(cookies)); + return json(result); +} diff --git a/src/routes/(app)/withdraw/+server.js b/src/routes/(app)/withdraw/+server.js deleted file mode 100644 index a75a72f8..00000000 --- a/src/routes/(app)/withdraw/+server.js +++ /dev/null @@ -1,10 +0,0 @@ -import { auth, post } from "$lib/utils"; - -export async function POST({ cookies, request }) { - let body = await request.json(); - await post("/payments", body, auth(cookies)); - - return new Response(JSON.stringify("ok"), { - headers: { "content-type": "application/json" }, - }); -} diff --git a/src/routes/(app)/withdraw/+server.ts b/src/routes/(app)/withdraw/+server.ts new file mode 100644 index 00000000..a75a72f8 --- /dev/null +++ b/src/routes/(app)/withdraw/+server.ts @@ -0,0 +1,10 @@ +import { auth, post } from "$lib/utils"; + +export async function POST({ cookies, request }) { + let body = await request.json(); + await post("/payments", body, auth(cookies)); + + return new Response(JSON.stringify("ok"), { + headers: { "content-type": "application/json" }, + }); +} diff --git a/src/routes/(static)/+layout.server.js b/src/routes/(static)/+layout.server.js deleted file mode 100644 index 81d1d3dc..00000000 --- a/src/routes/(static)/+layout.server.js +++ /dev/null @@ -1,16 +0,0 @@ -import { get, post, auth, protectedRoutes } from "$lib/utils"; - -export async function load({ cookies, request, url, params }) { - let token = cookies.get("token"); - let rate, - rates = { USD: 1 }; - - let user; - if (token) { - try { - user = await get("/me", auth(cookies)); - } catch (e) {} - } - - return { user }; -} diff --git a/src/routes/(static)/+layout.server.ts b/src/routes/(static)/+layout.server.ts new file mode 100644 index 00000000..81d1d3dc --- /dev/null +++ b/src/routes/(static)/+layout.server.ts @@ -0,0 +1,16 @@ +import { get, post, auth, protectedRoutes } from "$lib/utils"; + +export async function load({ cookies, request, url, params }) { + let token = cookies.get("token"); + let rate, + rates = { USD: 1 }; + + let user; + if (token) { + try { + user = await get("/me", auth(cookies)); + } catch (e) {} + } + + return { user }; +} diff --git a/src/routes/(static)/docs/+page.server.js b/src/routes/(static)/docs/+page.server.js deleted file mode 100644 index 41176b14..00000000 --- a/src/routes/(static)/docs/+page.server.js +++ /dev/null @@ -1,4 +0,0 @@ -export let load = async ({ cookies }) => { - let token = cookies.get("token"); - return { token }; -}; diff --git a/src/routes/(static)/docs/+page.server.ts b/src/routes/(static)/docs/+page.server.ts new file mode 100644 index 00000000..41176b14 --- /dev/null +++ b/src/routes/(static)/docs/+page.server.ts @@ -0,0 +1,4 @@ +export let load = async ({ cookies }) => { + let token = cookies.get("token"); + return { token }; +}; diff --git a/src/routes/+layout.js b/src/routes/+layout.js deleted file mode 100644 index 7b5d4f44..00000000 --- a/src/routes/+layout.js +++ /dev/null @@ -1,14 +0,0 @@ -import { addTranslations, setLocale, setRoute } from "$lib/translations"; - -/** @type {import('@sveltejs/kit').Load} */ -export const load = async ({ data }) => { - const { i18n, translations } = data; - const { locale, route } = i18n; - - addTranslations(translations); - - await setRoute(route); - await setLocale(locale); - - return i18n; -}; diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js deleted file mode 100644 index aebac694..00000000 --- a/src/routes/+layout.server.js +++ /dev/null @@ -1,46 +0,0 @@ -import { auth, get } from "$lib/utils"; -import { - locales, - loadTranslations, - translations, - defaultLocale, -} from "$lib/translations"; - -export let load = async ({ cookies, request, url }) => { - let { host, pathname } = url; - let user; - let token = cookies.get("token"); - if (token) { - try { - user = await get("/me", auth(cookies)); - } catch (e) {} - } - - // Try to get the locale from cookie - let locale = user?.language || (cookies.get("lang") || "").toLowerCase(); - - // Get user preferred locale - if (!locale) { - locale = `${`${request.headers.get("accept-language")}`.match( - /[a-zA-Z]+?(?=-|_|,|;)/ - )}`.toLowerCase(); - } - - // Get defined locales - let supportedLocales = locales.get().map((l) => l.toLowerCase()); - - // Use default locale if current locale is not supported - if (!supportedLocales.includes(locale)) { - locale = defaultLocale; - } - - await loadTranslations(locale, pathname); // keep this just before the `return` - - return { - host, - pathname, - i18n: { locale, route: pathname }, - user, - translations: translations.get(), - }; -}; diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts new file mode 100644 index 00000000..aebac694 --- /dev/null +++ b/src/routes/+layout.server.ts @@ -0,0 +1,46 @@ +import { auth, get } from "$lib/utils"; +import { + locales, + loadTranslations, + translations, + defaultLocale, +} from "$lib/translations"; + +export let load = async ({ cookies, request, url }) => { + let { host, pathname } = url; + let user; + let token = cookies.get("token"); + if (token) { + try { + user = await get("/me", auth(cookies)); + } catch (e) {} + } + + // Try to get the locale from cookie + let locale = user?.language || (cookies.get("lang") || "").toLowerCase(); + + // Get user preferred locale + if (!locale) { + locale = `${`${request.headers.get("accept-language")}`.match( + /[a-zA-Z]+?(?=-|_|,|;)/ + )}`.toLowerCase(); + } + + // Get defined locales + let supportedLocales = locales.get().map((l) => l.toLowerCase()); + + // Use default locale if current locale is not supported + if (!supportedLocales.includes(locale)) { + locale = defaultLocale; + } + + await loadTranslations(locale, pathname); // keep this just before the `return` + + return { + host, + pathname, + i18n: { locale, route: pathname }, + user, + translations: translations.get(), + }; +}; diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts new file mode 100644 index 00000000..7b5d4f44 --- /dev/null +++ b/src/routes/+layout.ts @@ -0,0 +1,14 @@ +import { addTranslations, setLocale, setRoute } from "$lib/translations"; + +/** @type {import('@sveltejs/kit').Load} */ +export const load = async ({ data }) => { + const { i18n, translations } = data; + const { locale, route } = i18n; + + addTranslations(translations); + + await setRoute(route); + await setLocale(locale); + + return i18n; +}; diff --git a/src/routes/+page.server.js b/src/routes/+page.server.js deleted file mode 100644 index 20c3a05b..00000000 --- a/src/routes/+page.server.js +++ /dev/null @@ -1,3 +0,0 @@ -export let load = async () => { - return { faqs: ["cost", "compatibility", "safety", "pos", "bitcoin"] }; -}; diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts new file mode 100644 index 00000000..20c3a05b --- /dev/null +++ b/src/routes/+page.server.ts @@ -0,0 +1,3 @@ +export let load = async () => { + return { faqs: ["cost", "compatibility", "safety", "pos", "bitcoin"] }; +}; diff --git a/src/routes/about/+server.js b/src/routes/about/+server.js deleted file mode 100644 index eb3d9729..00000000 --- a/src/routes/about/+server.js +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from "@sveltejs/kit"; - -export async function GET() { - redirect(307, "/#about"); -} diff --git a/src/routes/about/+server.ts b/src/routes/about/+server.ts new file mode 100644 index 00000000..eb3d9729 --- /dev/null +++ b/src/routes/about/+server.ts @@ -0,0 +1,5 @@ +import { redirect } from "@sveltejs/kit"; + +export async function GET() { + redirect(307, "/#about"); +} diff --git a/src/routes/map/+page.server.js b/src/routes/map/+page.server.js deleted file mode 100644 index 5012e7e3..00000000 --- a/src/routes/map/+page.server.js +++ /dev/null @@ -1,11 +0,0 @@ -import { get } from "$lib/utils"; - -export let load = async () => { - let data = { locations: [] }; - - try { - data = await get("/locations"); - } catch (e) {} - - return data; -}; diff --git a/src/routes/map/+page.server.ts b/src/routes/map/+page.server.ts new file mode 100644 index 00000000..5012e7e3 --- /dev/null +++ b/src/routes/map/+page.server.ts @@ -0,0 +1,11 @@ +import { get } from "$lib/utils"; + +export let load = async () => { + let data = { locations: [] }; + + try { + data = await get("/locations"); + } catch (e) {} + + return data; +}; diff --git a/src/routes/start/+server.js b/src/routes/start/+server.js deleted file mode 100644 index 44561d40..00000000 --- a/src/routes/start/+server.js +++ /dev/null @@ -1,10 +0,0 @@ -import { redirect } from "@sveltejs/kit"; - -export async function GET({ cookies }) { - let username = cookies.get("username"); - if (username) { - redirect(307, `/${username}/receive`); - } - - redirect(307, "/"); -} diff --git a/src/routes/start/+server.ts b/src/routes/start/+server.ts new file mode 100644 index 00000000..44561d40 --- /dev/null +++ b/src/routes/start/+server.ts @@ -0,0 +1,10 @@ +import { redirect } from "@sveltejs/kit"; + +export async function GET({ cookies }) { + let username = cookies.get("username"); + if (username) { + redirect(307, `/${username}/receive`); + } + + redirect(307, "/"); +} -- cgit v1.2.3