Merge pull request #17 from MutinyWallet/connect-peer

Connect peer
This commit is contained in:
Paul Miller
2023-04-11 12:56:31 -05:00
committed by GitHub
24 changed files with 639 additions and 156 deletions

View File

@@ -4,20 +4,45 @@ module.exports = {
"es2021": true
},
"extends": [
"prettier",
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
"plugin:@typescript-eslint/recommended",
"plugin:solid/typescript",
"plugin:import/typescript",
"plugin:import/recommended"
],
"overrides": [
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"tsconfigRootDir": "./",
"project": ["./tsconfig.json"],
"ecmaVersion": "latest",
"sourceType": "module"
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
},
"plugins": [
"@typescript-eslint"
"@typescript-eslint",
"solid",
"import"
],
"rules": {
"@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", varsIgnorePattern: "^_" }],
"solid/reactivity": "warn",
"solid/no-destructure": "warn",
"solid/jsx-no-undef": "error",
},
"settings": {
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"]
},
"import/resolver": {
"typescript": {
"project": ["./tsconfig.json"],
"alwaysTryTypes": true
}
}
}
}

View File

@@ -9,11 +9,15 @@
"type": "module",
"devDependencies": {
"@types/node": "^18.15.11",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.57.1",
"@typescript-eslint/eslint-plugin": "^5.58.0",
"@typescript-eslint/parser": "^5.58.0",
"autoprefixer": "^10.4.14",
"esbuild": "^0.14.54",
"eslint": "^8.38.0",
"eslint-import-resolver-typescript": "2.7.1",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-prettier": "4.2.1",
"eslint-plugin-solid": "0.11.0",
"postcss": "^8.4.21",
"solid-start-node": "^0.2.26",
"tailwindcss": "^3.3.1",

406
pnpm-lock.yaml generated
View File

@@ -12,7 +12,7 @@ dependencies:
version: 0.2.3
'@nostr-dev-kit/ndk':
specifier: ^0.0.13
version: 0.0.13(typescript@4.9.5)
version: 0.0.13(eslint-import-resolver-typescript@2.7.1)(typescript@4.9.5)
'@solidjs/meta':
specifier: ^0.28.4
version: 0.28.4(solid-js@1.7.3)
@@ -36,7 +36,7 @@ dependencies:
version: 0.0.8(qr.js@0.0.0)(solid-js@1.7.3)
solid-start:
specifier: ^0.2.26
version: 0.2.26(@solidjs/meta@0.28.4)(@solidjs/router@0.8.2)(solid-js@1.7.3)(solid-start-node@0.2.26)(vite@4.2.1)
version: 0.2.26(@solidjs/meta@0.28.4)(@solidjs/router@0.8.2)(solid-js@1.7.3)(solid-start-node@0.2.26)(vite@4.2.1)(vue@3.2.47)
undici:
specifier: ^5.21.2
version: 5.21.2
@@ -46,11 +46,11 @@ devDependencies:
specifier: ^18.15.11
version: 18.15.11
'@typescript-eslint/eslint-plugin':
specifier: ^5.57.1
version: 5.57.1(@typescript-eslint/parser@5.57.1)(eslint@8.38.0)(typescript@4.9.5)
specifier: ^5.58.0
version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/parser':
specifier: ^5.57.1
version: 5.57.1(eslint@8.38.0)(typescript@4.9.5)
specifier: ^5.58.0
version: 5.58.0(eslint@8.38.0)(typescript@4.9.5)
autoprefixer:
specifier: ^10.4.14
version: 10.4.14(postcss@8.4.21)
@@ -60,6 +60,18 @@ devDependencies:
eslint:
specifier: ^8.38.0
version: 8.38.0
eslint-import-resolver-typescript:
specifier: 2.7.1
version: 2.7.1(eslint-plugin-import@2.27.5)(eslint@8.38.0)
eslint-plugin-import:
specifier: 2.27.5
version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.38.0)
eslint-plugin-prettier:
specifier: 4.2.1
version: 4.2.1(eslint@8.38.0)(prettier@2.8.7)
eslint-plugin-solid:
specifier: 0.11.0
version: 0.11.0(eslint@8.38.0)(typescript@4.9.5)
postcss:
specifier: ^8.4.21
version: 8.4.21
@@ -1628,16 +1640,16 @@ packages:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.15.0
/@nostr-dev-kit/ndk@0.0.13(typescript@4.9.5):
/@nostr-dev-kit/ndk@0.0.13(eslint-import-resolver-typescript@2.7.1)(typescript@4.9.5):
resolution: {integrity: sha512-14oVsreLiafhHRBBMF7YcgBk8HBciPyFVSRkpAw9or9N9xRbWYmg4HVNrYWnFsD7b2tlOxwz3uIU4iH6T2Bjdw==}
dependencies:
'@scure/base': 1.1.1
'@typescript-eslint/eslint-plugin': 5.57.1(@typescript-eslint/parser@5.57.1)(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/parser': 5.57.1(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/eslint-plugin': 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5)
debug: 4.3.4
eslint: 8.38.0
eslint-config-prettier: 8.8.0(eslint@8.38.0)
eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1)(eslint@8.38.0)
eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.38.0)
eventemitter3: 5.0.0
light-bolt11-decoder: 3.0.0
node-fetch: 3.3.1
@@ -1970,7 +1982,6 @@ packages:
/@types/json5@0.0.29:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: false
/@types/node@18.15.11:
resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==}
@@ -1995,8 +2006,8 @@ packages:
resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==}
dev: true
/@typescript-eslint/eslint-plugin@5.57.1(@typescript-eslint/parser@5.57.1)(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ==}
/@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
@@ -2007,23 +2018,23 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.5.0
'@typescript-eslint/parser': 5.57.1(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/scope-manager': 5.57.1
'@typescript-eslint/type-utils': 5.57.1(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/utils': 5.57.1(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/scope-manager': 5.58.0
'@typescript-eslint/type-utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5)
debug: 4.3.4
eslint: 8.38.0
grapheme-splitter: 1.0.4
ignore: 5.2.4
natural-compare-lite: 1.4.0
semver: 7.3.8
semver: 7.4.0
tsutils: 3.21.0(typescript@4.9.5)
typescript: 4.9.5
transitivePeerDependencies:
- supports-color
/@typescript-eslint/parser@5.57.1(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA==}
/@typescript-eslint/parser@5.58.0(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -2032,24 +2043,24 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 5.57.1
'@typescript-eslint/types': 5.57.1
'@typescript-eslint/typescript-estree': 5.57.1(typescript@4.9.5)
'@typescript-eslint/scope-manager': 5.58.0
'@typescript-eslint/types': 5.58.0
'@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5)
debug: 4.3.4
eslint: 8.38.0
typescript: 4.9.5
transitivePeerDependencies:
- supports-color
/@typescript-eslint/scope-manager@5.57.1:
resolution: {integrity: sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==}
/@typescript-eslint/scope-manager@5.58.0:
resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
'@typescript-eslint/types': 5.57.1
'@typescript-eslint/visitor-keys': 5.57.1
'@typescript-eslint/types': 5.58.0
'@typescript-eslint/visitor-keys': 5.58.0
/@typescript-eslint/type-utils@5.57.1(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw==}
/@typescript-eslint/type-utils@5.58.0(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -2058,8 +2069,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.57.1(typescript@4.9.5)
'@typescript-eslint/utils': 5.57.1(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5)
'@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5)
debug: 4.3.4
eslint: 8.38.0
tsutils: 3.21.0(typescript@4.9.5)
@@ -2067,12 +2078,12 @@ packages:
transitivePeerDependencies:
- supports-color
/@typescript-eslint/types@5.57.1:
resolution: {integrity: sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==}
/@typescript-eslint/types@5.58.0:
resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
/@typescript-eslint/typescript-estree@5.57.1(typescript@4.9.5):
resolution: {integrity: sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==}
/@typescript-eslint/typescript-estree@5.58.0(typescript@4.9.5):
resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
typescript: '*'
@@ -2080,19 +2091,19 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 5.57.1
'@typescript-eslint/visitor-keys': 5.57.1
'@typescript-eslint/types': 5.58.0
'@typescript-eslint/visitor-keys': 5.58.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
semver: 7.3.8
semver: 7.4.0
tsutils: 3.21.0(typescript@4.9.5)
typescript: 4.9.5
transitivePeerDependencies:
- supports-color
/@typescript-eslint/utils@5.57.1(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==}
/@typescript-eslint/utils@5.58.0(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -2100,23 +2111,96 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0)
'@types/json-schema': 7.0.11
'@types/semver': 7.3.13
'@typescript-eslint/scope-manager': 5.57.1
'@typescript-eslint/types': 5.57.1
'@typescript-eslint/typescript-estree': 5.57.1(typescript@4.9.5)
'@typescript-eslint/scope-manager': 5.58.0
'@typescript-eslint/types': 5.58.0
'@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5)
eslint: 8.38.0
eslint-scope: 5.1.1
semver: 7.3.8
semver: 7.4.0
transitivePeerDependencies:
- supports-color
- typescript
/@typescript-eslint/visitor-keys@5.57.1:
resolution: {integrity: sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==}
/@typescript-eslint/visitor-keys@5.58.0:
resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
'@typescript-eslint/types': 5.57.1
'@typescript-eslint/types': 5.58.0
eslint-visitor-keys: 3.4.0
/@vue/compiler-core@3.2.47:
resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
dependencies:
'@babel/parser': 7.21.4
'@vue/shared': 3.2.47
estree-walker: 2.0.2
source-map: 0.6.1
/@vue/compiler-dom@3.2.47:
resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
dependencies:
'@vue/compiler-core': 3.2.47
'@vue/shared': 3.2.47
/@vue/compiler-sfc@3.2.47:
resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
dependencies:
'@babel/parser': 7.21.4
'@vue/compiler-core': 3.2.47
'@vue/compiler-dom': 3.2.47
'@vue/compiler-ssr': 3.2.47
'@vue/reactivity-transform': 3.2.47
'@vue/shared': 3.2.47
estree-walker: 2.0.2
magic-string: 0.25.9
postcss: 8.4.21
source-map: 0.6.1
/@vue/compiler-ssr@3.2.47:
resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
dependencies:
'@vue/compiler-dom': 3.2.47
'@vue/shared': 3.2.47
/@vue/reactivity-transform@3.2.47:
resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
dependencies:
'@babel/parser': 7.21.4
'@vue/compiler-core': 3.2.47
'@vue/shared': 3.2.47
estree-walker: 2.0.2
magic-string: 0.25.9
/@vue/reactivity@3.2.47:
resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
dependencies:
'@vue/shared': 3.2.47
/@vue/runtime-core@3.2.47:
resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
dependencies:
'@vue/reactivity': 3.2.47
'@vue/shared': 3.2.47
/@vue/runtime-dom@3.2.47:
resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
dependencies:
'@vue/runtime-core': 3.2.47
'@vue/shared': 3.2.47
csstype: 2.6.21
/@vue/server-renderer@3.2.47(vue@3.2.47):
resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
peerDependencies:
vue: 3.2.47
dependencies:
'@vue/compiler-ssr': 3.2.47
'@vue/shared': 3.2.47
vue: 3.2.47
/@vue/shared@3.2.47:
resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
/accepts@1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
@@ -2202,7 +2286,6 @@ packages:
es-abstract: 1.21.2
get-intrinsic: 1.2.0
is-string: 1.0.7
dev: false
/array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
@@ -2216,7 +2299,6 @@ packages:
define-properties: 1.2.0
es-abstract: 1.21.2
es-shim-unscopables: 1.0.0
dev: false
/array.prototype.flatmap@1.3.1:
resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
@@ -2226,7 +2308,6 @@ packages:
define-properties: 1.2.0
es-abstract: 1.21.2
es-shim-unscopables: 1.0.0
dev: false
/async@3.2.4:
resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
@@ -2347,7 +2428,7 @@ packages:
hasBin: true
dependencies:
caniuse-lite: 1.0.30001477
electron-to-chromium: 1.4.356
electron-to-chromium: 1.4.357
node-releases: 2.0.10
update-browserslist-db: 1.0.10(browserslist@4.21.5)
@@ -2536,6 +2617,9 @@ packages:
hasBin: true
dev: true
/csstype@2.6.21:
resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
/csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
@@ -2570,7 +2654,6 @@ packages:
optional: true
dependencies:
ms: 2.1.3
dev: false
/debug@4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
@@ -2624,7 +2707,6 @@ packages:
engines: {node: '>=0.10.0'}
dependencies:
esutils: 2.0.3
dev: false
/doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
@@ -2636,6 +2718,12 @@ packages:
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
engines: {node: '>=12'}
/echarts@5.4.2:
resolution: {integrity: sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==}
dependencies:
tslib: 2.3.0
zrender: 5.4.3
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@@ -2647,8 +2735,8 @@ packages:
jake: 10.8.5
dev: true
/electron-to-chromium@1.4.356:
resolution: {integrity: sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==}
/electron-to-chromium@1.4.357:
resolution: {integrity: sha512-UTkCbNTAcGXABmEnQrGcW4m3cG6fcyBfD4KDF0iyEAlbrGZiY9dmslyDAGOD1Kr5biN2F743Y30aRCOtau35Vw==}
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2711,7 +2799,6 @@ packages:
resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
dependencies:
has: 1.0.3
dev: false
/es-to-primitive@1.2.1:
resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
@@ -3026,13 +3113,29 @@ packages:
resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
dependencies:
debug: 3.2.7
is-core-module: 2.11.0
is-core-module: 2.12.0
resolve: 1.22.2
transitivePeerDependencies:
- supports-color
dev: false
/eslint-module-utils@2.7.4(@typescript-eslint/parser@5.57.1)(eslint-import-resolver-node@0.3.7)(eslint@8.38.0):
/eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.27.5)(eslint@8.38.0):
resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
engines: {node: '>=4'}
peerDependencies:
eslint: '*'
eslint-plugin-import: '*'
dependencies:
debug: 4.3.4
eslint: 8.38.0
eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.38.0)
glob: 7.2.3
is-glob: 4.0.3
resolve: 1.22.2
tsconfig-paths: 3.14.2
transitivePeerDependencies:
- supports-color
/eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@2.7.1)(eslint@8.38.0):
resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
engines: {node: '>=4'}
peerDependencies:
@@ -3053,15 +3156,15 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 5.57.1(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5)
debug: 3.2.7
eslint: 8.38.0
eslint-import-resolver-node: 0.3.7
eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.27.5)(eslint@8.38.0)
transitivePeerDependencies:
- supports-color
dev: false
/eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.57.1)(eslint@8.38.0):
/eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.38.0):
resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
engines: {node: '>=4'}
peerDependencies:
@@ -3071,7 +3174,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 5.57.1(eslint@8.38.0)(typescript@4.9.5)
'@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5)
array-includes: 3.1.6
array.prototype.flat: 1.3.1
array.prototype.flatmap: 1.3.1
@@ -3079,9 +3182,9 @@ packages:
doctrine: 2.1.0
eslint: 8.38.0
eslint-import-resolver-node: 0.3.7
eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.57.1)(eslint-import-resolver-node@0.3.7)(eslint@8.38.0)
eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@2.7.1)(eslint@8.38.0)
has: 1.0.3
is-core-module: 2.11.0
is-core-module: 2.12.0
is-glob: 4.0.3
minimatch: 3.1.2
object.values: 1.1.6
@@ -3092,7 +3195,40 @@ packages:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
dev: false
/eslint-plugin-prettier@4.2.1(eslint@8.38.0)(prettier@2.8.7):
resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
eslint: '>=7.28.0'
eslint-config-prettier: '*'
prettier: '>=2.0.0'
peerDependenciesMeta:
eslint-config-prettier:
optional: true
dependencies:
eslint: 8.38.0
prettier: 2.8.7
prettier-linter-helpers: 1.0.0
dev: true
/eslint-plugin-solid@0.11.0(eslint@8.38.0)(typescript@4.9.5):
resolution: {integrity: sha512-3ve6IpEtl8nOvJnjaJACqlBmv449l6dMMhMczjQWvvLlRqkzLemgsJ9H+Isu8GLSBTNxDIm5oSKx/lO2j8vKbA==}
engines: {node: '>=12.0.0'}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5)
eslint: 8.38.0
is-html: 2.0.0
jsx-ast-utils: 3.3.3
kebab-case: 1.0.2
known-css-properties: 0.24.0
style-to-object: 0.3.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/eslint-scope@5.1.1:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
@@ -3212,6 +3348,10 @@ packages:
/fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
/fast-diff@1.2.0:
resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
dev: true
/fast-glob@3.2.12:
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
@@ -3514,6 +3654,11 @@ packages:
/html-entities@2.3.3:
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
/html-tags@3.3.1:
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
engines: {node: '>=8'}
dev: true
/idb@7.1.1:
resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
dev: true
@@ -3542,6 +3687,10 @@ packages:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/inline-style-parser@0.1.1:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
dev: true
/internal-slot@1.0.5:
resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
engines: {node: '>= 0.4'}
@@ -3585,8 +3734,8 @@ packages:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
/is-core-module@2.11.0:
resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
/is-core-module@2.12.0:
resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==}
dependencies:
has: 1.0.3
@@ -3615,6 +3764,13 @@ packages:
dependencies:
is-extglob: 2.1.1
/is-html@2.0.0:
resolution: {integrity: sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==}
engines: {node: '>=8'}
dependencies:
html-tags: 3.3.1
dev: true
/is-module@1.0.0:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
@@ -3786,7 +3942,6 @@ packages:
hasBin: true
dependencies:
minimist: 1.2.8
dev: false
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
@@ -3805,6 +3960,22 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/jsx-ast-utils@3.3.3:
resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
engines: {node: '>=4.0'}
dependencies:
array-includes: 3.1.6
object.assign: 4.1.4
dev: true
/kebab-case@1.0.2:
resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==}
dev: true
/known-css-properties@0.24.0:
resolution: {integrity: sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==}
dev: true
/kolorist@1.7.0:
resolution: {integrity: sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g==}
@@ -3869,7 +4040,6 @@ packages:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
sourcemap-codec: 1.4.8
dev: true
/magic-string@0.27.0:
resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
@@ -3938,7 +4108,6 @@ packages:
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: false
/mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
@@ -4041,7 +4210,6 @@ packages:
call-bind: 1.0.2
define-properties: 1.2.0
es-abstract: 1.21.2
dev: false
/on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
@@ -4218,6 +4386,19 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
/prettier-linter-helpers@1.0.0:
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
engines: {node: '>=6.0.0'}
dependencies:
fast-diff: 1.2.0
dev: true
/prettier@2.8.7:
resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==}
engines: {node: '>=10.13.0'}
hasBin: true
dev: true
/pretty-bytes@5.6.0:
resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
engines: {node: '>=6'}
@@ -4323,6 +4504,9 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/resize-detector@0.3.0:
resolution: {integrity: sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==}
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -4331,7 +4515,7 @@ packages:
resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
hasBin: true
dependencies:
is-core-module: 2.11.0
is-core-module: 2.12.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -4436,8 +4620,8 @@ packages:
resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
hasBin: true
/semver@7.3.8:
resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
/semver@7.4.0:
resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==}
engines: {node: '>=10'}
hasBin: true
dependencies:
@@ -4526,14 +4710,14 @@ packages:
polka: 1.0.0-next.22
rollup: 3.20.2
sirv: 2.0.2
solid-start: 0.2.26(@solidjs/meta@0.28.4)(@solidjs/router@0.8.2)(solid-js@1.7.3)(solid-start-node@0.2.26)(vite@4.2.1)
solid-start: 0.2.26(@solidjs/meta@0.28.4)(@solidjs/router@0.8.2)(solid-js@1.7.3)(solid-start-node@0.2.26)(vite@4.2.1)(vue@3.2.47)
terser: 5.16.9
undici: 5.21.2
vite: 4.2.1(@types/node@18.15.11)
transitivePeerDependencies:
- supports-color
/solid-start@0.2.26(@solidjs/meta@0.28.4)(@solidjs/router@0.8.2)(solid-js@1.7.3)(solid-start-node@0.2.26)(vite@4.2.1):
/solid-start@0.2.26(@solidjs/meta@0.28.4)(@solidjs/router@0.8.2)(solid-js@1.7.3)(solid-start-node@0.2.26)(vite@4.2.1)(vue@3.2.47):
resolution: {integrity: sha512-kne2HZlnSMzsirdnvNs1CsDqBl0L0uvKKt1t4de1CH7JIngyqoMcER97jTE0Ejr84KknANaKAdvJAzZcL7Ueng==}
hasBin: true
peerDependencies:
@@ -4600,11 +4784,13 @@ packages:
terser: 5.16.9
undici: 5.21.2
vite: 4.2.1(@types/node@18.15.11)
vite-plugin-inspect: 0.7.19(rollup@3.20.2)(vite@4.2.1)
vite-plugin-inspect: 0.7.20(rollup@3.20.2)(vite@4.2.1)(vue@3.2.47)
vite-plugin-solid: 2.7.0(solid-js@1.7.3)(vite@4.2.1)
wait-on: 6.0.1(debug@4.3.4)
transitivePeerDependencies:
- '@vue/composition-api'
- supports-color
- vue
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
@@ -4634,7 +4820,6 @@ packages:
/sourcemap-codec@1.4.8:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
deprecated: Please use @jridgewell/sourcemap-codec instead
dev: true
/statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
@@ -4705,7 +4890,6 @@ packages:
/strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
dev: false
/strip-comments@2.0.1:
resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==}
@@ -4716,6 +4900,12 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
/style-to-object@0.3.0:
resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==}
dependencies:
inline-style-parser: 0.1.1
dev: true
/sucrase@3.32.0:
resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==}
engines: {node: '>=8'}
@@ -4859,11 +5049,13 @@ packages:
json5: 1.0.2
minimist: 1.2.8
strip-bom: 3.0.0
dev: false
/tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
/tslib@2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
/tslib@2.5.0:
resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
@@ -5020,8 +5212,8 @@ packages:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
/vite-plugin-inspect@0.7.19(rollup@3.20.2)(vite@4.2.1):
resolution: {integrity: sha512-OdKObJGdzOMR7SuqykN/Rb6rVtMK1wp4EmUTM3xhTCuSR1K/oM7fi4CKeBWhpYSkqop7O4gVB/MOUk7+RO7gIQ==}
/vite-plugin-inspect@0.7.20(rollup@3.20.2)(vite@4.2.1)(vue@3.2.47):
resolution: {integrity: sha512-vpfIAGtkBtpeEWFWUulxmU9tG/EgLMS37te7zzXnoshH+FxcgO7/kUTHaKTF7gOXkMNpHsVX9+BWMMx4iM5dqg==}
engines: {node: '>=14'}
peerDependencies:
vite: ^3.1.0 || ^4.0.0
@@ -5029,14 +5221,18 @@ packages:
'@antfu/utils': 0.7.2
'@rollup/pluginutils': 5.0.2(rollup@3.20.2)
debug: 4.3.4
echarts: 5.4.2
fs-extra: 11.1.1
kolorist: 1.7.0
sirv: 2.0.2
ufo: 1.1.1
vite: 4.2.1(@types/node@18.15.11)
vue-echarts: 6.5.4(echarts@5.4.2)(vue@3.2.47)
transitivePeerDependencies:
- '@vue/composition-api'
- rollup
- supports-color
- vue
/vite-plugin-pwa@0.14.7(vite@4.2.1)(workbox-build@6.5.4)(workbox-window@6.5.4):
resolution: {integrity: sha512-dNJaf0fYOWncmjxv9HiSa2xrSjipjff7IkYE5oIUJ2x5HKu3cXgA8LRgzOwTc5MhwyFYRSU0xyN0Phbx3NsQYw==}
@@ -5126,6 +5322,45 @@ packages:
dependencies:
vite: 4.2.1(@types/node@18.15.11)
/vue-demi@0.13.11(vue@3.2.47):
resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
vue: ^3.0.0-0 || ^2.6.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
dependencies:
vue: 3.2.47
/vue-echarts@6.5.4(echarts@5.4.2)(vue@3.2.47):
resolution: {integrity: sha512-pLJTk2hfhauoWdmiZGXByAtcO6bpfnAS+jkJqKimSBSV5I5ckh2nka9duLlIVbTvQOEb2tFa0XiXjACQNcEfpA==}
requiresBuild: true
peerDependencies:
'@vue/composition-api': ^1.0.5
echarts: ^5.4.1
vue: ^2.6.12 || ^3.1.1
peerDependenciesMeta:
'@vue/composition-api':
optional: true
dependencies:
echarts: 5.4.2
resize-detector: 0.3.0
vue: 3.2.47
vue-demi: 0.13.11(vue@3.2.47)
/vue@3.2.47:
resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
dependencies:
'@vue/compiler-dom': 3.2.47
'@vue/compiler-sfc': 3.2.47
'@vue/runtime-dom': 3.2.47
'@vue/server-renderer': 3.2.47(vue@3.2.47)
'@vue/shared': 3.2.47
/wait-on@6.0.1(debug@4.3.4):
resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==}
engines: {node: '>=10.0.0'}
@@ -5406,3 +5641,8 @@ packages:
/yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
/zrender@5.4.3:
resolution: {integrity: sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==}
dependencies:
tslib: 2.3.0

