update channel model

This commit is contained in:
Ren Amamiya 2023-04-25 10:17:36 +07:00
parent 53fd29ddb8
commit 08d2625d36
10 changed files with 168 additions and 129 deletions

View File

@ -45,8 +45,8 @@
"@types/react": "^18.0.38",
"@types/react-dom": "^18.0.11",
"@types/youtube-player": "^5.5.7",
"@typescript-eslint/eslint-plugin": "^5.59.0",
"@typescript-eslint/parser": "^5.59.0",
"@typescript-eslint/eslint-plugin": "^5.59.1",
"@typescript-eslint/parser": "^5.59.1",
"@vitejs/plugin-react-swc": "^3.3.0",
"autoprefixer": "^10.4.14",
"cross-env": "^7.0.3",
@ -66,7 +66,7 @@
"tailwindcss": "^3.3.1",
"typescript": "^4.9.5",
"vite": "^4.3.1",
"vite-plugin-ssr": "^0.4.116",
"vite-plugin-ssr": "^0.4.117",
"vite-plugin-top-level-await": "^1.3.0",
"vite-tsconfig-paths": "^4.2.0",
"ws": "^8.13.0"

View File

@ -91,11 +91,11 @@ devDependencies:
specifier: ^5.5.7
version: 5.5.7
'@typescript-eslint/eslint-plugin':
specifier: ^5.59.0
version: 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.39.0)(typescript@4.9.5)
specifier: ^5.59.1
version: 5.59.1(@typescript-eslint/parser@5.59.1)(eslint@8.39.0)(typescript@4.9.5)
'@typescript-eslint/parser':
specifier: ^5.59.0
version: 5.59.0(eslint@8.39.0)(typescript@4.9.5)
specifier: ^5.59.1
version: 5.59.1(eslint@8.39.0)(typescript@4.9.5)
'@vitejs/plugin-react-swc':
specifier: ^3.3.0
version: 3.3.0(vite@4.3.1)
@ -154,8 +154,8 @@ devDependencies:
specifier: ^4.3.1
version: 4.3.1(@types/node@18.16.0)
vite-plugin-ssr:
specifier: ^0.4.116
version: 0.4.116(vite@4.3.1)
specifier: ^0.4.117
version: 0.4.117(vite@4.3.1)
vite-plugin-top-level-await:
specifier: ^1.3.0
version: 1.3.0(vite@4.3.1)
@ -833,9 +833,9 @@ packages:
- supports-color
dev: false
/@swc/core-darwin-arm64@1.3.53:
/@swc/core-darwin-arm64@1.3.54:
resolution:
{ integrity: sha512-JvWwV/duzdQ60iwWYceDhDk75LmdrLoPC7myX3Src3gl/bJtETMq7uHS9uY8m0GQOqbct7XGR3q5Ff21YxkSzg== }
{ integrity: sha512-B1nTlkhTfzt95C/p+iWRaqwHTqqVWcqpHatnieIKxMCaceuZjvd7PeddbHmmrFFfjQqfs8UNzwrTVpgsFwCJWg== }
engines: { node: '>=10' }
cpu: [arm64]
os: [darwin]
@ -843,9 +843,9 @@ packages:
dev: true
optional: true
/@swc/core-darwin-x64@1.3.53:
/@swc/core-darwin-x64@1.3.54:
resolution:
{ integrity: sha512-UuIGZtCfUPJM2Q01bRIFzmucOMg8UZ+mY3kh5xB8kl/VrLltBlraSWGjjJzYmUeUxiF8+CtMfeSYav5QfU2v3g== }
{ integrity: sha512-FM+46dRyvJySCrDIDARamycjl/LB9taQCFQg5QpQmQFwIkZ7GIaiQUZO9cdrZUBGPJJCsm7o2FG4ufwnVsCHHA== }
engines: { node: '>=10' }
cpu: [x64]
os: [darwin]
@ -853,9 +853,9 @@ packages:
dev: true
optional: true
/@swc/core-linux-arm-gnueabihf@1.3.53:
/@swc/core-linux-arm-gnueabihf@1.3.54:
resolution:
{ integrity: sha512-LupAjTErteyLmowYIfiQeTz3uVh7/SPYv/EuG1PYrajNoUYomt7WA0rQUoyglF9VtwVyNqxptWEO5So32ApTHA== }
{ integrity: sha512-5EfxTKllNm+ucjuo3WNhwHfY417UwqCsaqjJnveXgn5DU+6/ft96skdpD+xrBp5ejMNzem8xYambOrBLzs2QDw== }
engines: { node: '>=10' }
cpu: [arm]
os: [linux]
@ -863,9 +863,9 @@ packages:
dev: true
optional: true
/@swc/core-linux-arm64-gnu@1.3.53:
/@swc/core-linux-arm64-gnu@1.3.54:
resolution:
{ integrity: sha512-kREfZdiJH/O8GtJJ22wVN9DVzz/+CPAkw5Mn5te2KQg0xJHMWaESU5XeYMWvtwyOQVmb31b6zCGFy3pnBWWfGw== }
{ integrity: sha512-4AmBlRaelUYcW9aR/q3z8UiNYsQ/1JtinETCZBye08wnwK81ITriYcHTBPP8Ix8IZtkcvpsN/SsGAnLNcrpRBQ== }
engines: { node: '>=10' }
cpu: [arm64]
os: [linux]
@ -873,9 +873,9 @@ packages:
dev: true
optional: true
/@swc/core-linux-arm64-musl@1.3.53:
/@swc/core-linux-arm64-musl@1.3.54:
resolution:
{ integrity: sha512-VeAgomBr6BVuBRjZjRHmvp5gKp1nZgbbd441ca1AvsPd2c+ZyhyHLxTWeHOzBDa/vYnmi9BCwx3QJzFqbAFPVw== }
{ integrity: sha512-twgmC6wfH2WW5mlG/rHk4GnbDZ2UDetF0PMJt/ICmgBwJsDSf71WSI9CA5b/F1wE9DE0ofyo+yukjuj9TtPvOQ== }
engines: { node: '>=10' }
cpu: [arm64]
os: [linux]
@ -883,9 +883,9 @@ packages:
dev: true
optional: true
/@swc/core-linux-x64-gnu@1.3.53:
/@swc/core-linux-x64-gnu@1.3.54:
resolution:
{ integrity: sha512-LFX5+QpQkESPkmx860C40pIiYf1utEqoA+WDtmKnUz3DucYvw3eGlXCBdyklP7UBWwJktKIcPlIqr7yROY5VlQ== }
{ integrity: sha512-/dE+z0pF1R0vvXPTQ43+cypltfbZDI0C3WuDMkb1KIaQS7yiaufzzWIVGfJisoKGxpyk3ABSSPcStEqedpvJ+w== }
engines: { node: '>=10' }
cpu: [x64]
os: [linux]
@ -893,9 +893,9 @@ packages:
dev: true
optional: true
/@swc/core-linux-x64-musl@1.3.53:
/@swc/core-linux-x64-musl@1.3.54:
resolution:
{ integrity: sha512-O0lbJgeaM0VEsG8wFYvpF+Iuf0IENv+LnXHoygkAsv67sVW54+gFxav2sEdkftD5qYe9ku4tmtTVYRZlFgC84Q== }
{ integrity: sha512-/dGU5pCaPYEaaPAPt+Fa+9cCTNuhmtdTpxwUX0ZF3VlWAf3QPoTcPYkUDEOvWcl3g8RpEr7ZGp9beVCp2NpLpA== }
engines: { node: '>=10' }
cpu: [x64]
os: [linux]
@ -903,9 +903,9 @@ packages:
dev: true
optional: true
/@swc/core-win32-arm64-msvc@1.3.53:
/@swc/core-win32-arm64-msvc@1.3.54:
resolution:
{ integrity: sha512-7PgvPl0aNLaFZSK+rIi4DB1g0aW2qOsTIJQSJGRszsCP8pze/traXymyuSG2I3y9Hx7Z+bP5ycJydyAgCw88WA== }
{ integrity: sha512-gpqOqHB7fHqTApS8pvW1/oMCcfEH1LxRU81KqUGY/MXR3DDwpnDY3ycyCzRB4tpNr91ZpgzUtrlx8OQCHq75uw== }
engines: { node: '>=10' }
cpu: [arm64]
os: [win32]
@ -913,9 +913,9 @@ packages:
dev: true
optional: true
/@swc/core-win32-ia32-msvc@1.3.53:
/@swc/core-win32-ia32-msvc@1.3.54:
resolution:
{ integrity: sha512-T+OacGm69t8+1mt1sHlwhREiFiFgSeIGL3h11FIs8o2zKnOr5z2H9myzR432X8WuHGVQAOCMvDu53LCMBD0ZzQ== }
{ integrity: sha512-2h+EnYoEDZcPfoGCKU4F/gbDz0Dw+vQG7b5rxwo6IWFhB2mGOMiYZzbIo6LVyFRoSXNVNa88Yov18pgfeM9gMw== }
engines: { node: '>=10' }
cpu: [ia32]
os: [win32]
@ -923,9 +923,9 @@ packages:
dev: true
optional: true
/@swc/core-win32-x64-msvc@1.3.53:
/@swc/core-win32-x64-msvc@1.3.54:
resolution:
{ integrity: sha512-uV1/GhROJ/SXzj+f+kKcVtR2GuAiggvbqepzZS46+G47okf6229hr2T1fjmiwYyA75w9R3Bj/wil4UhodohOLg== }
{ integrity: sha512-//W/mqIVuOxMRVI3ojCF6jKLpugu6sSSsCaBpM9GdDVGAaAt0UdivKzecqHIt2PGoN6l1mT73Zy+083PvkPhHQ== }
engines: { node: '>=10' }
cpu: [x64]
os: [win32]
@ -933,9 +933,9 @@ packages:
dev: true
optional: true
/@swc/core@1.3.53:
/@swc/core@1.3.54:
resolution:
{ integrity: sha512-OM5nCfKDZXr1HjxD072Jlx5463tPX7xeY7NDSRE3X4KFlkRDFdyMWAyV3pet1oouOfUNrzzoVTAR4XSU8ytO6Q== }
{ integrity: sha512-/BCIn698CHkQz3d3VY5W5BHagbwkKen295mDM+JPfDepLsLy3lKtD1+GZqZYKVQDebUj90eAn7OD+qBrAxPtaA== }
engines: { node: '>=10' }
requiresBuild: true
peerDependencies:
@ -944,16 +944,16 @@ packages:
'@swc/helpers':
optional: true
optionalDependencies:
'@swc/core-darwin-arm64': 1.3.53
'@swc/core-darwin-x64': 1.3.53
'@swc/core-linux-arm-gnueabihf': 1.3.53
'@swc/core-linux-arm64-gnu': 1.3.53
'@swc/core-linux-arm64-musl': 1.3.53
'@swc/core-linux-x64-gnu': 1.3.53
'@swc/core-linux-x64-musl': 1.3.53
'@swc/core-win32-arm64-msvc': 1.3.53
'@swc/core-win32-ia32-msvc': 1.3.53
'@swc/core-win32-x64-msvc': 1.3.53
'@swc/core-darwin-arm64': 1.3.54
'@swc/core-darwin-x64': 1.3.54
'@swc/core-linux-arm-gnueabihf': 1.3.54
'@swc/core-linux-arm64-gnu': 1.3.54
'@swc/core-linux-arm64-musl': 1.3.54
'@swc/core-linux-x64-gnu': 1.3.54
'@swc/core-linux-x64-musl': 1.3.54
'@swc/core-win32-arm64-msvc': 1.3.54
'@swc/core-win32-ia32-msvc': 1.3.54
'@swc/core-win32-x64-msvc': 1.3.54
dev: true
/@tailwindcss/typography@0.5.9(tailwindcss@3.3.1):
@ -1157,9 +1157,9 @@ packages:
{ integrity: sha512-W8F4eoTIvzXeNrT3JroQPimZLXnlJA8smYygHZUKFPVoYwgs/OhJkA1VBhL3iSs57OQkuINqHlY4SmMT5wtnJg== }
dev: true
/@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.39.0)(typescript@4.9.5):
/@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1)(eslint@8.39.0)(typescript@4.9.5):
resolution:
{ integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw== }
{ integrity: sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg== }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
@ -1170,10 +1170,10 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.5.0
'@typescript-eslint/parser': 5.59.0(eslint@8.39.0)(typescript@4.9.5)
'@typescript-eslint/scope-manager': 5.59.0
'@typescript-eslint/type-utils': 5.59.0(eslint@8.39.0)(typescript@4.9.5)
'@typescript-eslint/utils': 5.59.0(eslint@8.39.0)(typescript@4.9.5)
'@typescript-eslint/parser': 5.59.1(eslint@8.39.0)(typescript@4.9.5)
'@typescript-eslint/scope-manager': 5.59.1
'@typescript-eslint/type-utils': 5.59.1(eslint@8.39.0)(typescript@4.9.5)
'@typescript-eslint/utils': 5.59.1(eslint@8.39.0)(typescript@4.9.5)
debug: 4.3.4
eslint: 8.39.0
grapheme-splitter: 1.0.4
@ -1186,9 +1186,9 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser@5.59.0(eslint@8.39.0)(typescript@4.9.5):
/@typescript-eslint/parser@5.59.1(eslint@8.39.0)(typescript@4.9.5):
resolution:
{ integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w== }
{ integrity: sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g== }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@ -1197,9 +1197,9 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 5.59.0
'@typescript-eslint/types': 5.59.0
'@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5)
'@typescript-eslint/scope-manager': 5.59.1
'@typescript-eslint/types': 5.59.1
'@typescript-eslint/typescript-estree': 5.59.1(typescript@4.9.5)
debug: 4.3.4
eslint: 8.39.0
typescript: 4.9.5
@ -1207,18 +1207,18 @@ packages:
- supports-color
dev: true
/@typescript-eslint/scope-manager@5.59.0:
/@typescript-eslint/scope-manager@5.59.1:
resolution:
{ integrity: sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ== }
{ integrity: sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA== }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
dependencies:
'@typescript-eslint/types': 5.59.0
'@typescript-eslint/visitor-keys': 5.59.0
'@typescript-eslint/types': 5.59.1
'@typescript-eslint/visitor-keys': 5.59.1
dev: true
/@typescript-eslint/type-utils@5.59.0(eslint@8.39.0)(typescript@4.9.5):
/@typescript-eslint/type-utils@5.59.1(eslint@8.39.0)(typescript@4.9.5):
resolution:
{ integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA== }
{ integrity: sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw== }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies:
eslint: '*'
@ -1227,8 +1227,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5)
'@typescript-eslint/utils': 5.59.0(eslint@8.39.0)(typescript@4.9.5)
'@typescript-eslint/typescript-estree': 5.59.1(typescript@4.9.5)
'@typescript-eslint/utils': 5.59.1(eslint@8.39.0)(typescript@4.9.5)
debug: 4.3.4
eslint: 8.39.0
tsutils: 3.21.0(typescript@4.9.5)
@ -1237,15 +1237,15 @@ packages:
- supports-color
dev: true
/@typescript-eslint/types@5.59.0:
/@typescript-eslint/types@5.59.1:
resolution:
{ integrity: sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== }
{ integrity: sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg== }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
dev: true
/@typescript-eslint/typescript-estree@5.59.0(typescript@4.9.5):
/@typescript-eslint/typescript-estree@5.59.1(typescript@4.9.5):
resolution:
{ integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg== }
{ integrity: sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA== }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies:
typescript: '*'
@ -1253,8 +1253,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 5.59.0
'@typescript-eslint/visitor-keys': 5.59.0
'@typescript-eslint/types': 5.59.1
'@typescript-eslint/visitor-keys': 5.59.1
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@ -1265,9 +1265,9 @@ packages:
- supports-color
dev: true
/@typescript-eslint/utils@5.59.0(eslint@8.39.0)(typescript@4.9.5):
/@typescript-eslint/utils@5.59.1(eslint@8.39.0)(typescript@4.9.5):
resolution:
{ integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA== }
{ integrity: sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA== }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@ -1275,9 +1275,9 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0)
'@types/json-schema': 7.0.11
'@types/semver': 7.3.13
'@typescript-eslint/scope-manager': 5.59.0
'@typescript-eslint/types': 5.59.0
'@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5)
'@typescript-eslint/scope-manager': 5.59.1
'@typescript-eslint/types': 5.59.1
'@typescript-eslint/typescript-estree': 5.59.1(typescript@4.9.5)
eslint: 8.39.0
eslint-scope: 5.1.1
semver: 7.5.0
@ -1286,12 +1286,12 @@ packages:
- typescript
dev: true
/@typescript-eslint/visitor-keys@5.59.0:
/@typescript-eslint/visitor-keys@5.59.1:
resolution:
{ integrity: sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA== }
{ integrity: sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA== }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
dependencies:
'@typescript-eslint/types': 5.59.0
'@typescript-eslint/types': 5.59.1
eslint-visitor-keys: 3.4.0
dev: true
@ -1319,7 +1319,7 @@ packages:
peerDependencies:
vite: ^4
dependencies:
'@swc/core': 1.3.53
'@swc/core': 1.3.54
vite: 4.3.1(@types/node@18.16.0)
transitivePeerDependencies:
- '@swc/helpers'
@ -1545,7 +1545,7 @@ packages:
hasBin: true
dependencies:
caniuse-lite: 1.0.30001481
electron-to-chromium: 1.4.369
electron-to-chromium: 1.4.371
node-releases: 2.0.10
update-browserslist-db: 1.0.11(browserslist@4.21.5)
dev: true
@ -1849,9 +1849,9 @@ packages:
{ integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== }
dev: true
/electron-to-chromium@1.4.369:
/electron-to-chromium@1.4.371:
resolution:
{ integrity: sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg== }
{ integrity: sha512-jlBzY4tFcJaiUjzhRTCWAqRvTO/fWzjA3Bls0mykzGZ7zvcMP7h05W6UcgzfT9Ca1SW2xyKDOFRyI0pQeRNZGw== }
dev: true
/emoji-regex@8.0.0:
@ -2873,7 +2873,7 @@ packages:
object-inspect: 1.12.3
pidtree: 0.6.0
string-argv: 0.3.1
yaml: 2.2.1
yaml: 2.2.2
transitivePeerDependencies:
- enquirer
- supports-color
@ -3764,9 +3764,9 @@ packages:
{ integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== }
dev: true
/sirv@2.0.2:
/sirv@2.0.3:
resolution:
{ integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w== }
{ integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== }
engines: { node: '>= 10' }
dependencies:
'@polka/url': 1.0.0-next.21
@ -4232,9 +4232,9 @@ packages:
type-fest: 3.8.0
dev: false
/vite-plugin-ssr@0.4.116(vite@4.3.1):
/vite-plugin-ssr@0.4.117(vite@4.3.1):
resolution:
{ integrity: sha512-GtXvlUtwnLdrnfuodJhcs+kV1BXyoUhECjqdoC1pSU+7dRKyU7A9V6NmkT7yPbHu1s8bWSgqC/EP91F4DSt4rA== }
{ integrity: sha512-jebuK9HGNTpwbNlhIygTmNX8W9ZJTClUv/V5MfvRbVGqL0jGkYbsKKwzRNbUDm5EMqblbFf9mMHt6KSIuh/YJQ== }
engines: { node: '>=12.19.0' }
hasBin: true
peerDependencies:
@ -4253,7 +4253,7 @@ packages:
esbuild: 0.17.18
fast-glob: 3.2.12
picocolors: 1.0.0
sirv: 2.0.2
sirv: 2.0.3
vite: 4.3.1(@types/node@18.16.0)
dev: true
@ -4264,7 +4264,7 @@ packages:
vite: '>=2.8'
dependencies:
'@rollup/plugin-virtual': 3.0.1
'@swc/core': 1.3.53
'@swc/core': 1.3.54
uuid: 9.0.0
vite: 4.3.1(@types/node@18.16.0)
transitivePeerDependencies:
@ -4446,9 +4446,9 @@ packages:
engines: { node: '>= 6' }
dev: true
/yaml@2.2.1:
/yaml@2.2.2:
resolution:
{ integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== }
{ integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== }
engines: { node: '>= 14' }
dev: true

