lockfileVersion: 5.4 specifiers: '@fastify/multipart': ^7.1.2 '@fastify/passport': ^2.2.0 '@fastify/secure-session': ^5.2.0 '@fastify/static': ^6.5.0 '@fastify/websocket': ^7.0.1 '@sequelize/core': 7.0.0-alpha.10 async-mutex: ^0.2.4 axios: ^0.21.1 bcrypt: ^5.0.0 bip32: ^2.0.5 bip39: ^3.0.2 bitcoinjs-lib: '6' body-parser: ^1.19.0 bolt11: ^1.3.2 buffer-reverse: ^1.0.1 clightning-client: ^0.1.2 coinselect: ^3.1.12 compression: ^1.7.4 cookie-parser: ^1.4.4 cors: ^2.8.5 date-fns: ^2.21.3 ecpair: ^2.0.1 express: 4.17.1 express-async-handler: ^1.1.4 express-pino-logger: ^6.0.0 express-session: ^1.16.2 fastify: ^4.5.3 file-type: ^18.0.0 http-proxy-middleware: ^0.20.0 imap: ^0.8.19 jsonwebtoken: ^8.5.1 knex: ^2.3.0 lightning: '5' liquidjs-lib: 6.0.2-liquid.8 lnurl: ^0.24.2 long: ^4.0.0 mailgun-js: ^0.22.0 mariadb: ^2.4.0 mysql: ^2.18.1 mysql2: ^2.2.5 node-fetch: ^2.6.1 nodemon: ^2.0.7 otplib: ^12.0.1 passport-jwt: ^4.0.0 passport-local: 1.0.0 pino: '8' pino-pretty: ^7.0.0 postmark: ^3.0.11 prettier: ^1.19.1 pump: ^3.0.0 query-string: ^6.13.1 readable-stream-clone: ^0.0.7 sqlite3: ^5.0.11 tiny-secp256k1: ^2.1.2 uuid: '8' web-push: ^3.4.4 wretch: ^1.7.4 ws: ^7.4.6 zeromq: 6.0.0-beta.6 dependencies: '@fastify/multipart': 7.1.2 '@fastify/passport': 2.2.0 '@fastify/secure-session': 5.2.0 '@fastify/static': 6.5.0 '@fastify/websocket': 7.0.1 '@sequelize/core': 7.0.0-alpha.10_jza55q5z6t5fyeys4gcza62sym async-mutex: 0.2.6 axios: 0.21.4 bcrypt: 5.0.1 bip32: 2.0.6 bip39: 3.0.4 bitcoinjs-lib: 6.0.1 body-parser: 1.19.0 bolt11: 1.3.2 buffer-reverse: 1.0.1 clightning-client: 0.1.4 coinselect: 3.1.12 compression: 1.7.4 cookie-parser: 1.4.5 cors: 2.8.5 date-fns: 2.25.0 ecpair: 2.0.1 express: 4.17.1 express-async-handler: 1.1.4 express-pino-logger: 6.0.0 express-session: 1.17.2 fastify: 4.5.3 file-type: 18.0.0 http-proxy-middleware: 0.20.0 imap: 0.8.19 jsonwebtoken: 8.5.1 knex: 2.3.0_vwur55szchyypzww7uxoqtylma lightning: 5.21.0 liquidjs-lib: 6.0.2-liquid.8 lnurl: 0.24.2 long: 4.0.0 mailgun-js: 0.22.0 mariadb: 2.5.4 mysql: 2.18.1 mysql2: 2.3.0 node-fetch: 2.6.5 nodemon: 2.0.13 otplib: 12.0.1 passport-jwt: 4.0.0 passport-local: 1.0.0 pino: 8.4.2 pino-pretty: 7.0.1 postmark: 3.0.11 pump: 3.0.0 query-string: 6.14.1 readable-stream-clone: 0.0.7 sqlite3: 5.0.11 tiny-secp256k1: 2.1.2 uuid: 8.3.2 web-push: 3.4.5 wretch: 1.7.6 ws: 7.5.5 zeromq: 6.0.0-beta.6 devDependencies: prettier: 1.19.1 packages: /@bleskomat/form/1.2.6: resolution: {integrity: sha512-xAMj1zfYWydo2K2U30Tn1R8p2hOEdRF9o0d/QPYHjGNQkgx6rHv4lgf6/UXOptjUvPKEIRtxXJBl7fYZ8nnRzA==} dependencies: express-handlebars: 6.0.3 underscore: 1.13.2 dev: false /@fastify/accept-negotiator/1.0.0: resolution: {integrity: sha512-4R/N2KfYeld7A5LGkai+iUFMahXcxxYbDp+XS2B1yuL3cdmZLJ9TlCnNzT3q5xFTqsYm0GPpinLUwfSwjcVjyA==} engines: {node: '>=14'} dev: false /@fastify/ajv-compiler/3.2.0: resolution: {integrity: sha512-JrqgKmZoh1AJojDZk699DupQ9+tz5gSy7/w+5DrkXy5whM5IcqdV3SjG5qnOqgVJT1nPtUMDY0xYus2j6vwJiw==} dependencies: ajv: 8.11.0 ajv-formats: 2.1.1 fast-uri: 2.1.0 dev: false /@fastify/busboy/1.1.0: resolution: {integrity: sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==} engines: {node: '>=10.17.0'} dependencies: text-decoding: 1.0.0 dev: false /@fastify/cookie/7.4.0: resolution: {integrity: sha512-82MUHsZJY/Wl+rG2E+bnYxSifOtNRChm2M+8xnZHnKtYmyNfLvy/37ElCtqD3KzUyTycR+GE7v7uiDD/tY4TkA==} dependencies: cookie: 0.5.0 fastify-plugin: 4.2.1 dev: false /@fastify/deepmerge/1.1.0: resolution: {integrity: sha512-E8Hfdvs1bG6u0N4vN5Nty6JONUfTdOciyD5rn8KnEsLKIenvOVcr210BQR9t34PRkNyjqnMLGk3e0BsaxRdL+g==} dev: false /@fastify/error/3.0.0: resolution: {integrity: sha512-dPRyT40GiHRzSCll3/Jn2nPe25+E1VXc9tDwRAIKwFCxd5Np5wzgz1tmooWG3sV0qKgrBibihVoCna2ru4SEFg==} dev: false /@fastify/fast-json-stringify-compiler/4.1.0: resolution: {integrity: sha512-cTKBV2J9+u6VaKDhX7HepSfPSzw+F+TSd+k0wzifj4rG+4E5PjSFJCk19P8R6tr/72cuzgGd+mbB3jFT6lvAgw==} dependencies: fast-json-stringify: 5.2.0 dev: false /@fastify/flash/5.0.0: resolution: {integrity: sha512-ny5qwwYOYIJ+C05KyyIc8cWAr5Ca+Xzocn0ReTsNSqoeQ1UDjN6mWH24VXfQvsI6x8bQSmQdLhiWncPruyZbag==} engines: {node: '>=10.16.0'} dependencies: fastify-plugin: 3.0.1 dev: false /@fastify/multipart/7.1.2: resolution: {integrity: sha512-p/y1PfUhvIEVsK/52tT3xoVSoM/31p6eIVmjp2ZqUHQY8+ZLEb+eGwJKXZiV8jhcjPyMU67BsYy2em5e4vfJFA==} dependencies: '@fastify/busboy': 1.1.0 '@fastify/deepmerge': 1.1.0 '@fastify/error': 3.0.0 end-of-stream: 1.4.4 fastify-plugin: 4.2.1 hexoid: 1.0.0 secure-json-parse: 2.4.0 stream-wormhole: 1.1.0 dev: false /@fastify/passport/2.2.0: resolution: {integrity: sha512-JbrtmJUotEgPf9FPpCpbMcVDghLbjziAkj7EnufEaRpMOZE3wkeVg0CzgnD+nrIGoHo6D31RCJMIZMvvLxb+ew==} dependencies: '@fastify/flash': 5.0.0 fastify-plugin: 4.2.1 dev: false /@fastify/secure-session/5.2.0: resolution: {integrity: sha512-oRWKdHwWUzp4rsJ3GnR8w8doE+7vllWMtohBVp77bENkhm4/OvofaO6PJLJuQvKF7XJAKiGip29dX1RsllKT7g==} hasBin: true dependencies: '@fastify/cookie': 7.4.0 fastify-plugin: 3.0.1 sodium-native: 3.4.1 dev: false /@fastify/static/6.5.0: resolution: {integrity: sha512-WEk6iqgejA6ivjkvbJ47A+uMci225z5lZwLXCXZS3ZYR/kYje1gzzarkKKGL6TWpBw6smkOzxA7dfEoY0347Nw==} dependencies: '@fastify/accept-negotiator': 1.0.0 content-disposition: 0.5.4 fastify-plugin: 4.2.1 glob: 8.0.3 p-limit: 3.1.0 readable-stream: 4.1.0 send: 0.18.0 transitivePeerDependencies: - supports-color dev: false /@fastify/websocket/7.0.1: resolution: {integrity: sha512-LHOUKqRr1iV4w47sVQAT5IrVPsTiuEAqOS1QgtRymJYPeVfIC65LTxg22eoR7kyYW4W84oWJk0gtsBwUGhDEVg==} dependencies: fastify-plugin: 4.2.1 ws: 8.8.1 transitivePeerDependencies: - bufferutil - utf-8-validate dev: false /@gar/promisify/1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: false optional: true /@grpc/grpc-js/1.6.12: resolution: {integrity: sha512-JmvQ03OTSpVd9JTlj/K3IWHSz4Gk/JMLUTtW7Zb0KvO1LcOYGATh5cNuRYzCAeDR3O8wq+q8FZe97eO9MBrkUw==} engines: {node: ^8.13.0 || >=10.10.0} dependencies: '@grpc/proto-loader': 0.7.2 '@types/node': 18.7.14 dev: false /@grpc/proto-loader/0.7.2: resolution: {integrity: sha512-jCdyLIT/tdQ1zhrbTQnJNK5nbDf0GoBpy5jVNywBzzMDF+Vs6uEaHnfz46dMtDxkvwrF2hzk5Z67goliceH0sA==} engines: {node: '>=6'} hasBin: true dependencies: '@types/long': 4.0.1 lodash.camelcase: 4.3.0 long: 4.0.0 protobufjs: 7.1.0 yargs: 16.2.0 dev: false /@mapbox/node-pre-gyp/1.0.5: resolution: {integrity: sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==} hasBin: true dependencies: detect-libc: 1.0.3 https-proxy-agent: 5.0.0 make-dir: 3.1.0 node-fetch: 2.6.5 nopt: 5.0.0 npmlog: 4.1.2 rimraf: 3.0.2 semver: 7.3.5 tar: 6.1.11 transitivePeerDependencies: - supports-color dev: false /@npmcli/fs/1.1.1: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 semver: 7.3.7 dev: false optional: true /@npmcli/move-file/1.1.2: resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} engines: {node: '>=10'} dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 dev: false optional: true /@otplib/core/12.0.1: resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==} dev: false /@otplib/plugin-crypto/12.0.1: resolution: {integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==} dependencies: '@otplib/core': 12.0.1 dev: false /@otplib/plugin-thirty-two/12.0.1: resolution: {integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==} dependencies: '@otplib/core': 12.0.1 thirty-two: 1.0.2 dev: false /@otplib/preset-default/12.0.1: resolution: {integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==} dependencies: '@otplib/core': 12.0.1 '@otplib/plugin-crypto': 12.0.1 '@otplib/plugin-thirty-two': 12.0.1 dev: false /@otplib/preset-v11/12.0.1: resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==} dependencies: '@otplib/core': 12.0.1 '@otplib/plugin-crypto': 12.0.1 '@otplib/plugin-thirty-two': 12.0.1 dev: false /@protobufjs/aspromise/1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQr
<script>
import { goto } from "$app/navigation";
import { scroll } from "$lib/utils";
import { t } from "$lib/translations";
import { page } from "$app/stores";
import DarkToggle from "$comp/DarkToggle.svelte";
import LocaleSelector from "$comp/LocaleSelector.svelte";
let { howItWorks, faq, about, user } = $props();
let showMobileMenu = $state(false);
let header = $state();
const mobileMenuButtonClick = (section) => {
showMobileMenu = false;
scroll(section);
};
</script>
<header
class="w-full lg:w-5/6 p-4 mx-auto fixed sticky z-10 top-0 bg-base-100"
bind:this={header}
>
<nav class="block lg:flex justify-between items-center">
<div class="flex justify-start lg:justify-center items-center lg:space-x-5">
<a href="/" onclick={() => scroll(header)} aria-label="Home">
<iconify-icon noobserver icon="coinos:logo" width="224"></iconify-icon>
</a>
</div>
<!-- desktop nav -->
<div class="hidden space-x-5 lg:flex justify-center items-center font-bold">
{#if $page.url.pathname === "/"}
<button class="hover:opacity-80" onclick={() => scroll(howItWorks)}
>{$t("howItWorks.header")}</button
>
<button class="hover:opacity-80" onclick={() => scroll(faq)}
>{$t("faq.header")}</button
>
<button class="hover:opacity-80" onclick={() => scroll(about)}
>{$t("about.header")}</button
>
{/if}
{#if user}
<button
class="btn !w-auto !rounded-full"
onclick={() => goto(`/${user.username}`)}
>Home
</button>
<button
class="btn !w-auto !rounded-full"
onclick={() => goto("/logout")}
>
{$t("nav.signOut")}
</button>
{:else}
<button
class="btn btn-accent !w-auto !rounded-full"
onclick={() => goto("/register")}
>{$t("nav.register")}
</button>
<button
class="btn !w-auto !rounded-full"
onclick={() => goto("/login")}
>
{$t("nav.signIn")}
</button>
{/if}
</div>
<button
aria-label="Menu"
class="block lg:hidden absolute top-[34.5px] right-10 z"
onclick={() => (showMobileMenu = !showMobileMenu)}
>
<iconify-icon noobserver
icon={!showMobileMenu ? "ph:list-bold" : "ph:x-bold"}
width="32"
></iconify-icon>
</button>
<div
class="container w-full p-10 lg:hidden absolute top-0 {showMobileMenu
? 'right-0'
: 'right-[-100%]'} transition-all ease-in-out duration-300 h-[100vh] w-full bg-base-100"
>
<div class="space-y-5 mt-24 font-bold text-xl">
<LocaleSelector />
<DarkToggle />
<button onclick={() => mobileMenuButtonClick(howItWorks)} class="block"
>{$t("howItWorks.header")}</button
>
<button onclick={() => mobileMenuButtonClick(faq)} class="block"
>{$t("faq.header")}</button
>
<button onclick={() => mobileMenuButtonClick(about)} class="block"
>{$t("about.header")}</button
>
{#if !user}
<button class="btn btn-accent" onclick={() => goto("/register")}
>{$t("nav.register")}
</button>
<button class="btn" onclick={() => goto("/login")}>
{$t("nav.signIn")}
</button>
{:else}
<button
class="border rounded-full px-6 py-2 font-bold block"
onclick={() => goto(`/${user.username}`)}
>{$t("nav.account")}
</button>
<button
class="bg-primary text-white border rounded-full px-6 py-2 font-bold block"
onclick={() => goto("/logout")}
>
{$t("nav.signOut")}
</button>
{/if}
</div>
</div>
</nav>
</header>
<style>
.z {
z-index: 100;
}
</style>