diff options
| author | Adam Soltys <[email protected]> | 2025-11-21 19:37:37 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-02-11 15:33:07 -0800 |
| commit | 21023052918c0b787916ef78937e0be41f46142a (patch) | |
| tree | 09c5d29fae412a1ed274559098369d0886342178 | |
| parent | 8dc79c6080a66b587220634ad1b143d52ec60570 (diff) | |
| download | coinos-ui-21023052918c0b787916ef78937e0be41f46142a.tar.gz coinos-ui-21023052918c0b787916ef78937e0be41f46142a.zip | |
ark route
| -rw-r--r-- | bun.lock | 11 | ||||
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | src/components/About.svelte | 2 | ||||
| -rw-r--r-- | src/lib/ark.ts | 5 | ||||
| -rw-r--r-- | src/lib/store.ts | 4 | ||||
| -rw-r--r-- | src/routes/(app)/ark/+page.svelte | 53 | ||||
| -rw-r--r-- | static/map.webp | bin | 0 -> 33082 bytes |
7 files changed, 73 insertions, 3 deletions
@@ -4,6 +4,7 @@ "": { "name": "coinos", "dependencies": { + "@arkade-os/sdk": "^0.3.7", "@capacitor/status-bar": "^7.0.3", "@tailwindcss/postcss": "^4.1.13", "@tailwindcss/vite": "^4.1.13", @@ -72,6 +73,8 @@ "packages": { "@alloc/quick-lru": ["@alloc/[email protected]", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + "@arkade-os/sdk": ["@arkade-os/[email protected]", "", { "dependencies": { "@noble/curves": "2.0.0", "@noble/secp256k1": "3.0.0", "@scure/base": "2.0.0", "@scure/btc-signer": "2.0.1", "bip68": "1.0.4" } }, "sha512-uXRf3uXc+YKZA0nnPe/gM6QKGTB4xlQn+EHPU3PliCp7fWTDYnPX/QzWszNY5Y71/FWMebrUgHFyDk6XnlQOrw=="], + "@babel/code-frame": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], "@babel/helper-validator-identifier": ["@babel/[email protected]", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], @@ -208,6 +211,8 @@ "@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@noble/secp256k1": ["@noble/[email protected]", "", {}, "sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg=="], + "@nodelib/fs.scandir": ["@nodelib/[email protected]", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], "@nodelib/fs.stat": ["@nodelib/[email protected]", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], @@ -438,6 +443,8 @@ "bip21": ["[email protected]", "", { "dependencies": { "query-string": "^9.0.0" } }, "sha512-uJ3opZiOUs9x+Q+D6ezcIQje3ymIXyFFEbx1C8wRVSERxQ0rXTG4FJuj8neYUDNJhwsvTy9f2dYMaUMq+3/fIw=="], + "bip68": ["[email protected]", "", {}, "sha512-O1htyufFTYy3EO0JkHg2CLykdXEtV2ssqw47Gq9A0WByp662xpJnMEB9m43LZjsSDjIAOozWRExlFQk2hlV1XQ=="], + "bitcoin-address-validation": ["[email protected]", "", { "dependencies": { "base58-js": "^3.0.2", "bech32": "^2.0.0", "sha256-uint8array": "^0.10.3" } }, "sha512-R1X1c9EdgjgjTpjshjk5e16TbgF7HYasxBcu7l5ScWMxVs53845vMUg5PvnQ/R/3h8Grly6Y52DgH6/77gazLQ=="], "bl": ["[email protected]", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], @@ -1244,6 +1251,8 @@ "zxing-wasm": ["[email protected]", "", { "dependencies": { "@types/emscripten": "^1.40.1", "type-fest": "^4.41.0" } }, "sha512-RyHxVaAHsLSDzmwcAG05IF8sVOE5Ta2JT1dRDh0mzVZOIiDXZstsjkqvKHasN1n4lvFSbX7ngkHDufnt/XI07Q=="], + "@arkade-os/sdk/@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "2.0.0" } }, "sha512-RiwZZeJnsTnhT+/gg2KvITJZhK5oagQrpZo+yQyd3mv3D5NAG2qEeEHpw7IkXRlpkoD45wl2o4ydHAvY9wyEfw=="], + "@capacitor/assets/@capacitor/cli": ["@capacitor/[email protected]", "", { "dependencies": { "@ionic/cli-framework-output": "^2.2.5", "@ionic/utils-fs": "^3.1.6", "@ionic/utils-subprocess": "^2.1.11", "@ionic/utils-terminal": "^2.3.3", "commander": "^9.3.0", "debug": "^4.3.4", "env-paths": "^2.2.0", "kleur": "^4.1.4", "native-run": "^2.0.0", "open": "^8.4.0", "plist": "^3.0.5", "prompts": "^2.4.2", "rimraf": "^4.4.1", "semver": "^7.3.7", "tar": "^6.1.11", "tslib": "^2.4.0", "xml2js": "^0.5.0" }, "bin": { "cap": "bin/capacitor", "capacitor": "bin/capacitor" } }, "sha512-qN8LDlREMhrYhOvVXahoJVNkP8LP55/YPRJrzTAFrMqlNJC18L3CzgWYIblFPnuwfbH/RxbfoZT/ydkwgVpMrw=="], "@capacitor/cli/commander": ["[email protected]", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], @@ -1436,6 +1445,8 @@ "xml2js/xmlbuilder": ["[email protected]", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], + "@arkade-os/sdk/@noble/curves/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw=="], + "@capacitor/assets/@capacitor/cli/@ionic/utils-subprocess": ["@ionic/[email protected]", "", { "dependencies": { "@ionic/utils-array": "2.1.6", "@ionic/utils-fs": "3.1.7", "@ionic/utils-process": "2.1.11", "@ionic/utils-stream": "3.1.6", "@ionic/utils-terminal": "2.3.4", "cross-spawn": "^7.0.3", "debug": "^4.0.0", "tslib": "^2.0.1" } }, "sha512-nGYvyGVjU0kjPUcSRFr4ROTraT3w/7r502f5QJEsMRKTqa4eEzCshtwRk+/mpASm0kgBN5rrjYA5A/OZg8ahqg=="], "@capacitor/assets/@capacitor/cli/commander": ["[email protected]", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], diff --git a/package.json b/package.json index a0c110cb..95adeea3 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ }, "type": "module", "dependencies": { + "@arkade-os/sdk": "^0.3.7", "@capacitor/status-bar": "^7.0.3", "@tailwindcss/postcss": "^4.1.13", "@tailwindcss/vite": "^4.1.13", diff --git a/src/components/About.svelte b/src/components/About.svelte index 331a5188..8f74b47c 100644 --- a/src/components/About.svelte +++ b/src/components/About.svelte @@ -78,7 +78,7 @@ <div class="relative"> <a href="/map" class="contents"> - <img src="/map.png" class="mx-auto" alt="Map" /> + <img src="/map.webp" class="mx-auto" alt="Map" /> </a> <a href="/map" class="contents"> diff --git a/src/lib/ark.ts b/src/lib/ark.ts new file mode 100644 index 00000000..0986983a --- /dev/null +++ b/src/lib/ark.ts @@ -0,0 +1,5 @@ +import { persistLocal } from "$lib/store"; + +const prefix = "ark"; +export const mnemonic = persistLocal(`${prefix}mnemonic`, ""); +export const password = persistLocal(`${prefix}password`, ""); diff --git a/src/lib/store.ts b/src/lib/store.ts index c7dc9970..0148f480 100644 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -1,7 +1,7 @@ import { browser } from "$app/environment"; import { writable } from "svelte/store"; -const persistSession = (key, defaultValue = undefined) => { +export const persistSession = (key, defaultValue = undefined) => { const s = writable( browser && sessionStorage.getItem(key) && @@ -17,7 +17,7 @@ const persistSession = (key, defaultValue = undefined) => { return s; }; -const persistLocal = (key, defaultValue: any = undefined) => { +export const persistLocal = (key, defaultValue: any = undefined) => { const s = writable( browser && localStorage.getItem(key) && diff --git a/src/routes/(app)/ark/+page.svelte b/src/routes/(app)/ark/+page.svelte new file mode 100644 index 00000000..81ef9354 --- /dev/null +++ b/src/routes/(app)/ark/+page.svelte @@ -0,0 +1,53 @@ +<script> + import { SingleKey, Wallet } from "@arkade-os/sdk"; + import { onMount, tick } from "svelte"; + import { HDKey } from "@scure/bip32"; + + const identity = SingleKey.fromHex( + "ce66c68f8875c0c98a502c666303dc183a21600130013c06f9d1edf60207abf2", + ); + + let loading = $state(); + let balance = $state(); + + onMount(async () => { + setTimeout(checkBalance, 1000); + }); + + let checkBalance = async (e) => { + e?.preventDefault(); + loading = true; + + const wallet = await Wallet.create({ + identity, + arkServerUrl: "https://arkade.computer", + }); + + balance = await wallet.getBalance(); + + loading = false; + }; +</script> + +<div class="space-y-5"> + <h1 class="text-center text-3xl font-semibold">Ark</h1> + + <div class="container w-full mx-auto text-lg px-4 max-w-xl space-y-5"> + {#if loading} + <div> + <div class="loading loading-spinner"></div> + </div> + {:else if typeof balance !== "undefined"} + <div class="flex items-center gap-2"> + <div> + {balance.available} sats + </div> + </div> + {/if} + + <div class="flex gap-2 justify-center w-full"> + <a href="/receive" class="btn grow">Receive</a> + <a href="/send" class="btn grow">Send</a> + </div> + </div> +</div> diff --git a/static/map.webp b/static/map.webp Binary files differnew file mode 100644 index 00000000..95ff0147 --- /dev/null +++ b/static/map.webp |
