aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-01-25 23:01:55 -0800
committerAdam Soltys <[email protected]>2023-01-25 23:01:55 -0800
commitf1b3efe88204ba203667a8dd67ac8ab598af1959 (patch)
tree071975ffa4c30f81a7a25b78b4cfd5f85fdf7ea5
parent2a18749cb9b08726dedf0cfb63971305e50a910a (diff)
downloadcoinos-ui-f1b3efe88204ba203667a8dd67ac8ab598af1959.tar.gz
coinos-ui-f1b3efe88204ba203667a8dd67ac8ab598af1959.zip
sveltekit 1.0
-rw-r--r--package.json10
-rw-r--r--pnpm-lock.yaml252
-rw-r--r--src/components/Footer.svelte2
-rw-r--r--src/components/Numpad.svelte149
-rw-r--r--src/components/Password.svelte6
-rw-r--r--src/components/Pin.svelte3
-rw-r--r--src/components/Qr.svelte2
-rw-r--r--src/lib/invoice.js7
-rw-r--r--src/lib/utils.js9
-rw-r--r--src/locales/en.json2
-rw-r--r--src/routes/(app)/+error.svelte42
-rw-r--r--src/routes/(app)/+layout.server.js4
-rw-r--r--src/routes/(app)/[username]/(profile)/messages/+page.svelte1
-rw-r--r--src/routes/(app)/[username]/payments/[...page]/+page.svelte10
-rw-r--r--src/routes/(app)/[username]/receive/[...param]/+page.svelte4
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/+page.server.js4
-rw-r--r--src/routes/(app)/invoice/[hash]/+page.svelte4
-rw-r--r--src/routes/(app)/invoice/[hash]/tip/+page.svelte4
-rw-r--r--src/routes/(app)/ln/[lnurl]/+page.server.js4
-rw-r--r--src/routes/(app)/login/+page.server.js4
-rw-r--r--src/routes/(app)/payment/[id]/+page.svelte2
-rw-r--r--src/routes/(app)/pot/[name]/withdraw/+page.server.js4
-rw-r--r--src/routes/(app)/register/+page.server.js4
-rw-r--r--src/routes/(app)/send/[...text]/+page.server.js4
-rw-r--r--src/routes/(app)/send/[uuid=uuid]/+page.server.js6
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js12
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte12
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/+page.server.js6
-rw-r--r--src/routes/(app)/send/pot/[name]/[...amount]/+page.server.js4
-rw-r--r--src/routes/(app)/send/user/[username]/[...amount]/+page.server.js6
-rw-r--r--src/routes/(app)/support/+page.server.js4
-rw-r--r--src/routes/(static)/docs/+page.svelte153
-rw-r--r--src/routes/(static)/news/+page.svelte115
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]
+
devDependencies:
- '@sveltejs/adapter-node': 1.0.0-next.106_zm7dem4zfy4fmufbczhdmz6r6y
'@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]
rollup: 3.8.1
- dev: true
+ dev: false
- resolution: {integrity: sha512-poCCk0Eqd5uFwEzeoi2KsP+RtjeEoYsg+UMDIEZiNIZtM6lw2CPDZS98TYOFAdLN+pQJJAji8ZNfvcE/rJN+jA==}
- engines: {node: '>=16.14'}
+ 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
+ vite: 4.0.4
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
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&#38;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&#38;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 />