View File

@@ -1,6 +1,6 @@
import logo from '~/assets/icons/mutiny-logo.svg';
import { SafeArea } from "~/components/layout";
import BalanceBox from "~/components/BalanceBox";
import SafeArea from "~/components/SafeArea";
import NavBar from "~/components/NavBar";
// TODO: use this reload prompt for real

View File

@@ -1,7 +1,7 @@
import { Motion, Presence } from "@motionone/solid";
import { createResource, Show, Suspense } from "solid-js";
import { ButtonLink } from "~/components/Button";
import { ButtonLink } from "~/components/layout";
import { useMegaStore } from "~/state/megaStore";
function prettyPrintAmount(n?: number | bigint): string {

View File

@@ -1,13 +0,0 @@
import { ParentComponent } from "solid-js"
const Card: ParentComponent<{ title?: string }> = (props) => {
return (
<div class='rounded-xl p-4 flex flex-col gap-2 bg-[rgba(0,0,0,0.5)]'>
{props.title && <header class='text-sm font-semibold uppercase'>{props.title}</header>}
{props.children}
</div>
)
}
export default Card

View File

@@ -1,21 +1,198 @@
import { useMegaStore } from "~/state/megaStore";
import { ButtonLink } from "./Button";
import Card from "./Card";
import PeerConnectModal from "./PeerConnectModal";
import { createResource } from "solid-js";
import { ButtonLink, Card, Hr, SmallHeader, Button } from "~/components/layout";
import PeerConnectModal from "~/components/PeerConnectModal";
import { For, Show, Suspense, createResource, createSignal } from "solid-js";
import { MutinyChannel, MutinyPeer } from "@mutinywallet/node-manager";
import { TextField } from "@kobalte/core";
import mempoolTxUrl from "~/utils/mempoolTxUrl";
import eify from "~/utils/eify";
function PeersList() {
const [state, _] = useMegaStore()
const getPeers = async () => {
return await state.node_manager?.list_peers() as Promise<MutinyPeer[]>
};
const [peers, { refetch }] = createResource(getPeers);
return (
<>
<SmallHeader>
Peers
</SmallHeader>
{/* By wrapping this in a suspense I don't cause the page to jump to the top */}
<Suspense>
<For each={peers()} fallback={<code>No peers</code>}>
{(peer) => (
<pre class="overflow-x-auto whitespace-pre-line break-all">
{JSON.stringify(peer, null, 2)}
</pre>
)}
</For>
</Suspense>
<Button layout="small" onClick={refetch}>Refresh Peers</Button>
<ConnectPeer refetchPeers={refetch} />
</>
)
}
function ConnectPeer(props: { refetchPeers: () => any }) {
const [state, _] = useMegaStore()
const [value, setValue] = createSignal("");
const onSubmit = async (e: SubmitEvent) => {
e.preventDefault();
const peerConnectString = value().trim();
const nodes = await state.node_manager?.list_nodes();
const firstNode = nodes[0] as string || ""
await state.node_manager?.connect_to_peer(firstNode, peerConnectString)
await props.refetchPeers()
setValue("");
};
return (
<form class="border border-white/20 rounded-xl p-2 flex flex-col gap-4" onSubmit={onSubmit} >
<TextField.Root
value={value()}
onValueChange={setValue}
validationState={(value() == "" || value().startsWith("mutiny:")) ? "valid" : "invalid"}
class="flex flex-col gap-2"
>
<TextField.Label class="text-sm font-semibold uppercase" >Connect Peer</TextField.Label>
<TextField.Input class="w-full p-2 rounded-lg text-black" placeholder="mutiny:028241..." />
<TextField.ErrorMessage class="text-red-500">Expecting something like mutiny:abc123...</TextField.ErrorMessage>
</TextField.Root>
<Button layout="small" type="submit">Connect</Button>
</form >
)
}
function ChannelsList() {
const [state, _] = useMegaStore()
const getChannels = async () => {
return await state.node_manager?.list_channels() as Promise<MutinyChannel[]>
};
const [channels, { refetch }] = createResource(getChannels);
const network = state.node_manager?.get_network();
return (
<>
<SmallHeader>
Channels
</SmallHeader>
{/* By wrapping this in a suspense I don't cause the page to jump to the top */}
<Suspense>
<For each={channels()} fallback={<code>No channels</code>}>
{(channel) => (
<>
<pre class="overflow-x-auto whitespace-pre-line break-all">
{JSON.stringify(channel, null, 2)}
</pre>
<a class="text-sm font-light opacity-50 mt-2" href={mempoolTxUrl(channel.outpoint?.split(":")[0], network)} target="_blank" rel="noreferrer">
Mempool Link
</a>
</>
)}
</For>
</Suspense>
<Button type="button" layout="small" onClick={(e) => { e.preventDefault(); refetch() }}>Refresh Channels</Button>
<OpenChannel refetchChannels={refetch} />
</>
)
}
function OpenChannel(props: { refetchChannels: () => any }) {
const [state, _] = useMegaStore()
const [creationError, setCreationError] = createSignal<Error>();
const [amount, setAmount] = createSignal("");
const [peerPubkey, setPeerPubkey] = createSignal("");
const [newChannel, setNewChannel] = createSignal<MutinyChannel>();
const onSubmit = async (e: SubmitEvent) => {
e.preventDefault();
// TODO: figure out why this doesn't catch the rust error
// src/logging.rs:29
// ERROR: Could not create a signed transaction to open channel with: The invoice or address is on a different network.
try {
const pubkey = peerPubkey().trim();
const bigAmount = BigInt(amount());
const nodes = await state.node_manager?.list_nodes();
const firstNode = nodes[0] as string || ""
const new_channel = await state.node_manager?.open_channel(firstNode, pubkey, bigAmount)
setNewChannel(new_channel)
await props.refetchChannels()
setAmount("");
setPeerPubkey("");
} catch (e) {
setCreationError(eify(e))
}
};
return (
<>
<form class="border border-white/20 rounded-xl p-2 flex flex-col gap-4" onSubmit={onSubmit} >
<TextField.Root
value={peerPubkey()}
onValueChange={setPeerPubkey}
class="flex flex-col gap-2"
>
<TextField.Label class="text-sm font-semibold uppercase" >Pubkey</TextField.Label>
<TextField.Input class="w-full p-2 rounded-lg text-black" />
</TextField.Root>
<TextField.Root
value={amount()}
onValueChange={setAmount}
class="flex flex-col gap-2"
>
<TextField.Label class="text-sm font-semibold uppercase" >Amount</TextField.Label>
<TextField.Input
type="number"
class="w-full p-2 rounded-lg text-black" />
</TextField.Root>
<Button layout="small" type="submit">Open Channel</Button>
</form >
<Show when={newChannel()}>
<pre class="overflow-x-auto whitespace-pre-line break-all">
{JSON.stringify(newChannel()?.outpoint, null, 2)}
</pre>
<pre>{newChannel()?.outpoint}</pre>
<a class="text-sm font-light opacity-50 mt-2" href={mempoolTxUrl(newChannel()?.outpoint?.split(":")[0], "signet")} target="_blank" rel="noreferrer">
Mempool Link
</a>
</Show>
<Show when={creationError()}>
<pre>{creationError()?.message}</pre>
</Show>
</>
)
}
export default function KitchenSink() {
const [state, _] = useMegaStore()
// TODO: would be nice if this was just newest unused address
const getNewAddress = async () => {
if (state.node_manager) {
console.log("Getting new address");
const address = await state.node_manager?.get_new_address();
return address
} else {
return undefined
}
return await state.node_manager?.get_new_address();
};
const [address] = createResource(getNewAddress);
@@ -24,6 +201,10 @@ export default function KitchenSink() {
<Card title="Kitchen Sink">
<PeerConnectModal />
<ButtonLink target="_blank" rel="noopener noreferrer" href={`https://faucet.mutinynet.com/?address=${address()}`}>Tap the Faucet</ButtonLink>
<Hr />
<PeersList />
<Hr />
<ChannelsList />
</Card>
)
}

View File

@@ -1,7 +1,6 @@
import { QRCodeSVG } from "solid-qr-code";
import Card from "~/components/Card";
import { As, Dialog } from "@kobalte/core";
import { Button } from "~/components/Button";
import { Button, Card } from "~/components/layout";
import { useMegaStore } from "~/state/megaStore";
import { Show, createResource } from "solid-js";
import { getExistingSettings } from "~/logic/nodeManagerSetup";
@@ -12,7 +11,7 @@ const DIALOG_POSITIONER = "fixed inset-0 z-50 flex items-center justify-center"
const DIALOG_CONTENT = "w-[80vw] max-w-[400px] p-4 bg-gray/50 backdrop-blur-md shadow-xl rounded-xl border border-white/10"
const SMALL_HEADER = "text-sm font-semibold uppercase"
export default function PeerConnectModalKobalte() {
export default function PeerConnectModal() {
const [state, _] = useMegaStore()
const getPeerConnectString = async () => {

View File

@@ -1,7 +1,7 @@
import QrScanner from 'qr-scanner';
import { createSignal, onCleanup, onMount } from 'solid-js';
export default function Scanner({ onResult }: { onResult: (result: string) => void }) {
export default function Scanner(props: { onResult: (result: string) => void }) {
let container: HTMLVideoElement | null;
// TODO: not sure it's appropriate to use a signal for this but it works!
@@ -12,7 +12,7 @@ export default function Scanner({ onResult }: { onResult: (result: string) => vo
const newScanner = new QrScanner(
container,
(result: { data: string }) => {
onResult(result.data);
props.onResult(result.data);
},
{
returnDetailedScanResult: true,

View File

@@ -1,8 +1,7 @@
import type { Component } from 'solid-js'
import { Show } from 'solid-js'
import { useRegisterSW } from 'virtual:pwa-register/solid'
import Card from './Card'
import { Button } from './Button'
import { Button, Card } from '~/components/layout'
const ReloadPrompt: Component = () => {
const {

View File

@@ -1,11 +0,0 @@
import { JSX } from "solid-js";
export default function SafeArea(props: { children: JSX.Element }) {
return (
<div class="safe-top safe-left safe-right safe-bottom">
<div class="disable-scrollbars max-h-screen h-full overflow-y-scroll md:pl-[8rem] md:pr-[6rem]">
{props.children}
</div>
</div >
)
}

View File

@@ -14,7 +14,8 @@ const button = cva(["p-4", "rounded-xl", "text-xl", "font-semibold"], {
},
layout: {
flex: "flex-1",
pad: "px-8"
pad: "px-8",
small: "p-1 w-auto",
},
},

View File

@@ -4,19 +4,17 @@ interface LinkifyProps {
text: string;
}
// chat gpt wrote this lol
export default function Linkify(props: LinkifyProps): JSX.Element {
const { text } = props;
const links: (string | JSX.Element)[] = [];
const pattern = /((https?:\/\/|www\.)\S+)/gi;
let lastIndex = 0;
let match;
while ((match = pattern.exec(text)) !== null) {
while ((match = pattern.exec(props.text)) !== null) {
const link = match[1];
const href = link.startsWith('http') ? link : `https://${link}`;
const beforeLink = text.slice(lastIndex, match.index);
const beforeLink = props.text.slice(lastIndex, match.index);
lastIndex = pattern.lastIndex;
if (beforeLink) {
@@ -26,7 +24,7 @@ export default function Linkify(props: LinkifyProps): JSX.Element {
links.push(<a href={href} target="_blank" rel="noopener noreferrer">{link}</a>);
}
const remainingText = text.slice(lastIndex);
const remainingText = props.text.slice(lastIndex);
if (remainingText) {
links.push(remainingText);
}

View File

@@ -1,4 +1,31 @@
export default function LoadingSpinner() {
import { ParentComponent } from "solid-js"
import Linkify from "./Linkify"
import { Button, ButtonLink } from "./Button"
import { Separator } from "@kobalte/core"
const SmallHeader: ParentComponent = (props) => <header class='text-sm font-semibold uppercase'>{props.children}</header>
const Card: ParentComponent<{ title?: string }> = (props) => {
return (
<div class='rounded-xl p-4 flex flex-col gap-2 bg-[rgba(0,0,0,0.5)]'>
{props.title && <SmallHeader>{props.title}</SmallHeader>}
{props.children}
</div>
)
}
const SafeArea: ParentComponent = (props) => {
return (
<div class="safe-top safe-left safe-right safe-bottom">
<div class="disable-scrollbars max-h-screen h-full overflow-y-scroll md:pl-[8rem] md:pr-[6rem]">
{props.children}
</div>
</div >
)
}
const LoadingSpinner = () => {
return (<div role="status" class="w-full h-full grid" >
<svg aria-hidden="true" class="w-8 h-8 mr-2 text-gray-200 animate-spin dark:text-gray-600 fill-m-red place-self-center" viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z" fill="currentColor" />
@@ -6,4 +33,8 @@ export default function LoadingSpinner() {
</svg>
<span class="sr-only">Loading...</span>
</div>);
}
}
const Hr = () => <Separator.Root class="my-4 border-white/20" />
export { SmallHeader, Card, SafeArea, LoadingSpinner, Button, ButtonLink, Linkify, Hr }

View File

@@ -1,7 +1,7 @@
import { Component, For } from "solid-js";
import { Event, nip19 } from "nostr-tools"
import Linkify from "~/components/Linkify";
import { Linkify } from "~/components/layout";
type NostrEvent = {
"content": string, "created_at": number, id?: string

View File

@@ -10,7 +10,7 @@ const relayUrls = [
]
import { SimplePool } from 'nostr-tools'
import LoadingSpinner from "~/components/LoadingSpinner";
import { LoadingSpinner } from "~/components/layout";
import Notes from "~/components/waitlist/Notes";
const pool = new SimplePool()

View File

@@ -1,6 +1,5 @@
import { createSignal } from "solid-js";
import { Button } from "~/components/Button";
import LoadingSpinner from "../LoadingSpinner";
import { Button, LoadingSpinner } from "~/components/layout";
const INPUT = "w-full mb-4 p-2 rounded-lg text-black"

View File

@@ -1,8 +1,7 @@
import { createResource, Show } from "solid-js";
import { QRCodeSVG } from "solid-qr-code";
import { Button } from "~/components/Button";
import { Button, SafeArea } from "~/components/layout";
import NavBar from "~/components/NavBar";
import SafeArea from "~/components/SafeArea";
import { useMegaStore } from "~/state/megaStore";
import { useCopy } from "~/utils/useCopy";

View File

@@ -1,7 +1,7 @@
import Reader from "~/components/Reader";
import { createSignal, Show } from "solid-js";
import { useNavigate } from "solid-start";
import { Button } from "~/components/Button";
import { Button } from "~/components/layout";
export default function Scanner() {
const [scanResult, setScanResult] = createSignal<string | null>(null);
@@ -27,7 +27,7 @@ export default function Scanner() {
</div>
</div>
</Show>
<div class="w-full flex flex-col items-center fixed bottom-[2rem] gap-8 px-8 bg-pink-500">
<div class="w-full flex flex-col items-center fixed bottom-[2rem] gap-8 px-8">
<Show when={scanResult()}
fallback={
<div class="w-full max-w-[800px] flex flex-col gap-2">

View File

@@ -1,7 +1,6 @@
import { useNavigate } from "solid-start";
import { Button } from "~/components/Button";
import { Button, SafeArea } from "~/components/layout";
import NavBar from "~/components/NavBar";
import SafeArea from "~/components/SafeArea";
import { useMegaStore } from "~/state/megaStore";
export default function Settings() {

View File

@@ -4,7 +4,7 @@ import { Switch, Match } from "solid-js";
import { WaitlistAlreadyIn } from "~/components/waitlist/WaitlistAlreadyIn";
import WaitlistForm from "~/components/waitlist/WaitlistForm";
import { useMegaStore } from "~/state/megaStore";
import LoadingSpinner from "~/components/LoadingSpinner";
import { LoadingSpinner } from "~/components/layout";
function FullscreenLoader() {
return (

View File

@@ -63,16 +63,17 @@ export const Provider: ParentComponent = (props) => {
};
// Fetch status from remote on load
createEffect(async () => {
const status = await actions.status()
setState({ user_status: status })
createEffect(() => {
actions.status().then(status => {
setState({ user_status: status })
})
})
// Only node manager when status is approved
createEffect(async () => {
createEffect(() => {
if (state.user_status === "approved" && !state.node_manager) {
console.log("running setup node manager...")
await actions.setupNodeManager()
actions.setupNodeManager().then(() => console.log("node manager setup done"))
}
})

10
src/utils/eify.ts Normal file
View File

@@ -0,0 +1,10 @@
/// Sometimes we catch an error as `unknown` so this turns it into an Error.
export default function eify(e: unknown): Error {
if (e instanceof Error) {
return e;
} else if (typeof e === 'string') {
return new Error(e);
} else {
return new Error('Unknown error');
}
}

21
src/utils/mempoolTxUrl.ts Normal file
View File

@@ -0,0 +1,21 @@
export default function mempoolTxUrl(txid?: string, network?: string) {
if (!txid || !network) {
console.error("Problem creating the mempool url")
return "#"
}
if (network) {
switch (network) {
case "mainnet":
return `https://mempool.space/tx/${txid}`
case "testnet":
return `https://mempool.space/testnet/tx/${txid}`
case "signet":
return `https://mutinynet.com/tx/${txid}`
default:
return `https://mempool.space/tx/${txid}`
}
}
return `https://mempool.space/tx/${txid}`
}