View File

@ -0,0 +1,3 @@
-- Add migration script here
-- add pubkey to channel
ALTER TABLE channels ADD pubkey TEXT NOT NULL DEFAULT '';

View File

@ -0,0 +1,40 @@
-- Add migration script here
INSERT
OR IGNORE INTO channels (event_id, pubkey, metadata, created_at)
VALUES
(
"e3cadf5beca1b2af1cddaa41a633679bedf263e3de1eb229c6686c50d85df753",
"126103bfddc8df256b6e0abfd7f3797c80dcc4ea88f7c2f87dd4104220b4d65f",
'{"name":"lume-general","picture":"https://void.cat/d/UNyxBmAh1MUx5gQTX95jyf.webp","about":"General channel for Lume"}',
1681898574
);
INSERT
OR IGNORE INTO channels (event_id, pubkey, metadata, created_at)
VALUES
(
"1abf8948d2fd05dd1836b33b324dca65138b2e80c77b27eeeed4323246efba4d",
"126103bfddc8df256b6e0abfd7f3797c80dcc4ea88f7c2f87dd4104220b4d65f",
'{"picture":"https://void.cat/d/MsqUKXXC4SxDfmT2KiHovJ.webp","name":"Arcade Open R&D","about":""}',
1682252461
);
INSERT
OR IGNORE INTO channels (event_id, pubkey, metadata, created_at)
VALUES
(
"42224859763652914db53052103f0b744df79dfc4efef7e950fc0802fc3df3c5",
"460c25e682fda7832b52d1f22d3d22b3176d972f60dcdc3212ed8c92ef85065c",
'{"about":"General discussion about the Amethyst Nostr client for Android","name":"Amethyst Users","picture":"https://nostr.build/i/5970.png"}',
1674092111
);
INSERT
OR IGNORE INTO channels (event_id, pubkey, metadata, created_at)
VALUES
(
"25e5c82273a271cb1a840d0060391a0bf4965cafeb029d5ab55350b418953fbb",
"ed1d0e1f743a7d19aa2dfb0162df73bacdbc699f67cc55bb91a98c35f7deac69",
'{"about":"","name":"Nostr","picture":"https://cloudflare-ipfs.com/ipfs/QmTN4Eas9atUULVbEAbUU8cowhtvK7g3t7jfKztY7wc8eP?.png"}',
1661333723
);

