diff options
| author | Adam Soltys <[email protected]> | 2023-01-25 23:01:55 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-01-25 23:01:55 -0800 |
| commit | f1b3efe88204ba203667a8dd67ac8ab598af1959 (patch) | |
| tree | 071975ffa4c30f81a7a25b78b4cfd5f85fdf7ea5 | |
| parent | 2a18749cb9b08726dedf0cfb63971305e50a910a (diff) | |
| download | coinos-ui-f1b3efe88204ba203667a8dd67ac8ab598af1959.tar.gz coinos-ui-f1b3efe88204ba203667a8dd67ac8ab598af1959.zip | |
sveltekit 1.0
33 files changed, 324 insertions, 531 deletions
diff --git a/package.json b/package.json index d42c2904..b6b32ee6 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,6 @@ "format": "prettier --write --plugin-search-dir=. ." }, "devDependencies": { - "@sveltejs/adapter-node": "next", - "@sveltejs/kit": "1.0.0-next.556", "@zerodevx/svelte-toast": "^0.7.2", "autoprefixer": "^10.4.13", "bech32": "^2.0.0", @@ -42,7 +40,7 @@ "tailwindcss": "^3.2.4", "tiny-secp256k1": "^2.2.1", "uuid": "^9.0.0", - "vite": "^4.0.3", + "vite": "^4.0.4", "vite-plugin-node-polyfills": "^0.5.0", "vite-plugin-top-level-await": "^1.2.2", "vite-plugin-wasm": "^3.1.0" @@ -54,5 +52,9 @@ } } }, - "type": "module" + "type": "module", + "dependencies": { + "@sveltejs/adapter-node": "^1.1.4", + "@sveltejs/kit": "^1.2.10" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16704d70..d072ee80 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,8 +1,8 @@ lockfileVersion: 5.4 specifiers: - '@sveltejs/adapter-node': next - '@sveltejs/kit': 1.0.0-next.556 + '@sveltejs/adapter-node': ^1.1.4 + '@sveltejs/kit': ^1.2.10 '@zerodevx/svelte-toast': ^0.7.2 autoprefixer: ^10.4.13 bech32: ^2.0.0 @@ -33,14 +33,16 @@ specifiers: tailwindcss: ^3.2.4 tiny-secp256k1: ^2.2.1 uuid: ^9.0.0 - vite: ^4.0.3 + vite: ^4.0.4 vite-plugin-node-polyfills: ^0.5.0 vite-plugin-top-level-await: ^1.2.2 vite-plugin-wasm: ^3.1.0 +dependencies: + '@sveltejs/adapter-node': 1.1.4_@[email protected] + '@sveltejs/kit': [email protected][email protected] + devDependencies: - '@sveltejs/adapter-node': 1.0.0-next.106_zm7dem4zfy4fmufbczhdmz6r6y - '@sveltejs/kit': [email protected][email protected] '@zerodevx/svelte-toast': 0.7.2 autoprefixer: [email protected] bech32: 2.0.0 @@ -71,9 +73,9 @@ devDependencies: tailwindcss: [email protected] tiny-secp256k1: 2.2.1 uuid: 9.0.0 - vite: 4.0.3 - vite-plugin-node-polyfills: [email protected][email protected] - vite-plugin-top-level-await: [email protected] + vite: 4.0.4 + vite-plugin-node-polyfills: [email protected][email protected] + vite-plugin-top-level-await: [email protected] vite-plugin-wasm: 3.1.0 packages: @@ -93,7 +95,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-arm64/0.16.10: @@ -102,7 +103,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-x64/0.16.10: @@ -111,7 +111,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/darwin-arm64/0.16.10: @@ -120,7 +119,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/darwin-x64/0.16.10: @@ -129,7 +127,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-arm64/0.16.10: @@ -138,7 +135,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-x64/0.16.10: @@ -147,7 +143,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm/0.16.10: @@ -156,7 +151,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm64/0.16.10: @@ -165,7 +159,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ia32/0.16.10: @@ -174,7 +167,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-loong64/0.15.18: @@ -192,7 +184,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-mips64el/0.16.10: @@ -201,7 +192,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ppc64/0.16.10: @@ -210,7 +200,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-riscv64/0.16.10: @@ -219,7 +208,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-s390x/0.16.10: @@ -228,7 +216,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-x64/0.16.10: @@ -237,7 +224,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/netbsd-x64/0.16.10: @@ -246,7 +232,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true /@esbuild/openbsd-x64/0.16.10: @@ -255,7 +240,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true /@esbuild/sunos-x64/0.16.10: @@ -264,7 +248,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true /@esbuild/win32-arm64/0.16.10: @@ -273,7 +256,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-ia32/0.16.10: @@ -282,7 +264,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-x64/0.16.10: @@ -291,12 +272,11 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true + dev: false /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -321,10 +301,10 @@ packages: /@polka/url/1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} - dev: true + dev: false - /@rollup/plugin-commonjs/[email protected]: - resolution: {integrity: sha512-hsSD5Qzyuat/swzrExGG5l7EuIlPhwTsT7KwKbSCQzIcJWjRxiimi/0tyMYY2bByitNb3i1p+6JWEDGa0NvT0Q==} + /@rollup/plugin-commonjs/[email protected]: + resolution: {integrity: sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.68.0||^3.0.0 @@ -335,11 +315,11 @@ packages: '@rollup/pluginutils': [email protected] commondir: 1.0.1 estree-walker: 2.0.2 - glob: 8.0.3 + glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.27.0 rollup: 3.8.1 - dev: true + dev: false /@rollup/plugin-inject/[email protected]: resolution: {integrity: sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==} @@ -352,8 +332,8 @@ packages: rollup: 2.79.1 dev: true - /@rollup/plugin-json/[email protected]: - resolution: {integrity: sha512-D1CoOT2wPvadWLhVcmpkDnesTzjhNIQRWLsc3fA49IFOP2Y84cFOOJ+nKGYedvXHKUsPeq07HR4hXpBBr+CHlA==} + /@rollup/plugin-json/[email protected]: + resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0 @@ -363,7 +343,7 @@ packages: dependencies: '@rollup/pluginutils': [email protected] rollup: 3.8.1 - dev: true + dev: false /@rollup/plugin-node-resolve/[email protected]: resolution: {integrity: sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==} @@ -381,7 +361,7 @@ packages: is-module: 1.0.0 resolve: 1.22.1 rollup: 3.8.1 - dev: true + dev: false /@rollup/pluginutils/[email protected]: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} @@ -408,65 +388,66 @@ packages: estree-walker: 2.0.2 picomatch: 2.3.1 rollup: 3.8.1 - dev: true + dev: false - /@sveltejs/adapter-node/1.0.0-next.106_zm7dem4zfy4fmufbczhdmz6r6y: - resolution: {integrity: sha512-HByOyp9Y9PUWpdk9Yj5OtUGASFiDT5Fly+YrEtFOsm/TQBbcHKS/L0oNPRB6H1Qw9il2QMfbLs7iuaOjTsxg1A==} + /@sveltejs/adapter-node/1.1.4_@[email protected]: + resolution: {integrity: sha512-3iEBqi1fXLXP9YIbVuz2LXajoebRJCmAFEQbN40DlxAnA7G+InxUgnqFun3q9gBMz2Qvd99K51g/HxWetXRe8Q==} peerDependencies: - '@sveltejs/kit': ^1.0.0-next.587 + '@sveltejs/kit': ^1.0.0 dependencies: - '@rollup/plugin-commonjs': [email protected] - '@rollup/plugin-json': [email protected] + '@rollup/plugin-commonjs': [email protected] + '@rollup/plugin-json': [email protected] '@rollup/plugin-node-resolve': [email protected] - '@sveltejs/kit': [email protected][email protected] + '@sveltejs/kit': [email protected][email protected] rollup: 3.8.1 - dev: true + dev: false - /@sveltejs/kit/[email protected][email protected]: - resolution: {integrity: sha512-poCCk0Eqd5uFwEzeoi2KsP+RtjeEoYsg+UMDIEZiNIZtM6lw2CPDZS98TYOFAdLN+pQJJAji8ZNfvcE/rJN+jA==} - engines: {node: '>=16.14'} + /@sveltejs/kit/[email protected][email protected]: + resolution: {integrity: sha512-5LKhBEvkli5xzRObhV0c9QfyRiV96MQNouFM2Cn9nlEno6c88WVCFlNFPuTiSmHM2GE3pSCB+uT37fMFoWSERA==} + engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true peerDependencies: - svelte: ^3.44.0 - vite: ^3.2.0 || 4 + svelte: ^3.54.0 + vite: ^4.0.0 || 4 dependencies: - '@sveltejs/vite-plugin-svelte': [email protected][email protected] + '@sveltejs/vite-plugin-svelte': [email protected][email protected] '@types/cookie': 0.5.1 cookie: 0.5.0 - devalue: 4.2.0 + devalue: 4.2.2 + esm-env: 1.0.0 kleur: 4.1.5 - magic-string: 0.26.7 + magic-string: 0.27.0 mime: 3.0.0 sade: 1.8.1 set-cookie-parser: 2.5.1 sirv: 2.0.2 svelte: 3.55.0 tiny-glob: 0.2.9 - undici: 5.12.0 - vite: 4.0.3 + undici: 5.16.0 + vite: 4.0.4 transitivePeerDependencies: - supports-color - dev: true + dev: false - /@sveltejs/vite-plugin-svelte/[email protected][email protected]: - resolution: {integrity: sha512-6QupI/jemMfK+yI2pMtJcu5iO2gtgTfcBdGwMZZt+lgbFELhszbDl6Qjh000HgAV8+XUA+8EY8DusOFk8WhOIg==} + /@sveltejs/vite-plugin-svelte/[email protected][email protected]: + resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==} engines: {node: ^14.18.0 || >= 16} peerDependencies: - svelte: ^3.44.0 - vite: ^3.0.0 || 4 + svelte: ^3.54.0 + vite: ^4.0.0 || 4 dependencies: debug: 4.3.4 deepmerge: 4.2.2 kleur: 4.1.5 - magic-string: 0.26.7 + magic-string: 0.27.0 svelte: 3.55.0 svelte-hmr: [email protected] - vite: 4.0.3 - vitefu: [email protected] + vite: 4.0.4 + vitefu: [email protected] transitivePeerDependencies: - supports-color - dev: true + dev: false /@sveltekit-i18n/base/[email protected]: resolution: {integrity: sha512-F8gqG2+KAOeT0o2wYlUrW3TRCX7zaD7rBy/1CEVNw0irfw9TgFf/ODmhubkHHT3+6Zk+SMz8RNgeuffBfAMbJw==} @@ -598,15 +579,14 @@ packages: /@types/cookie/0.5.1: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} - dev: true + dev: false /@types/estree/0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: true /@types/estree/1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} - dev: true + dev: false /@types/node/11.11.6: resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} @@ -626,7 +606,7 @@ packages: /@types/resolve/1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true + dev: false /@types/sass/1.43.1: resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} @@ -710,7 +690,6 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true /base-x/3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} @@ -826,7 +805,7 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true + dev: false /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -950,7 +929,7 @@ packages: /builtin-modules/3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - dev: true + dev: false /builtin-status-codes/3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -961,7 +940,7 @@ packages: engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 - dev: true + dev: false /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} @@ -1007,7 +986,7 @@ packages: /commondir/1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + dev: false /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1024,7 +1003,7 @@ packages: /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - dev: true + dev: false /create-ecdh/4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -1095,12 +1074,12 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true + dev: false /deepmerge/4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} - dev: true + dev: false /define-properties/1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} @@ -1136,9 +1115,9 @@ packages: minimist: 1.2.7 dev: true - /devalue/4.2.0: - resolution: {integrity: sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==} - dev: true + /devalue/4.2.2: + resolution: {integrity: sha512-Pkwd8qrI9O20VJ14fBNHu+on99toTNZFbgWRpZbC0zbDXpnE2WHYcrC1fHhMsF/3Ee+2yaW7vEujAT7fCYgqrA==} + dev: false /didyoumean/1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -1423,20 +1402,22 @@ packages: '@esbuild/win32-arm64': 0.16.10 '@esbuild/win32-ia32': 0.16.10 '@esbuild/win32-x64': 0.16.10 - dev: true /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: true + /esm-env/1.0.0: + resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} + dev: false + /estree-walker/1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: true /estree-walker/2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} @@ -1494,19 +1475,16 @@ packages: /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true /get-intrinsic/1.1.3: resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} @@ -1541,24 +1519,24 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/8.0.3: - resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} + /glob/8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.2 + minimatch: 5.1.6 once: 1.4.0 - dev: true + dev: false /globalyzer/0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true + dev: false /globrex/0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true + dev: false /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -1593,7 +1571,6 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: true /hash-base/3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} @@ -1632,11 +1609,9 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /is-arguments/1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} @@ -1658,7 +1633,7 @@ packages: engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 - dev: true + dev: false /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} @@ -1669,7 +1644,6 @@ packages: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 - dev: true /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -1692,7 +1666,7 @@ packages: /is-module/1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true + dev: false /is-nan/1.3.2: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} @@ -1710,8 +1684,8 @@ packages: /is-reference/1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} dependencies: - '@types/estree': 1.0.0 - dev: true + '@types/estree': 0.0.39 + dev: false /is-typed-array/1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} @@ -1732,7 +1706,7 @@ packages: /kleur/4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - dev: true + dev: false /leaflet.markercluster/[email protected]: resolution: {integrity: sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==} @@ -1768,19 +1742,12 @@ packages: sourcemap-codec: 1.4.8 dev: true - /magic-string/0.26.7: - resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} - engines: {node: '>=12'} - dependencies: - sourcemap-codec: 1.4.8 - dev: true - /magic-string/0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.14 - dev: true + dev: false /md5.js/1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -1815,7 +1782,7 @@ packages: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} hasBin: true - dev: true + dev: false /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -1836,12 +1803,12 @@ packages: brace-expansion: 1.1.11 dev: true - /minimatch/5.1.2: - resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: true + dev: false /minimist/1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} @@ -1857,22 +1824,21 @@ packages: /mri/1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - dev: true + dev: false /mrmime/1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} - dev: true + dev: false /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + dev: false /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /noble-secp256k1/1.2.14: resolution: {integrity: sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==} @@ -1971,7 +1937,6 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: true /os-browserify/0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} @@ -2021,7 +1986,6 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /pbkdf2/3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} @@ -2036,12 +2000,10 @@ packages: /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true /pify/2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} @@ -2123,7 +2085,6 @@ packages: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /prettier-plugin-svelte/2.9.0_ajxj753sv7dbwexjherrch25ta: resolution: {integrity: sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==} @@ -2254,7 +2215,6 @@ packages: is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -2289,7 +2249,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 - dev: true /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2302,7 +2261,7 @@ packages: engines: {node: '>=6'} dependencies: mri: 1.2.0 - dev: true + dev: false /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -2338,7 +2297,7 @@ packages: /set-cookie-parser/2.5.1: resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} - dev: true + dev: false /setimmediate/1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -2371,7 +2330,7 @@ packages: '@polka/url': 1.0.0-next.21 mrmime: 1.0.1 totalist: 3.0.0 - dev: true + dev: false /sorcery/0.10.0: resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} @@ -2386,7 +2345,6 @@ packages: /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} @@ -2412,7 +2370,7 @@ packages: /streamsearch/1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - dev: true + dev: false /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -2430,7 +2388,6 @@ packages: /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /svelte-hmr/[email protected]: resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} @@ -2439,7 +2396,7 @@ packages: svelte: '>=3.19.0' dependencies: svelte: 3.55.0 - dev: true + dev: false /svelte-outclick/[email protected]: resolution: {integrity: sha512-1XyaNhhDfH0C9GR4NreTc9OTgKcnQVoT7iVLvdbgZ/Dur/Bq94Pl5RBaJ/fu2qlEZk9ZIhODpuWiNNUjyhjVCg==} @@ -2515,7 +2472,6 @@ packages: /svelte/3.55.0: resolution: {integrity: sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==} engines: {node: '>= 8'} - dev: true /sveltekit-i18n/[email protected]: resolution: {integrity: sha512-6eygICleGCSL7elY7A3trF8XUhV+mlW56ZSoD0UUKXlw+Y6u0MTTHDq48u1LyY73SfnlbPHXgTarhTjZ0BvUKA==} @@ -2573,7 +2529,7 @@ packages: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: true + dev: false /tiny-secp256k1/2.2.1: resolution: {integrity: sha512-/U4xfVqnVxJXN4YVsru0E6t5wVncu2uunB8+RVR40fYUxkKYUPS10f+ePQZgFBoE/Jbf9H1NBveupF2VmB58Ng==} @@ -2592,7 +2548,7 @@ packages: /totalist/3.0.0: resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} engines: {node: '>=6'} - dev: true + dev: false /tty-browserify/0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} @@ -2607,12 +2563,12 @@ packages: engines: {node: '>=14.0.0'} dev: true - /undici/5.12.0: - resolution: {integrity: sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==} + /undici/5.16.0: + resolution: {integrity: sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==} engines: {node: '>=12.18'} dependencies: busboy: 1.6.0 - dev: true + dev: false /update-browserslist-db/[email protected]: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} @@ -2657,25 +2613,25 @@ packages: safe-buffer: 5.2.1 dev: true - /vite-plugin-node-polyfills/[email protected][email protected]: + /vite-plugin-node-polyfills/[email protected][email protected]: resolution: {integrity: sha512-zaTCjL64pJY6RDeP4ZZ1rtFKFTy44RYFtFIISKk3LclIeD/yR9tqpscj5x+jXhD7Bh1HYk2a7uu1aCFEYiUlIA==} peerDependencies: vite: ^2.0.0 || ^3.0.0 || 4 dependencies: '@rollup/plugin-inject': [email protected] node-stdlib-browser: 1.2.0 - vite: 4.0.3 + vite: 4.0.4 transitivePeerDependencies: - rollup dev: true - /vite-plugin-top-level-await/[email protected]: + /vite-plugin-top-level-await/[email protected]: resolution: {integrity: sha512-JBuY9X5KCxZyzwQUOIBpgX0Jbe2BECxwElWPeyrdRC5xaWzDibTG65QBW25COmwqHBeVlV04u8GTlJkuOWhfgw==} peerDependencies: vite: '>=2.8 || 4' dependencies: '@swc/core': 1.3.24 - vite: 4.0.3 + vite: 4.0.4 dev: true /vite-plugin-wasm/3.1.0: @@ -2724,8 +2680,8 @@ packages: fsevents: 2.3.2 dev: true - /vite/4.0.3: - resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} + /vite/4.0.4: + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -2755,9 +2711,8 @@ packages: rollup: 3.8.1 optionalDependencies: fsevents: 2.3.2 - dev: true - /vitefu/[email protected]: + /vitefu/[email protected]: resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || 4 @@ -2765,8 +2720,8 @@ packages: vite: optional: true dependencies: - vite: 4.0.3 - dev: true + vite: 4.0.4 + dev: false /vm-browserify/1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} @@ -2792,7 +2747,6 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true /ws/8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} diff --git a/src/components/Footer.svelte b/src/components/Footer.svelte index 82282465..a33716d4 100644 --- a/src/components/Footer.svelte +++ b/src/components/Footer.svelte @@ -9,7 +9,7 @@ ]; const companyLinks = [ - { url: '/news', titleID: 'news' }, + { url: '/docs', titleID: 'documentation' }, { url: '/support', titleID: 'support' }, { url: '/jobs', titleID: 'jobs' } ]; diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte index 74844b71..d74255e0 100644 --- a/src/components/Numpad.svelte +++ b/src/components/Numpad.svelte @@ -6,7 +6,8 @@ export let amount, currency, - fiat = !amount; + fiat = !amount, + submit = undefined; export let amountFiat = amount ? amount * ($selectedRate / sats) : 0; @@ -88,44 +89,12 @@ } }; - function getCaretPosition(editableDiv) { - var caretPos = 0, - sel, - range; - if (window.getSelection) { - sel = window.getSelection(); - if (sel.rangeCount) { - range = sel.getRangeAt(0); - if (range.commonAncestorContainer.parentNode == editableDiv) { - caretPos = range.endOffset; - } - } - } else if (document.selection && document.selection.createRange) { - range = document.selection.createRange(); - if (range.parentElement() == editableDiv) { - var tempEl = document.createElement('span'); - editableDiv.insertBefore(tempEl, editableDiv.firstChild); - var tempRange = range.duplicate(); - tempRange.moveToElementText(tempEl); - tempRange.setEndPoint('EndToEnd', range); - caretPos = tempRange.text.length; - } - } - return caretPos; - } - - $: html = fiat ? f(amountFiat, currency) : s(amountSats); + $: html = fiat ? amountFiat : s(amountSats); let prev = ''; let input = (e) => { - if (amount > sats) { - if (fiat) amountFiat = (Math.round(sats * ($selectedRate / sats))).toString(); - else amountSats = sats; - return warning($t('user.receive.lessThan1BTCWarning')); - } - - if (prev === '0' && html.length === 2) { + if (prev === '0') { prev = ''; html = html.replace('0', ''); } @@ -133,25 +102,53 @@ let sel = getSelection(); let i = sel.focusOffset; - if (!fiat) amountSats = parseInt(html.replace(/,/g, '')); + let clean = html.substr(0,15) + .replace(/[^0-9.,]+/g, '') + .replace('.', 'F') + .replace(/\./g, '') + .replace('F', '.'); + + if (fiat) clean = clean.replace(',', ''); + if (clean !== html) { + html = clean; + i = html.length; + } + + if (amount > sats && html.length > prev.length) { + html = prev; + warning($t('user.receive.lessThan1BTCWarning')); + i--; + } + + if (fiat) { + amountFiat = html; + } else { + amountSats = parseInt(html.replace(/,/g, '')); + } + if (!amountSats) amountSats = null; setTimeout(() => { - let p = prev.split(',')[0].length; - if (html.length > prev.length && p === 3) i++; - if (html.length < prev.length && p === 1 && i > 1) i--; + if (!fiat) { + let p = prev.split(',')[0].length; + if (html.length > prev.length && p === 3) i++; + if (html.length < prev.length && p === 1 && i > 1) i--; + } let node = e.target.childNodes[0]; let range = document.createRange(); - range.setStart(node, i); - range.setEnd(node, i); + console.log('NODE', node, i); + if (node) { + range.setStart(node, i); + range.setEnd(node, i); - let sel = getSelection(); - sel.removeAllRanges(); - sel.addRange(range); + let sel = getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + } - prev = html; + prev = html.toString(); }, 0); }; @@ -162,47 +159,41 @@ sel.removeAllRanges(); sel.addRange(range); }; + + let keydown = (e) => e.key === 'Enter' && (e.preventDefault() || submit.click()); </script> <div class="flex justify-center items-center mb-3 px-3"> <div class="space-y-5"> <div class="text-center"> <div class="text-5xl md:text-6xl font-semibold tracking-widest flex justify-center"> - {#if fiat} - <div class="my-auto">{symbol}</div> - <div - contenteditable - bind:innerHTML={amountFiat} - on:focus={focus} - on:input={input} - class="outline-none" - /> - {:else} - <div>⚡️</div> - <div - contenteditable - bind:innerHTML={html} - on:focus={focus} - on:input={input} - class="outline-none" - /> - {/if} + <div class="my-auto" class:text-5xl={!fiat}>{fiat ? symbol : '⚡️'}</div> + <div + contenteditable + bind:innerHTML={html} + on:focus={focus} + on:input={input} + on:keydown={keydown} + class="outline-none my-auto" + /> + </div> + <div class="mt-2"> + <span class="text-secondary mr-1">{fiat ? amountSatsConverted : amountFiatConverted}</span> + <button + type="button" + on:click={() => { + if (fiat) { + amountSats = parseInt((amountFiat / ($selectedRate / sats)).toFixed(0)); + } else { + amountFiat = + (amountSats * ($selectedRate / sats)).toFixed(2) > 0.0 + ? (amountSats * ($selectedRate / sats)).toFixed(2) + : 0; + } + fiat = !fiat; + }}><Icon icon="swap" style="inline hover:opacity-80" /></button + > </div> - <span class="text-secondary mr-1">{fiat ? amountSatsConverted : amountFiatConverted}</span> - <button - type="button" - on:click={() => { - if (fiat) { - amountSats = parseInt((amountFiat / ($selectedRate / sats)).toFixed(0)); - } else { - amountFiat = - (amountSats * ($selectedRate / sats)).toFixed(2) > 0.0 - ? (amountSats * ($selectedRate / sats)).toFixed(2) - : 0; - } - fiat = !fiat; - }}><Icon icon="swap" style="inline hover:opacity-80" /></button - > </div> <div class="grid grid-cols-3 gap-2 w-[300px] mx-auto"> diff --git a/src/components/Password.svelte b/src/components/Password.svelte index e21bdad1..95a52cac 100644 --- a/src/components/Password.svelte +++ b/src/components/Password.svelte @@ -1,6 +1,6 @@ <script> import { Icon } from '$comp'; - import { failure, post } from '$lib/utils'; + import { focus, failure, post } from '$lib/utils'; import { password as pw, passwordPrompt } from '$lib/store'; export let user; @@ -35,7 +35,7 @@ class="bg-primary" bind:value={password} autocapitalize="none" - autofocus + use:focus /> {:else} <input @@ -45,7 +45,7 @@ class="bg-primary" bind:value={password} autocapitalize="none" - autofocus + use:focus /> {/if} <button diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte index efc1e81b..c7889aa9 100644 --- a/src/components/Pin.svelte +++ b/src/components/Pin.svelte @@ -1,4 +1,5 @@ <script> + import { focus } from "$lib/utils"; import { pin } from '$lib/store'; let pinCode = ''; @@ -12,7 +13,7 @@ <div class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full z-20"> <div class="relative top-1/3 mx-auto p-5 border w-96 shadow-lg rounded-md bg-white space-y-5"> <h1 class="text-center text-2xl font-semibold">Please enter your PIN</h1> - <input bind:value={pinCode} autofocus /> + <input bind:value={pinCode} use:focus /> <div class="w-full flex"> <button type="submit" diff --git a/src/components/Qr.svelte b/src/components/Qr.svelte index 31cbe1b3..5fea7cbd 100644 --- a/src/components/Qr.svelte +++ b/src/components/Qr.svelte @@ -10,5 +10,5 @@ on:click={() => screenfull.toggle(qr)} on:keydown={() => screenfull.toggle(qr)} > - <img {src} class="mx-auto" /> +<img {src} class="mx-auto" alt="QR Code" /> </div> diff --git a/src/lib/invoice.js b/src/lib/invoice.js index f0c5aad5..983cde2a 100644 --- a/src/lib/invoice.js +++ b/src/lib/invoice.js @@ -29,9 +29,6 @@ export default async ({ cookies, request, url }) => { throw redirect(307, `/${user.username}/request/${request_id}`); } - if (invoice.prompt) { - throw redirect(307, `/invoice/${hash}/tip`); - } else { - throw redirect(307, `/invoice/${hash}`); - } + if (invoice.prompt) throw redirect(307, `/invoice/${hash}/tip`); + else throw redirect(307, `/invoice/${hash}`); }; diff --git a/src/lib/utils.js b/src/lib/utils.js index e6325e9f..bb6b34fa 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -137,8 +137,9 @@ export const login = async (user, cookies) => { let expires = new Date(); expires.setSeconds(expires.getSeconds() + maxAge); - cookies.set('username', user.username, { path: '/', expires }); - cookies.set('token', token, { path: '/', expires }); + let opts = { path: '/', expires } + cookies.set('username', user.username, opts); + cookies.set('token', token, opts); }; export const auth = (cookies) => ({ authorization: `Bearer ${cookies.get('token')}` }); @@ -160,8 +161,8 @@ export const sat = (s) => { return ( '⚡️' + (parseInt(s) > 0 - ? new Intl.NumberFormat('en-US', { maximumFractionDigits: 1 }).format(s / Math.pow(1000, d)) + - ['', 'K', 'M', 'G', 'T', 'P'][d] + ? new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format(s / Math.pow(1000, d)) + + ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z'][d] : 0 ).toString() ); diff --git a/src/locales/en.json b/src/locales/en.json index b7f4c316..d65ffc45 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -75,7 +75,7 @@ "support": "Support", "telegram": "Telegram", "twitter": "Twitter", - "news": "News" + "documentation": "Documentation" }, "howItWorks": { "header": "How it works", diff --git a/src/routes/(app)/+error.svelte b/src/routes/(app)/+error.svelte deleted file mode 100644 index 8d613909..00000000 --- a/src/routes/(app)/+error.svelte +++ /dev/null @@ -1,42 +0,0 @@ -<script> - import { page } from '$app/stores'; - import { Icon, PageNotFound } from '$comp'; - import { t } from '$lib/translations'; - import { back } from '$lib/utils'; - - export let data; - let { user } = data; - - $: message = $page.error.message; - $: if (message.startsWith('Internal')) message = 'Something went wrong'; -</script> - -{#if $page.error.message.includes('not found') || $page.status === 404} - <PageNotFound /> -{:else} - <div class="container px-4 max-w-lg mx-auto mt-20 space-y-5"> - <div class="w-[243px] mx-auto mb-10"> - <a href="/"> - <Icon icon="logo" /> - </a> - </div> - - <div class="flex justify-center items-center"> - <div class="shadow-xl rounded-3xl p-10 pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]"> - <h1 class="text-3xl md:text-4xl font-semibold"> - {$t('error.header')} - </h1> - - <p class="text-secondary"> - {message}. If the problem persists, please - <a href="/support" class="underline">let us know.</a> - </p> - - <button - class="rounded-full bg-black text-white py-2 px-5 font-bold hover:opacity-80 mb-2" - on:click={back}>Back</button - > - </div> - </div> - </div> -{/if} diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js index 0b76c973..1415bdca 100644 --- a/src/routes/(app)/+layout.server.js +++ b/src/routes/(app)/+layout.server.js @@ -15,6 +15,10 @@ export async function load({ cookies, request, url, params }) { } catch (e) {} } + if (user?.needsMigration) { + throw redirect(307, `/migrate`); + } + if (user && ['/', '/login', '/register'].includes(pathname) && request.method === 'GET') { console.log('dashboarding', pathname); throw redirect(307, `/${user.username}/dashboard`); diff --git a/src/routes/(app)/[username]/(profile)/messages/+page.svelte b/src/routes/(app)/[username]/(profile)/messages/+page.svelte index 47228015..00960534 100644 --- a/src/routes/(app)/[username]/(profile)/messages/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/messages/+page.svelte @@ -12,7 +12,6 @@ import { calculateId } from 'nostr'; export let data; - export let form; let { newMessages, subject, user } = data; let input, pane; diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 620aec84..551238cb 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -141,7 +141,7 @@ <a href={`/pot/${p.pot}`}> <div class="text-secondary flex"> <div class="my-auto mr-1"> - <img src="/icons/logo-symbol.svg" class="w-12 border-4 border-transparent" /> + <img src="/icons/logo-symbol.svg" class="w-12 border-4 border-transparent" alt="Pot" /> </div> <div class="my-auto">Pot</div> @@ -162,7 +162,7 @@ <div class="text-3xl">⚡️</div> {:else} <div class="my-auto mr-1"> - <img src="/images/bitcoin.svg" class="w-12 border-4 border-transparent" /> + <img src="/images/bitcoin.svg" class="w-12 border-4 border-transparent" alt="Bitcoin" /> </div> {/if} @@ -201,10 +201,4 @@ .active * { @apply bg-black text-white border-black; } - - select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - } </style> diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.svelte b/src/routes/(app)/[username]/receive/[...param]/+page.svelte index 47c507fa..13c65939 100644 --- a/src/routes/(app)/[username]/receive/[...param]/+page.svelte +++ b/src/routes/(app)/[username]/receive/[...param]/+page.svelte @@ -19,6 +19,7 @@ let { currency, username } = data.subject; let { user } = data; + let submit; </script> <form method="POST" class="flex justify-center items-center mt-24 mb-3 px-3" use:enhance> @@ -34,8 +35,9 @@ <input type="hidden" name="prompt" value={false} /> <div class="space-y-3 w-[300px] mx-auto"> - <Numpad bind:amount bind:currency /> + <Numpad bind:amount bind:currency {submit} /> <button + bind:this={submit} type="submit" class="bg-black text-white rounded-xl w-full h-[48px] flex justify-center items-center font-semibold opacity-100 hover:opacity-80" diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js index cb642e60..dd16459f 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { auth, get, post } from '$lib/utils'; export function load({ params, url }) { @@ -14,7 +14,7 @@ export const actions = { try { ({ user } = await post(`/user`, user, auth(cookies))); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } return { user, success: true }; diff --git a/src/routes/(app)/invoice/[hash]/+page.svelte b/src/routes/(app)/invoice/[hash]/+page.svelte index 059225ab..090a333f 100644 --- a/src/routes/(app)/invoice/[hash]/+page.svelte +++ b/src/routes/(app)/invoice/[hash]/+page.svelte @@ -151,8 +151,4 @@ .full { @apply p-8; } - - .full-shadow { - box-shadow: inset 0 0 0 1000px rgba(0, 0, 0, 0.25); - } </style> diff --git a/src/routes/(app)/invoice/[hash]/tip/+page.svelte b/src/routes/(app)/invoice/[hash]/tip/+page.svelte index d7df0a69..eaa67170 100644 --- a/src/routes/(app)/invoice/[hash]/tip/+page.svelte +++ b/src/routes/(app)/invoice/[hash]/tip/+page.svelte @@ -2,7 +2,7 @@ import { onMount } from 'svelte'; import { browser } from '$app/environment'; import { invoice as inv, request } from '$lib/store'; - import { back, copy, f, sat, get, reverseFormat, s, sats } from '$lib/utils'; + import { back, copy, focus, f, sat, get, reverseFormat, s, sats } from '$lib/utils'; import { Icon } from '$comp'; import { goto } from '$app/navigation'; import { t } from '$lib/translations'; @@ -190,7 +190,7 @@ on:input={(e) => handleCustomTipAmount(e)} class="pl-10" placeholder="Custom amount" - autofocus + use:focus /> <button type="submit" diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js index ded2e58c..6f61143f 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.server.js +++ b/src/routes/(app)/ln/[lnurl]/+page.server.js @@ -1,5 +1,5 @@ import { auth, get, post } from '$lib/utils'; -import { error, invalid, redirect } from '@sveltejs/kit'; +import { error, fail, redirect } from '@sveltejs/kit'; export async function load({ params }) { try { @@ -22,7 +22,7 @@ export const actions = { 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 invalid(400, { error }); + if (error) return fail(400, { error }); let { pr } = await fetch(`${callback}?amount=${amount}`).then((r) => r.json()); throw redirect(307, `/send/lightning/${pr}`); diff --git a/src/routes/(app)/login/+page.server.js b/src/routes/(app)/login/+page.server.js index 24146326..27607ff1 100644 --- a/src/routes/(app)/login/+page.server.js +++ b/src/routes/(app)/login/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { login } from '$lib/utils'; export const load = async ({ parent }) => { @@ -17,7 +17,7 @@ export const actions = { try { let r = await login(user, cookies); } catch (e) { - return invalid(400, { error: 'Login failed', message: e.message, ...form }); + return fail(400, { error: 'Login failed', message: e.message, ...form }); } throw redirect(303, loginRedirect || `/${user.username}/dashboard`); diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index 5a604d99..9eefda2b 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -51,7 +51,7 @@ <div class="font-bold">{$t('payments.id')}</div> <div class="flex"> <div> - <a href={`${expl}/tx/${id}`} target="_blank" class="text-blue-600">{id}</a> + <a href={`${expl}/tx/${id}`} target="_blank" rel="noreferrer" class="text-blue-600">{id}</a> </div> <button class="flex font-bold hover:opacity-80 mb-auto" on:click={() => copy(id)} ><Icon icon="copy" style="mr-1" /> diff --git a/src/routes/(app)/pot/[name]/withdraw/+page.server.js b/src/routes/(app)/pot/[name]/withdraw/+page.server.js index 7a486d58..ab56867d 100644 --- a/src/routes/(app)/pot/[name]/withdraw/+page.server.js +++ b/src/routes/(app)/pot/[name]/withdraw/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; export async function load({ parent }) { @@ -13,7 +13,7 @@ export const actions = { try { await post('/take', body, auth(cookies)); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, `/pot/${body.name}`); diff --git a/src/routes/(app)/register/+page.server.js b/src/routes/(app)/register/+page.server.js index 44c1f44b..1d98136f 100644 --- a/src/routes/(app)/register/+page.server.js +++ b/src/routes/(app)/register/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { post, login } from '$lib/utils'; export const load = async ({ parent }) => { @@ -28,7 +28,7 @@ export const actions = { error ||= e.message; } - if (error) return invalid(400, { error }); + if (error) return fail(400, { error }); throw redirect(307, loginRedirect || `/${user.username}/dashboard`); } }; diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index 3cc9f73d..8e5e02d7 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -1,7 +1,7 @@ import { validate } from 'bitcoin-address-validation'; import bip21 from 'bip21'; import { auth, get, post } from '$lib/utils'; -import { invalid, redirect } from '@sveltejs/kit'; +import { redirect } from '@sveltejs/kit'; let parse = async (t, host) => { if (!t) return; @@ -23,9 +23,7 @@ let parse = async (t, host) => { if (t.includes('/pot')) throw redirect(307, t.substring(t.indexOf('/pot'))); - console.log('LNURL?'); if (t.toLowerCase().startsWith('lnurl')) throw redirect(307, `/ln/${t}`); - console.log('NOPE'); if (t.includes(':')) t = t.split(':')[1]; // lightning diff --git a/src/routes/(app)/send/[uuid=uuid]/+page.server.js b/src/routes/(app)/send/[uuid=uuid]/+page.server.js index e9f161c7..7fa613bf 100644 --- a/src/routes/(app)/send/[uuid=uuid]/+page.server.js +++ b/src/routes/(app)/send/[uuid=uuid]/+page.server.js @@ -1,4 +1,4 @@ -import { error, invalid, redirect } from '@sveltejs/kit'; +import { error, fail, redirect } from '@sveltejs/kit'; import { btc as asset, auth, get, post } from '$lib/utils'; export async function load({ params, parent }) { @@ -17,12 +17,12 @@ export const actions = { let { confirmed } = body; if (!confirmed) { - return invalid(403, { amount, confirm: true }); + return fail(400, { amount, confirm: true }); } await post('/payments', body, auth(cookies)); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, '/sent'); diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js index 901d90a8..59e9326d 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js @@ -1,11 +1,17 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; +let seen = {}; export const actions = { default: async ({ cookies, request }) => { try { let feeRate, subtract; - let { address, amount, pin } = Object.fromEntries(await request.formData()); + let { address, amount, pin, ts } = Object.fromEntries(await request.formData()); + + if (seen[ts]) return fail(400, { message: 'Duplicate form submission' }); + seen[ts] = 1; + setTimeout(() => delete seen[ts], 30000); + let { tx } = await post( '/bitcoin/fee', { address, amount, feeRate, subtract }, @@ -13,7 +19,7 @@ export const actions = { ); await post('/bitcoin/send', { pin, tx }, auth(cookies)); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, '/sent'); diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte index 2165e896..0da8ea10 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte @@ -11,9 +11,10 @@ let { address, amount } = $page.params; let { currency } = data.user; - let loading; + let loading, submit; + + let toggle = () => (loading = true); - let submit = () => (loading = true); $: update(form); let update = () => { if (form?.message.includes('pin')) $pin = undefined; @@ -36,17 +37,20 @@ <h1 class="text-3xl md:text-4xl font-semibold mb-2">{$t('payments.sendTo')}</h1> <p class="text-lg text-secondary">{address}</p> </div> - <Numpad bind:amount {currency} /> + <Numpad bind:amount {currency} {submit} /> - <form method="POST" use:enhance on:submit={submit}> + <form method="POST" use:enhance on:submit={toggle}> + <input name="ts" value={Date.now()} type="hidden" /> <input name="address" value={address} type="hidden" /> <input name="amount" value={amount} type="hidden" /> <input name="pin" value={$pin} type="hidden" /> <div class="flex w-full"> <button + bind:this={submit} type="submit" class="opacity-100 hover:opacity-80'} rounded-2xl border py-3 font-bold mx-auto mt-2 bg-black text-white px-4 w-24" + disabled={loading} > {#if loading} <Spinner /> diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.js b/src/routes/(app)/send/lightning/[payreq]/+page.server.js index def7651c..21bc9c71 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.server.js +++ b/src/routes/(app)/send/lightning/[payreq]/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { btc as asset, auth, post } from '$lib/utils'; export async function load({ params }) { @@ -18,14 +18,14 @@ export const actions = { console.log('AMOUNT', amount); if (!confirmed) { - return invalid(403, { amount, confirm: true }); + return fail(400, { amount, confirm: true }); } 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 invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, '/sent'); diff --git a/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js b/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js index eadaa22e..0e1b7f5b 100644 --- a/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js @@ -1,4 +1,4 @@ -import { invalid, redirect } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; export const actions = { @@ -9,7 +9,7 @@ export const actions = { try { p = await post('/payments', body, auth(cookies)); } catch (e) { - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } if (p) throw redirect(307, `/pot/${body.name}`); diff --git a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js index 01712df2..46172175 100644 --- a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js @@ -1,4 +1,4 @@ -import { error, invalid, redirect } from '@sveltejs/kit'; +import { error, fail, redirect } from '@sveltejs/kit'; import { btc as asset, auth, get, post } from '$lib/utils'; export async function load({ params, parent }) { @@ -17,13 +17,13 @@ export const actions = { amount = parseInt(amount); if (!confirmed) { - return invalid(403, { amount, confirm: true }); + return fail(400, { amount, confirm: true }); } await post('/payments', body, auth(cookies)); } catch (e) { console.log(e); - return invalid(400, { message: e.message }); + return fail(400, { message: e.message }); } throw redirect(307, '/sent'); diff --git a/src/routes/(app)/support/+page.server.js b/src/routes/(app)/support/+page.server.js index 02c5e3b3..5d3bf988 100644 --- a/src/routes/(app)/support/+page.server.js +++ b/src/routes/(app)/support/+page.server.js @@ -1,5 +1,5 @@ import { post } from '$lib/utils'; -import { invalid } from '@sveltejs/kit'; +import { fail } from '@sveltejs/kit'; export const actions = { default: async ({ cookies, request }) => { @@ -8,7 +8,7 @@ export const actions = { try { await post('/email', form); } catch (e) { - return invalid(400, { error: e.message }); + return fail(400, { error: e.message }); } return { success: true }; diff --git a/src/routes/(static)/docs/+page.svelte b/src/routes/(static)/docs/+page.svelte index 0e11decb..c634cd76 100644 --- a/src/routes/(static)/docs/+page.svelte +++ b/src/routes/(static)/docs/+page.svelte @@ -1,76 +1,77 @@ -<h1>API Examples</h1> -<pre><code class="whitespace-pre-wrap" - >{` -api="https://coinos.io/api" -json="Content-Type: application/json" - -username=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) -password="pw" - -echo Create user $username with password $password -curl -s "$api/register" -H "$json" -d '{"user": {"username": "'$username'", "password": "'$password'", "confirm": "'$password'"}}' > /dev/null -echo "" - -echo Login and get an API token -token=$(curl -s "$api/taboggan" -H "$json" -d '{"username": "'$username'", "password": "'$password'"}' | jq -r .token) -echo $token -echo "" - -username="apidemo" -token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFwaWRlbW8iLCJpYXQiOjE2NDAxMzIwNjd9.aBtcrnLjDS_Zixn5_X_N8sqX0KxTDrVySSqh1fa96rk" -auth="Authorization: Bearer $token" - -echo Get account balance in satoshis -curl -s "$api/me" -H "$json" -H "$auth" | jq '.account.balance' -echo "" - -echo Get the current price of bitcoin in USD -curl -s "$api/rates" -H "$json" | jq '.USD' -echo "" - -echo Create a legacy Bitcoin address -address=$(curl -s "$api/address?network=bitcoin&type=legacy" -H "$auth" -H "$json" | jq -r .address) -echo $address -echo "" - -echo Create an invoice to associate the address with the user -curl -s "$api/invoice" -H "$json" -d '{"invoice": {"address": "'$address'", "network": "bitcoin"}, "user": {"username": "'$username'"}}' > /dev/null -echo "" - -msg="testingtesting123" -echo Sign a message with the address: $msg $address -curl -s "$api/signMessage" -H "$json" -H "$auth" -d '{"address": "'$address'", "message": "'$msg'"}' -echo "" - -echo Create a bech32 Bitcoin address -address=$(curl -s "$api/address?network=bitcoin&type=bech32" -H "$auth" -H "$json" | jq -r .address) -echo $address -echo "" - -echo Create a lightning invoice -text=$(curl -s "$api/lightning/invoice" -H "$auth" -H "$json" -d '{"amount": 100}') -echo $text -echo "" - -echo Associate the lightning invoice with the user -curl -s "$api/invoice" -H "$json" -d '{"invoice": {"text": "'$text'", "network": "bitcoin"}, "user": {"username": "'$username'"}}' > /dev/null -echo "" - -echo Get an external invoice -payreq=$(curl -s https://legend.lnbits.com/api/v1/payments -H "$json" -H "x-api-key: 698e5b6744f8442880ba3ad630756c02" -d '{ "out": false, "amount": 50, "memo": "test", "unit": "sat", "lnurl_callback": null }' | jq -r .payment_request) -echo $payreq -echo "" - -echo Send a lightning payment -curl -s "$api/lightning/send" -H "$json" -H "$auth" -d '{"payreq": "'$payreq'"}' | jq -r '{ amount, fee, balance: (.account.balance)}' -echo "" - -echo Send a bitcoin payment -tx=$(curl -s "$api/bitcoin/fee" -H "$json" -H "$auth" -d '{"address": "bc1qqc9azhdjjpdxenrndt8cw4tw9del5pyrjn0wln", "amount": 1200, "feeRate": 1000 }') -hex=$(echo $tx | jq -r .tx.hex) -fee=$(echo $tx | jq -r .tx.fee) - -curl -s "$api/bitcoin/send" -H "$json" -H "$auth" -d '{"address": "bc1qqc9azhdjjpdxenrndt8cw4tw9del5pyrjn0wln", "tx": { "hex": "'$hex'", "fee": "'$fee'" }}' | jq -r '{ amount, fee, balance: (.account.balance)}' -echo "" -`}</code - ></pre> +Coming soon +<!-- <h1>API Examples</h1> --> +<!-- <pre><code class="whitespace-pre-wrap" --> +<!-- >{` --> +<!-- api="https://coinos.io/api" --> +<!-- json="Content-Type: application/json" --> +<!-- --> +<!-- username=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) --> +<!-- password="pw" --> +<!-- --> +<!-- echo Create user $username with password $password --> +<!-- curl -s "$api/register" -H "$json" -d '{"user": {"username": "'$username'", "password": "'$password'", "confirm": "'$password'"}}' > /dev/null --> +<!-- echo "" --> +<!-- --> +<!-- echo Login and get an API token --> +<!-- token=$(curl -s "$api/taboggan" -H "$json" -d '{"username": "'$username'", "password": "'$password'"}' | jq -r .token) --> +<!-- echo $token --> +<!-- echo "" --> +<!-- --> +<!-- username="apidemo" --> +<!-- token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFwaWRlbW8iLCJpYXQiOjE2NDAxMzIwNjd9.aBtcrnLjDS_Zixn5_X_N8sqX0KxTDrVySSqh1fa96rk" --> +<!-- auth="Authorization: Bearer $token" --> +<!-- --> +<!-- echo Get account balance in satoshis --> +<!-- curl -s "$api/me" -H "$json" -H "$auth" | jq '.account.balance' --> +<!-- echo "" --> +<!-- --> +<!-- echo Get the current price of bitcoin in USD --> +<!-- curl -s "$api/rates" -H "$json" | jq '.USD' --> +<!-- echo "" --> +<!-- --> +<!-- echo Create a legacy Bitcoin address --> +<!-- address=$(curl -s "$api/address?network=bitcoin&type=legacy" -H "$auth" -H "$json" | jq -r .address) --> +<!-- echo $address --> +<!-- echo "" --> +<!-- --> +<!-- echo Create an invoice to associate the address with the user --> +<!-- curl -s "$api/invoice" -H "$json" -d '{"invoice": {"address": "'$address'", "network": "bitcoin"}, "user": {"username": "'$username'"}}' > /dev/null --> +<!-- echo "" --> +<!-- --> +<!-- msg="testingtesting123" --> +<!-- echo Sign a message with the address: $msg $address --> +<!-- curl -s "$api/signMessage" -H "$json" -H "$auth" -d '{"address": "'$address'", "message": "'$msg'"}' --> +<!-- echo "" --> +<!-- --> +<!-- echo Create a bech32 Bitcoin address --> +<!-- address=$(curl -s "$api/address?network=bitcoin&type=bech32" -H "$auth" -H "$json" | jq -r .address) --> +<!-- echo $address --> +<!-- echo "" --> +<!-- --> +<!-- echo Create a lightning invoice --> +<!-- text=$(curl -s "$api/lightning/invoice" -H "$auth" -H "$json" -d '{"amount": 100}') --> +<!-- echo $text --> +<!-- echo "" --> +<!-- --> +<!-- echo Associate the lightning invoice with the user --> +<!-- curl -s "$api/invoice" -H "$json" -d '{"invoice": {"text": "'$text'", "network": "bitcoin"}, "user": {"username": "'$username'"}}' > /dev/null --> +<!-- echo "" --> +<!-- --> +<!-- echo Get an external invoice --> +<!-- payreq=$(curl -s https://legend.lnbits.com/api/v1/payments -H "$json" -H "x-api-key: 698e5b6744f8442880ba3ad630756c02" -d '{ "out": false, "amount": 50, "memo": "test", "unit": "sat", "lnurl_callback": null }' | jq -r .payment_request) --> +<!-- echo $payreq --> +<!-- echo "" --> +<!-- --> +<!-- echo Send a lightning payment --> +<!-- curl -s "$api/lightning/send" -H "$json" -H "$auth" -d '{"payreq": "'$payreq'"}' | jq -r '{ amount, fee, balance: (.account.balance)}' --> +<!-- echo "" --> +<!-- --> +<!-- echo Send a bitcoin payment --> +<!-- tx=$(curl -s "$api/bitcoin/fee" -H "$json" -H "$auth" -d '{"address": "bc1qqc9azhdjjpdxenrndt8cw4tw9del5pyrjn0wln", "amount": 1200, "feeRate": 1000 }') --> +<!-- hex=$(echo $tx | jq -r .tx.hex) --> +<!-- fee=$(echo $tx | jq -r .tx.fee) --> +<!-- --> +<!-- curl -s "$api/bitcoin/send" -H "$json" -H "$auth" -d '{"address": "bc1qqc9azhdjjpdxenrndt8cw4tw9del5pyrjn0wln", "tx": { "hex": "'$hex'", "fee": "'$fee'" }}' | jq -r '{ amount, fee, balance: (.account.balance)}' --> +<!-- echo "" --> +<!-- `}</code --> +<!-- ></pre> --> diff --git a/src/routes/(static)/news/+page.svelte b/src/routes/(static)/news/+page.svelte deleted file mode 100644 index 7eb1b7d9..00000000 --- a/src/routes/(static)/news/+page.svelte +++ /dev/null @@ -1,115 +0,0 @@ -<script> - import { Icon, Footer, Check, Quote } from '$comp'; - import { t } from '$lib/translations'; -</script> - -<a href="/"> - <Icon icon="logo" style="mx-auto mt-10" /> -</a> -<div class="w-11/12 md:w-3/4 lg:w-1/2 2xl:w-1/3 max-w-3xl mx-auto my-20 space-y-5"> - <h1 class="text-5xl font-medium">{$t('news.header')}</h1> - - <h2 class="text-2xl font-medium">{$t('news.subheader')}</h2> - - <p class="text-xl font-semibold">Press Release - coinos Redesign - September 23, 2022</p> - - <p class="text-xl text-secondary"> - Today coinos is launching a new and improved interface for their open source web wallet, - allowing businesses to accept bitcoin with no setup or merchant fees. - </p> - - <p class="text-xl text-secondary"> - coinos is a web-based bitcoin payment application that is mobile and tablet friendly with handy - currency conversion and reporting features. bitcoin is the world's leading crypto currency. It - offers a secure and inexpensive way for people all over the globe to make and accept payments. - </p> - - <blockquote - class="p-4 my-4 bg-gray-50 border-l-4 border-gray-300 dark:border-gray-500 dark:bg-gray-800 text-xl text-secondary" - > - <Quote /> coinos has enabled businesses to accept bitcoin since 2012, but now we have made it even - easier with a new simple, friendly and customizable interface for both businesses and customers to - use. - <figcaption class="flex justify-center items-center mt-6 space-x-3"> - <img class="w-6 h-6 rounded-full" src="/images/adam.webp" alt="Adam Soltys" /> - <div class="flex items-center divide-x-2 divide-gray-500 dark:divide-gray-700"> - <cite class="pr-3 font-medium text-gray-900 dark:text-white">Adam Soltys</cite> - <cite class="pl-3 text-sm font-light text-gray-500 dark:text-gray-400">Founder and CTO</cite - > - </div> - </figcaption> - </blockquote> - - <p class="text-xl text-secondary"> - coinos started as an indie bitcoin wallet created by Adam Soltys with the intention of providing - people with a fast, cheap, and easy way to get started with bitcoin. It's free to register an - account and you can sign up with just a username and password. - </p> - - <h3 class="text-xl font-semibold">Why accept bitcoin?</h3> - <blockquote - class="p-4 my-4 bg-gray-50 border-l-4 border-gray-300 dark:border-gray-500 dark:bg-gray-800 text-xl text-secondary" - > - <Quote /> - We have already brought on some local businesses, here in Vancouver, and the business owners are - excited about the opportunity coinos is giving them to attract new customers by being able to accept - bitcoin. With coinos there are no set up fees, no merchant fees and transactions are safe and secure - with payments going directly to the business owner's wallet. There is no middle person. - <figcaption class="flex justify-center items-center mt-6 space-x-3"> - <img class="w-6 h-6 rounded-full" src="/images/cole.webp" alt="Adam Soltys" /> - <div class="flex items-center divide-x-2 divide-gray-500 dark:divide-gray-700"> - <cite class="pr-3 font-medium text-gray-900 dark:text-white">Cole Goodwin</cite> - <cite class="pl-3 text-sm font-light text-gray-500 dark:text-gray-400" - >Bitcoin Professional</cite - > - </div> - </figcaption> - </blockquote> - - <h3 class="text-xl font-semibold">coinos Timeline</h3> - <ul class="text-xl text-secondary"> - <li class="flex items-center space-x-3"> - <Check /> - 2012 Coding started - </li> - <li class="flex items-center space-x-3"> - <Check /> - 2013 Used by merchants in Vancouver to accept on-chain bitcoin - </li> - <li class="flex items-center space-x-3"> - <Check /> - 2018 Lightning network supported - </li> - <li class="flex items-center space-x-3"> - <Check /> - 2020 Incorporated in BC and registered with Fintrac - </li> - <li class="flex items-center space-x-3"> - <Check /> - 2021 Liquid Network and asset issuance supported - </li> - <li class="flex items-center space-x-3"> - <Check /> - 2022 10 year anniversary and UI redesign - </li> - </ul> - - <h3 class="text-xl font-semibold">Contacts</h3> - - <p class="text-xl text-secondary"> - <b>Adam Soltys</b> - Founder & CTO<br /> - <a class="hover:opacity-80" href="mailto:[email protected] ">[email protected]</a> - </p> - - <p class="text-xl text-secondary"> - <b>Cole Goodwin</b> - Bitcoin Professional<br /> - <a class="hover:opacity-80" href="mailto:[email protected]">[email protected]</a> - </p> - - <p class="text-xl text-secondary"> - <b>Shauna Collister</b> - Operations & Marketing<br /> - <a class="hover:opacity-80" href="mailto:[email protected]">[email protected]</a> - </p> -</div> - -<Footer /> |