View File

@ -69,6 +69,18 @@ fn main() {
sql: include_str!("../migrations/20230420040005_insert_last_login_to_settings.sql"),
kind: MigrationKind::Up,
},
Migration {
version: 20230425023912,
description: "add pubkey to channel",
sql: include_str!("../migrations/20230425023912_add_pubkey_to_channel.sql"),
kind: MigrationKind::Up,
},
Migration {
version: 20230425024708,
description: "add default channels",
sql: include_str!("../migrations/20230425024708_add_default_channels.sql"),
kind: MigrationKind::Up,
},
],
)
.build(),

View File

@ -1,24 +1,17 @@
import { ChannelListItem } from '@components/channels/channelListItem';
import { CreateChannelModal } from '@components/channels/createChannelModal';
import { channelsAtom, defaultChannelsAtom } from '@stores/channel';
let channels: any = [];
import { useAtomValue } from 'jotai';
if (typeof window !== 'undefined') {
const { getChannels } = await import('@utils/storage');
channels = await getChannels(100, 0);
}
export default function ChannelList() {
let atom;
if (typeof window !== 'undefined') {
atom = channelsAtom;
} else {
atom = defaultChannelsAtom;
}
const list: any = useAtomValue(atom);
return (
<div className="flex flex-col gap-px">
{list.map((item: { event_id: string }) => (
{channels.map((item: { event_id: string }) => (
<ChannelListItem key={item.event_id} data={item} />
))}
<CreateChannelModal />

View File

@ -20,12 +20,8 @@ export const ChannelListItem = ({ data }: { data: any }) => {
pageID === data.event_id ? 'dark:bg-zinc-900 dark:text-zinc-100 hover:dark:bg-zinc-800' : ''
)}
>
<div className="relative h-5 w-5 shrink-0 rounded">
<img
src={channel?.picture || DEFAULT_AVATAR}
alt={data.event_id}
className="h-5 w-5 rounded bg-zinc-900 object-cover"
/>
<div className="relative h-5 w-5 shrink-0 rounded bg-zinc-900">
<img src={channel?.picture || DEFAULT_AVATAR} alt={data.event_id} className="h-5 w-5 rounded object-contain" />
</div>
<div>
<h5 className="truncate text-sm font-medium text-zinc-400">{channel?.name}</h5>

View File

@ -1,5 +1,6 @@
import { useChannelMetadata } from '@utils/hooks/useChannelMetadata';
import { Copy } from 'iconoir-react';
import { nip19 } from 'nostr-tools';
import Skeleton from 'react-loading-skeleton';
@ -7,13 +8,23 @@ export const ChannelProfile = ({ id }: { id: string }) => {
const metadata = useChannelMetadata(id);
const noteID = nip19.noteEncode(id);
const copyNoteID = async () => {
const { writeText } = await import('@tauri-apps/api/clipboard');
await writeText(noteID);
};
return (
<div className="inline-flex items-center gap-2">
<div className="relative shrink-0 rounded-md">
<img src={metadata?.picture || <Skeleton />} alt={id} className="h-8 w-8 rounded bg-zinc-900 object-cover" />
<img src={metadata?.picture || <Skeleton />} alt={id} className="h-8 w-8 rounded bg-zinc-900 object-contain" />
</div>
<div className="flex flex-col gap-1">
<h5 className="truncate font-medium leading-none text-zinc-100">{metadata?.name || <Skeleton />}</h5>
<div className="flex items-center gap-1">
<h5 className="truncate text-sm font-medium leading-none text-zinc-100">{metadata?.name || <Skeleton />}</h5>
<button onClick={() => copyNoteID()}>
<Copy width={14} height={14} className="text-zinc-400" />
</button>
</div>
<p className="text-xs leading-none text-zinc-400">
{metadata?.about || noteID.substring(0, 24) + '...' || <Skeleton />}
</p>

View File

@ -5,7 +5,6 @@ import { DEFAULT_RELAYS } from '@stores/constants';
import { dateToUnix, hoursAgo } from '@utils/getDate';
import {
countTotalNotes,
createChannel,
createChat,
createNote,
getActiveAccount,
@ -61,16 +60,6 @@ export function Page() {
until: dateToUnix(now.current),
});
}
// kind 40 (channels) query
/*
if (channels.total === 0) {
query.push({
kinds: [40],
since: 0,
until: dateToUnix(now.current),
});
}
*/
// subscribe relays
const unsubscribe = pool.subscribe(
query,
@ -111,10 +100,6 @@ export function Page() {
''
);
break;
// channel
case 40:
createChannel(event.id, event.content, event.created_at);
break;
default:
break;
}

View File

@ -128,13 +128,12 @@ export async function getChannel(id: string) {
}
// create channel
export async function createChannel(event_id: string, metadata: string, created_at: number) {
export async function createChannel(event_id: string, pubkey: string, metadata: string, created_at: number) {
const db = await connect();
return await db.execute('INSERT OR IGNORE INTO channels (event_id, metadata, created_at) VALUES (?, ?, ?);', [
event_id,
metadata,
created_at,
]);
return await db.execute(
'INSERT OR IGNORE INTO channels (event_id, pubkey, metadata, created_at) VALUES (?, ?, ?, ?);',
[event_id, pubkey, metadata, created_at]
);
}
// update channel metadata