From 2a211b78a1332d32ffaf4bfe5721186d40eb97ca Mon Sep 17 00:00:00 2001 From: ennmichael Date: Sat, 11 Feb 2023 21:05:46 +0100 Subject: [PATCH] workspace with decoupled nostr package --- .gitignore | 26 +- .husky/pre-commit | 2 +- Dockerfile | 10 +- package.json | 95 +-- .babelrc => packages/app/.babelrc | 0 .dockerignore => packages/app/.dockerignore | 0 .eslintrc.cjs => packages/app/.eslintrc.cjs | 0 .../app/.github}/ISSUE_TEMPLATE/bug_report.md | 0 .../ISSUE_TEMPLATE/feature_request.md | 0 .../app/.github}/workflows/docker.yaml | 0 .../app/.github}/workflows/eslint.yaml | 0 .../app/.github}/workflows/formatting.yaml | 0 .../app/.github}/workflows/tagged.yml | 0 packages/app/.gitignore | 25 + .../app/.prettierignore | 0 .../app/.prettierrc.json | 0 LICENSE => packages/app/LICENSE | 0 README.md => packages/app/README.md | 0 .../app/config-overrides.js | 0 d.ts => packages/app/d.ts | 0 packages/app/package.json | 96 +++ {public => packages/app/public}/favicon.ico | Bin {public => packages/app/public}/index.html | 0 {public => packages/app/public}/manifest.json | 0 .../app/public}/nostrich_256.png | Bin .../app/public}/nostrich_512.png | Bin .../app/public}/nostrich_orig.jpeg | Bin {public => packages/app/public}/robots.txt | 0 {src => packages/app/src}/Const.ts | 2 +- {src => packages/app/src}/Db/index.ts | 2 +- .../app/src}/Element/AppleMusicEmbed.tsx | 0 .../app/src}/Element/AsyncButton.tsx | 0 {src => packages/app/src}/Element/Avatar.css | 0 {src => packages/app/src}/Element/Avatar.tsx | 2 +- .../app/src}/Element/BackButton.css | 0 .../app/src}/Element/BackButton.tsx | 0 .../app/src}/Element/BlockButton.tsx | 2 +- .../app/src}/Element/BlockList.tsx | 0 .../app/src}/Element/Bookmarks.tsx | 0 .../app/src}/Element/Collapsed.tsx | 0 {src => packages/app/src}/Element/Copy.css | 0 {src => packages/app/src}/Element/Copy.tsx | 0 {src => packages/app/src}/Element/DM.css | 0 {src => packages/app/src}/Element/DM.tsx | 4 +- .../app/src}/Element/FollowButton.css | 0 .../app/src}/Element/FollowButton.tsx | 2 +- .../app/src}/Element/FollowListBase.tsx | 2 +- .../app/src}/Element/FollowersList.tsx | 4 +- .../app/src}/Element/FollowsList.tsx | 2 +- .../app/src}/Element/FollowsYou.css | 0 .../app/src}/Element/FollowsYou.tsx | 2 +- {src => packages/app/src}/Element/Hashtag.css | 0 {src => packages/app/src}/Element/Hashtag.tsx | 0 .../app/src}/Element/HyperText.tsx | 2 +- .../app/src}/Element/IconButton.tsx | 0 {src => packages/app/src}/Element/Invoice.css | 0 {src => packages/app/src}/Element/Invoice.tsx | 0 .../app/src}/Element/LoadMore.tsx | 0 .../app/src}/Element/LogoutButton.tsx | 0 {src => packages/app/src}/Element/Mention.tsx | 2 +- .../app/src}/Element/MixCloudEmbed.tsx | 0 {src => packages/app/src}/Element/Modal.css | 0 {src => packages/app/src}/Element/Modal.tsx | 0 .../app/src}/Element/MuteButton.tsx | 2 +- .../app/src}/Element/MutedList.tsx | 2 +- {src => packages/app/src}/Element/Nip05.css | 0 {src => packages/app/src}/Element/Nip05.tsx | 2 +- .../app/src}/Element/Nip5Service.tsx | 2 +- {src => packages/app/src}/Element/Note.css | 0 {src => packages/app/src}/Element/Note.tsx | 5 +- .../app/src}/Element/NoteCreator.css | 0 .../app/src}/Element/NoteCreator.tsx | 2 +- .../app/src}/Element/NoteFooter.tsx | 4 +- .../app/src}/Element/NoteGhost.tsx | 0 .../app/src}/Element/NoteReaction.css | 0 .../app/src}/Element/NoteReaction.tsx | 5 +- .../app/src}/Element/NoteTime.tsx | 0 .../app/src}/Element/NoteToSelf.css | 0 .../app/src}/Element/NoteToSelf.tsx | 0 .../app/src}/Element/ProfileImage.css | 0 .../app/src}/Element/ProfileImage.tsx | 2 +- .../app/src}/Element/ProfilePreview.css | 0 .../app/src}/Element/ProfilePreview.tsx | 2 +- .../app/src}/Element/ProxyImg.tsx | 0 {src => packages/app/src}/Element/QrCode.tsx | 0 .../app/src}/Element/Reactions.css | 0 .../app/src}/Element/Reactions.tsx | 2 +- {src => packages/app/src}/Element/Relay.css | 0 {src => packages/app/src}/Element/Relay.tsx | 2 +- .../app/src}/Element/RelaysMetadata.css | 0 .../app/src}/Element/RelaysMetadata.tsx | 4 +- .../app/src}/Element/SendSats.css | 0 .../app/src}/Element/SendSats.tsx | 2 +- .../app/src}/Element/ShowMore.css | 0 .../app/src}/Element/ShowMore.tsx | 0 .../app/src}/Element/Skeleton.css | 0 .../app/src}/Element/Skeleton.tsx | 0 .../app/src}/Element/SoundCloudEmded.tsx | 0 .../app/src}/Element/SpotifyEmbed.tsx | 0 {src => packages/app/src}/Element/Tabs.css | 0 {src => packages/app/src}/Element/Tabs.tsx | 0 {src => packages/app/src}/Element/Text.css | 0 {src => packages/app/src}/Element/Text.tsx | 4 +- .../app/src}/Element/Textarea.css | 0 .../app/src}/Element/Textarea.tsx | 0 {src => packages/app/src}/Element/Thread.css | 0 {src => packages/app/src}/Element/Thread.tsx | 5 +- .../app/src}/Element/TidalEmbed.tsx | 0 .../app/src}/Element/Timeline.css | 0 .../app/src}/Element/Timeline.tsx | 4 +- .../app/src}/Element/TwitchEmbed.tsx | 0 .../app/src}/Element/UnreadCount.css | 0 .../app/src}/Element/UnreadCount.tsx | 0 {src => packages/app/src}/Element/Zap.css | 0 {src => packages/app/src}/Element/Zap.tsx | 4 +- .../app/src}/Element/ZapButton.css | 0 .../app/src}/Element/ZapButton.tsx | 2 +- {src => packages/app/src}/Element/messages.ts | 0 .../app/src}/Feed/BookmarkFeed.tsx | 0 .../app/src}/Feed/EventPublisher.ts | 10 +- .../app/src}/Feed/FollowersFeed.ts | 5 +- {src => packages/app/src}/Feed/FollowsFeed.ts | 5 +- {src => packages/app/src}/Feed/ImgProxy.ts | 0 {src => packages/app/src}/Feed/LoginFeed.ts | 6 +- {src => packages/app/src}/Feed/MuteList.ts | 5 +- {src => packages/app/src}/Feed/PinnedFeed.tsx | 0 {src => packages/app/src}/Feed/ProfileFeed.ts | 3 +- {src => packages/app/src}/Feed/RelayState.ts | 3 +- {src => packages/app/src}/Feed/RelaysFeed.tsx | 7 +- .../app/src}/Feed/Subscription.ts | 5 +- {src => packages/app/src}/Feed/ThreadFeed.ts | 5 +- .../app/src}/Feed/TimelineFeed.ts | 5 +- {src => packages/app/src}/Feed/ZapsFeed.ts | 5 +- .../app/src}/Feed/useNotelistSubscription.ts | 0 .../app/src}/Hooks/useHorizontalScroll.tsx | 0 .../app/src}/Hooks/useModeration.tsx | 2 +- {src => packages/app/src}/Hooks/useWebln.ts | 0 {src => packages/app/src}/Icons/ArrowBack.tsx | 0 .../app/src}/Icons/ArrowFront.tsx | 0 .../app/src}/Icons/Attachment.tsx | 0 {src => packages/app/src}/Icons/Bell.tsx | 0 {src => packages/app/src}/Icons/Block.tsx | 0 {src => packages/app/src}/Icons/Bookmark.tsx | 0 {src => packages/app/src}/Icons/Check.tsx | 0 .../app/src}/Icons/ChevronDown.tsx | 0 {src => packages/app/src}/Icons/Close.tsx | 0 {src => packages/app/src}/Icons/Copy.tsx | 0 {src => packages/app/src}/Icons/Dislike.tsx | 0 {src => packages/app/src}/Icons/Dots.tsx | 0 {src => packages/app/src}/Icons/Envelope.tsx | 0 {src => packages/app/src}/Icons/Gear.tsx | 0 {src => packages/app/src}/Icons/Heart.tsx | 0 {src => packages/app/src}/Icons/IconProps.ts | 0 {src => packages/app/src}/Icons/Index.css | 0 {src => packages/app/src}/Icons/Json.tsx | 0 {src => packages/app/src}/Icons/Link.tsx | 0 {src => packages/app/src}/Icons/Logout.tsx | 0 {src => packages/app/src}/Icons/Mute.tsx | 0 {src => packages/app/src}/Icons/Pin.tsx | 0 {src => packages/app/src}/Icons/Plus.tsx | 0 {src => packages/app/src}/Icons/Profile.tsx | 0 {src => packages/app/src}/Icons/Qr.tsx | 0 {src => packages/app/src}/Icons/Read.tsx | 0 {src => packages/app/src}/Icons/Relay.tsx | 0 {src => packages/app/src}/Icons/Reply.tsx | 0 {src => packages/app/src}/Icons/Repost.tsx | 0 {src => packages/app/src}/Icons/Search.tsx | 0 {src => packages/app/src}/Icons/Share.tsx | 0 {src => packages/app/src}/Icons/Translate.tsx | 0 {src => packages/app/src}/Icons/Trash.tsx | 0 {src => packages/app/src}/Icons/Write.tsx | 0 {src => packages/app/src}/Icons/Zap.tsx | 0 {src => packages/app/src}/Icons/ZapCircle.tsx | 0 {src => packages/app/src}/IntlProvider.tsx | 16 +- .../app/src}/Nip05/ServiceProvider.ts | 0 {src => packages/app/src}/Notifications.ts | 4 +- {src => packages/app/src}/Number.ts | 0 {src => packages/app/src}/Pages/ChatPage.css | 0 {src => packages/app/src}/Pages/ChatPage.tsx | 2 +- .../app/src}/Pages/DonatePage.tsx | 2 +- {src => packages/app/src}/Pages/ErrorPage.tsx | 0 {src => packages/app/src}/Pages/EventPage.tsx | 0 .../app/src}/Pages/HashTagsPage.tsx | 0 {src => packages/app/src}/Pages/HelpPage.tsx | 0 {src => packages/app/src}/Pages/Layout.css | 0 {src => packages/app/src}/Pages/Layout.tsx | 4 +- {src => packages/app/src}/Pages/Login.css | 0 {src => packages/app/src}/Pages/Login.tsx | 2 +- .../app/src}/Pages/MessagesPage.tsx | 2 +- .../app/src}/Pages/NostrLinkHandler.tsx | 0 .../app/src}/Pages/Notifications.tsx | 2 +- .../app/src}/Pages/ProfilePage.css | 0 .../app/src}/Pages/ProfilePage.tsx | 2 +- {src => packages/app/src}/Pages/Root.css | 0 {src => packages/app/src}/Pages/Root.tsx | 2 +- .../app/src}/Pages/SearchPage.tsx | 2 +- .../app/src}/Pages/SettingsPage.tsx | 0 .../app/src}/Pages/Verification.css | 0 .../app/src}/Pages/Verification.tsx | 0 {src => packages/app/src}/Pages/messages.ts | 0 .../app/src}/Pages/new/DiscoverFollows.tsx | 0 .../app/src}/Pages/new/GetVerified.tsx | 0 .../app/src}/Pages/new/ImportFollows.tsx | 0 .../app/src}/Pages/new/NewUserFlow.tsx | 0 .../app/src}/Pages/new/NewUsername.tsx | 0 {src => packages/app/src}/Pages/new/index.css | 0 {src => packages/app/src}/Pages/new/index.tsx | 0 .../app/src}/Pages/new/messages.ts | 0 .../app/src}/Pages/settings/Index.css | 0 .../app/src}/Pages/settings/Index.tsx | 0 .../app/src}/Pages/settings/Preferences.css | 0 .../app/src}/Pages/settings/Preferences.tsx | 0 .../app/src}/Pages/settings/Profile.css | 0 .../app/src}/Pages/settings/Profile.tsx | 2 +- .../app/src}/Pages/settings/RelayInfo.tsx | 2 +- .../app/src}/Pages/settings/Relays.tsx | 2 +- .../app/src}/Pages/settings/messages.ts | 0 {src => packages/app/src}/State/Login.ts | 4 +- {src => packages/app/src}/State/Store.ts | 0 {src => packages/app/src}/State/Users.ts | 2 +- {src => packages/app/src}/State/Users/Db.ts | 2 +- .../app/src}/State/Users/Hooks.ts | 2 +- .../app/src}/Upload/NostrBuild.ts | 0 {src => packages/app/src}/Upload/NostrImg.ts | 0 {src => packages/app/src}/Upload/VoidCat.ts | 0 {src => packages/app/src}/Upload/index.ts | 0 {src => packages/app/src}/Util.ts | 14 +- {src => packages/app/src}/index.css | 0 {src => packages/app/src}/index.tsx | 0 {src => packages/app/src}/lang.json | 0 {src => packages/app/src}/nostrich.webp | Bin {src => packages/app/src}/service-worker.js | 0 .../app/src}/serviceWorkerRegistration.js | 0 packages/app/src/translations/en.ts | 251 ++++++ packages/app/src/translations/es.ts | 236 ++++++ packages/app/src/translations/fr.ts | 237 ++++++ packages/app/src/translations/hu.ts | 239 ++++++ packages/app/src/translations/ja.ts | 233 ++++++ packages/app/src/translations/zh.ts | 235 ++++++ {src => packages/app/src}/useCopy.ts | 0 transifex.yml => packages/app/transifex.yml | 0 tsconfig.json => packages/app/tsconfig.json | 3 +- packages/nostr/.gitignore | 1 + packages/nostr/package.json | 13 + .../nostr/src}/Connection.ts | 41 +- .../nostr/src}/ConnectionStats.ts | 0 packages/nostr/src/Const.ts | 149 ++++ {src/Nostr => packages/nostr/src}/Event.ts | 30 +- .../Nostr => packages/nostr/src}/EventKind.ts | 2 +- {src/Nostr => packages/nostr/src}/Links.ts | 0 {src/Nostr => packages/nostr/src}/Nips.ts | 0 .../Nostr => packages/nostr/src}/RelayInfo.ts | 0 .../nostr/src}/Subscriptions.ts | 6 +- {src/Nostr => packages/nostr/src}/System.ts | 91 ++- {src/Nostr => packages/nostr/src}/Tag.ts | 6 +- {src/Nostr => packages/nostr/src}/Thread.ts | 26 +- packages/nostr/src/Util.ts | 26 + {src/Nostr => packages/nostr/src}/index.ts | 11 +- packages/nostr/tsconfig.json | 12 + yarn.lock | 754 +++++++++--------- 260 files changed, 2363 insertions(+), 714 deletions(-) rename .babelrc => packages/app/.babelrc (100%) rename .dockerignore => packages/app/.dockerignore (100%) rename .eslintrc.cjs => packages/app/.eslintrc.cjs (100%) rename {.github => packages/app/.github}/ISSUE_TEMPLATE/bug_report.md (100%) rename {.github => packages/app/.github}/ISSUE_TEMPLATE/feature_request.md (100%) rename {.github => packages/app/.github}/workflows/docker.yaml (100%) rename {.github => packages/app/.github}/workflows/eslint.yaml (100%) rename {.github => packages/app/.github}/workflows/formatting.yaml (100%) rename {.github => packages/app/.github}/workflows/tagged.yml (100%) create mode 100644 packages/app/.gitignore rename .prettierignore => packages/app/.prettierignore (100%) rename .prettierrc.json => packages/app/.prettierrc.json (100%) rename LICENSE => packages/app/LICENSE (100%) rename README.md => packages/app/README.md (100%) rename config-overrides.js => packages/app/config-overrides.js (100%) rename d.ts => packages/app/d.ts (100%) create mode 100644 packages/app/package.json rename {public => packages/app/public}/favicon.ico (100%) rename {public => packages/app/public}/index.html (100%) rename {public => packages/app/public}/manifest.json (100%) rename {public => packages/app/public}/nostrich_256.png (100%) rename {public => packages/app/public}/nostrich_512.png (100%) rename {public => packages/app/public}/nostrich_orig.jpeg (100%) rename {public => packages/app/public}/robots.txt (100%) rename {src => packages/app/src}/Const.ts (99%) rename {src => packages/app/src}/Db/index.ts (94%) rename {src => packages/app/src}/Element/AppleMusicEmbed.tsx (100%) rename {src => packages/app/src}/Element/AsyncButton.tsx (100%) rename {src => packages/app/src}/Element/Avatar.css (100%) rename {src => packages/app/src}/Element/Avatar.tsx (94%) rename {src => packages/app/src}/Element/BackButton.css (100%) rename {src => packages/app/src}/Element/BackButton.tsx (100%) rename {src => packages/app/src}/Element/BlockButton.tsx (94%) rename {src => packages/app/src}/Element/BlockList.tsx (100%) rename {src => packages/app/src}/Element/Bookmarks.tsx (100%) rename {src => packages/app/src}/Element/Collapsed.tsx (100%) rename {src => packages/app/src}/Element/Copy.css (100%) rename {src => packages/app/src}/Element/Copy.tsx (100%) rename {src => packages/app/src}/Element/DM.css (100%) rename {src => packages/app/src}/Element/DM.tsx (95%) rename {src => packages/app/src}/Element/FollowButton.css (100%) rename {src => packages/app/src}/Element/FollowButton.tsx (96%) rename {src => packages/app/src}/Element/FollowListBase.tsx (96%) rename {src => packages/app/src}/Element/FollowersList.tsx (90%) rename {src => packages/app/src}/Element/FollowsList.tsx (94%) rename {src => packages/app/src}/Element/FollowsYou.css (100%) rename {src => packages/app/src}/Element/FollowsYou.tsx (95%) rename {src => packages/app/src}/Element/Hashtag.css (100%) rename {src => packages/app/src}/Element/Hashtag.tsx (100%) rename {src => packages/app/src}/Element/HyperText.tsx (99%) rename {src => packages/app/src}/Element/IconButton.tsx (100%) rename {src => packages/app/src}/Element/Invoice.css (100%) rename {src => packages/app/src}/Element/Invoice.tsx (100%) rename {src => packages/app/src}/Element/LoadMore.tsx (100%) rename {src => packages/app/src}/Element/LogoutButton.tsx (100%) rename {src => packages/app/src}/Element/Mention.tsx (94%) rename {src => packages/app/src}/Element/MixCloudEmbed.tsx (100%) rename {src => packages/app/src}/Element/Modal.css (100%) rename {src => packages/app/src}/Element/Modal.tsx (100%) rename {src => packages/app/src}/Element/MuteButton.tsx (94%) rename {src => packages/app/src}/Element/MutedList.tsx (97%) rename {src => packages/app/src}/Element/Nip05.css (100%) rename {src => packages/app/src}/Element/Nip05.tsx (98%) rename {src => packages/app/src}/Element/Nip5Service.tsx (99%) rename {src => packages/app/src}/Element/Note.css (100%) rename {src => packages/app/src}/Element/Note.tsx (98%) rename {src => packages/app/src}/Element/NoteCreator.css (100%) rename {src => packages/app/src}/Element/NoteCreator.tsx (98%) rename {src => packages/app/src}/Element/NoteFooter.tsx (98%) rename {src => packages/app/src}/Element/NoteGhost.tsx (100%) rename {src => packages/app/src}/Element/NoteReaction.css (100%) rename {src => packages/app/src}/Element/NoteReaction.tsx (93%) rename {src => packages/app/src}/Element/NoteTime.tsx (100%) rename {src => packages/app/src}/Element/NoteToSelf.css (100%) rename {src => packages/app/src}/Element/NoteToSelf.tsx (100%) rename {src => packages/app/src}/Element/ProfileImage.css (100%) rename {src => packages/app/src}/Element/ProfileImage.tsx (98%) rename {src => packages/app/src}/Element/ProfilePreview.css (100%) rename {src => packages/app/src}/Element/ProfilePreview.tsx (96%) rename {src => packages/app/src}/Element/ProxyImg.tsx (100%) rename {src => packages/app/src}/Element/QrCode.tsx (100%) rename {src => packages/app/src}/Element/Reactions.css (100%) rename {src => packages/app/src}/Element/Reactions.tsx (98%) rename {src => packages/app/src}/Element/Relay.css (100%) rename {src => packages/app/src}/Element/Relay.tsx (98%) rename {src => packages/app/src}/Element/RelaysMetadata.css (100%) rename {src => packages/app/src}/Element/RelaysMetadata.tsx (93%) rename {src => packages/app/src}/Element/SendSats.css (100%) rename {src => packages/app/src}/Element/SendSats.tsx (99%) rename {src => packages/app/src}/Element/ShowMore.css (100%) rename {src => packages/app/src}/Element/ShowMore.tsx (100%) rename {src => packages/app/src}/Element/Skeleton.css (100%) rename {src => packages/app/src}/Element/Skeleton.tsx (100%) rename {src => packages/app/src}/Element/SoundCloudEmded.tsx (100%) rename {src => packages/app/src}/Element/SpotifyEmbed.tsx (100%) rename {src => packages/app/src}/Element/Tabs.css (100%) rename {src => packages/app/src}/Element/Tabs.tsx (100%) rename {src => packages/app/src}/Element/Text.css (100%) rename {src => packages/app/src}/Element/Text.tsx (98%) rename {src => packages/app/src}/Element/Textarea.css (100%) rename {src => packages/app/src}/Element/Textarea.tsx (100%) rename {src => packages/app/src}/Element/Thread.css (100%) rename {src => packages/app/src}/Element/Thread.tsx (98%) rename {src => packages/app/src}/Element/TidalEmbed.tsx (100%) rename {src => packages/app/src}/Element/Timeline.css (100%) rename {src => packages/app/src}/Element/Timeline.tsx (97%) rename {src => packages/app/src}/Element/TwitchEmbed.tsx (100%) rename {src => packages/app/src}/Element/UnreadCount.css (100%) rename {src => packages/app/src}/Element/UnreadCount.tsx (100%) rename {src => packages/app/src}/Element/Zap.css (100%) rename {src => packages/app/src}/Element/Zap.tsx (97%) rename {src => packages/app/src}/Element/ZapButton.css (100%) rename {src => packages/app/src}/Element/ZapButton.tsx (95%) rename {src => packages/app/src}/Element/messages.ts (100%) rename {src => packages/app/src}/Feed/BookmarkFeed.tsx (100%) rename {src => packages/app/src}/Feed/EventPublisher.ts (97%) rename {src => packages/app/src}/Feed/FollowersFeed.ts (76%) rename {src => packages/app/src}/Feed/FollowsFeed.ts (84%) rename {src => packages/app/src}/Feed/ImgProxy.ts (100%) rename {src => packages/app/src}/Feed/LoginFeed.ts (97%) rename {src => packages/app/src}/Feed/MuteList.ts (87%) rename {src => packages/app/src}/Feed/PinnedFeed.tsx (100%) rename {src => packages/app/src}/Feed/ProfileFeed.ts (90%) rename {src => packages/app/src}/Feed/RelayState.ts (81%) rename {src => packages/app/src}/Feed/RelaysFeed.tsx (84%) rename {src => packages/app/src}/Feed/Subscription.ts (97%) rename {src => packages/app/src}/Feed/ThreadFeed.ts (93%) rename {src => packages/app/src}/Feed/TimelineFeed.ts (97%) rename {src => packages/app/src}/Feed/ZapsFeed.ts (76%) rename {src => packages/app/src}/Feed/useNotelistSubscription.ts (100%) rename {src => packages/app/src}/Hooks/useHorizontalScroll.tsx (100%) rename {src => packages/app/src}/Hooks/useModeration.tsx (98%) rename {src => packages/app/src}/Hooks/useWebln.ts (100%) rename {src => packages/app/src}/Icons/ArrowBack.tsx (100%) rename {src => packages/app/src}/Icons/ArrowFront.tsx (100%) rename {src => packages/app/src}/Icons/Attachment.tsx (100%) rename {src => packages/app/src}/Icons/Bell.tsx (100%) rename {src => packages/app/src}/Icons/Block.tsx (100%) rename {src => packages/app/src}/Icons/Bookmark.tsx (100%) rename {src => packages/app/src}/Icons/Check.tsx (100%) rename {src => packages/app/src}/Icons/ChevronDown.tsx (100%) rename {src => packages/app/src}/Icons/Close.tsx (100%) rename {src => packages/app/src}/Icons/Copy.tsx (100%) rename {src => packages/app/src}/Icons/Dislike.tsx (100%) rename {src => packages/app/src}/Icons/Dots.tsx (100%) rename {src => packages/app/src}/Icons/Envelope.tsx (100%) rename {src => packages/app/src}/Icons/Gear.tsx (100%) rename {src => packages/app/src}/Icons/Heart.tsx (100%) rename {src => packages/app/src}/Icons/IconProps.ts (100%) rename {src => packages/app/src}/Icons/Index.css (100%) rename {src => packages/app/src}/Icons/Json.tsx (100%) rename {src => packages/app/src}/Icons/Link.tsx (100%) rename {src => packages/app/src}/Icons/Logout.tsx (100%) rename {src => packages/app/src}/Icons/Mute.tsx (100%) rename {src => packages/app/src}/Icons/Pin.tsx (100%) rename {src => packages/app/src}/Icons/Plus.tsx (100%) rename {src => packages/app/src}/Icons/Profile.tsx (100%) rename {src => packages/app/src}/Icons/Qr.tsx (100%) rename {src => packages/app/src}/Icons/Read.tsx (100%) rename {src => packages/app/src}/Icons/Relay.tsx (100%) rename {src => packages/app/src}/Icons/Reply.tsx (100%) rename {src => packages/app/src}/Icons/Repost.tsx (100%) rename {src => packages/app/src}/Icons/Search.tsx (100%) rename {src => packages/app/src}/Icons/Share.tsx (100%) rename {src => packages/app/src}/Icons/Translate.tsx (100%) rename {src => packages/app/src}/Icons/Trash.tsx (100%) rename {src => packages/app/src}/Icons/Write.tsx (100%) rename {src => packages/app/src}/Icons/Zap.tsx (100%) rename {src => packages/app/src}/Icons/ZapCircle.tsx (100%) rename {src => packages/app/src}/IntlProvider.tsx (72%) rename {src => packages/app/src}/Nip05/ServiceProvider.ts (100%) rename {src => packages/app/src}/Notifications.ts (94%) rename {src => packages/app/src}/Number.ts (100%) rename {src => packages/app/src}/Pages/ChatPage.css (100%) rename {src => packages/app/src}/Pages/ChatPage.tsx (98%) rename {src => packages/app/src}/Pages/DonatePage.tsx (99%) rename {src => packages/app/src}/Pages/ErrorPage.tsx (100%) rename {src => packages/app/src}/Pages/EventPage.tsx (100%) rename {src => packages/app/src}/Pages/HashTagsPage.tsx (100%) rename {src => packages/app/src}/Pages/HelpPage.tsx (100%) rename {src => packages/app/src}/Pages/Layout.css (100%) rename {src => packages/app/src}/Pages/Layout.tsx (98%) rename {src => packages/app/src}/Pages/Login.css (100%) rename {src => packages/app/src}/Pages/Login.tsx (99%) rename {src => packages/app/src}/Pages/MessagesPage.tsx (98%) rename {src => packages/app/src}/Pages/NostrLinkHandler.tsx (100%) rename {src => packages/app/src}/Pages/Notifications.tsx (95%) rename {src => packages/app/src}/Pages/ProfilePage.css (100%) rename {src => packages/app/src}/Pages/ProfilePage.tsx (99%) rename {src => packages/app/src}/Pages/Root.css (100%) rename {src => packages/app/src}/Pages/Root.tsx (98%) rename {src => packages/app/src}/Pages/SearchPage.tsx (97%) rename {src => packages/app/src}/Pages/SettingsPage.tsx (100%) rename {src => packages/app/src}/Pages/Verification.css (100%) rename {src => packages/app/src}/Pages/Verification.tsx (100%) rename {src => packages/app/src}/Pages/messages.ts (100%) rename {src => packages/app/src}/Pages/new/DiscoverFollows.tsx (100%) rename {src => packages/app/src}/Pages/new/GetVerified.tsx (100%) rename {src => packages/app/src}/Pages/new/ImportFollows.tsx (100%) rename {src => packages/app/src}/Pages/new/NewUserFlow.tsx (100%) rename {src => packages/app/src}/Pages/new/NewUsername.tsx (100%) rename {src => packages/app/src}/Pages/new/index.css (100%) rename {src => packages/app/src}/Pages/new/index.tsx (100%) rename {src => packages/app/src}/Pages/new/messages.ts (100%) rename {src => packages/app/src}/Pages/settings/Index.css (100%) rename {src => packages/app/src}/Pages/settings/Index.tsx (100%) rename {src => packages/app/src}/Pages/settings/Preferences.css (100%) rename {src => packages/app/src}/Pages/settings/Preferences.tsx (100%) rename {src => packages/app/src}/Pages/settings/Profile.css (100%) rename {src => packages/app/src}/Pages/settings/Profile.tsx (99%) rename {src => packages/app/src}/Pages/settings/RelayInfo.tsx (98%) rename {src => packages/app/src}/Pages/settings/Relays.tsx (98%) rename {src => packages/app/src}/Pages/settings/messages.ts (100%) rename {src => packages/app/src}/State/Login.ts (99%) rename {src => packages/app/src}/State/Store.ts (100%) rename {src => packages/app/src}/State/Users.ts (96%) rename {src => packages/app/src}/State/Users/Db.ts (99%) rename {src => packages/app/src}/State/Users/Hooks.ts (97%) rename {src => packages/app/src}/Upload/NostrBuild.ts (100%) rename {src => packages/app/src}/Upload/NostrImg.ts (100%) rename {src => packages/app/src}/Upload/VoidCat.ts (100%) rename {src => packages/app/src}/Upload/index.ts (100%) rename {src => packages/app/src}/Util.ts (92%) rename {src => packages/app/src}/index.css (100%) rename {src => packages/app/src}/index.tsx (100%) rename {src => packages/app/src}/lang.json (100%) rename {src => packages/app/src}/nostrich.webp (100%) rename {src => packages/app/src}/service-worker.js (100%) rename {src => packages/app/src}/serviceWorkerRegistration.js (100%) create mode 100644 packages/app/src/translations/en.ts create mode 100644 packages/app/src/translations/es.ts create mode 100644 packages/app/src/translations/fr.ts create mode 100644 packages/app/src/translations/hu.ts create mode 100644 packages/app/src/translations/ja.ts create mode 100644 packages/app/src/translations/zh.ts rename {src => packages/app/src}/useCopy.ts (100%) rename transifex.yml => packages/app/transifex.yml (100%) rename tsconfig.json => packages/app/tsconfig.json (87%) create mode 100644 packages/nostr/.gitignore create mode 100644 packages/nostr/package.json rename {src/Nostr => packages/nostr/src}/Connection.ts (91%) rename {src/Nostr => packages/nostr/src}/ConnectionStats.ts (100%) create mode 100644 packages/nostr/src/Const.ts rename {src/Nostr => packages/nostr/src}/Event.ts (88%) rename {src/Nostr => packages/nostr/src}/EventKind.ts (95%) rename {src/Nostr => packages/nostr/src}/Links.ts (100%) rename {src/Nostr => packages/nostr/src}/Nips.ts (100%) rename {src/Nostr => packages/nostr/src}/RelayInfo.ts (100%) rename {src/Nostr => packages/nostr/src}/Subscriptions.ts (96%) rename {src/Nostr => packages/nostr/src}/System.ts (70%) rename {src/Nostr => packages/nostr/src}/Tag.ts (91%) rename {src/Nostr => packages/nostr/src}/Thread.ts (57%) create mode 100644 packages/nostr/src/Util.ts rename {src/Nostr => packages/nostr/src}/index.ts (79%) create mode 100644 packages/nostr/tsconfig.json diff --git a/.gitignore b/.gitignore index 3a1bea68..c2658d7d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -.idea +node_modules/ diff --git a/.husky/pre-commit b/.husky/pre-commit index 36af2198..98e866ab 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -npx lint-staged +yarn workspace @snort/app lint-staged diff --git a/Dockerfile b/Dockerfile index 2a51e32a..93454805 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ -FROM node:16 as build +FROM node:16 as build WORKDIR /app -COPY package*.json yarn.lock . -RUN yarn install --network-timeout 1000000 COPY . . -RUN yarn build +RUN yarn install --network-timeout 1000000 +RUN yarn workspace @snort/nostr build +RUN yarn workspace @snort/app build FROM nginx:mainline-alpine COPY docker/nginx.conf /etc/nginx/conf.d/default.conf -COPY --from=build /app/build /usr/share/nginx/html \ No newline at end of file +COPY --from=build /app/packages/app/build /usr/share/nginx/html diff --git a/package.json b/package.json index 8664f834..9f0acdba 100644 --- a/package.json +++ b/package.json @@ -1,95 +1,6 @@ { - "name": "snort", - "version": "0.1.0", "private": true, - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.2.1", - "@fortawesome/free-solid-svg-icons": "^6.2.1", - "@fortawesome/react-fontawesome": "^0.2.0", - "@jukben/emoji-search": "^2.0.1", - "@noble/hashes": "^1.2.0", - "@noble/secp256k1": "^1.7.0", - "@protobufjs/base64": "^1.1.2", - "@reduxjs/toolkit": "^1.9.1", - "@szhsin/react-menu": "^3.3.1", - "@types/jest": "^29.2.5", - "@types/node": "^18.11.18", - "@types/react": "^18.0.26", - "@types/react-dom": "^18.0.10", - "@types/uuid": "^9.0.0", - "@types/webscopeio__react-textarea-autocomplete": "^4.7.2", - "@webscopeio/react-textarea-autocomplete": "^4.9.2", - "bech32": "^2.0.0", - "dexie": "^3.2.2", - "dexie-react-hooks": "^1.1.1", - "light-bolt11-decoder": "^2.1.0", - "qr-code-styling": "^1.6.0-rc.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-intersection-observer": "^9.4.1", - "react-intl": "^6.2.8", - "react-markdown": "^8.0.4", - "react-query": "^3.39.2", - "react-redux": "^8.0.5", - "react-router-dom": "^6.5.0", - "react-scripts": "5.0.1", - "react-textarea-autosize": "^8.4.0", - "react-twitter-embed": "^4.0.4", - "typescript": "^4.9.4", - "unist-util-visit": "^4.1.2", - "uuid": "^9.0.0", - "workbox-background-sync": "^6.4.2", - "workbox-broadcast-update": "^6.4.2", - "workbox-cacheable-response": "^6.4.2", - "workbox-core": "^6.4.2", - "workbox-expiration": "^6.4.2", - "workbox-google-analytics": "^6.4.2", - "workbox-navigation-preload": "^6.4.2", - "workbox-precaching": "^6.4.2", - "workbox-range-requests": "^6.4.2", - "workbox-routing": "^6.4.2", - "workbox-strategies": "^6.4.2", - "workbox-streams": "^6.4.2" - }, - "scripts": { - "start": "react-app-rewired start", - "build": "react-app-rewired build", - "test": "react-app-rewired test", - "eject": "react-scripts eject", - "intl-extract": "formatjs extract 'src/**/*.ts*' --ignore='**/*.d.ts' --out-file src/lang.json --format transifex --flatten true", - "intl-compile": "formatjs compile src/lang.json --out-file src/translations/en.json --format transifex", - "transifex": "formatjs compile src/translations/$LNG.json --out-file src/translations/$LNG.json --format transifex", - "format": "prettier --write .", - "eslint": "eslint .", - "prepare": "husky install" - }, - "eslintConfig": { - "extends": [ - "react-app" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "@formatjs/cli": "^6.0.1", - "babel-plugin-formatjs": "^10.3.36", - "customize-cra": "^1.0.0", - "husky": ">=6", - "lint-staged": ">=10", - "prettier": "2.8.3", - "react-app-rewired": "^2.2.1" - }, - "lint-staged": { - "*.{js,jsx,ts,tsx,css,md}": "prettier --write" - } + "workspaces": [ + "packages/*" + ] } diff --git a/.babelrc b/packages/app/.babelrc similarity index 100% rename from .babelrc rename to packages/app/.babelrc diff --git a/.dockerignore b/packages/app/.dockerignore similarity index 100% rename from .dockerignore rename to packages/app/.dockerignore diff --git a/.eslintrc.cjs b/packages/app/.eslintrc.cjs similarity index 100% rename from .eslintrc.cjs rename to packages/app/.eslintrc.cjs diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/packages/app/.github/ISSUE_TEMPLATE/bug_report.md similarity index 100% rename from .github/ISSUE_TEMPLATE/bug_report.md rename to packages/app/.github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/packages/app/.github/ISSUE_TEMPLATE/feature_request.md similarity index 100% rename from .github/ISSUE_TEMPLATE/feature_request.md rename to packages/app/.github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/workflows/docker.yaml b/packages/app/.github/workflows/docker.yaml similarity index 100% rename from .github/workflows/docker.yaml rename to packages/app/.github/workflows/docker.yaml diff --git a/.github/workflows/eslint.yaml b/packages/app/.github/workflows/eslint.yaml similarity index 100% rename from .github/workflows/eslint.yaml rename to packages/app/.github/workflows/eslint.yaml diff --git a/.github/workflows/formatting.yaml b/packages/app/.github/workflows/formatting.yaml similarity index 100% rename from .github/workflows/formatting.yaml rename to packages/app/.github/workflows/formatting.yaml diff --git a/.github/workflows/tagged.yml b/packages/app/.github/workflows/tagged.yml similarity index 100% rename from .github/workflows/tagged.yml rename to packages/app/.github/workflows/tagged.yml diff --git a/packages/app/.gitignore b/packages/app/.gitignore new file mode 100644 index 00000000..3a1bea68 --- /dev/null +++ b/packages/app/.gitignore @@ -0,0 +1,25 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +.idea diff --git a/.prettierignore b/packages/app/.prettierignore similarity index 100% rename from .prettierignore rename to packages/app/.prettierignore diff --git a/.prettierrc.json b/packages/app/.prettierrc.json similarity index 100% rename from .prettierrc.json rename to packages/app/.prettierrc.json diff --git a/LICENSE b/packages/app/LICENSE similarity index 100% rename from LICENSE rename to packages/app/LICENSE diff --git a/README.md b/packages/app/README.md similarity index 100% rename from README.md rename to packages/app/README.md diff --git a/config-overrides.js b/packages/app/config-overrides.js similarity index 100% rename from config-overrides.js rename to packages/app/config-overrides.js diff --git a/d.ts b/packages/app/d.ts similarity index 100% rename from d.ts rename to packages/app/d.ts diff --git a/packages/app/package.json b/packages/app/package.json new file mode 100644 index 00000000..b435de76 --- /dev/null +++ b/packages/app/package.json @@ -0,0 +1,96 @@ +{ + "name": "@snort/app", + "version": "0.1.0", + "private": true, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.2.1", + "@fortawesome/free-solid-svg-icons": "^6.2.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@jukben/emoji-search": "^2.0.1", + "@noble/hashes": "^1.2.0", + "@noble/secp256k1": "^1.7.0", + "@protobufjs/base64": "^1.1.2", + "@reduxjs/toolkit": "^1.9.1", + "@szhsin/react-menu": "^3.3.1", + "@types/jest": "^29.2.5", + "@types/node": "^18.11.18", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.10", + "@types/uuid": "^9.0.0", + "@types/webscopeio__react-textarea-autocomplete": "^4.7.2", + "@webscopeio/react-textarea-autocomplete": "^4.9.2", + "bech32": "^2.0.0", + "dexie": "^3.2.2", + "dexie-react-hooks": "^1.1.1", + "light-bolt11-decoder": "^2.1.0", + "qr-code-styling": "^1.6.0-rc.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-intersection-observer": "^9.4.1", + "react-intl": "^6.2.8", + "react-markdown": "^8.0.4", + "react-query": "^3.39.2", + "react-redux": "^8.0.5", + "react-router-dom": "^6.5.0", + "react-scripts": "5.0.1", + "react-textarea-autosize": "^8.4.0", + "react-twitter-embed": "^4.0.4", + "typescript": "^4.9.4", + "unist-util-visit": "^4.1.2", + "uuid": "^9.0.0", + "workbox-background-sync": "^6.4.2", + "workbox-broadcast-update": "^6.4.2", + "workbox-cacheable-response": "^6.4.2", + "workbox-core": "^6.4.2", + "workbox-expiration": "^6.4.2", + "workbox-google-analytics": "^6.4.2", + "workbox-navigation-preload": "^6.4.2", + "workbox-precaching": "^6.4.2", + "workbox-range-requests": "^6.4.2", + "workbox-routing": "^6.4.2", + "workbox-strategies": "^6.4.2", + "workbox-streams": "^6.4.2", + "@snort/nostr": "^1.0.0" + }, + "scripts": { + "start": "react-app-rewired start", + "build": "react-app-rewired build", + "test": "react-app-rewired test", + "eject": "react-scripts eject", + "intl-extract": "formatjs extract 'src/**/*.ts*' --ignore='**/*.d.ts' --out-file src/lang.json --format transifex --flatten true", + "intl-compile": "formatjs compile src/lang.json --out-file src/translations/en.json --format transifex", + "transifex": "formatjs compile src/translations/$LNG.json --out-file src/translations/$LNG.json --format transifex", + "format": "prettier --write .", + "eslint": "eslint .", + "prepare": "cd ../.. && husky install" + }, + "eslintConfig": { + "extends": [ + "react-app" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@formatjs/cli": "^6.0.1", + "babel-plugin-formatjs": "^10.3.36", + "customize-cra": "^1.0.0", + "husky": ">=6", + "lint-staged": ">=10", + "prettier": "2.8.3", + "react-app-rewired": "^2.2.1" + }, + "lint-staged": { + "*.{js,jsx,ts,tsx,css,md}": "prettier --write" + } +} diff --git a/public/favicon.ico b/packages/app/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to packages/app/public/favicon.ico diff --git a/public/index.html b/packages/app/public/index.html similarity index 100% rename from public/index.html rename to packages/app/public/index.html diff --git a/public/manifest.json b/packages/app/public/manifest.json similarity index 100% rename from public/manifest.json rename to packages/app/public/manifest.json diff --git a/public/nostrich_256.png b/packages/app/public/nostrich_256.png similarity index 100% rename from public/nostrich_256.png rename to packages/app/public/nostrich_256.png diff --git a/public/nostrich_512.png b/packages/app/public/nostrich_512.png similarity index 100% rename from public/nostrich_512.png rename to packages/app/public/nostrich_512.png diff --git a/public/nostrich_orig.jpeg b/packages/app/public/nostrich_orig.jpeg similarity index 100% rename from public/nostrich_orig.jpeg rename to packages/app/public/nostrich_orig.jpeg diff --git a/public/robots.txt b/packages/app/public/robots.txt similarity index 100% rename from public/robots.txt rename to packages/app/public/robots.txt diff --git a/src/Const.ts b/packages/app/src/Const.ts similarity index 99% rename from src/Const.ts rename to packages/app/src/Const.ts index 65365a0f..373e5b84 100644 --- a/src/Const.ts +++ b/packages/app/src/Const.ts @@ -1,4 +1,4 @@ -import { RelaySettings } from "Nostr/Connection"; +import { RelaySettings } from "@snort/nostr"; /** * Add-on api for snort features diff --git a/src/Db/index.ts b/packages/app/src/Db/index.ts similarity index 94% rename from src/Db/index.ts rename to packages/app/src/Db/index.ts index 89276478..2a0162b6 100644 --- a/src/Db/index.ts +++ b/packages/app/src/Db/index.ts @@ -1,5 +1,5 @@ import Dexie, { Table } from "dexie"; -import { TaggedRawEvent, u256 } from "Nostr"; +import { TaggedRawEvent, u256 } from "@snort/nostr"; import { MetadataCache } from "State/Users"; import { hexToBech32 } from "Util"; diff --git a/src/Element/AppleMusicEmbed.tsx b/packages/app/src/Element/AppleMusicEmbed.tsx similarity index 100% rename from src/Element/AppleMusicEmbed.tsx rename to packages/app/src/Element/AppleMusicEmbed.tsx diff --git a/src/Element/AsyncButton.tsx b/packages/app/src/Element/AsyncButton.tsx similarity index 100% rename from src/Element/AsyncButton.tsx rename to packages/app/src/Element/AsyncButton.tsx diff --git a/src/Element/Avatar.css b/packages/app/src/Element/Avatar.css similarity index 100% rename from src/Element/Avatar.css rename to packages/app/src/Element/Avatar.css diff --git a/src/Element/Avatar.tsx b/packages/app/src/Element/Avatar.tsx similarity index 94% rename from src/Element/Avatar.tsx rename to packages/app/src/Element/Avatar.tsx index 97f5a9ea..19ffc4d9 100644 --- a/src/Element/Avatar.tsx +++ b/packages/app/src/Element/Avatar.tsx @@ -1,7 +1,7 @@ import "./Avatar.css"; import Nostrich from "nostrich.webp"; import { CSSProperties, useEffect, useState } from "react"; -import type { UserMetadata } from "Nostr"; +import type { UserMetadata } from "@snort/nostr"; import useImgProxy from "Feed/ImgProxy"; const Avatar = ({ user, ...rest }: { user?: UserMetadata; onClick?: () => void }) => { diff --git a/src/Element/BackButton.css b/packages/app/src/Element/BackButton.css similarity index 100% rename from src/Element/BackButton.css rename to packages/app/src/Element/BackButton.css diff --git a/src/Element/BackButton.tsx b/packages/app/src/Element/BackButton.tsx similarity index 100% rename from src/Element/BackButton.tsx rename to packages/app/src/Element/BackButton.tsx diff --git a/src/Element/BlockButton.tsx b/packages/app/src/Element/BlockButton.tsx similarity index 94% rename from src/Element/BlockButton.tsx rename to packages/app/src/Element/BlockButton.tsx index d201dc4d..e908192d 100644 --- a/src/Element/BlockButton.tsx +++ b/packages/app/src/Element/BlockButton.tsx @@ -1,5 +1,5 @@ import { FormattedMessage } from "react-intl"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import useModeration from "Hooks/useModeration"; import messages from "./messages"; diff --git a/src/Element/BlockList.tsx b/packages/app/src/Element/BlockList.tsx similarity index 100% rename from src/Element/BlockList.tsx rename to packages/app/src/Element/BlockList.tsx diff --git a/src/Element/Bookmarks.tsx b/packages/app/src/Element/Bookmarks.tsx similarity index 100% rename from src/Element/Bookmarks.tsx rename to packages/app/src/Element/Bookmarks.tsx diff --git a/src/Element/Collapsed.tsx b/packages/app/src/Element/Collapsed.tsx similarity index 100% rename from src/Element/Collapsed.tsx rename to packages/app/src/Element/Collapsed.tsx diff --git a/src/Element/Copy.css b/packages/app/src/Element/Copy.css similarity index 100% rename from src/Element/Copy.css rename to packages/app/src/Element/Copy.css diff --git a/src/Element/Copy.tsx b/packages/app/src/Element/Copy.tsx similarity index 100% rename from src/Element/Copy.tsx rename to packages/app/src/Element/Copy.tsx diff --git a/src/Element/DM.css b/packages/app/src/Element/DM.css similarity index 100% rename from src/Element/DM.css rename to packages/app/src/Element/DM.css diff --git a/src/Element/DM.tsx b/packages/app/src/Element/DM.tsx similarity index 95% rename from src/Element/DM.tsx rename to packages/app/src/Element/DM.tsx index fdf59a4c..3b802253 100644 --- a/src/Element/DM.tsx +++ b/packages/app/src/Element/DM.tsx @@ -5,12 +5,12 @@ import { useIntl } from "react-intl"; import { useInView } from "react-intersection-observer"; import useEventPublisher from "Feed/EventPublisher"; -import Event from "Nostr/Event"; +import { Event } from "@snort/nostr"; import NoteTime from "Element/NoteTime"; import Text from "Element/Text"; import { setLastReadDm } from "Pages/MessagesPage"; import { RootState } from "State/Store"; -import { HexKey, TaggedRawEvent } from "Nostr"; +import { HexKey, TaggedRawEvent } from "@snort/nostr"; import { incDmInteraction } from "State/Login"; import { unwrap } from "Util"; diff --git a/src/Element/FollowButton.css b/packages/app/src/Element/FollowButton.css similarity index 100% rename from src/Element/FollowButton.css rename to packages/app/src/Element/FollowButton.css diff --git a/src/Element/FollowButton.tsx b/packages/app/src/Element/FollowButton.tsx similarity index 96% rename from src/Element/FollowButton.tsx rename to packages/app/src/Element/FollowButton.tsx index 050234ad..93eaab98 100644 --- a/src/Element/FollowButton.tsx +++ b/packages/app/src/Element/FollowButton.tsx @@ -2,7 +2,7 @@ import "./FollowButton.css"; import { useSelector } from "react-redux"; import { FormattedMessage } from "react-intl"; import useEventPublisher from "Feed/EventPublisher"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { RootState } from "State/Store"; import { parseId } from "Util"; diff --git a/src/Element/FollowListBase.tsx b/packages/app/src/Element/FollowListBase.tsx similarity index 96% rename from src/Element/FollowListBase.tsx rename to packages/app/src/Element/FollowListBase.tsx index c742c42e..b043036d 100644 --- a/src/Element/FollowListBase.tsx +++ b/packages/app/src/Element/FollowListBase.tsx @@ -2,7 +2,7 @@ import { ReactNode } from "react"; import { FormattedMessage } from "react-intl"; import useEventPublisher from "Feed/EventPublisher"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import ProfilePreview from "Element/ProfilePreview"; import messages from "./messages"; diff --git a/src/Element/FollowersList.tsx b/packages/app/src/Element/FollowersList.tsx similarity index 90% rename from src/Element/FollowersList.tsx rename to packages/app/src/Element/FollowersList.tsx index 9e1eaaa7..ca19076a 100644 --- a/src/Element/FollowersList.tsx +++ b/packages/app/src/Element/FollowersList.tsx @@ -2,8 +2,8 @@ import { useMemo } from "react"; import { useIntl } from "react-intl"; import useFollowersFeed from "Feed/FollowersFeed"; -import { HexKey } from "Nostr"; -import EventKind from "Nostr/EventKind"; +import { HexKey } from "@snort/nostr"; +import { EventKind } from "@snort/nostr"; import FollowListBase from "Element/FollowListBase"; import messages from "./messages"; diff --git a/src/Element/FollowsList.tsx b/packages/app/src/Element/FollowsList.tsx similarity index 94% rename from src/Element/FollowsList.tsx rename to packages/app/src/Element/FollowsList.tsx index 42931845..39090733 100644 --- a/src/Element/FollowsList.tsx +++ b/packages/app/src/Element/FollowsList.tsx @@ -2,7 +2,7 @@ import { useMemo } from "react"; import { useIntl } from "react-intl"; import useFollowsFeed from "Feed/FollowsFeed"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import FollowListBase from "Element/FollowListBase"; import { getFollowers } from "Feed/FollowsFeed"; diff --git a/src/Element/FollowsYou.css b/packages/app/src/Element/FollowsYou.css similarity index 100% rename from src/Element/FollowsYou.css rename to packages/app/src/Element/FollowsYou.css diff --git a/src/Element/FollowsYou.tsx b/packages/app/src/Element/FollowsYou.tsx similarity index 95% rename from src/Element/FollowsYou.tsx rename to packages/app/src/Element/FollowsYou.tsx index 581dbda5..54432c69 100644 --- a/src/Element/FollowsYou.tsx +++ b/packages/app/src/Element/FollowsYou.tsx @@ -3,7 +3,7 @@ import { useMemo } from "react"; import { useSelector } from "react-redux"; import { useIntl } from "react-intl"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { RootState } from "State/Store"; import useFollowsFeed from "Feed/FollowsFeed"; import { getFollowers } from "Feed/FollowsFeed"; diff --git a/src/Element/Hashtag.css b/packages/app/src/Element/Hashtag.css similarity index 100% rename from src/Element/Hashtag.css rename to packages/app/src/Element/Hashtag.css diff --git a/src/Element/Hashtag.tsx b/packages/app/src/Element/Hashtag.tsx similarity index 100% rename from src/Element/Hashtag.tsx rename to packages/app/src/Element/Hashtag.tsx diff --git a/src/Element/HyperText.tsx b/packages/app/src/Element/HyperText.tsx similarity index 99% rename from src/Element/HyperText.tsx rename to packages/app/src/Element/HyperText.tsx index 78aada15..c959bfdd 100644 --- a/src/Element/HyperText.tsx +++ b/packages/app/src/Element/HyperText.tsx @@ -19,7 +19,7 @@ import MixCloudEmbed from "Element/MixCloudEmbed"; import SpotifyEmbed from "Element/SpotifyEmbed"; import TidalEmbed from "Element/TidalEmbed"; import { ProxyImg } from "Element/ProxyImg"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import TwitchEmbed from "./TwitchEmbed"; import AppleMusicEmbed from "./AppleMusicEmbed"; diff --git a/src/Element/IconButton.tsx b/packages/app/src/Element/IconButton.tsx similarity index 100% rename from src/Element/IconButton.tsx rename to packages/app/src/Element/IconButton.tsx diff --git a/src/Element/Invoice.css b/packages/app/src/Element/Invoice.css similarity index 100% rename from src/Element/Invoice.css rename to packages/app/src/Element/Invoice.css diff --git a/src/Element/Invoice.tsx b/packages/app/src/Element/Invoice.tsx similarity index 100% rename from src/Element/Invoice.tsx rename to packages/app/src/Element/Invoice.tsx diff --git a/src/Element/LoadMore.tsx b/packages/app/src/Element/LoadMore.tsx similarity index 100% rename from src/Element/LoadMore.tsx rename to packages/app/src/Element/LoadMore.tsx diff --git a/src/Element/LogoutButton.tsx b/packages/app/src/Element/LogoutButton.tsx similarity index 100% rename from src/Element/LogoutButton.tsx rename to packages/app/src/Element/LogoutButton.tsx diff --git a/src/Element/Mention.tsx b/packages/app/src/Element/Mention.tsx similarity index 94% rename from src/Element/Mention.tsx rename to packages/app/src/Element/Mention.tsx index 1c03115a..088e0baf 100644 --- a/src/Element/Mention.tsx +++ b/packages/app/src/Element/Mention.tsx @@ -1,7 +1,7 @@ import { useMemo } from "react"; import { Link } from "react-router-dom"; import { useUserProfile } from "Feed/ProfileFeed"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { hexToBech32, profileLink } from "Util"; export default function Mention({ pubkey }: { pubkey: HexKey }) { diff --git a/src/Element/MixCloudEmbed.tsx b/packages/app/src/Element/MixCloudEmbed.tsx similarity index 100% rename from src/Element/MixCloudEmbed.tsx rename to packages/app/src/Element/MixCloudEmbed.tsx diff --git a/src/Element/Modal.css b/packages/app/src/Element/Modal.css similarity index 100% rename from src/Element/Modal.css rename to packages/app/src/Element/Modal.css diff --git a/src/Element/Modal.tsx b/packages/app/src/Element/Modal.tsx similarity index 100% rename from src/Element/Modal.tsx rename to packages/app/src/Element/Modal.tsx diff --git a/src/Element/MuteButton.tsx b/packages/app/src/Element/MuteButton.tsx similarity index 94% rename from src/Element/MuteButton.tsx rename to packages/app/src/Element/MuteButton.tsx index 8bc55c91..7a8d05eb 100644 --- a/src/Element/MuteButton.tsx +++ b/packages/app/src/Element/MuteButton.tsx @@ -1,5 +1,5 @@ import { FormattedMessage } from "react-intl"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import useModeration from "Hooks/useModeration"; import messages from "./messages"; diff --git a/src/Element/MutedList.tsx b/packages/app/src/Element/MutedList.tsx similarity index 97% rename from src/Element/MutedList.tsx rename to packages/app/src/Element/MutedList.tsx index 8a700548..660e2e15 100644 --- a/src/Element/MutedList.tsx +++ b/packages/app/src/Element/MutedList.tsx @@ -1,6 +1,6 @@ import { useMemo } from "react"; import { FormattedMessage } from "react-intl"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import MuteButton from "Element/MuteButton"; import ProfilePreview from "Element/ProfilePreview"; import useMutedFeed, { getMuted } from "Feed/MuteList"; diff --git a/src/Element/Nip05.css b/packages/app/src/Element/Nip05.css similarity index 100% rename from src/Element/Nip05.css rename to packages/app/src/Element/Nip05.css diff --git a/src/Element/Nip05.tsx b/packages/app/src/Element/Nip05.tsx similarity index 98% rename from src/Element/Nip05.tsx rename to packages/app/src/Element/Nip05.tsx index d3b967ce..517859b7 100644 --- a/src/Element/Nip05.tsx +++ b/packages/app/src/Element/Nip05.tsx @@ -4,7 +4,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCircleCheck, faSpinner, faTriangleExclamation } from "@fortawesome/free-solid-svg-icons"; import "./Nip05.css"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; interface NostrJson { names: Record; diff --git a/src/Element/Nip5Service.tsx b/packages/app/src/Element/Nip5Service.tsx similarity index 99% rename from src/Element/Nip5Service.tsx rename to packages/app/src/Element/Nip5Service.tsx index 044ea94e..3269f72e 100644 --- a/src/Element/Nip5Service.tsx +++ b/packages/app/src/Element/Nip5Service.tsx @@ -20,7 +20,7 @@ import Copy from "Element/Copy"; import { useUserProfile } from "Feed/ProfileFeed"; import useEventPublisher from "Feed/EventPublisher"; import { debounce } from "Util"; -import { UserMetadata } from "Nostr"; +import { UserMetadata } from "@snort/nostr"; import messages from "./messages"; import { RootState } from "State/Store"; diff --git a/src/Element/Note.css b/packages/app/src/Element/Note.css similarity index 100% rename from src/Element/Note.css rename to packages/app/src/Element/Note.css diff --git a/src/Element/Note.tsx b/packages/app/src/Element/Note.tsx similarity index 98% rename from src/Element/Note.tsx rename to packages/app/src/Element/Note.tsx index aec98cca..65310853 100644 --- a/src/Element/Note.tsx +++ b/packages/app/src/Element/Note.tsx @@ -8,15 +8,14 @@ import { useIntl, FormattedMessage } from "react-intl"; import useEventPublisher from "Feed/EventPublisher"; import Bookmark from "Icons/Bookmark"; import Pin from "Icons/Pin"; -import { default as NEvent } from "Nostr/Event"; +import { Event as NEvent, EventKind } from "@snort/nostr"; import ProfileImage from "Element/ProfileImage"; import Text from "Element/Text"; import { eventLink, getReactions, hexToBech32 } from "Util"; import NoteFooter, { Translation } from "Element/NoteFooter"; import NoteTime from "Element/NoteTime"; -import EventKind from "Nostr/EventKind"; import { useUserProfiles } from "Feed/ProfileFeed"; -import { TaggedRawEvent, u256, HexKey } from "Nostr"; +import { TaggedRawEvent, u256, HexKey } from "@snort/nostr"; import useModeration from "Hooks/useModeration"; import { setPinned, setBookmarked } from "State/Login"; import type { RootState } from "State/Store"; diff --git a/src/Element/NoteCreator.css b/packages/app/src/Element/NoteCreator.css similarity index 100% rename from src/Element/NoteCreator.css rename to packages/app/src/Element/NoteCreator.css diff --git a/src/Element/NoteCreator.tsx b/packages/app/src/Element/NoteCreator.tsx similarity index 98% rename from src/Element/NoteCreator.tsx rename to packages/app/src/Element/NoteCreator.tsx index b28cbdbe..638067e5 100644 --- a/src/Element/NoteCreator.tsx +++ b/packages/app/src/Element/NoteCreator.tsx @@ -8,7 +8,7 @@ import { openFile } from "Util"; import Textarea from "Element/Textarea"; import Modal from "Element/Modal"; import ProfileImage from "Element/ProfileImage"; -import { default as NEvent } from "Nostr/Event"; +import { Event as NEvent } from "@snort/nostr"; import useFileUpload from "Upload"; import messages from "./messages"; diff --git a/src/Element/NoteFooter.tsx b/packages/app/src/Element/NoteFooter.tsx similarity index 98% rename from src/Element/NoteFooter.tsx rename to packages/app/src/Element/NoteFooter.tsx index 6f999f92..d8d0ff02 100644 --- a/src/Element/NoteFooter.tsx +++ b/packages/app/src/Element/NoteFooter.tsx @@ -26,10 +26,8 @@ import Reactions from "Element/Reactions"; import SendSats from "Element/SendSats"; import { parseZap, ZapsSummary } from "Element/Zap"; import { useUserProfile } from "Feed/ProfileFeed"; -import { default as NEvent } from "Nostr/Event"; +import { Event as NEvent, EventKind, TaggedRawEvent } from "@snort/nostr"; import { RootState } from "State/Store"; -import { HexKey, TaggedRawEvent } from "Nostr"; -import EventKind from "Nostr/EventKind"; import { UserPreferences, setPinned, setBookmarked } from "State/Login"; import useModeration from "Hooks/useModeration"; import { TranslateHost } from "Const"; diff --git a/src/Element/NoteGhost.tsx b/packages/app/src/Element/NoteGhost.tsx similarity index 100% rename from src/Element/NoteGhost.tsx rename to packages/app/src/Element/NoteGhost.tsx diff --git a/src/Element/NoteReaction.css b/packages/app/src/Element/NoteReaction.css similarity index 100% rename from src/Element/NoteReaction.css rename to packages/app/src/Element/NoteReaction.css diff --git a/src/Element/NoteReaction.tsx b/packages/app/src/Element/NoteReaction.tsx similarity index 93% rename from src/Element/NoteReaction.tsx rename to packages/app/src/Element/NoteReaction.tsx index 26028e82..7b4091ee 100644 --- a/src/Element/NoteReaction.tsx +++ b/packages/app/src/Element/NoteReaction.tsx @@ -2,13 +2,12 @@ import "./NoteReaction.css"; import { Link } from "react-router-dom"; import { useMemo } from "react"; -import EventKind from "Nostr/EventKind"; +import { EventKind, Event as NEvent } from "@snort/nostr"; import Note from "Element/Note"; import ProfileImage from "Element/ProfileImage"; -import { default as NEvent } from "Nostr/Event"; import { eventLink, hexToBech32 } from "Util"; import NoteTime from "Element/NoteTime"; -import { RawEvent, TaggedRawEvent } from "Nostr"; +import { RawEvent, TaggedRawEvent } from "@snort/nostr"; import useModeration from "Hooks/useModeration"; export interface NoteReactionProps { diff --git a/src/Element/NoteTime.tsx b/packages/app/src/Element/NoteTime.tsx similarity index 100% rename from src/Element/NoteTime.tsx rename to packages/app/src/Element/NoteTime.tsx diff --git a/src/Element/NoteToSelf.css b/packages/app/src/Element/NoteToSelf.css similarity index 100% rename from src/Element/NoteToSelf.css rename to packages/app/src/Element/NoteToSelf.css diff --git a/src/Element/NoteToSelf.tsx b/packages/app/src/Element/NoteToSelf.tsx similarity index 100% rename from src/Element/NoteToSelf.tsx rename to packages/app/src/Element/NoteToSelf.tsx diff --git a/src/Element/ProfileImage.css b/packages/app/src/Element/ProfileImage.css similarity index 100% rename from src/Element/ProfileImage.css rename to packages/app/src/Element/ProfileImage.css diff --git a/src/Element/ProfileImage.tsx b/packages/app/src/Element/ProfileImage.tsx similarity index 98% rename from src/Element/ProfileImage.tsx rename to packages/app/src/Element/ProfileImage.tsx index 16e3b6fe..88c525f8 100644 --- a/src/Element/ProfileImage.tsx +++ b/packages/app/src/Element/ProfileImage.tsx @@ -6,7 +6,7 @@ import { useUserProfile } from "Feed/ProfileFeed"; import { hexToBech32, profileLink } from "Util"; import Avatar from "Element/Avatar"; import Nip05 from "Element/Nip05"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { MetadataCache } from "State/Users"; export interface ProfileImageProps { diff --git a/src/Element/ProfilePreview.css b/packages/app/src/Element/ProfilePreview.css similarity index 100% rename from src/Element/ProfilePreview.css rename to packages/app/src/Element/ProfilePreview.css diff --git a/src/Element/ProfilePreview.tsx b/packages/app/src/Element/ProfilePreview.tsx similarity index 96% rename from src/Element/ProfilePreview.tsx rename to packages/app/src/Element/ProfilePreview.tsx index 69aba61d..badd9e59 100644 --- a/src/Element/ProfilePreview.tsx +++ b/packages/app/src/Element/ProfilePreview.tsx @@ -4,7 +4,7 @@ import { ReactNode } from "react"; import ProfileImage from "Element/ProfileImage"; import FollowButton from "Element/FollowButton"; import { useUserProfile } from "Feed/ProfileFeed"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { useInView } from "react-intersection-observer"; export interface ProfilePreviewProps { diff --git a/src/Element/ProxyImg.tsx b/packages/app/src/Element/ProxyImg.tsx similarity index 100% rename from src/Element/ProxyImg.tsx rename to packages/app/src/Element/ProxyImg.tsx diff --git a/src/Element/QrCode.tsx b/packages/app/src/Element/QrCode.tsx similarity index 100% rename from src/Element/QrCode.tsx rename to packages/app/src/Element/QrCode.tsx diff --git a/src/Element/Reactions.css b/packages/app/src/Element/Reactions.css similarity index 100% rename from src/Element/Reactions.css rename to packages/app/src/Element/Reactions.css diff --git a/src/Element/Reactions.tsx b/packages/app/src/Element/Reactions.tsx similarity index 98% rename from src/Element/Reactions.tsx rename to packages/app/src/Element/Reactions.tsx index 1599ab70..5d72e841 100644 --- a/src/Element/Reactions.tsx +++ b/packages/app/src/Element/Reactions.tsx @@ -3,7 +3,7 @@ import "./Reactions.css"; import { useState, useMemo, useEffect } from "react"; import { useIntl, FormattedMessage } from "react-intl"; -import { TaggedRawEvent } from "Nostr"; +import { TaggedRawEvent } from "@snort/nostr"; import { formatShort } from "Number"; import Dislike from "Icons/Dislike"; diff --git a/src/Element/Relay.css b/packages/app/src/Element/Relay.css similarity index 100% rename from src/Element/Relay.css rename to packages/app/src/Element/Relay.css diff --git a/src/Element/Relay.tsx b/packages/app/src/Element/Relay.tsx similarity index 98% rename from src/Element/Relay.tsx rename to packages/app/src/Element/Relay.tsx index 3fd138f8..2df36565 100644 --- a/src/Element/Relay.tsx +++ b/packages/app/src/Element/Relay.tsx @@ -15,7 +15,7 @@ import { useMemo } from "react"; import { useDispatch, useSelector } from "react-redux"; import { setRelays } from "State/Login"; import { RootState } from "State/Store"; -import { RelaySettings } from "Nostr/Connection"; +import { RelaySettings } from "@snort/nostr"; import messages from "./messages"; diff --git a/src/Element/RelaysMetadata.css b/packages/app/src/Element/RelaysMetadata.css similarity index 100% rename from src/Element/RelaysMetadata.css rename to packages/app/src/Element/RelaysMetadata.css diff --git a/src/Element/RelaysMetadata.tsx b/packages/app/src/Element/RelaysMetadata.tsx similarity index 93% rename from src/Element/RelaysMetadata.tsx rename to packages/app/src/Element/RelaysMetadata.tsx index 54ea5281..47a16aba 100644 --- a/src/Element/RelaysMetadata.tsx +++ b/packages/app/src/Element/RelaysMetadata.tsx @@ -2,7 +2,7 @@ import "./RelaysMetadata.css"; import Nostrich from "nostrich.webp"; import { useState } from "react"; -import { RelaySettings } from "Nostr"; +import { FullRelaySettings } from "@snort/nostr"; import Read from "Icons/Read"; import Write from "Icons/Write"; @@ -19,7 +19,7 @@ const RelayFavicon = ({ url }: { url: string }) => { }; interface RelaysMetadataProps { - relays: RelaySettings[]; + relays: FullRelaySettings[]; } const RelaysMetadata = ({ relays }: RelaysMetadataProps) => { diff --git a/src/Element/SendSats.css b/packages/app/src/Element/SendSats.css similarity index 100% rename from src/Element/SendSats.css rename to packages/app/src/Element/SendSats.css diff --git a/src/Element/SendSats.tsx b/packages/app/src/Element/SendSats.tsx similarity index 99% rename from src/Element/SendSats.tsx rename to packages/app/src/Element/SendSats.tsx index 8c4545a9..0ac4c874 100644 --- a/src/Element/SendSats.tsx +++ b/packages/app/src/Element/SendSats.tsx @@ -4,7 +4,7 @@ import { useIntl, FormattedMessage } from "react-intl"; import { formatShort } from "Number"; import { bech32ToText } from "Util"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import Check from "Icons/Check"; import Zap from "Icons/Zap"; import Close from "Icons/Close"; diff --git a/src/Element/ShowMore.css b/packages/app/src/Element/ShowMore.css similarity index 100% rename from src/Element/ShowMore.css rename to packages/app/src/Element/ShowMore.css diff --git a/src/Element/ShowMore.tsx b/packages/app/src/Element/ShowMore.tsx similarity index 100% rename from src/Element/ShowMore.tsx rename to packages/app/src/Element/ShowMore.tsx diff --git a/src/Element/Skeleton.css b/packages/app/src/Element/Skeleton.css similarity index 100% rename from src/Element/Skeleton.css rename to packages/app/src/Element/Skeleton.css diff --git a/src/Element/Skeleton.tsx b/packages/app/src/Element/Skeleton.tsx similarity index 100% rename from src/Element/Skeleton.tsx rename to packages/app/src/Element/Skeleton.tsx diff --git a/src/Element/SoundCloudEmded.tsx b/packages/app/src/Element/SoundCloudEmded.tsx similarity index 100% rename from src/Element/SoundCloudEmded.tsx rename to packages/app/src/Element/SoundCloudEmded.tsx diff --git a/src/Element/SpotifyEmbed.tsx b/packages/app/src/Element/SpotifyEmbed.tsx similarity index 100% rename from src/Element/SpotifyEmbed.tsx rename to packages/app/src/Element/SpotifyEmbed.tsx diff --git a/src/Element/Tabs.css b/packages/app/src/Element/Tabs.css similarity index 100% rename from src/Element/Tabs.css rename to packages/app/src/Element/Tabs.css diff --git a/src/Element/Tabs.tsx b/packages/app/src/Element/Tabs.tsx similarity index 100% rename from src/Element/Tabs.tsx rename to packages/app/src/Element/Tabs.tsx diff --git a/src/Element/Text.css b/packages/app/src/Element/Text.css similarity index 100% rename from src/Element/Text.css rename to packages/app/src/Element/Text.css diff --git a/src/Element/Text.tsx b/packages/app/src/Element/Text.tsx similarity index 98% rename from src/Element/Text.tsx rename to packages/app/src/Element/Text.tsx index dafcc720..15924eca 100644 --- a/src/Element/Text.tsx +++ b/packages/app/src/Element/Text.tsx @@ -9,11 +9,11 @@ import { eventLink, hexToBech32, unwrap } from "Util"; import Invoice from "Element/Invoice"; import Hashtag from "Element/Hashtag"; -import Tag from "Nostr/Tag"; +import { Tag } from "@snort/nostr"; import { MetadataCache } from "State/Users"; import Mention from "Element/Mention"; import HyperText from "Element/HyperText"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import * as unist from "unist"; export type Fragment = string | React.ReactNode; diff --git a/src/Element/Textarea.css b/packages/app/src/Element/Textarea.css similarity index 100% rename from src/Element/Textarea.css rename to packages/app/src/Element/Textarea.css diff --git a/src/Element/Textarea.tsx b/packages/app/src/Element/Textarea.tsx similarity index 100% rename from src/Element/Textarea.tsx rename to packages/app/src/Element/Textarea.tsx diff --git a/src/Element/Thread.css b/packages/app/src/Element/Thread.css similarity index 100% rename from src/Element/Thread.css rename to packages/app/src/Element/Thread.css diff --git a/src/Element/Thread.tsx b/packages/app/src/Element/Thread.tsx similarity index 98% rename from src/Element/Thread.tsx rename to packages/app/src/Element/Thread.tsx index 547a451c..2ca02f49 100644 --- a/src/Element/Thread.tsx +++ b/packages/app/src/Element/Thread.tsx @@ -3,9 +3,8 @@ import { useMemo, useState, useEffect, ReactNode } from "react"; import { useIntl, FormattedMessage } from "react-intl"; import { useNavigate, useLocation, Link } from "react-router-dom"; -import { TaggedRawEvent, u256, HexKey } from "Nostr"; -import { default as NEvent } from "Nostr/Event"; -import EventKind from "Nostr/EventKind"; +import { TaggedRawEvent, u256, HexKey } from "@snort/nostr"; +import { Event as NEvent, EventKind } from "@snort/nostr"; import { eventLink, bech32ToHex, unwrap } from "Util"; import BackButton from "Element/BackButton"; import Note from "Element/Note"; diff --git a/src/Element/TidalEmbed.tsx b/packages/app/src/Element/TidalEmbed.tsx similarity index 100% rename from src/Element/TidalEmbed.tsx rename to packages/app/src/Element/TidalEmbed.tsx diff --git a/src/Element/Timeline.css b/packages/app/src/Element/Timeline.css similarity index 100% rename from src/Element/Timeline.css rename to packages/app/src/Element/Timeline.css diff --git a/src/Element/Timeline.tsx b/packages/app/src/Element/Timeline.tsx similarity index 97% rename from src/Element/Timeline.tsx rename to packages/app/src/Element/Timeline.tsx index 4cc114c7..8c15e228 100644 --- a/src/Element/Timeline.tsx +++ b/packages/app/src/Element/Timeline.tsx @@ -5,8 +5,8 @@ import { faForward } from "@fortawesome/free-solid-svg-icons"; import { useCallback, useMemo } from "react"; import useTimelineFeed, { TimelineSubject } from "Feed/TimelineFeed"; -import { TaggedRawEvent } from "Nostr"; -import EventKind from "Nostr/EventKind"; +import { TaggedRawEvent } from "@snort/nostr"; +import { EventKind } from "@snort/nostr"; import LoadMore from "Element/LoadMore"; import Zap, { parseZap } from "Element/Zap"; import Note from "Element/Note"; diff --git a/src/Element/TwitchEmbed.tsx b/packages/app/src/Element/TwitchEmbed.tsx similarity index 100% rename from src/Element/TwitchEmbed.tsx rename to packages/app/src/Element/TwitchEmbed.tsx diff --git a/src/Element/UnreadCount.css b/packages/app/src/Element/UnreadCount.css similarity index 100% rename from src/Element/UnreadCount.css rename to packages/app/src/Element/UnreadCount.css diff --git a/src/Element/UnreadCount.tsx b/packages/app/src/Element/UnreadCount.tsx similarity index 100% rename from src/Element/UnreadCount.tsx rename to packages/app/src/Element/UnreadCount.tsx diff --git a/src/Element/Zap.css b/packages/app/src/Element/Zap.css similarity index 100% rename from src/Element/Zap.css rename to packages/app/src/Element/Zap.css diff --git a/src/Element/Zap.tsx b/packages/app/src/Element/Zap.tsx similarity index 97% rename from src/Element/Zap.tsx rename to packages/app/src/Element/Zap.tsx index 15d99049..61443400 100644 --- a/src/Element/Zap.tsx +++ b/packages/app/src/Element/Zap.tsx @@ -6,8 +6,8 @@ import { decode as invoiceDecode } from "light-bolt11-decoder"; import { bytesToHex } from "@noble/hashes/utils"; import { sha256, unwrap } from "Util"; import { formatShort } from "Number"; -import { HexKey, TaggedRawEvent } from "Nostr"; -import Event from "Nostr/Event"; +import { HexKey, TaggedRawEvent } from "@snort/nostr"; +import { Event } from "@snort/nostr"; import Text from "Element/Text"; import ProfileImage from "Element/ProfileImage"; import { RootState } from "State/Store"; diff --git a/src/Element/ZapButton.css b/packages/app/src/Element/ZapButton.css similarity index 100% rename from src/Element/ZapButton.css rename to packages/app/src/Element/ZapButton.css diff --git a/src/Element/ZapButton.tsx b/packages/app/src/Element/ZapButton.tsx similarity index 95% rename from src/Element/ZapButton.tsx rename to packages/app/src/Element/ZapButton.tsx index 20ed7246..5341647e 100644 --- a/src/Element/ZapButton.tsx +++ b/packages/app/src/Element/ZapButton.tsx @@ -3,7 +3,7 @@ import { faBolt } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useState } from "react"; import { useUserProfile } from "Feed/ProfileFeed"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import SendSats from "Element/SendSats"; const ZapButton = ({ pubkey, svc }: { pubkey: HexKey; svc?: string }) => { diff --git a/src/Element/messages.ts b/packages/app/src/Element/messages.ts similarity index 100% rename from src/Element/messages.ts rename to packages/app/src/Element/messages.ts diff --git a/src/Feed/BookmarkFeed.tsx b/packages/app/src/Feed/BookmarkFeed.tsx similarity index 100% rename from src/Feed/BookmarkFeed.tsx rename to packages/app/src/Feed/BookmarkFeed.tsx diff --git a/src/Feed/EventPublisher.ts b/packages/app/src/Feed/EventPublisher.ts similarity index 97% rename from src/Feed/EventPublisher.ts rename to packages/app/src/Feed/EventPublisher.ts index 5c0d24b9..d79051c9 100644 --- a/src/Feed/EventPublisher.ts +++ b/packages/app/src/Feed/EventPublisher.ts @@ -1,15 +1,11 @@ import { useSelector } from "react-redux"; -import { TaggedRawEvent } from "Nostr"; -import { System } from "Nostr/System"; -import { default as NEvent } from "Nostr/Event"; -import EventKind from "Nostr/EventKind"; -import Tag from "Nostr/Tag"; +import { TaggedRawEvent } from "@snort/nostr"; +import { EventKind, Tag, Event as NEvent, System, RelaySettings } from "@snort/nostr"; import { RootState } from "State/Store"; -import { HexKey, RawEvent, u256, UserMetadata, Lists } from "Nostr"; +import { HexKey, RawEvent, u256, UserMetadata, Lists } from "@snort/nostr"; import { bech32ToHex, unwrap } from "Util"; import { DefaultRelays, HashtagRegex } from "Const"; -import { RelaySettings } from "Nostr/Connection"; declare global { interface Window { diff --git a/src/Feed/FollowersFeed.ts b/packages/app/src/Feed/FollowersFeed.ts similarity index 76% rename from src/Feed/FollowersFeed.ts rename to packages/app/src/Feed/FollowersFeed.ts index ebb28806..5e80b6c3 100644 --- a/src/Feed/FollowersFeed.ts +++ b/packages/app/src/Feed/FollowersFeed.ts @@ -1,7 +1,6 @@ import { useMemo } from "react"; -import { HexKey } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { HexKey } from "@snort/nostr"; +import { EventKind, Subscriptions } from "@snort/nostr"; import useSubscription from "Feed/Subscription"; export default function useFollowersFeed(pubkey: HexKey) { diff --git a/src/Feed/FollowsFeed.ts b/packages/app/src/Feed/FollowsFeed.ts similarity index 84% rename from src/Feed/FollowsFeed.ts rename to packages/app/src/Feed/FollowsFeed.ts index b393fbeb..97e14585 100644 --- a/src/Feed/FollowsFeed.ts +++ b/packages/app/src/Feed/FollowsFeed.ts @@ -1,7 +1,6 @@ import { useMemo } from "react"; -import { HexKey } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { HexKey } from "@snort/nostr"; +import { EventKind, Subscriptions } from "@snort/nostr"; import useSubscription, { NoteStore } from "Feed/Subscription"; export default function useFollowsFeed(pubkey: HexKey) { diff --git a/src/Feed/ImgProxy.ts b/packages/app/src/Feed/ImgProxy.ts similarity index 100% rename from src/Feed/ImgProxy.ts rename to packages/app/src/Feed/ImgProxy.ts diff --git a/src/Feed/LoginFeed.ts b/packages/app/src/Feed/LoginFeed.ts similarity index 97% rename from src/Feed/LoginFeed.ts rename to packages/app/src/Feed/LoginFeed.ts index 59bfe021..00f4bede 100644 --- a/src/Feed/LoginFeed.ts +++ b/packages/app/src/Feed/LoginFeed.ts @@ -3,10 +3,8 @@ import { useDispatch, useSelector } from "react-redux"; import { getNewest } from "Util"; import { makeNotification } from "Notifications"; -import { TaggedRawEvent, HexKey, Lists } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import Event from "Nostr/Event"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { TaggedRawEvent, HexKey, Lists } from "@snort/nostr"; +import { Event, EventKind, Subscriptions } from "@snort/nostr"; import { addDirectMessage, setFollows, diff --git a/src/Feed/MuteList.ts b/packages/app/src/Feed/MuteList.ts similarity index 87% rename from src/Feed/MuteList.ts rename to packages/app/src/Feed/MuteList.ts index d24dbba4..43d3b20b 100644 --- a/src/Feed/MuteList.ts +++ b/packages/app/src/Feed/MuteList.ts @@ -1,9 +1,8 @@ import { useMemo } from "react"; import { getNewest } from "Util"; -import { HexKey, TaggedRawEvent, Lists } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { HexKey, TaggedRawEvent, Lists } from "@snort/nostr"; +import { EventKind, Subscriptions } from "@snort/nostr"; import useSubscription, { NoteStore } from "Feed/Subscription"; export default function useMutedFeed(pubkey: HexKey) { diff --git a/src/Feed/PinnedFeed.tsx b/packages/app/src/Feed/PinnedFeed.tsx similarity index 100% rename from src/Feed/PinnedFeed.tsx rename to packages/app/src/Feed/PinnedFeed.tsx diff --git a/src/Feed/ProfileFeed.ts b/packages/app/src/Feed/ProfileFeed.ts similarity index 90% rename from src/Feed/ProfileFeed.ts rename to packages/app/src/Feed/ProfileFeed.ts index d05109ef..ea544596 100644 --- a/src/Feed/ProfileFeed.ts +++ b/packages/app/src/Feed/ProfileFeed.ts @@ -1,8 +1,7 @@ import { useEffect } from "react"; import { MetadataCache } from "State/Users"; import { useKey, useKeys } from "State/Users/Hooks"; -import { HexKey } from "Nostr"; -import { System } from "Nostr/System"; +import { System, HexKey } from "@snort/nostr"; export function useUserProfile(pubKey?: HexKey): MetadataCache | undefined { const users = useKey(pubKey); diff --git a/src/Feed/RelayState.ts b/packages/app/src/Feed/RelayState.ts similarity index 81% rename from src/Feed/RelayState.ts rename to packages/app/src/Feed/RelayState.ts index 70141c59..28cb3ff3 100644 --- a/src/Feed/RelayState.ts +++ b/packages/app/src/Feed/RelayState.ts @@ -1,6 +1,5 @@ import { useSyncExternalStore } from "react"; -import { System } from "Nostr/System"; -import { StateSnapshot } from "Nostr/Connection"; +import { System, StateSnapshot } from "@snort/nostr"; const noop = () => { return () => undefined; diff --git a/src/Feed/RelaysFeed.tsx b/packages/app/src/Feed/RelaysFeed.tsx similarity index 84% rename from src/Feed/RelaysFeed.tsx rename to packages/app/src/Feed/RelaysFeed.tsx index eb6d1221..a54e7c43 100644 --- a/src/Feed/RelaysFeed.tsx +++ b/packages/app/src/Feed/RelaysFeed.tsx @@ -1,7 +1,6 @@ import { useMemo } from "react"; -import { HexKey, RelaySettings } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { HexKey, FullRelaySettings } from "@snort/nostr"; +import { EventKind, Subscriptions } from "@snort/nostr"; import useSubscription from "./Subscription"; export default function useRelaysFeed(pubkey: HexKey) { @@ -32,5 +31,5 @@ export default function useRelaysFeed(pubkey: HexKey) { ]; } return rs; - }, [] as RelaySettings[]); + }, [] as FullRelaySettings[]); } diff --git a/src/Feed/Subscription.ts b/packages/app/src/Feed/Subscription.ts similarity index 97% rename from src/Feed/Subscription.ts rename to packages/app/src/Feed/Subscription.ts index 880aba8c..e73c0814 100644 --- a/src/Feed/Subscription.ts +++ b/packages/app/src/Feed/Subscription.ts @@ -1,7 +1,6 @@ import { useEffect, useMemo, useReducer, useState } from "react"; -import { System } from "Nostr/System"; -import { TaggedRawEvent } from "Nostr"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { TaggedRawEvent } from "@snort/nostr"; +import { System, Subscriptions } from "@snort/nostr"; import { debounce, unwrap } from "Util"; import { db } from "Db"; diff --git a/src/Feed/ThreadFeed.ts b/packages/app/src/Feed/ThreadFeed.ts similarity index 93% rename from src/Feed/ThreadFeed.ts rename to packages/app/src/Feed/ThreadFeed.ts index db78a248..1a0291f0 100644 --- a/src/Feed/ThreadFeed.ts +++ b/packages/app/src/Feed/ThreadFeed.ts @@ -1,7 +1,6 @@ import { useEffect, useMemo, useState } from "react"; -import { u256 } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { u256 } from "@snort/nostr"; +import { EventKind, Subscriptions } from "@snort/nostr"; import useSubscription from "Feed/Subscription"; import { useSelector } from "react-redux"; import { RootState } from "State/Store"; diff --git a/src/Feed/TimelineFeed.ts b/packages/app/src/Feed/TimelineFeed.ts similarity index 97% rename from src/Feed/TimelineFeed.ts rename to packages/app/src/Feed/TimelineFeed.ts index 582db175..a52f5b47 100644 --- a/src/Feed/TimelineFeed.ts +++ b/packages/app/src/Feed/TimelineFeed.ts @@ -1,7 +1,6 @@ import { useCallback, useEffect, useMemo, useState } from "react"; -import { u256 } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { u256 } from "@snort/nostr"; +import { EventKind, Subscriptions } from "@snort/nostr"; import { unixNow, unwrap } from "Util"; import useSubscription from "Feed/Subscription"; import { useSelector } from "react-redux"; diff --git a/src/Feed/ZapsFeed.ts b/packages/app/src/Feed/ZapsFeed.ts similarity index 76% rename from src/Feed/ZapsFeed.ts rename to packages/app/src/Feed/ZapsFeed.ts index 48801682..1de836e6 100644 --- a/src/Feed/ZapsFeed.ts +++ b/packages/app/src/Feed/ZapsFeed.ts @@ -1,7 +1,6 @@ import { useMemo } from "react"; -import { HexKey } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import { Subscriptions } from "Nostr/Subscriptions"; +import { HexKey } from "@snort/nostr"; +import { EventKind, Subscriptions } from "@snort/nostr"; import useSubscription from "./Subscription"; export default function useZapsFeed(pubkey: HexKey) { diff --git a/src/Feed/useNotelistSubscription.ts b/packages/app/src/Feed/useNotelistSubscription.ts similarity index 100% rename from src/Feed/useNotelistSubscription.ts rename to packages/app/src/Feed/useNotelistSubscription.ts diff --git a/src/Hooks/useHorizontalScroll.tsx b/packages/app/src/Hooks/useHorizontalScroll.tsx similarity index 100% rename from src/Hooks/useHorizontalScroll.tsx rename to packages/app/src/Hooks/useHorizontalScroll.tsx diff --git a/src/Hooks/useModeration.tsx b/packages/app/src/Hooks/useModeration.tsx similarity index 98% rename from src/Hooks/useModeration.tsx rename to packages/app/src/Hooks/useModeration.tsx index 9640f3ff..92a10eee 100644 --- a/src/Hooks/useModeration.tsx +++ b/packages/app/src/Hooks/useModeration.tsx @@ -1,7 +1,7 @@ import { useSelector, useDispatch } from "react-redux"; import type { RootState } from "State/Store"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import useEventPublisher from "Feed/EventPublisher"; import { setMuted, setBlocked } from "State/Login"; diff --git a/src/Hooks/useWebln.ts b/packages/app/src/Hooks/useWebln.ts similarity index 100% rename from src/Hooks/useWebln.ts rename to packages/app/src/Hooks/useWebln.ts diff --git a/src/Icons/ArrowBack.tsx b/packages/app/src/Icons/ArrowBack.tsx similarity index 100% rename from src/Icons/ArrowBack.tsx rename to packages/app/src/Icons/ArrowBack.tsx diff --git a/src/Icons/ArrowFront.tsx b/packages/app/src/Icons/ArrowFront.tsx similarity index 100% rename from src/Icons/ArrowFront.tsx rename to packages/app/src/Icons/ArrowFront.tsx diff --git a/src/Icons/Attachment.tsx b/packages/app/src/Icons/Attachment.tsx similarity index 100% rename from src/Icons/Attachment.tsx rename to packages/app/src/Icons/Attachment.tsx diff --git a/src/Icons/Bell.tsx b/packages/app/src/Icons/Bell.tsx similarity index 100% rename from src/Icons/Bell.tsx rename to packages/app/src/Icons/Bell.tsx diff --git a/src/Icons/Block.tsx b/packages/app/src/Icons/Block.tsx similarity index 100% rename from src/Icons/Block.tsx rename to packages/app/src/Icons/Block.tsx diff --git a/src/Icons/Bookmark.tsx b/packages/app/src/Icons/Bookmark.tsx similarity index 100% rename from src/Icons/Bookmark.tsx rename to packages/app/src/Icons/Bookmark.tsx diff --git a/src/Icons/Check.tsx b/packages/app/src/Icons/Check.tsx similarity index 100% rename from src/Icons/Check.tsx rename to packages/app/src/Icons/Check.tsx diff --git a/src/Icons/ChevronDown.tsx b/packages/app/src/Icons/ChevronDown.tsx similarity index 100% rename from src/Icons/ChevronDown.tsx rename to packages/app/src/Icons/ChevronDown.tsx diff --git a/src/Icons/Close.tsx b/packages/app/src/Icons/Close.tsx similarity index 100% rename from src/Icons/Close.tsx rename to packages/app/src/Icons/Close.tsx diff --git a/src/Icons/Copy.tsx b/packages/app/src/Icons/Copy.tsx similarity index 100% rename from src/Icons/Copy.tsx rename to packages/app/src/Icons/Copy.tsx diff --git a/src/Icons/Dislike.tsx b/packages/app/src/Icons/Dislike.tsx similarity index 100% rename from src/Icons/Dislike.tsx rename to packages/app/src/Icons/Dislike.tsx diff --git a/src/Icons/Dots.tsx b/packages/app/src/Icons/Dots.tsx similarity index 100% rename from src/Icons/Dots.tsx rename to packages/app/src/Icons/Dots.tsx diff --git a/src/Icons/Envelope.tsx b/packages/app/src/Icons/Envelope.tsx similarity index 100% rename from src/Icons/Envelope.tsx rename to packages/app/src/Icons/Envelope.tsx diff --git a/src/Icons/Gear.tsx b/packages/app/src/Icons/Gear.tsx similarity index 100% rename from src/Icons/Gear.tsx rename to packages/app/src/Icons/Gear.tsx diff --git a/src/Icons/Heart.tsx b/packages/app/src/Icons/Heart.tsx similarity index 100% rename from src/Icons/Heart.tsx rename to packages/app/src/Icons/Heart.tsx diff --git a/src/Icons/IconProps.ts b/packages/app/src/Icons/IconProps.ts similarity index 100% rename from src/Icons/IconProps.ts rename to packages/app/src/Icons/IconProps.ts diff --git a/src/Icons/Index.css b/packages/app/src/Icons/Index.css similarity index 100% rename from src/Icons/Index.css rename to packages/app/src/Icons/Index.css diff --git a/src/Icons/Json.tsx b/packages/app/src/Icons/Json.tsx similarity index 100% rename from src/Icons/Json.tsx rename to packages/app/src/Icons/Json.tsx diff --git a/src/Icons/Link.tsx b/packages/app/src/Icons/Link.tsx similarity index 100% rename from src/Icons/Link.tsx rename to packages/app/src/Icons/Link.tsx diff --git a/src/Icons/Logout.tsx b/packages/app/src/Icons/Logout.tsx similarity index 100% rename from src/Icons/Logout.tsx rename to packages/app/src/Icons/Logout.tsx diff --git a/src/Icons/Mute.tsx b/packages/app/src/Icons/Mute.tsx similarity index 100% rename from src/Icons/Mute.tsx rename to packages/app/src/Icons/Mute.tsx diff --git a/src/Icons/Pin.tsx b/packages/app/src/Icons/Pin.tsx similarity index 100% rename from src/Icons/Pin.tsx rename to packages/app/src/Icons/Pin.tsx diff --git a/src/Icons/Plus.tsx b/packages/app/src/Icons/Plus.tsx similarity index 100% rename from src/Icons/Plus.tsx rename to packages/app/src/Icons/Plus.tsx diff --git a/src/Icons/Profile.tsx b/packages/app/src/Icons/Profile.tsx similarity index 100% rename from src/Icons/Profile.tsx rename to packages/app/src/Icons/Profile.tsx diff --git a/src/Icons/Qr.tsx b/packages/app/src/Icons/Qr.tsx similarity index 100% rename from src/Icons/Qr.tsx rename to packages/app/src/Icons/Qr.tsx diff --git a/src/Icons/Read.tsx b/packages/app/src/Icons/Read.tsx similarity index 100% rename from src/Icons/Read.tsx rename to packages/app/src/Icons/Read.tsx diff --git a/src/Icons/Relay.tsx b/packages/app/src/Icons/Relay.tsx similarity index 100% rename from src/Icons/Relay.tsx rename to packages/app/src/Icons/Relay.tsx diff --git a/src/Icons/Reply.tsx b/packages/app/src/Icons/Reply.tsx similarity index 100% rename from src/Icons/Reply.tsx rename to packages/app/src/Icons/Reply.tsx diff --git a/src/Icons/Repost.tsx b/packages/app/src/Icons/Repost.tsx similarity index 100% rename from src/Icons/Repost.tsx rename to packages/app/src/Icons/Repost.tsx diff --git a/src/Icons/Search.tsx b/packages/app/src/Icons/Search.tsx similarity index 100% rename from src/Icons/Search.tsx rename to packages/app/src/Icons/Search.tsx diff --git a/src/Icons/Share.tsx b/packages/app/src/Icons/Share.tsx similarity index 100% rename from src/Icons/Share.tsx rename to packages/app/src/Icons/Share.tsx diff --git a/src/Icons/Translate.tsx b/packages/app/src/Icons/Translate.tsx similarity index 100% rename from src/Icons/Translate.tsx rename to packages/app/src/Icons/Translate.tsx diff --git a/src/Icons/Trash.tsx b/packages/app/src/Icons/Trash.tsx similarity index 100% rename from src/Icons/Trash.tsx rename to packages/app/src/Icons/Trash.tsx diff --git a/src/Icons/Write.tsx b/packages/app/src/Icons/Write.tsx similarity index 100% rename from src/Icons/Write.tsx rename to packages/app/src/Icons/Write.tsx diff --git a/src/Icons/Zap.tsx b/packages/app/src/Icons/Zap.tsx similarity index 100% rename from src/Icons/Zap.tsx rename to packages/app/src/Icons/Zap.tsx diff --git a/src/Icons/ZapCircle.tsx b/packages/app/src/Icons/ZapCircle.tsx similarity index 100% rename from src/Icons/ZapCircle.tsx rename to packages/app/src/Icons/ZapCircle.tsx diff --git a/src/IntlProvider.tsx b/packages/app/src/IntlProvider.tsx similarity index 72% rename from src/IntlProvider.tsx rename to packages/app/src/IntlProvider.tsx index 4053cba6..59eab673 100644 --- a/src/IntlProvider.tsx +++ b/packages/app/src/IntlProvider.tsx @@ -1,13 +1,13 @@ import { type ReactNode } from "react"; import { IntlProvider as ReactIntlProvider } from "react-intl"; -import enMessages from "translations/en.json"; -import esMessages from "translations/es.json"; -import zhMessages from "translations/zh.json"; -import jaMessages from "translations/ja.json"; -import frMessages from "translations/fr.json"; -import huMessages from "translations/hu.json"; -import idMessages from "translations/id.json"; -import arMessages from "translations/ar.json"; +import enMessages from "translations/en"; +import esMessages from "translations/es"; +import zhMessages from "translations/zh"; +import jaMessages from "translations/ja"; +import frMessages from "translations/fr"; +import huMessages from "translations/hu"; +import idMessages from "translations/id"; +import arMessages from "translations/ar"; const DEFAULT_LOCALE = "en-US"; diff --git a/src/Nip05/ServiceProvider.ts b/packages/app/src/Nip05/ServiceProvider.ts similarity index 100% rename from src/Nip05/ServiceProvider.ts rename to packages/app/src/Nip05/ServiceProvider.ts diff --git a/src/Notifications.ts b/packages/app/src/Notifications.ts similarity index 94% rename from src/Notifications.ts rename to packages/app/src/Notifications.ts index 1a55599e..1c1ef3ff 100644 --- a/src/Notifications.ts +++ b/packages/app/src/Notifications.ts @@ -1,7 +1,7 @@ import Nostrich from "nostrich.webp"; -import { TaggedRawEvent } from "Nostr"; -import EventKind from "Nostr/EventKind"; +import { TaggedRawEvent } from "@snort/nostr"; +import { EventKind } from "@snort/nostr"; import type { NotificationRequest } from "State/Login"; import { MetadataCache, UsersDb } from "State/Users"; import { getDisplayName } from "Element/ProfileImage"; diff --git a/src/Number.ts b/packages/app/src/Number.ts similarity index 100% rename from src/Number.ts rename to packages/app/src/Number.ts diff --git a/src/Pages/ChatPage.css b/packages/app/src/Pages/ChatPage.css similarity index 100% rename from src/Pages/ChatPage.css rename to packages/app/src/Pages/ChatPage.css diff --git a/src/Pages/ChatPage.tsx b/packages/app/src/Pages/ChatPage.tsx similarity index 98% rename from src/Pages/ChatPage.tsx rename to packages/app/src/Pages/ChatPage.tsx index 43844249..05a014ed 100644 --- a/src/Pages/ChatPage.tsx +++ b/packages/app/src/Pages/ChatPage.tsx @@ -8,7 +8,7 @@ import { bech32ToHex } from "Util"; import useEventPublisher from "Feed/EventPublisher"; import DM from "Element/DM"; -import { TaggedRawEvent } from "Nostr"; +import { TaggedRawEvent } from "@snort/nostr"; import { dmsInChat, isToSelf } from "Pages/MessagesPage"; import NoteToSelf from "Element/NoteToSelf"; import { RootState } from "State/Store"; diff --git a/src/Pages/DonatePage.tsx b/packages/app/src/Pages/DonatePage.tsx similarity index 99% rename from src/Pages/DonatePage.tsx rename to packages/app/src/Pages/DonatePage.tsx index a90a046d..4ee57aa2 100644 --- a/src/Pages/DonatePage.tsx +++ b/packages/app/src/Pages/DonatePage.tsx @@ -1,7 +1,7 @@ import { ApiHost, KieranPubKey, SnortPubKey } from "Const"; import ProfilePreview from "Element/ProfilePreview"; import ZapButton from "Element/ZapButton"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { useEffect, useState } from "react"; import { FormattedMessage } from "react-intl"; import { bech32ToHex } from "Util"; diff --git a/src/Pages/ErrorPage.tsx b/packages/app/src/Pages/ErrorPage.tsx similarity index 100% rename from src/Pages/ErrorPage.tsx rename to packages/app/src/Pages/ErrorPage.tsx diff --git a/src/Pages/EventPage.tsx b/packages/app/src/Pages/EventPage.tsx similarity index 100% rename from src/Pages/EventPage.tsx rename to packages/app/src/Pages/EventPage.tsx diff --git a/src/Pages/HashTagsPage.tsx b/packages/app/src/Pages/HashTagsPage.tsx similarity index 100% rename from src/Pages/HashTagsPage.tsx rename to packages/app/src/Pages/HashTagsPage.tsx diff --git a/src/Pages/HelpPage.tsx b/packages/app/src/Pages/HelpPage.tsx similarity index 100% rename from src/Pages/HelpPage.tsx rename to packages/app/src/Pages/HelpPage.tsx diff --git a/src/Pages/Layout.css b/packages/app/src/Pages/Layout.css similarity index 100% rename from src/Pages/Layout.css rename to packages/app/src/Pages/Layout.css diff --git a/src/Pages/Layout.tsx b/packages/app/src/Pages/Layout.tsx similarity index 98% rename from src/Pages/Layout.tsx rename to packages/app/src/Pages/Layout.tsx index 34d5abc2..6c2655c9 100644 --- a/src/Pages/Layout.tsx +++ b/packages/app/src/Pages/Layout.tsx @@ -9,7 +9,7 @@ import Bell from "Icons/Bell"; import Search from "Icons/Search"; import { RootState } from "State/Store"; import { init, setRelays } from "State/Login"; -import { System } from "Nostr/System"; +import { System } from "@snort/nostr"; import ProfileImage from "Element/ProfileImage"; import useLoginFeed from "Feed/LoginFeed"; import { totalUnread } from "Pages/MessagesPage"; @@ -21,7 +21,7 @@ import { db } from "Db"; import { bech32ToHex } from "Util"; import { NoteCreator } from "Element/NoteCreator"; import Plus from "Icons/Plus"; -import { RelaySettings } from "Nostr/Connection"; +import { RelaySettings } from "@snort/nostr"; import { FormattedMessage } from "react-intl"; import messages from "./messages"; diff --git a/src/Pages/Login.css b/packages/app/src/Pages/Login.css similarity index 100% rename from src/Pages/Login.css rename to packages/app/src/Pages/Login.css diff --git a/src/Pages/Login.tsx b/packages/app/src/Pages/Login.tsx similarity index 99% rename from src/Pages/Login.tsx rename to packages/app/src/Pages/Login.tsx index 34632cd6..44169a09 100644 --- a/src/Pages/Login.tsx +++ b/packages/app/src/Pages/Login.tsx @@ -10,7 +10,7 @@ import { RootState } from "State/Store"; import { setPrivateKey, setPublicKey, setRelays, setGeneratedPrivateKey } from "State/Login"; import { DefaultRelays, EmailRegex } from "Const"; import { bech32ToHex, unwrap } from "Util"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import ZapButton from "Element/ZapButton"; // import useImgProxy from "Feed/ImgProxy"; diff --git a/src/Pages/MessagesPage.tsx b/packages/app/src/Pages/MessagesPage.tsx similarity index 98% rename from src/Pages/MessagesPage.tsx rename to packages/app/src/Pages/MessagesPage.tsx index 074a8b3a..bc2423cf 100644 --- a/src/Pages/MessagesPage.tsx +++ b/packages/app/src/Pages/MessagesPage.tsx @@ -2,7 +2,7 @@ import { useMemo } from "react"; import { FormattedMessage } from "react-intl"; import { useDispatch, useSelector } from "react-redux"; -import { HexKey, RawEvent } from "Nostr"; +import { HexKey, RawEvent } from "@snort/nostr"; import UnreadCount from "Element/UnreadCount"; import ProfileImage from "Element/ProfileImage"; import { hexToBech32 } from "../Util"; diff --git a/src/Pages/NostrLinkHandler.tsx b/packages/app/src/Pages/NostrLinkHandler.tsx similarity index 100% rename from src/Pages/NostrLinkHandler.tsx rename to packages/app/src/Pages/NostrLinkHandler.tsx diff --git a/src/Pages/Notifications.tsx b/packages/app/src/Pages/Notifications.tsx similarity index 95% rename from src/Pages/Notifications.tsx rename to packages/app/src/Pages/Notifications.tsx index be216a99..b7110989 100644 --- a/src/Pages/Notifications.tsx +++ b/packages/app/src/Pages/Notifications.tsx @@ -1,6 +1,6 @@ import { useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { markNotificationsRead } from "State/Login"; import { RootState } from "State/Store"; import Timeline from "Element/Timeline"; diff --git a/src/Pages/ProfilePage.css b/packages/app/src/Pages/ProfilePage.css similarity index 100% rename from src/Pages/ProfilePage.css rename to packages/app/src/Pages/ProfilePage.css diff --git a/src/Pages/ProfilePage.tsx b/packages/app/src/Pages/ProfilePage.tsx similarity index 99% rename from src/Pages/ProfilePage.tsx rename to packages/app/src/Pages/ProfilePage.tsx index 81dc8394..8cfffa5a 100644 --- a/src/Pages/ProfilePage.tsx +++ b/packages/app/src/Pages/ProfilePage.tsx @@ -36,7 +36,7 @@ import MutedList from "Element/MutedList"; import FollowsList from "Element/FollowsList"; import IconButton from "Element/IconButton"; import { RootState } from "State/Store"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import FollowsYou from "Element/FollowsYou"; import QrCode from "Element/QrCode"; import Modal from "Element/Modal"; diff --git a/src/Pages/Root.css b/packages/app/src/Pages/Root.css similarity index 100% rename from src/Pages/Root.css rename to packages/app/src/Pages/Root.css diff --git a/src/Pages/Root.tsx b/packages/app/src/Pages/Root.tsx similarity index 98% rename from src/Pages/Root.tsx rename to packages/app/src/Pages/Root.tsx index df0a2681..03e257ac 100644 --- a/src/Pages/Root.tsx +++ b/packages/app/src/Pages/Root.tsx @@ -7,10 +7,10 @@ import { useIntl, FormattedMessage } from "react-intl"; import Tabs, { Tab } from "Element/Tabs"; import { RootState } from "State/Store"; import Timeline from "Element/Timeline"; +import { System } from "@snort/nostr"; import { TimelineSubject } from "Feed/TimelineFeed"; import messages from "./messages"; -import { System } from "Nostr/System"; import { debounce } from "Util"; export default function RootPage() { diff --git a/src/Pages/SearchPage.tsx b/packages/app/src/Pages/SearchPage.tsx similarity index 97% rename from src/Pages/SearchPage.tsx rename to packages/app/src/Pages/SearchPage.tsx index ca35aa75..b4117c1d 100644 --- a/src/Pages/SearchPage.tsx +++ b/packages/app/src/Pages/SearchPage.tsx @@ -5,7 +5,7 @@ import { useEffect, useState } from "react"; import { debounce } from "Util"; import { router } from "index"; import { SearchRelays } from "Const"; -import { System } from "Nostr/System"; +import { System } from "@snort/nostr"; import messages from "./messages"; diff --git a/src/Pages/SettingsPage.tsx b/packages/app/src/Pages/SettingsPage.tsx similarity index 100% rename from src/Pages/SettingsPage.tsx rename to packages/app/src/Pages/SettingsPage.tsx diff --git a/src/Pages/Verification.css b/packages/app/src/Pages/Verification.css similarity index 100% rename from src/Pages/Verification.css rename to packages/app/src/Pages/Verification.css diff --git a/src/Pages/Verification.tsx b/packages/app/src/Pages/Verification.tsx similarity index 100% rename from src/Pages/Verification.tsx rename to packages/app/src/Pages/Verification.tsx diff --git a/src/Pages/messages.ts b/packages/app/src/Pages/messages.ts similarity index 100% rename from src/Pages/messages.ts rename to packages/app/src/Pages/messages.ts diff --git a/src/Pages/new/DiscoverFollows.tsx b/packages/app/src/Pages/new/DiscoverFollows.tsx similarity index 100% rename from src/Pages/new/DiscoverFollows.tsx rename to packages/app/src/Pages/new/DiscoverFollows.tsx diff --git a/src/Pages/new/GetVerified.tsx b/packages/app/src/Pages/new/GetVerified.tsx similarity index 100% rename from src/Pages/new/GetVerified.tsx rename to packages/app/src/Pages/new/GetVerified.tsx diff --git a/src/Pages/new/ImportFollows.tsx b/packages/app/src/Pages/new/ImportFollows.tsx similarity index 100% rename from src/Pages/new/ImportFollows.tsx rename to packages/app/src/Pages/new/ImportFollows.tsx diff --git a/src/Pages/new/NewUserFlow.tsx b/packages/app/src/Pages/new/NewUserFlow.tsx similarity index 100% rename from src/Pages/new/NewUserFlow.tsx rename to packages/app/src/Pages/new/NewUserFlow.tsx diff --git a/src/Pages/new/NewUsername.tsx b/packages/app/src/Pages/new/NewUsername.tsx similarity index 100% rename from src/Pages/new/NewUsername.tsx rename to packages/app/src/Pages/new/NewUsername.tsx diff --git a/src/Pages/new/index.css b/packages/app/src/Pages/new/index.css similarity index 100% rename from src/Pages/new/index.css rename to packages/app/src/Pages/new/index.css diff --git a/src/Pages/new/index.tsx b/packages/app/src/Pages/new/index.tsx similarity index 100% rename from src/Pages/new/index.tsx rename to packages/app/src/Pages/new/index.tsx diff --git a/src/Pages/new/messages.ts b/packages/app/src/Pages/new/messages.ts similarity index 100% rename from src/Pages/new/messages.ts rename to packages/app/src/Pages/new/messages.ts diff --git a/src/Pages/settings/Index.css b/packages/app/src/Pages/settings/Index.css similarity index 100% rename from src/Pages/settings/Index.css rename to packages/app/src/Pages/settings/Index.css diff --git a/src/Pages/settings/Index.tsx b/packages/app/src/Pages/settings/Index.tsx similarity index 100% rename from src/Pages/settings/Index.tsx rename to packages/app/src/Pages/settings/Index.tsx diff --git a/src/Pages/settings/Preferences.css b/packages/app/src/Pages/settings/Preferences.css similarity index 100% rename from src/Pages/settings/Preferences.css rename to packages/app/src/Pages/settings/Preferences.css diff --git a/src/Pages/settings/Preferences.tsx b/packages/app/src/Pages/settings/Preferences.tsx similarity index 100% rename from src/Pages/settings/Preferences.tsx rename to packages/app/src/Pages/settings/Preferences.tsx diff --git a/src/Pages/settings/Profile.css b/packages/app/src/Pages/settings/Profile.css similarity index 100% rename from src/Pages/settings/Profile.css rename to packages/app/src/Pages/settings/Profile.css diff --git a/src/Pages/settings/Profile.tsx b/packages/app/src/Pages/settings/Profile.tsx similarity index 99% rename from src/Pages/settings/Profile.tsx rename to packages/app/src/Pages/settings/Profile.tsx index 4e559ca8..28d59df6 100644 --- a/src/Pages/settings/Profile.tsx +++ b/packages/app/src/Pages/settings/Profile.tsx @@ -12,7 +12,7 @@ import { useUserProfile } from "Feed/ProfileFeed"; import { hexToBech32, openFile } from "Util"; import Copy from "Element/Copy"; import { RootState } from "State/Store"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import useFileUpload from "Upload"; import messages from "./messages"; diff --git a/src/Pages/settings/RelayInfo.tsx b/packages/app/src/Pages/settings/RelayInfo.tsx similarity index 98% rename from src/Pages/settings/RelayInfo.tsx rename to packages/app/src/Pages/settings/RelayInfo.tsx index d53171cd..d17bd0c4 100644 --- a/src/Pages/settings/RelayInfo.tsx +++ b/packages/app/src/Pages/settings/RelayInfo.tsx @@ -1,7 +1,7 @@ import { FormattedMessage } from "react-intl"; import ProfilePreview from "Element/ProfilePreview"; import useRelayState from "Feed/RelayState"; -import { System } from "Nostr/System"; +import { System } from "@snort/nostr"; import { useDispatch } from "react-redux"; import { useNavigate, useParams } from "react-router-dom"; import { removeRelay } from "State/Login"; diff --git a/src/Pages/settings/Relays.tsx b/packages/app/src/Pages/settings/Relays.tsx similarity index 98% rename from src/Pages/settings/Relays.tsx rename to packages/app/src/Pages/settings/Relays.tsx index e586f16a..2394b9a3 100644 --- a/src/Pages/settings/Relays.tsx +++ b/packages/app/src/Pages/settings/Relays.tsx @@ -6,7 +6,7 @@ import { randomSample } from "Util"; import Relay from "Element/Relay"; import useEventPublisher from "Feed/EventPublisher"; import { RootState } from "State/Store"; -import { RelaySettings } from "Nostr/Connection"; +import { RelaySettings } from "@snort/nostr"; import { setRelays } from "State/Login"; import messages from "./messages"; diff --git a/src/Pages/settings/messages.ts b/packages/app/src/Pages/settings/messages.ts similarity index 100% rename from src/Pages/settings/messages.ts rename to packages/app/src/Pages/settings/messages.ts diff --git a/src/State/Login.ts b/packages/app/src/State/Login.ts similarity index 99% rename from src/State/Login.ts rename to packages/app/src/State/Login.ts index 02ef763b..8c40c440 100644 --- a/src/State/Login.ts +++ b/packages/app/src/State/Login.ts @@ -1,8 +1,8 @@ import { AnyAction, createSlice, PayloadAction, ThunkAction } from "@reduxjs/toolkit"; import * as secp from "@noble/secp256k1"; import { DefaultRelays } from "Const"; -import { HexKey, TaggedRawEvent } from "Nostr"; -import { RelaySettings } from "Nostr/Connection"; +import { HexKey, TaggedRawEvent } from "@snort/nostr"; +import { RelaySettings } from "@snort/nostr"; import type { AppDispatch, RootState } from "State/Store"; import { ImgProxySettings } from "Feed/ImgProxy"; diff --git a/src/State/Store.ts b/packages/app/src/State/Store.ts similarity index 100% rename from src/State/Store.ts rename to packages/app/src/State/Store.ts diff --git a/src/State/Users.ts b/packages/app/src/State/Users.ts similarity index 96% rename from src/State/Users.ts rename to packages/app/src/State/Users.ts index 0168d9bf..f49dab15 100644 --- a/src/State/Users.ts +++ b/packages/app/src/State/Users.ts @@ -1,5 +1,5 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -import { HexKey, TaggedRawEvent, UserMetadata } from "Nostr"; +import { HexKey, TaggedRawEvent, UserMetadata } from "@snort/nostr"; import { hexToBech32 } from "../Util"; export interface MetadataCache extends UserMetadata { diff --git a/src/State/Users/Db.ts b/packages/app/src/State/Users/Db.ts similarity index 99% rename from src/State/Users/Db.ts rename to packages/app/src/State/Users/Db.ts index 82cb8a62..5cefb8d5 100644 --- a/src/State/Users/Db.ts +++ b/packages/app/src/State/Users/Db.ts @@ -1,4 +1,4 @@ -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { db as idb } from "Db"; import { UsersDb, MetadataCache, setUsers } from "State/Users"; diff --git a/src/State/Users/Hooks.ts b/packages/app/src/State/Users/Hooks.ts similarity index 97% rename from src/State/Users/Hooks.ts rename to packages/app/src/State/Users/Hooks.ts index 211cfc74..d18da7a7 100644 --- a/src/State/Users/Hooks.ts +++ b/packages/app/src/State/Users/Hooks.ts @@ -2,7 +2,7 @@ import { useSelector } from "react-redux"; import { useLiveQuery } from "dexie-react-hooks"; import { MetadataCache } from "State/Users"; import type { RootState } from "State/Store"; -import { HexKey } from "Nostr"; +import { HexKey } from "@snort/nostr"; import { useDb } from "./Db"; export function useQuery(query: string) { diff --git a/src/Upload/NostrBuild.ts b/packages/app/src/Upload/NostrBuild.ts similarity index 100% rename from src/Upload/NostrBuild.ts rename to packages/app/src/Upload/NostrBuild.ts diff --git a/src/Upload/NostrImg.ts b/packages/app/src/Upload/NostrImg.ts similarity index 100% rename from src/Upload/NostrImg.ts rename to packages/app/src/Upload/NostrImg.ts diff --git a/src/Upload/VoidCat.ts b/packages/app/src/Upload/VoidCat.ts similarity index 100% rename from src/Upload/VoidCat.ts rename to packages/app/src/Upload/VoidCat.ts diff --git a/src/Upload/index.ts b/packages/app/src/Upload/index.ts similarity index 100% rename from src/Upload/index.ts rename to packages/app/src/Upload/index.ts diff --git a/src/Util.ts b/packages/app/src/Util.ts similarity index 92% rename from src/Util.ts rename to packages/app/src/Util.ts index 939b1925..8625f7de 100644 --- a/src/Util.ts +++ b/packages/app/src/Util.ts @@ -1,9 +1,7 @@ import * as secp from "@noble/secp256k1"; import { sha256 as hash } from "@noble/hashes/sha256"; import { bech32 } from "bech32"; -import { HexKey, TaggedRawEvent, u256 } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import { encodeTLV, NostrPrefix } from "Nostr/Links"; +import { HexKey, TaggedRawEvent, u256, EventKind, encodeTLV, NostrPrefix } from "@snort/nostr"; export const sha256 = (str: string) => { return secp.utils.bytesToHex(hash(str)); @@ -70,7 +68,6 @@ export function eventLink(hex: u256) { /** * Convert hex to bech32 - * @param {string} hex */ export function hexToBech32(hrp: string, hex?: string) { if (typeof hex !== "string" || hex.length === 0 || hex.length % 2 !== 0) { @@ -92,8 +89,6 @@ export function hexToBech32(hrp: string, hex?: string) { /** * Convert hex pubkey to bech32 link url - * @param {string} hex - * @returns */ export function profileLink(hex: HexKey) { return `/p/${hexToBech32(NostrPrefix.PublicKey, hex)}`; @@ -109,8 +104,6 @@ export const Reaction = { /** * Return normalized reaction content - * @param {string} content - * @returns */ export function normalizeReaction(content: string) { switch (content) { @@ -132,8 +125,6 @@ export function getReactions(notes: TaggedRawEvent[], id: u256, kind = EventKind /** * Converts LNURL service to LN Address - * @param lnurl - * @returns */ export function extractLnAddress(lnurl: string) { // some clients incorrectly set this to LNURL service, patch this @@ -158,9 +149,6 @@ export function unixNow() { /** * Simple debounce - * @param timeout Time until falling edge - * @param fn Callack to run on falling edge - * @returns Cancel timeout function */ export function debounce(timeout: number, fn: () => void) { const t = setTimeout(fn, timeout); diff --git a/src/index.css b/packages/app/src/index.css similarity index 100% rename from src/index.css rename to packages/app/src/index.css diff --git a/src/index.tsx b/packages/app/src/index.tsx similarity index 100% rename from src/index.tsx rename to packages/app/src/index.tsx diff --git a/src/lang.json b/packages/app/src/lang.json similarity index 100% rename from src/lang.json rename to packages/app/src/lang.json diff --git a/src/nostrich.webp b/packages/app/src/nostrich.webp similarity index 100% rename from src/nostrich.webp rename to packages/app/src/nostrich.webp diff --git a/src/service-worker.js b/packages/app/src/service-worker.js similarity index 100% rename from src/service-worker.js rename to packages/app/src/service-worker.js diff --git a/src/serviceWorkerRegistration.js b/packages/app/src/serviceWorkerRegistration.js similarity index 100% rename from src/serviceWorkerRegistration.js rename to packages/app/src/serviceWorkerRegistration.js diff --git a/packages/app/src/translations/en.ts b/packages/app/src/translations/en.ts new file mode 100644 index 00000000..4068e8dd --- /dev/null +++ b/packages/app/src/translations/en.ts @@ -0,0 +1,251 @@ +export default { + "+D82kt": "Are you sure you want to repost: {id}", + "+vIQlC": "Please make sure to save the following password in order to manage your handle in the future", + "/4tOwT": "Skip", + "/JE/X+": "Account Support", + "/RD0e2": + "Nostr uses digital signature technology to provide tamper proof notes which can safely be replicated to many relays to provide redundant storage of your content.", + "/d6vEc": "Make your profile easier to find and share", + "/n5KSF": "{n} ms", + "0BUTMv": "Search...", + "0mch2Y": "name has disallowed characters", + "0yO7wF": "{n} secs", + "1A7TZk": "What is Snort and how does it work?", + "1udzha": "Conversations", + "2/2yg+": "Add", + "25V4l1": "Banner", + "2IFGap": "Donate", + "2k0Cv+": "Dislikes ({n})", + "3cc4Ct": "Light", + "3xCwbZ": "OR", + "450Fty": "None", + "47FYwb": "Cancel", + "4IPzdn": "Primary Developers", + "4L2vUY": "Your new NIP-05 handle is:", + "4OB335": "Dislike", + "4Vmpt4": + "Nostr Plebs is one of the first NIP-05 providers in the space and offers a good collection of domains at reasonable prices", + "4Z3t5i": "Use imgproxy to compress images", + "4rYCjn": "Note to Self", + "5ykRmX": "Send zap", + "6ewQqw": "Likes ({n})", + "6tUqAb": + "Generate a public / private key pair. Do not share your private key with anyone, this acts as your password. Once lost, it cannot be “reset” or recovered. Keep safe!", + "7+Domh": "Notes", + "7hp70g": "NIP-05", + "7xzTiH": "{action} to {target}", + "8/vBbP": "Reposts ({n})", + "89q5wc": "Confirm Reposts", + "8E9muH": "Import Twitter Follows (optional)", + "8QDesP": "Zap {n} sats", + "8g2vyB": "name too long", + "9+Ddtu": "Next", + "9HU8vw": "Reply", + "9SvQep": "Follows {n}", + "9WRlF4": "Send", + "9gqH2W": "Login", + "9wO4wJ": "Lightning Invoice", + ASRK0S: "This author has been muted", + Adk34V: "Setup your Profile", + AyGauy: "Login", + B4C47Y: "name too short", + "B6+XJy": "zapped", + BOUMjw: "No nostr users found for {twitterUsername}", + "BOr9z/": "Snort is an open source project built by passionate people in their free time", + "BcGMo+": 'Notes hold text content, the most popular usage of these notes is to store "tweet like" messages.', + "C81/uG": "Logout", + CHTbO3: "Failed to load invoice", + "Cu/K85": "Translated from {lang}", + D3idYv: "Settings", + DKnriN: "Send sats", + DZzCem: "Show latest {n} notes", + "Dt/Zd5": "Media in posts will automatically be shown for selected people, otherwise only the link will show", + E8a4yq: "Follow some popular accounts", + EPYwm7: + "Your private key is your password. If you lose this key, you will lose access to your account! Copy it and keep it in a safe place. There is no way to reset your private key.", + EWyQH5: "Global", + "Ebl/B2": "Translate to {lang}", + EcglP9: "Key", + EnCOBJ: "Buy", + Eqjl5K: + "Only Snort and our integration partner identifier gives you a colorful domain name, but you are welcome to use other services too.", + "F+B3x1": "We have also partnered with nostrplebs.com to give you more options", + FS3b54: "Done!", + FfYsOb: "An error has occured!", + FmXUJg: "follows you", + "G/yZLu": "Remove", + GFOoEE: "Salt", + GspYR7: "{n} Dislike", + "H+vHiz": "Hex Key..", + H0JBH6: "Log Out", + "H6/kLh": "Order Paid!", + HAlOn1: "Name", + HFls6j: "name will be available later", + HOzFdo: "Muted", + HbefNb: "Open Wallet", + IKKHqV: "Follows", + INSqIz: "Twitter username...", + "IUZC+0": + "This means that nobody can modify notes which you have created and everybody can easily verify that the notes they are reading are created by you.", + JCIgkj: "Username", + JHEHCk: "Zaps ({n})", + JkLHGw: "Website", + K3r6DQ: "Delete", + K7AkdL: "Show", + KQvWvD: "Deleted", + KWuDfz: "I have saved my keys, continue", + KahimY: "Unknown event kind: {kind}", + LgbKvU: "Comment", + LxY9tW: "Generate Key", + M3Oirc: "Debug Menus", + MBAYRO: 'Shows "Copy ID" and "Copy Event JSON" in the context menu on each message', + MI2jkA: "Not available:", + MRp6Ly: "Twitter username", + MzRYWH: "Buying {item}", + N2IrpM: "Confirm", + NdOYJJ: "Hmm nothing here.. Checkout {newUsersPage} to follow some recommended nostrich's!", + NfNk2V: "Your private key", + NndBJE: "New users page", + OEW7yJ: "Zaps", + OKhRC6: "Share", + P61BTu: "Copy Event JSON", + P7FD0F: "System (Default)", + P7nJT9: "Total today (UTC): {amount} sats", + PCSt5T: "Preferences", + Pe0ogR: "Theme", + PrsIg7: "Reactions will be shown on every page, if disabled no reactions will be shown", + QTdJfH: "Create an Account", + QxCuTo: "Art by {name}", + RDZVQL: "Check", + RahCRH: "Expired", + RhDAoS: "Are you sure you want to delete {id}", + RoOyAh: "Relays", + Sjo1P4: "Custom", + TpgeGw: "Hex Salt..", + UQ3pOC: + "On Nostr, many people have the same username. User names and identity are separate things. You can get a unique identifier in the next step.", + Up5U7K: "Block", + VOjC1i: "Pick which upload service you want to upload attachments to", + VlJkSk: "{n} muted", + VnXp8Z: "Avatar", + "VtPV/B": "Login with Extension (NIP-07)", + Vx7Zm2: "How do keys work?", + W9355R: "Unmute", + WONP5O: "Find your twitter follows on nostr (Data provided by {provider})", + WxthCV: "e.g. Jack", + XgWvGA: "Reactions", + Y31HTH: "Help fund the development of Snort", + YDURw6: "Service URL", + YXA3AH: "Enable reactions", + ZKORll: "Activate Now", + ZLmyG9: "Contributors", + ZUZedV: "Lightning Donation:", + a5UPxh: "Fund developers and platforms providing NIP-05 verification services", + aWpBzj: "Show more", + brAXSu: "Pick a username", + bxv59V: "Just now", + c35bj2: "If you have an enquiry about your NIP-05 order please DM {link}", + cQfLWb: "URL..", + cWx9t8: "Mute all", + cuV2gK: "name is registered", + cyR7Kh: "Back", + "d7d0/x": "LN Address", + dOQCL8: "Display name", + e7qqly: "Mark All Read", + eHAneD: "Reaction emoji", + eJj8HD: "Get Verified", + eR3YIn: "Posts", + filwqD: "Read", + flnGvv: "What's on your mind?", + "g5pX+a": "About", + gBdUXk: "Save your keys!", + gDZkld: 'Snort is a Nostr UI, nostr is a decentralised protocol for saving and distributing "notes".', + gDzDRs: "Emoji to send when reactiong to a note", + gjBiyj: "Loading...", + hCUivF: "Notes will stream in real time into global and posts tab", + hK5ZDk: "the world", + hMzcSq: "Messages", + hY4lzx: "Supports", + hicxcO: "Show replies", + iCqGww: "Reactions ({n})", + iDGAbc: "Get a Snort identifier", + iGT1eE: "Prevent fake accounts from imitating you", + iNWbVV: "Handle", + ieGrWo: "Follow", + itPgxd: "Profile", + izWS4J: "Unfollow", + "jA3OE/": "{n,plural,=1{{n} sat} other{{n} sats}}", + jCA7Cw: "Preview on snort", + juhqvW: "Improve login security with browser extensions", + jvo0vs: "Save", + k2veDA: "Write", + k7sKNy: + "Our very own NIP-05 verification service, help support the development of this site and get a shiny special badge on our site!", + lCILNz: "Buy Now", + "lD3+8a": "Pay", + lgg1KN: "account page", + ll3xBp: "Image proxy service", + lnaT9F: "Following {n}", + lvlPhZ: "Pay Invoice", + mH91FY: + "Each contributor will get paid a percentage of all donations and NIP-05 orders, you can see the split amounts below", + mKAr6h: "Follow all", + mKh2HS: "File upload service", + mKhgP9: "{n,plural,=0{} =1{zapped} other{zapped}}", + n1xHAH: "Get an identifier (optional)", + nDejmx: "Unblock", + nN9XTz: "Share your thoughts with {link}", + nn1qb3: "Your donations are greatly appreciated", + nwZXeh: "{n} blocked", + o6Uy3d: "Only the secret key can be used to publish (sign events), everything else logs you in read-only mode.", + "o7e+nJ": "{n} followers", + odFwjL: "Follows only", + odhABf: "Login", + osUr8O: "You can also use these extensions to login to most Nostr sites.", + oxCa4R: + "Getting an identifier helps confirm the real you to people who know you. Many people can have a username @jack, but there is only one jack@cash.app.", + pzTOmv: "Followers", + qUJTsT: "Blocked", + qdGuQo: "Your Private Key Is (do not share this with anyone)", + qkvYUb: "Add to Profile", + qmJ8kD: "Translation failed", + "r3C4x/": "Software", + rT14Ow: "Add Relays", + reJ6SM: + "It is recommended to use one of the following browser extensions if you are on a desktop computer to secure your key:", + rfuMjE: "(Default)", + rrfdTe: "This is the same technology which is used by Bitcoin and has been proven to be extremely secure.", + rudscU: "Failed to load follows, please try again later", + sWnYKw: "Snort is designed to have a similar experience to Twitter.", + svOoEH: + "Name-squatting and impersonation is not allowed. Snort and our partners reserve the right to terminate your handle (not your account - nobody can take that away) for violating this rule.", + tOdNiY: "Dark", + thnRpU: "Getting NIP-05 verified can help:", + "u/vOPu": "Paid", + u4bHcR: "Check out the code here: {link}", + "uD/N6c": "Zap {target} {n} sats", + uSV4Ti: "Reposts need to be manually confirmed", + usAvMr: "Edit Profile", + "ut+2Cd": "Get a partner identifier", + vOKedj: "{n,plural,=1{& {n} other} other{& {n} others}}", + vZ4quW: "NIP-05 is a DNS based verification spec which helps to validate you as a real user.", + wEQDC6: "Edit", + wLtRCF: "Your key", + wih7iJ: "name is blocked", + "wqyN/i": "Find out more info about {service} at {link}", + wtLjP6: "Copy ID", + x82IOl: "Mute", + xIoGG9: "Go to", + xJ9n2N: "Your public key", + xKdNPm: "Send", + xKflGN: "{username}''s Follows on Nostr", + xbVgIm: "Automatically load media", + xmcVZ0: "Search", + zFegDD: "Contact", + zINlao: "Owner", + zQvVDJ: "All", + zcaOTs: "Zap amount in sats", + zjJZBd: "You're ready!", + zonsdq: "Failed to load LNURL service", + zvCDao: "Automatically show latest notes", +}; diff --git a/packages/app/src/translations/es.ts b/packages/app/src/translations/es.ts new file mode 100644 index 00000000..490eb7d6 --- /dev/null +++ b/packages/app/src/translations/es.ts @@ -0,0 +1,236 @@ +export default { + "+D82kt": "¿Estás seguro de que quieres republicar {id}", + "+vIQlC": "Asegúrate de guardar ésta contraseña para gestionar tu NIP-05 en el futuro", + "/4tOwT": "Saltar", + "/JE/X+": "Soporte de Cuenta", + "/RD0e2": + "Nostr utiliza firmas digitales para proveer de notas inmutables que pueden ser replicadas a muchos relays para que tu contenido esté distribuido redundantemente.", + "/d6vEc": "Haz tu perfil más fácil de encontrar y compartir", + "/n5KSF": "{n} ms", + "0BUTMv": "Buscar...", + "0mch2Y": "el nombre tiene caracteres inválidos", + "0yO7wF": "{n} seg", + "1A7TZk": "¿Qué es Snort y cómo funciona?", + "1udzha": "Conversaciones", + "2/2yg+": "Añadir", + "25V4l1": "Banner", + "2IFGap": "Donar", + "2k0Cv+": "No me gusta ({n})", + "3cc4Ct": "Claro", + "3xCwbZ": "OR", + "450Fty": "Ninguno", + "47FYwb": "Cancelar", + "4L2vUY": "Tu nuevo NIP-05 es:", + "4OB335": "No me gusta", + "4Vmpt4": + "Nostr Plbes es uno de los primeros proveedores de NIP-05 y ofrece una buena colección de dominios a precios razonables.", + "4Z3t5i": "Usar imgproxy para comprimir imágenes", + "4rYCjn": "Mensajes guardados", + "5ykRmX": "Enviar zap", + "6ewQqw": "Me gusta ({n})", + "6tUqAb": + "Generate a public / private key pair. Do not share your private key with anyone, this acts as your password. Once lost, it cannot be “reset” or recovered. Keep safe!", + "7+Domh": "Notas", + "7hp70g": "NIP-05", + "7xzTiH": "{action} a {target}", + "8/vBbP": "Reposts ({n})", + "89q5wc": "Confirmar reposts", + "8E9muH": "Importar seguidos de Twitter (opcional)", + "8QDesP": "Zapear {n} sats", + "8g2vyB": "el nombre es demasiado largo", + "9+Ddtu": "Siguiente", + "9HU8vw": "Responder", + "9SvQep": "Siguiendo a {n}", + "9WRlF4": "Enviar", + "9gqH2W": "Acceso", + "9wO4wJ": "Factura Lightning", + ASRK0S: "Este autor ha sido silenciado", + Adk34V: "Configura tu Perfil", + AyGauy: "Acceso", + B4C47Y: "el nombre es demasiado corto", + "B6+XJy": "zapeó", + BOUMjw: "No hemos encontrado usuarios en nostr para {twitterUsername}", + "BcGMo+": + 'Las notas contienen contenido textual, el uso más popular de dichas notas es almacenar mensajes parecidos a "tweets".', + "C81/uG": "Salir", + CHTbO3: "Error al cargar factura", + "Cu/K85": "Traducido de {lang}", + D3idYv: "Configuración", + DKnriN: "Enviar sats", + DZzCem: "Mostrar últimas {n} notas", + "Dt/Zd5": "Se cargarán las imágenes y vídeos automáticamente", + E8a4yq: "Sigue a cuentas populares", + EPYwm7: + "Tu clave privada es tu contraseña. Si pierdes esta clave perderás acceso a tu cuenta. Cópiala y guárdala en un lugar seguro. No hay manera de recuperar tu clave privada.", + EWyQH5: "Global", + "Ebl/B2": "Traducir a {lang}", + EcglP9: "Clave", + EnCOBJ: "Comprar", + Eqjl5K: + "Sólo los identificadores de Snort y nuestros socios se mostrarán con un dominio colorido, pero todos los servicios están soportados.", + "F+B3x1": "Nos hemos asociado con nostrplebs.com para darte más opciones", + FS3b54: "Hecho!", + FmXUJg: "te sigue", + "G/yZLu": "Eliminar", + GFOoEE: "Salt", + GspYR7: "{n} No me gusta", + H0JBH6: "Salir", + "H6/kLh": "Orden pagada!", + HAlOn1: "Nombre", + HFls6j: "el nombre estará disponible más tarde", + HOzFdo: "Silenciados", + HbefNb: "Abrir Wallet", + IKKHqV: "Siguiendo", + INSqIz: "Usuario en Twitter...", + "IUZC+0": + "Esto significa que nadie puede modificar notas que tú has creado y que todo el mundo puede verificar que las notas que leen han sido escritas por ti.", + JCIgkj: "Usuario", + JHEHCk: "Zaps ({n})", + JkLHGw: "Web", + K3r6DQ: "Eliminar", + K7AkdL: "Mostrar", + KQvWvD: "Eliminado", + KWuDfz: "He guardado mis claves, continuar", + KahimY: "Evento de tipo desconocido {kind}", + LgbKvU: "Comentario", + LxY9tW: "Generate Key", + M3Oirc: "Menús de desarrolladores", + MBAYRO: "Se mostrarán opciones adicionales para desarrolladores en el menú de las notas", + MI2jkA: "No disponible:", + MRp6Ly: "Usuario en Twitter", + MzRYWH: "Comprando {item}", + N2IrpM: "Confirmar", + NdOYJJ: + "Hmmm no hay nada que mostrarte aquí... Echa un vistazo a la {newUsersPage} para seguir a algunas cuentas recomendadas!", + NfNk2V: "Tu clave privada", + NndBJE: "Página de nuevos usuarios", + OEW7yJ: "Zaps", + OKhRC6: "Compartir", + P61BTu: "Copiar JSON", + P7FD0F: "Sistema (por defecto)", + PCSt5T: "Preferencias", + Pe0ogR: "Tema", + PrsIg7: "Se mostrarán las reacciones a las notas", + QTdJfH: "Create an Account", + QxCuTo: "Art by {name}", + RDZVQL: "Comprobar", + RahCRH: "Caducada", + RhDAoS: "¿Estás seguro de que quieres eliminar {id}?", + RoOyAh: "Relays", + Sjo1P4: "Personalizar", + UQ3pOC: + "En Nostr mucha gente tiene el mismo nombre de usuario. Los nombres de usuario y la identidad son cosas separadas. Puedes adquirir un identificador único en el siguiente paso.", + Up5U7K: "Bloquear", + VOjC1i: "Elige qué servicio de subida de ficheros quieres utilizar", + VlJkSk: "{n} silenciados", + VnXp8Z: "Avatar", + "VtPV/B": "Login with Extension (NIP-07)", + Vx7Zm2: "¿Cómo funcionan las claves?", + W9355R: "Desilenciar", + WONP5O: "Encuentra a tus seguidos de twitter en nostr (información facilitada por {provider})", + WxthCV: "p.e. Jack", + XgWvGA: "Reacciones", + YDURw6: "URL del Servicio", + YXA3AH: "Activar reacciones", + ZKORll: "Activar Ahora", + a5UPxh: "Apoya a las plataformas y desarrolladores que proporcionan servicios de verificación", + aWpBzj: "Mostrar más", + brAXSu: "Elige un nombre de usuario", + bxv59V: "Justo ahora", + cWx9t8: "Silenciar todos", + cuV2gK: "el nombre ya está registrado", + cyR7Kh: "Atrás", + "d7d0/x": "Dirección Lightning", + dOQCL8: "Nombre", + e7qqly: "Marcar todo como leído", + eHAneD: "Emoji de reacción", + eJj8HD: "Verifica tu perfil", + eR3YIn: "Notas", + filwqD: "Leer", + flnGvv: "¿Qué tienes en mente?", + "g5pX+a": "Sobre ti", + gBdUXk: "Guarda tus claves!", + gDZkld: 'Snort es un cliente de Nostr, un protocol decentralizado para guardar y distribuir "notas".', + gDzDRs: "Emoji que se utilizará al reaccionar a una nota", + gjBiyj: "Cargando...", + hCUivF: "Las notas nuevas se mostrarán automáticamente en tu línea de tiempo", + hK5ZDk: "el mundo", + hMzcSq: "Mensajes", + hY4lzx: "Soporta", + hicxcO: "Mostrar respuestas", + iCqGww: "Reacciones ({n})", + iDGAbc: "Obtén un identificador de Snort", + iGT1eE: "Evita que cuentas falsas se hagan pasar por ti", + iNWbVV: "Usuario", + ieGrWo: "Seguir", + itPgxd: "Perfil", + izWS4J: "No seguir", + "jA3OE/": "{n} {n, plural, =1 {sat} other {sats}}", + jCA7Cw: "Previsualización en snort", + juhqvW: "Mejora la seguridad con extensiones del navegador", + jvo0vs: "Guardar", + k2veDA: "Escribir", + k7sKNy: + "Nuestro servicio de verificación NIP-05, apoya el desarrollo de este proyecto y obtén una apariencia especial en nuestra web!", + lCILNz: "Comprar", + "lD3+8a": "Pagar", + lgg1KN: "página de perfil", + ll3xBp: "Proxy de imágines", + lnaT9F: "Siguiendo {n}", + lvlPhZ: "Pagar Factura", + mKAr6h: "Seguir todos", + mKh2HS: "Subida de ficheros", + mKhgP9: "{n, plural, =0 {} =1 {zapeó} other {zapearon}}", + n1xHAH: "Obtén un identificador (opcional)", + nDejmx: "Desbloquear", + nN9XTz: "Comparte tus pensamientos con {link}", + nwZXeh: "{n} bloqueados", + o6Uy3d: "Only the secret key can be used to publish (sign events), everything else logs you in read-only mode.", + "o7e+nJ": "{n} seguidores", + odFwjL: "Sólo seguidos", + odhABf: "Acceso", + osUr8O: "También puedes utilizar estas extensions para interactuar con la mayoría de webs sobre Nostr.", + oxCa4R: + "Un identificador ayuda a confirmar tu identidad real a la gente que te conoce. Mucha gente tiene el nombre de usuario @jack, pero sólo hay un jack@cash.app.", + pzTOmv: "Seguidores", + qUJTsT: "Bloqueados", + qdGuQo: "Tu Clave Privada (no la compartas con nadie) es", + qkvYUb: "Añadir a tu perfil", + qmJ8kD: "Traducción fallida", + "r3C4x/": "Software", + rT14Ow: "Añadir Relays", + reJ6SM: "Recomendamos usar una de éstas extensions para el navegador para asegurar tu clave:", + rfuMjE: "(Por defecto)", + rrfdTe: "Esta es la misma tecnología que usa Bitcoin y ha demostrado ser extremadamente segura.", + rudscU: "Error al cargar seguidos, inténtalo más tarde", + sWnYKw: "Snort está diseñado para tener una experience similar a Twitter.", + svOoEH: + "Ocupar nombres y hacerse pasar por terceros no está permitido. Snort y nuestros socios se reservan el derecho de terminar tu identificador (no tu cuenta, nadie te la puede arrebatar) si violas ésta norma.", + tOdNiY: "Oscuro", + thnRpU: "Obtener un NIP-05 ayuda a:", + "u/vOPu": "Pagado", + "uD/N6c": "Zapear {target} {n} sats", + uSV4Ti: "Los reposts necesitarán ser confirmados", + usAvMr: "Editar Perfil", + "ut+2Cd": "Obtén un identificador de nuestros socios", + vOKedj: "{n,plural,=1{& {n} otro} other{& {n} otros}}", + vZ4quW: "NIP-05 es un sistema de verification basado en DNS que permite verificarte como un usuario real.", + wEQDC6: "Editar", + wLtRCF: "Your key", + wih7iJ: "el nombre no está permitido", + "wqyN/i": "Aprende más sobre {service} en {link}", + wtLjP6: "Copiar ID", + x82IOl: "Silenciar", + xIoGG9: "Ir a", + xJ9n2N: "Tu clave pública", + xKflGN: "Seguidos de {username} en Nostr", + xbVgIm: "Cargar medios automáticamente", + xmcVZ0: "Búsqueda", + zFegDD: "Contacto", + zINlao: "Dueño", + zQvVDJ: "Todos", + zcaOTs: "Cantidad en sats", + zjJZBd: "Estás listo!", + zonsdq: "Error al contactar con el servicio LNURL", + zvCDao: "Mostrar notas nuevas automáticamente", +}; diff --git a/packages/app/src/translations/fr.ts b/packages/app/src/translations/fr.ts new file mode 100644 index 00000000..0921b7f4 --- /dev/null +++ b/packages/app/src/translations/fr.ts @@ -0,0 +1,237 @@ +export default { + "+D82kt": "Etes-vous sûr que vous voulez republier: {id}", + "+vIQlC": "Assurez-vous d'enregistrer le mot de passe suivant afin de gérer votre identifiant à l'avenir", + "/4tOwT": "Skip", + "/JE/X+": "Prise en charge du compte", + "/RD0e2": + "Nostr uses digital signature technology to provide tamper proof notes which can safely be replicated to many relays to provide redundant storage of your content.", + "/d6vEc": "Rendez votre profil plus facile à trouver et à partager", + "/n5KSF": "{n} ms", + "0BUTMv": "Chercher...", + "0mch2Y": "le nom contient des caractères non autorisés", + "0yO7wF": "{n} secondes", + "1A7TZk": "What is Snort and how does it work?", + "1udzha": "Conversations", + "2/2yg+": "Ajouter", + "25V4l1": "Bannière", + "2IFGap": "Faire un don", + "2k0Cv+": "N'aime pas ({n})", + "3cc4Ct": "Clair", + "3xCwbZ": "OR", + "450Fty": "Aucun", + "47FYwb": "Annuler", + "4L2vUY": "Votre indicatif NIP-05 est:", + "4OB335": "Dislike", + "4Vmpt4": + "Nostr Plebs est l'un des premiers fournisseurs NIP-05 dans l'espace et offre une bonne collection de domaines à des prix raisonnables", + "4Z3t5i": "Utiliser imgproxy pour compresser les images", + "4rYCjn": "Note pour moi-même", + "5ykRmX": "Envoyer zap", + "6ewQqw": "Aime ({n})", + "6tUqAb": + "Generate a public / private key pair. Do not share your private key with anyone, this acts as your password. Once lost, it cannot be “reset” or recovered. Keep safe!", + "7+Domh": "Notes", + "7hp70g": "NIP-05", + "7xzTiH": "{action} to {target}", + "8/vBbP": "Republie ({n})", + "89q5wc": "Confirmer la republication", + "8E9muH": "Import Twitter Follows (optional)", + "8QDesP": "Zapper {n} sats", + "8g2vyB": "le nom est trop long", + "9+Ddtu": "Next", + "9HU8vw": "Répondre", + "9SvQep": "Suit {n}", + "9WRlF4": "Envoyer", + "9gqH2W": "Se Connecter", + "9wO4wJ": "Facture Lightning", + ASRK0S: "Cet auteur a été mis en sourdine", + Adk34V: "Setup your Profile", + AyGauy: "Se Connecter", + B4C47Y: "le nom est trop court", + "B6+XJy": "zappé", + BOUMjw: "No nostr users found for {twitterUsername}", + "BcGMo+": 'Notes hold text content, the most popular usage of these notes is to store "tweet like" messages.', + "C81/uG": "Se déconnecter", + CHTbO3: "Échec du chargement de la facture", + "Cu/K85": "Traduit de {lang}", + D3idYv: "Paramètres", + DKnriN: "Envoyer des sats", + DZzCem: "Afficher les {n} dernières notes", + "Dt/Zd5": + "Les médias dans les messages seront automatiquement affichés pour les personnes sélectionnées, sinon seul le lien s'affichera", + E8a4yq: "Follow some popular accounts", + EPYwm7: + "Your private key is your password. If you lose this key, you will lose access to your account! Copy it and keep it in a safe place. There is no way to reset your private key.", + EWyQH5: "Global", + "Ebl/B2": "Traduire en {lang}", + EcglP9: "Key", + EnCOBJ: "Acheter", + Eqjl5K: + "Only Snort and our integration partner identifier gives you a colorful domain name, but you are welcome to use other services too.", + "F+B3x1": "We have also partnered with nostrplebs.com to give you more options", + FS3b54: "Done!", + FmXUJg: "vous suit", + "G/yZLu": "Retirer", + GFOoEE: "Salt", + GspYR7: "{n} N'aime pas", + H0JBH6: "Se Déconnecter", + "H6/kLh": "Commande Payée!", + HAlOn1: "Nom", + HFls6j: "le nom sera disponible plus tard", + HOzFdo: "Mis en sourdine", + HbefNb: "Ouvrir le Wallet", + IKKHqV: "Suit", + INSqIz: "Twitter username...", + "IUZC+0": + "This means that nobody can modify notes which you have created and everybody can easily verify that the notes they are reading are created by you.", + JCIgkj: "Username", + JHEHCk: "Zap ({n})", + JkLHGw: "Site Internet", + K3r6DQ: "Supprimer", + K7AkdL: "Montrer", + KQvWvD: "Supprimé", + KWuDfz: "I have saved my keys, continue", + KahimY: "Type d'événement inconnu : {kind}", + LgbKvU: "Commenter", + LxY9tW: "Generate Key", + M3Oirc: "Menus de débogage", + MBAYRO: 'Affiche "Copy ID" et "Copy Event JSON" dans le menu contextuel de chaque message', + MI2jkA: "Pas disponible:", + MRp6Ly: "Twitter username", + MzRYWH: "Acheter {item}", + N2IrpM: "Confirmer", + NdOYJJ: "Hmm rien ici .. Essayez {newUsersPage} pour suivre quelques recommandations de naustriches!", + NfNk2V: "Your private key", + NndBJE: "Page des nouveaux utilisateurs", + OEW7yJ: "Zaps", + OKhRC6: "Partager", + P61BTu: "Copier l'événement JSON", + P7FD0F: "Système (Défaut)", + PCSt5T: "Préférences", + Pe0ogR: "Thème", + PrsIg7: "Les réactions seront affichées sur chaque page, si désactivé aucune réaction ne sera affichée", + QTdJfH: "Create an Account", + QxCuTo: "Art by {name}", + RDZVQL: "Check", + RahCRH: "Expiré", + RhDAoS: "Êtes-vous sûr que vous voulez supprimer {id}", + RoOyAh: "Relais", + Sjo1P4: "Custom", + UQ3pOC: + "On Nostr, many people have the same username. User names and identity are separate things. You can get a unique identifier in the next step.", + Up5U7K: "Bloquer", + VOjC1i: "Choisissez le service d'hébergement vers lequel vous souhaitez héberger les pièces jointes", + VlJkSk: "{n} mis en sourdine", + VnXp8Z: "Avatar", + "VtPV/B": "Login with Extension (NIP-07)", + Vx7Zm2: "How do keys work?", + W9355R: "Retirer sourdine", + WONP5O: "Find your twitter follows on nostr (Data provided by {provider})", + WxthCV: "e.g. Jack", + XgWvGA: "Réactions", + YDURw6: "URL de service", + YXA3AH: "Activer les réactions", + ZKORll: "Activer Maintenant", + a5UPxh: "Financer les développeurs et plateformes fournissant des services de vérification NIP-05", + aWpBzj: "Montrer plus", + brAXSu: "Pick a username", + bxv59V: "Juste maintenant", + cWx9t8: "Tout mettre en sourdine", + cuV2gK: "le nom est enregistré", + cyR7Kh: "Retourner", + "d7d0/x": "Adresse LN", + dOQCL8: "Nom à afficher", + e7qqly: "Marquer tout comme lu", + eHAneD: "Reaction emoji", + eJj8HD: "Se faire vérifier", + eR3YIn: "Publications", + filwqD: "Lire", + flnGvv: "Qu'avez-vous en tête?", + "g5pX+a": "About", + gBdUXk: "Save your keys!", + gDZkld: 'Snort is a Nostr UI, nostr is a decentralised protocol for saving and distributing "notes".', + gDzDRs: "Emoji to send when reactiong to a note", + gjBiyj: "Chargement...", + hCUivF: "Les notes seront diffusées en temps réel dans l'onglet Global et Posts", + hK5ZDk: "the world", + hMzcSq: "Messages", + hY4lzx: "Supporte", + hicxcO: "Afficher les réponses", + iCqGww: "Réactions ({n})", + iDGAbc: "Get a Snort identifier", + iGT1eE: "Empêcher les faux comptes de vous imiter", + iNWbVV: "Handle", + ieGrWo: "Suivre", + itPgxd: "Profil", + izWS4J: "Ne plus suivre", + "jA3OE/": "{n} {n, plural, =1 {sat} other {sats}}", + jCA7Cw: "Preview on snort", + juhqvW: "Improve login security with browser extensions", + jvo0vs: "Sauvegarder", + k2veDA: "Écrire", + k7sKNy: + "Notre propre service de vérification NIP-05, aidez à soutenir le développement de ce site et obtenez un badge spécial brillant sur notre site !", + lCILNz: "Acheter Maintenant", + "lD3+8a": "Payer", + lgg1KN: "compte", + ll3xBp: "Service proxy d'images", + lnaT9F: "Abonnements {n}", + lvlPhZ: "Payer Facture", + mKAr6h: "Suivre tout", + mKh2HS: "Service d'hébergement de fichiers", + mKhgP9: "{n,plural,=0{} =1{zapped} other{zapped}}", + n1xHAH: "Get an identifier (optional)", + nDejmx: "Débloquer", + nN9XTz: "Share your thoughts with {link}", + nwZXeh: "{n} bloqué", + o6Uy3d: "Only the secret key can be used to publish (sign events), everything else logs you in read-only mode.", + "o7e+nJ": "{n} abonnés", + odFwjL: "Abonnements seulement", + odhABf: "Se Connecter", + osUr8O: "You can also use these extensions to login to most Nostr sites.", + oxCa4R: + "Getting an identifier helps confirm the real you to people who know you. Many people can have a username @jack, but there is only one jack@cash.app.", + pzTOmv: "Abonnés", + qUJTsT: "Bloqué", + qdGuQo: "Votre Clé Privée Est (ne la partagez avec personne)", + qkvYUb: "Ajouter au Profil", + qmJ8kD: "La traduction a échoué", + "r3C4x/": "Logiciel", + rT14Ow: "Ajouter Relais", + reJ6SM: + "It is recommended to use one of the following browser extensions if you are on a desktop computer to secure your key:", + rfuMjE: "(Défaut)", + rrfdTe: "This is the same technology which is used by Bitcoin and has been proven to be extremely secure.", + rudscU: "Failed to load follows, please try again later", + sWnYKw: "Snort is designed to have a similar experience to Twitter.", + svOoEH: + "Name-squatting and impersonation is not allowed. Snort and our partners reserve the right to terminate your handle (not your account - nobody can take that away) for violating this rule.", + tOdNiY: "Sombre", + thnRpU: "Obtenir la vérification NIP-05 peut aider :", + "u/vOPu": "Payé", + "uD/N6c": "Zapper {target} {n} sats", + uSV4Ti: "Les republications seront automatiquement confirmées", + usAvMr: "Modifier le Profil", + "ut+2Cd": "Get a partner identifier", + vOKedj: "{n,plural,=1{& {n} other} other{& {n} others}}", + vZ4quW: + "NIP-05 est une spécification de vérification basée sur DNS qui permet de vous valider en tant qu'utilisateur réel.", + wEQDC6: "Modifier", + wLtRCF: "Your key", + wih7iJ: "le nom est bloqué", + "wqyN/i": "En savoir plus sur {service} sur {link}", + wtLjP6: "Copier Identifiant", + x82IOl: "Mode Sourdine", + xIoGG9: "Aller à", + xJ9n2N: "Your public key", + xKflGN: "{username}''s Follows on Nostr", + xbVgIm: "Charger automatiquement le média", + xmcVZ0: "Chercher", + zFegDD: "Contacted", + zINlao: "Propriétaire", + zQvVDJ: "Tout", + zcaOTs: "Zapper montant en sats", + zjJZBd: "You're ready!", + zonsdq: "Échec du chargement du service LNURL", + zvCDao: "Afficher automatiquement les dernières notes", +}; diff --git a/packages/app/src/translations/hu.ts b/packages/app/src/translations/hu.ts new file mode 100644 index 00000000..4d8afdf0 --- /dev/null +++ b/packages/app/src/translations/hu.ts @@ -0,0 +1,239 @@ +export default { + "+D82kt": "Biztos hogy ezt meg akarod osztani: {id}", + "+vIQlC": + "Ahhoz hogy a jövőben is hozzáférj a fiókodhoz, kérlek mindenképp győződj meg róla hogy a következő jelszót elmentetted", + "/4tOwT": "Kihagyás", + "/JE/X+": "Segítség", + "/RD0e2": + "A Nostr digitális aláírásokat használ, amivel megmásíthatatlan bejegyzéseket lehet létrehozni. Ezeket bárhány másolatban a különböző csomópontokra szétszórhatóak, ezzel biztosítva a tartalom redundanciáját.", + "/d6vEc": "Legyen a fiókod könnyebben megtalálható és megosztható", + "/n5KSF": "{n} ms", + "0BUTMv": "Keresés...", + "0mch2Y": "név nem engedélyezett karaktereket tartalmaz", + "0yO7wF": "{n} másodperc", + "1A7TZk": "Mi a Snort és hogyan működik?", + "1udzha": "Beszélgetések", + "2/2yg+": "Hozzáad", + "25V4l1": "Banner", + "2IFGap": "Adományoz", + "2k0Cv+": "Nemtetszések ({n})", + "3cc4Ct": "Világos", + "3xCwbZ": "OR", + "450Fty": "Nincs", + "47FYwb": "Törlés", + "4L2vUY": "A te új NIP-05 azonosítód:", + "4OB335": "Nem tetszik", + "4Vmpt4": + "A Nostr Plebs-ék az egyik legelső megfelelő feltételekkel és árakkal NIP-05 azonosítást biztosító szolgáltató", + "4Z3t5i": "Az imgproxy használata a képek tömörítéséhez", + "4rYCjn": "Jegyzet magamnak", + "5ykRmX": "Zap küldése", + "6ewQqw": "Lájkok ({n})", + "6tUqAb": + "Generate a public / private key pair. Do not share your private key with anyone, this acts as your password. Once lost, it cannot be “reset” or recovered. Keep safe!", + "7+Domh": "Jegyzetek", + "7hp70g": "NIP-05", + "7xzTiH": "{action} oda {target}", + "8/vBbP": "Megosztva ({n})", + "89q5wc": "Megosztás megerősítése", + "8E9muH": "Twitter követők importálása (opcionális)", + "8QDesP": "Zap {n} sats", + "8g2vyB": "név túl hosszú", + "9+Ddtu": "Következő", + "9HU8vw": "Válasz", + "9SvQep": "{n} követek", + "9WRlF4": "Küldés", + "9gqH2W": "Bejelentkezés", + "9wO4wJ": "Lightning Számla", + ASRK0S: "Ez a felhasználó némítva", + Adk34V: "Profilod kitöltése", + AyGauy: "Bejelentkezés", + B4C47Y: "név túl rövid", + "B6+XJy": "zapp-olva", + BOUMjw: "Nem találtunk {twitterUsername} nevű Nostr felhasználót", + "BcGMo+": + "A bejegyzések szöveget tartalmaznak és a legnépszerűbb felhasználási módja, hogy ”Twitter féle” üzeneteket tároljanak benne.", + "C81/uG": "Kijelentkezés", + CHTbO3: "A számla betöltése nem sikerült", + "Cu/K85": "Fordítás erről {lang}", + D3idYv: "Beállítások", + DKnriN: "Satoshi küldése", + DZzCem: "A legutóbbi {n} bejegyzés mutatása", + "Dt/Zd5": + "A bejegyzésekben található média bizonyos emberek számára automatikusan megjelenik, másoknak pedig egy link lesz helyette.", + E8a4yq: "Kövess néhány népszerű felhasználót", + EPYwm7: + "A privát kulcsod a jelszavad. Ha elhagyod, elhagyod a hozzáférést a fiókodhoz! Mentsd le egy biztonságos helyre. Nincs lehetőség a privát kulcsaid helyreállítására.", + EWyQH5: "Globális", + "Ebl/B2": "Fordítás erre {lang}", + EcglP9: "Key", + EnCOBJ: "Vásárlás", + Eqjl5K: + "Csak a Snort és a mi ingrációs partnerünk azonosítója ad színes domain nevet, de azonosításra szabadon használhatod más szolgátatók szolgáltatásait is.", + "F+B3x1": "A több lehetőség biztosítása érdekében, a nostrplebs.com partnerségre léptünk", + FS3b54: "Kész!", + FmXUJg: "követ téged", + "G/yZLu": "Eltávolítás", + GFOoEE: "Salt", + GspYR7: "{n} Nem tetszik", + H0JBH6: "Kijelentkezés", + "H6/kLh": "Rendelés fizetve!", + HAlOn1: "Név", + HFls6j: "név később elérhető", + HOzFdo: "Némítva", + HbefNb: "Pénztárca megnyitása", + IKKHqV: "Akiket követek", + INSqIz: "Twitter felhasználónév...", + "IUZC+0": + "Ez azt jelenti, hogy a te általad létrehozott bejegyzéseket senki sem tudja módosítani és bárki ellenőrizheti hogy tényleg te írtad.", + JCIgkj: "Felhasználónév", + JHEHCk: "Zap-ek ({n})", + JkLHGw: "Weboldal", + K3r6DQ: "Törlés", + K7AkdL: "Mutat", + KQvWvD: "Törölve", + KWuDfz: "Lementettem a kulcsaimat, folytatás", + KahimY: "Ismeretlen esemény: {kind}", + LgbKvU: "Hozzászólás", + LxY9tW: "Generate Key", + M3Oirc: "Hibaelhárító menü", + MBAYRO: 'Mutasd az "Egyedi azonosítót" és a "JSON esetet" minden üzenet szövegmezőjében', + MI2jkA: "Nem elérhető:", + MRp6Ly: "Twitter felhasználónév", + MzRYWH: "{item} megveszem", + N2IrpM: "Jóváhagy", + NdOYJJ: "Hmm nincs itt semmi.. Ellenőrizd a {newUsersPage} hogy néhány javasolt Nostr felhasználót követni tudj!", + NfNk2V: "A te privát kulcsod", + NndBJE: "Új felhasználók oldal", + OEW7yJ: "Zap-ek", + OKhRC6: "Megosztás", + P61BTu: "JSON eset", + P7FD0F: "Rendszer (Alapértelmezett)", + PCSt5T: "Preferenciák", + Pe0ogR: "Téma", + PrsIg7: "A reakciók minden oldalon megjelennek, ha letiltod őket nem jelennek meg", + QTdJfH: "Create an Account", + QxCuTo: "Art by {name}", + RDZVQL: "Ellenőrzés", + RahCRH: "Lejárt", + RhDAoS: "Biztos hogy törölni akarod a {id}", + RoOyAh: "Csomópontok", + Sjo1P4: "Egyedi", + UQ3pOC: + "A Nostr-án sok embernek ugyanaz a felhasználóneve. A felhasználónév és a személyazonosság két különböző dolog. A következő lépésben tudsz magadnak egyedi azonosítót szerezni.", + Up5U7K: "Tiltás", + VOjC1i: "Válaszd ki mely szolgáltatóhoz legyenek a fájlok feltöltve", + VlJkSk: "{n} némított", + VnXp8Z: "Avatar", + "VtPV/B": "Login with Extension (NIP-07)", + Vx7Zm2: "Hogyan működnek a kulcsok?", + W9355R: "Némítás visszavonása", + WONP5O: "A Twitter követők a Nostr hálózaton való megtalálása (Az adatokat a {provider} biztosította)", + WxthCV: "pl. Jack", + XgWvGA: "Reakciók", + YDURw6: "Szervíz cím", + YXA3AH: "Reakciók engedélyezése", + ZKORll: "Aktiválás", + a5UPxh: "Támogasd a fejlesztőket és a platform szolgáltatókat akik NIP-05 azonosító szolgáltatásokat biztosítanak", + aWpBzj: "Mutass többet", + brAXSu: "Válassz felhasználónevet", + bxv59V: "Csak most", + cWx9t8: "Mind némítása", + cuV2gK: "név már foglalt", + cyR7Kh: "Vissza", + "d7d0/x": "LN cím", + dOQCL8: "Megjelenítendő név", + e7qqly: "Mind olvasottnak jelölni", + eHAneD: "Reaction emoji", + eJj8HD: "Légy Azonosítva", + eR3YIn: "Bejegyzések", + filwqD: "Olvasás", + flnGvv: "Mi jár a fejedben?", + "g5pX+a": "Rólunk", + gBdUXk: "Mentsd el a kulcsaidat!", + gDZkld: + "A Snort a Nostr protokollnak egyik felülete. A Nostr pedig a ”bejegyzésekˇ tárolására és megosztására létrehozott decentralizált protokoll.", + gDzDRs: "Emoji to send when reactiong to a note", + gjBiyj: "Betöltés...", + hCUivF: "A bejegyzések a globális és bejegyzések fül alatt valós időben jelennek meg", + hK5ZDk: "a világ", + hMzcSq: "Üzenetek", + hY4lzx: "Támogatás", + hicxcO: "Válaszok megjelenítése", + iCqGww: "({n}) reakciók", + iDGAbc: "Szerezz egy Snort azonosítót", + iGT1eE: "Akadályozd meg hogy a kamu fiókok utánozzanak", + iNWbVV: "Azonosító", + ieGrWo: "Követem", + itPgxd: "Profil", + izWS4J: "Követés visszavonása", + "jA3OE/": "{n} {n, plural, =1 {sat} other {sats}}", + jCA7Cw: "Előnézet a Snort-on", + juhqvW: "A belépés biztonságának növelése böngésző kiegészítőkkel", + jvo0vs: "Mentés", + k2veDA: "Írás", + k7sKNy: + "A mi saját NIP-05 azonosítási szolgáltatásunk, amelynek a használatával ennek az oldalnak a fejlesztését segítheted és ezzel egy speciális kitüntetést szerezhetsz!", + lCILNz: "Vásárlás", + "lD3+8a": "Fizetem", + lgg1KN: "Felhasználói felület", + ll3xBp: "Képmegosztó szolgáltató", + lnaT9F: "Követek {n}", + lvlPhZ: "Számla fizetése", + mKAr6h: "Követem mindet", + mKh2HS: "Fájl feltöltő szolgáltatás", + mKhgP9: "{n, plural, =0 {} =1 {zapp-olva} other {zapp-olva}}", + n1xHAH: "Szerezz egy azonosítót (opcionális)", + nDejmx: "Tiltás visszavonása", + nN9XTz: "Oszd meg a gondolataidat {link}", + nwZXeh: "{n} tiltott", + o6Uy3d: "Only the secret key can be used to publish (sign events), everything else logs you in read-only mode.", + "o7e+nJ": "{n} követők", + odFwjL: "Csak a követőimnek", + odhABf: "Bejelentkezés", + osUr8O: "A legtöbb Nostr oldal bejelentkezéséhez, ezeket a kiegészítőket is használhatod", + oxCa4R: + "Egy azonosító megszerzésével segítesz másoknak a te valós fiókod könnyebb megtalálásában. Sokaknak lehet @jack felhasználóneve, de csak egy jack@cash.app létezik.", + pzTOmv: "Követők", + qUJTsT: "Tiltva", + qdGuQo: "A te privát kulcsod (senkivel se oszd meg)", + qkvYUb: "Hozzáadás a profilhoz", + qmJ8kD: "Fordítás nem sikerült", + "r3C4x/": "Szoftver", + rT14Ow: "Csomópont hozzáadása", + reJ6SM: + "Ahhoz hogy a privát kulcsod biztonságban legyen, javasolt a következő böngésző kiegészítők valamelyikét használni:", + rfuMjE: "(Alapértelmezett)", + rrfdTe: "Ez a technológia ugyanaz, mint amivel a tökéletes biztonságát a Bitcoin is sikeresen bizonyította.", + rudscU: "Hiba a követők betöltésénél, kérlek próbáld később", + sWnYKw: "Snort úgy lett tervezve, hogy hasonló élményt nyújtson mint a Twitter.", + svOoEH: + "Az engedély nélküli névfoglalás vagy megszemélyesítés nem engedélyezett. A szabályok megszegéséért, a Snort és partnerei fenntartják maguknak a jogot, hogy azonnal töröljék az azonosítót (nem a fiókot, mert azt nem lehet).", + tOdNiY: "Sötét", + thnRpU: "A NIP-05 azonosítás segíthet:", + "u/vOPu": "Fizetve", + "uD/N6c": "Zap {target} {n} sats", + uSV4Ti: "A megosztásokhoz manuális megerősítés szükséges", + usAvMr: "Profil módosítása", + "ut+2Cd": "Szerezz egy partner azonosítót", + vOKedj: "{n,plural,=1{& {n} other} other{& {n} others}}", + vZ4quW: "A NIP-05 egy DNS alapú azonosítási specifikáció, ami segít a valós személyed bizonyításában.", + wEQDC6: "Módosítás", + wLtRCF: "Your key", + wih7iJ: "név tiltva", + "wqyN/i": "Több információ a {service} itt {link}", + wtLjP6: "Egyedi azonosító", + x82IOl: "Némítás", + xIoGG9: "Menj ide", + xJ9n2N: "A te publikus kulcsod", + xKflGN: "{username} a Nostr-án követ", + xbVgIm: "Média automatikus betöltése", + xmcVZ0: "Keresés", + zFegDD: "Kapcsolat", + zINlao: "Tulajdonos", + zQvVDJ: "Mind", + zcaOTs: "Zap összeg sats-ban", + zjJZBd: "Készen vagy!", + zonsdq: "Az LNURL szolgáltatás betöltése nem sikerült", + zvCDao: "Automatikusan a legfrissebb bejegyzéseket mutassa", +}; diff --git a/packages/app/src/translations/ja.ts b/packages/app/src/translations/ja.ts new file mode 100644 index 00000000..eab4f7ba --- /dev/null +++ b/packages/app/src/translations/ja.ts @@ -0,0 +1,233 @@ +export default { + "+D82kt": "{id}をリポストしますか?", + "+vIQlC": "ハンドルを管理し続けるために、必ず、以下のパスワードを保存してください", + "/4tOwT": "スキップ", + "/JE/X+": "アカウントサポート", + "/RD0e2": + "Nostrはデジタル署名技術を使って投稿の改竄防止を図り、安全に多数のリレーに複製できるようにしてコンテンツの冗長ストレージを提供しています。", + "/d6vEc": "プロフィールを見つけやすく、共有しやすくなります", + "/n5KSF": "{n}ミリ秒", + "0BUTMv": "検索する", + "0mch2Y": "名前に使用できない文字が含まれています", + "0yO7wF": "{n}秒", + "1A7TZk": "Snortって何? どういう仕組み?", + "1udzha": "会話", + "2/2yg+": "追加", + "25V4l1": "バナー", + "2IFGap": "寄付", + "2k0Cv+": "イヤ ({n})", + "3cc4Ct": "ライト", + "3xCwbZ": "OR", + "450Fty": "なし", + "47FYwb": "キャンセル", + "4L2vUY": "新しいNIP-05ハンドル:", + "4OB335": "イヤ", + "4Vmpt4": "Nostr Plebsは宇宙で最初のNIP-05プロバイダのひとつで、豊富なドメインをリーズナブルな価格で提供します", + "4Z3t5i": "imgproxyを使って画像を圧縮します", + "4rYCjn": "自分用メモ", + "5ykRmX": "zapを送る", + "6ewQqw": "スキ ({n})", + "6tUqAb": + "Generate a public / private key pair. Do not share your private key with anyone, this acts as your password. Once lost, it cannot be “reset” or recovered. Keep safe!", + "7+Domh": "投稿", + "7hp70g": "NIP-05", + "7xzTiH": "{target}に{action}", + "8/vBbP": "リポスト ({n})", + "89q5wc": "リポストの確認", + "8E9muH": "Twitterのフォローを取り込む(任意)", + "8QDesP": "{n} satsをzapする", + "8g2vyB": "名前が長すぎます", + "9+Ddtu": "次へ", + "9HU8vw": "返信", + "9SvQep": "{n}フォロー", + "9WRlF4": "送信", + "9gqH2W": "ログイン", + "9wO4wJ": "Lightningインボイス", + ASRK0S: "投稿者はミュートされています", + Adk34V: "プロフィールを設定", + AyGauy: "ログイン", + B4C47Y: "名前が短すぎます", + "B6+XJy": "zapしました", + BOUMjw: "{twitterUsername}に対応するnostrユーザーは見つかりませんでした", + "BcGMo+": "投稿はテキストのコンテンツを持ち、その主な用途は「ツイートのような」メッセージを保持することです。", + "C81/uG": "ログアウト", + CHTbO3: "インボイスの読み込みに失敗しました", + "Cu/K85": "{lang}から翻訳", + D3idYv: "設定", + DKnriN: "satoshiを送る", + DZzCem: "最新{n}件の投稿を表示", + "Dt/Zd5": "選択したユーザーの投稿内のメディアは自動で表示され、それ以外はリンクのみが表示されます", + E8a4yq: "人気のアカウントをフォロー", + EPYwm7: + "秘密鍵はパスワードです。この鍵を失うと、アカウントにアクセスできなくなります! コピーして安全な場所に保管してください。秘密鍵をリセットする方法はありません。", + EWyQH5: "グローバル", + "Ebl/B2": "{lang}に翻訳", + EcglP9: "Key", + EnCOBJ: "購入", + Eqjl5K: "カラフルなドメイン名を使えるのはSnortまたはパートナーのIDだけですが、他のサービスの使用も歓迎します。", + "F+B3x1": "私たちはより多くのオプションを提供するため nostrplebs.com とも提携しています", + FS3b54: "完了!", + FmXUJg: "あなたをフォロー", + "G/yZLu": "削除", + GFOoEE: "Salt", + GspYR7: "{n}イヤ", + H0JBH6: "ログアウト", + "H6/kLh": "支払いが完了しました", + HAlOn1: "名前", + HFls6j: "名前は後で使用できるようになります", + HOzFdo: "ミュート中", + HbefNb: "ウォレットを開く", + IKKHqV: "フォロー", + INSqIz: "Twitterユーザー名...", + "IUZC+0": + "これは、あなたの作成した投稿を誰も変更することができず、また投稿を見た誰でも作成者があなたであることを確認できる、ということを意味します。", + JCIgkj: "ユーザー名", + JHEHCk: "Zap ({n})", + JkLHGw: "ウェブサイト", + K3r6DQ: "削除", + K7AkdL: "表示", + KQvWvD: "削除済み", + KWuDfz: "鍵を保存したので次へ", + KahimY: "不明なイベント種別: {kind}", + LgbKvU: "コメント", + LxY9tW: "Generate Key", + M3Oirc: "デバッグメニュー", + MBAYRO: "「IDをコピー」「イベントJSONをコピー」を全てのメッセージのコンテキストメニューに表示します", + MI2jkA: "利用不可:", + MRp6Ly: "Twitterユーザー名", + MzRYWH: "{item}の購入", + N2IrpM: "確認", + NdOYJJ: "うーん、何もない…… {newUsersPage} をチェックしておすすめのダチョウをフォローしよう!", + NfNk2V: "秘密鍵", + NndBJE: "新規ユーザーページ", + OEW7yJ: "Zap", + OKhRC6: "共有", + P61BTu: "イベントJSONをコピー", + P7FD0F: "システム(デフォルト)", + PCSt5T: "ユーザー設定", + Pe0ogR: "外観", + PrsIg7: "リアクションがすべてのページで表示されます。無効にするとリアクションは表示されません", + QTdJfH: "Create an Account", + QxCuTo: "Art by {name}", + RDZVQL: "チェック", + RahCRH: "失効", + RhDAoS: "{id}を削除しますか?", + RoOyAh: "リレー", + Sjo1P4: "カスタム", + UQ3pOC: + "Nostrでは、多くの人が同一のユーザー名を持ちます。ユーザー名とIDは別のものです。次のステップで固有のIDを入手できます。", + Up5U7K: "ブロック", + VOjC1i: "ファイル添付サービスを選択してください", + VlJkSk: "{n}ミュート", + VnXp8Z: "アバター", + "VtPV/B": "Login with Extension (NIP-07)", + Vx7Zm2: "鍵の役割は?", + W9355R: "ミュート解除", + WONP5O: "twitterのフォローをnostrで見つける(データ提供:{provider})", + WxthCV: "例:ジャック", + XgWvGA: "リアクション", + YDURw6: "サービスURL", + YXA3AH: "リアクションを有効にする", + ZKORll: "今すぐ有効化", + a5UPxh: "NIP-05認証サービスを提供するプラットフォームや開発者に資金援助する", + aWpBzj: "もっと見る", + brAXSu: "ユーザー名を決める", + bxv59V: "たった今", + cWx9t8: "全てミュート", + cuV2gK: "既に登録された名前です", + cyR7Kh: "戻る", + "d7d0/x": "LNアドレス", + dOQCL8: "表示名", + e7qqly: "全て既読にする", + eHAneD: "Reaction emoji", + eJj8HD: "認証を得る", + eR3YIn: "ポスト", + filwqD: "リード", + flnGvv: "思いつくことは?", + "g5pX+a": "自己紹介", + gBdUXk: "鍵を保存する!", + gDZkld: "SnortはNostrのUIで、nostrは「投稿」を保存・配信するための非中央集権型プロトコルです。", + gDzDRs: "Emoji to send when reactiong to a note", + gjBiyj: "読込中…", + hCUivF: "グローバルタブとポストタブで投稿がリアルタイムに流れるようになります", + hK5ZDk: "世界", + hMzcSq: "メッセージ", + hY4lzx: "対応", + hicxcO: "返信を見る", + iCqGww: "リアクション ({n})", + iDGAbc: "Snort IDを入手", + iGT1eE: "フェイクアカウントがあなたになりすますのを防ぐ", + iNWbVV: "ハンドル", + ieGrWo: "フォロー", + itPgxd: "プロフィール", + izWS4J: "フォロー解除", + "jA3OE/": "{n,plural,=1{{n} sat} other{{n} sats}}", + jCA7Cw: "snortでプレビュー", + juhqvW: "ブラウザエクステンションでログインのセキュリティを向上", + jvo0vs: "保存", + k2veDA: "ライト", + k7sKNy: + "私たち独自のNIP-05認証サービスです。このサイトの開発を支援し、ピカピカの特別なバッジを私たちのサイトで使えるようになります!", + lCILNz: "購入", + "lD3+8a": "支払う", + lgg1KN: "アカウントページ", + ll3xBp: "画像プロキシサービス", + lnaT9F: "{n}フォロー中", + lvlPhZ: "インボイスを精算", + mKAr6h: "全てフォロー", + mKh2HS: "ファイル添付サービス", + mKhgP9: "{n, plural, =0 {} =1 {がzapしました} other {がzapしました}}", + n1xHAH: "IDを入手(任意)", + nDejmx: "ブロック解除", + nN9XTz: "{link}であなたの考えを共有する", + nwZXeh: "{n}ブロック", + o6Uy3d: "Only the secret key can be used to publish (sign events), everything else logs you in read-only mode.", + "o7e+nJ": "{n}フォロワー", + odFwjL: "フォローのみ", + odhABf: "ログイン", + osUr8O: "これらのエクステンションは、ほとんどのNostrサイトでログインにも使えます。", + oxCa4R: + "IDを入手すると、あなたを知っている人があなたを確認するのに役立ちます。@jackというユーザー名の人はたくさんいても、jack@cash.appは一人だけです。", + pzTOmv: "フォロワー", + qUJTsT: "ブロック", + qdGuQo: "あなたの秘密鍵(誰とも共有しないこと)", + qkvYUb: "プロフィールに追加", + qmJ8kD: "翻訳できませんでした", + "r3C4x/": "ソフトウェア", + rT14Ow: "リレーを追加する", + reJ6SM: + "デスクトップパソコンを使っている場合、こちらのブラウザエクステンションのいずれかを使って鍵を保護することをおすすめします:", + rfuMjE: "(デフォルト)", + rrfdTe: "これはビットコインで使われているのと同じ技術で、高度に安全であることが証明されています。", + rudscU: "フォローの読み込みに失敗、後でやり直してください", + sWnYKw: "SnortはTwitterに似た体験を得るようデザインされています。", + svOoEH: + "サイバースクワッティング・なりすましは禁止されています。ルールに抵触した場合、Snortとパートナーはハンドルを停止する権利を保有します。(アカウントではありません。それは誰にも取り上げることはできません。)", + tOdNiY: "ダーク", + thnRpU: "NIP-05認証を得るメリット:", + "u/vOPu": "支払済", + "uD/N6c": "{target}に{n} satsをzapする", + uSV4Ti: "リポスト前に確認を表示します", + usAvMr: "プロフィールを編集", + "ut+2Cd": "パートナーIDを入手", + vOKedj: "{n,plural,=1{& {n} other} other{& {n} others}}", + vZ4quW: "NIP-05はDNSベースの認証仕様で、ユーザーが本物であることを認証する手助けになります。", + wEQDC6: "編集", + wLtRCF: "Your key", + wih7iJ: "名前がブロックされています", + "wqyN/i": "{service}の詳細を{link}で見る", + wtLjP6: "IDをコピー", + x82IOl: "ミュート", + xIoGG9: "開く:", + xJ9n2N: "公開鍵", + xKflGN: "{username}のNostrでのフォロー", + xbVgIm: "メディアを自動で読み込む", + xmcVZ0: "検索", + zFegDD: "連絡先", + zINlao: "運営者", + zQvVDJ: "すべて", + zcaOTs: "Zap額 (satoshi)", + zjJZBd: "準備完了!", + zonsdq: "LNURLサービスの読み込みに失敗しました", + zvCDao: "最新の記事を自動で表示する", +}; diff --git a/packages/app/src/translations/zh.ts b/packages/app/src/translations/zh.ts new file mode 100644 index 00000000..5f883011 --- /dev/null +++ b/packages/app/src/translations/zh.ts @@ -0,0 +1,235 @@ +export default { + "+D82kt": "确定要转发 {id}", + "+vIQlC": "Please make sure to save the following password in order to manage your handle in the future", + "/4tOwT": "Skip", + "/JE/X+": "账户支持", + "/RD0e2": + "Nostr uses digital signature technology to provide tamper proof notes which can safely be replicated to many relays to provide redundant storage of your content.", + "/d6vEc": "Make your profile easier to find and share", + "/n5KSF": "{n} ms", + "0BUTMv": "搜索。。。", + "0mch2Y": "name has disallowed characters", + "0yO7wF": "{n} secs", + "1A7TZk": "What is Snort and how does it work?", + "1udzha": "聊天", + "2/2yg+": "添加", + "25V4l1": "横幅", + "2IFGap": "捐赠", + "2k0Cv+": "Dislikes ({n})", + "3cc4Ct": "浅色", + "3xCwbZ": "OR", + "450Fty": "无", + "47FYwb": "取消", + "4L2vUY": "Your new NIP-05 handle is:", + "4OB335": "Dislike", + "4Vmpt4": + "Nostr Plebs is one of the first NIP-05 providers in the space and offers a good collection of domains at reasonable prices", + "4Z3t5i": "使用imgproxy压缩图片", + "4rYCjn": "Note to Self", + "5ykRmX": "Send zap", + "6ewQqw": "Likes ({n})", + "6tUqAb": + "Generate a public / private key pair. Do not share your private key with anyone, this acts as your password. Once lost, it cannot be “reset” or recovered. Keep safe!", + "7+Domh": "Notes", + "7hp70g": "NIP-05", + "7xzTiH": "{action} to {target}", + "8/vBbP": "Reposts ({n})", + "89q5wc": "Confirm Reposts", + "8E9muH": "Import Twitter Follows (optional)", + "8QDesP": "Zap {n} sats", + "8g2vyB": "名称过长", + "9+Ddtu": "Next", + "9HU8vw": "回复", + "9SvQep": "Follows {n}", + "9WRlF4": "发送", + "9gqH2W": "登录", + "9wO4wJ": "闪电发票", + ASRK0S: "该作者已被屏蔽", + Adk34V: "Setup your Profile", + AyGauy: "登录", + B4C47Y: "名称过短", + "B6+XJy": "zapped", + BOUMjw: "No nostr users found for {twitterUsername}", + "BcGMo+": 'Notes hold text content, the most popular usage of these notes is to store "tweet like" messages.', + "C81/uG": "登出", + CHTbO3: "Failed to load invoice", + "Cu/K85": "Translated from {lang}", + D3idYv: "设置", + DKnriN: "发送聪", + DZzCem: "Show latest {n} notes", + "Dt/Zd5": "Media in posts will automatically be shown for selected people, otherwise only the link will show", + E8a4yq: "Follow some popular accounts", + EPYwm7: + "Your private key is your password. If you lose this key, you will lose access to your account! Copy it and keep it in a safe place. There is no way to reset your private key.", + EWyQH5: "广场", + "Ebl/B2": "Translate to {lang}", + EcglP9: "Key", + EnCOBJ: "Buy", + Eqjl5K: + "Only Snort and our integration partner identifier gives you a colorful domain name, but you are welcome to use other services too.", + "F+B3x1": "We have also partnered with nostrplebs.com to give you more options", + FS3b54: "Done!", + FmXUJg: "关注你", + "G/yZLu": "移除", + GFOoEE: "Salt", + GspYR7: "{n} Dislike", + H0JBH6: "注销", + "H6/kLh": "订单已支付!", + HAlOn1: "名称", + HFls6j: "name will be available later", + HOzFdo: "已屏蔽", + HbefNb: "打开钱包", + IKKHqV: "关注", + INSqIz: "Twitter username...", + "IUZC+0": + "This means that nobody can modify notes which you have created and everybody can easily verify that the notes they are reading are created by you.", + JCIgkj: "Username", + JHEHCk: "Zaps ({n})", + JkLHGw: "网站", + K3r6DQ: "删除", + K7AkdL: "显示", + KQvWvD: "已删除", + KWuDfz: "I have saved my keys, continue", + KahimY: "Unknown event kind: {kind}", + LgbKvU: "评论", + LxY9tW: "Generate Key", + M3Oirc: "调试菜单", + MBAYRO: 'Shows "Copy ID" and "Copy Event JSON" in the context menu on each message', + MI2jkA: "Not available:", + MRp6Ly: "Twitter username", + MzRYWH: "购买{条目}", + N2IrpM: "确认", + NdOYJJ: "Hmm nothing here.. Checkout {newUsersPage} to follow some recommended nostrich's!", + NfNk2V: "Your private key", + NndBJE: "New users page", + OEW7yJ: "Zaps", + OKhRC6: "分享", + P61BTu: "复制事件 JSON", + P7FD0F: "系统(默认)", + PCSt5T: "首选项", + Pe0ogR: "主题", + PrsIg7: "Reactions will be shown on every page, if disabled no reactions will be shown", + QTdJfH: "Create an Account", + QxCuTo: "Art by {name}", + RDZVQL: "Check", + RahCRH: "已过期", + RhDAoS: "确定要删除 {id}", + RoOyAh: "中继器", + Sjo1P4: "自定义", + UQ3pOC: + "On Nostr, many people have the same username. User names and identity are separate things. You can get a unique identifier in the next step.", + Up5U7K: "拉黑", + VOjC1i: "Pick which upload service you want to upload attachments to", + VlJkSk: "{n} muted", + VnXp8Z: "头像", + "VtPV/B": "Login with Extension (NIP-07)", + Vx7Zm2: "How do keys work?", + W9355R: "取消屏蔽", + WONP5O: "Find your twitter follows on nostr (Data provided by {provider})", + WxthCV: "e.g. Jack", + XgWvGA: "回应", + YDURw6: "Service URL", + YXA3AH: "Enable reactions", + ZKORll: "马上激活", + a5UPxh: "Fund developers and platforms providing NIP-05 verification services", + aWpBzj: "显示更多", + brAXSu: "Pick a username", + bxv59V: "刚刚", + cWx9t8: "屏蔽所有", + cuV2gK: "名称已被注册", + cyR7Kh: "返回", + "d7d0/x": "LN 地址", + dOQCL8: "显示名称", + e7qqly: "全标已读", + eHAneD: "Reaction emoji", + eJj8HD: "Get Verified", + eR3YIn: "帖子", + filwqD: "Read", + flnGvv: "What's on your mind?", + "g5pX+a": "关于", + gBdUXk: "Save your keys!", + gDZkld: 'Snort is a Nostr UI, nostr is a decentralised protocol for saving and distributing "notes".', + gDzDRs: "Emoji to send when reactiong to a note", + gjBiyj: "加载中。。。", + hCUivF: "Notes will stream in real time into global and posts tab", + hK5ZDk: "the world", + hMzcSq: "消息", + hY4lzx: "Supports", + hicxcO: "Show replies", + iCqGww: "回应({n})", + iDGAbc: "Get a Snort identifier", + iGT1eE: "Prevent fake accounts from imitating you", + iNWbVV: "Handle", + ieGrWo: "关注", + itPgxd: "个人资料", + izWS4J: "取消关注", + "jA3OE/": "{n,plural,=1{{n} sat} other{{n} sats}}", + jCA7Cw: "Preview on snort", + juhqvW: "Improve login security with browser extensions", + jvo0vs: "保存", + k2veDA: "Write", + k7sKNy: + "Our very own NIP-05 verification service, help support the development of this site and get a shiny special badge on our site!", + lCILNz: "马上购买", + "lD3+8a": "付款", + lgg1KN: "账户页面", + ll3xBp: "图片代理服务", + lnaT9F: "Following {n}", + lvlPhZ: "Pay Invoice", + mKAr6h: "关注所有", + mKh2HS: "文件上传服务", + mKhgP9: "{n,plural,=0{} =1{zapped} other{zapped}}", + n1xHAH: "Get an identifier (optional)", + nDejmx: "Unblock", + nN9XTz: "Share your thoughts with {link}", + nwZXeh: "{n}已拉黑", + o6Uy3d: "Only the secret key can be used to publish (sign events), everything else logs you in read-only mode.", + "o7e+nJ": "{n} 的粉丝", + odFwjL: "仅关注", + odhABf: "登录", + osUr8O: "You can also use these extensions to login to most Nostr sites.", + oxCa4R: + "Getting an identifier helps confirm the real you to people who know you. Many people can have a username @jack, but there is only one jack@cash.app.", + pzTOmv: "粉丝", + qUJTsT: "已拉黑", + qdGuQo: "Your Private Key Is (do not share this with anyone)", + qkvYUb: "添加个人资料", + qmJ8kD: "Translation failed", + "r3C4x/": "软件", + rT14Ow: "添加中继器", + reJ6SM: + "It is recommended to use one of the following browser extensions if you are on a desktop computer to secure your key:", + rfuMjE: "(默认)", + rrfdTe: "This is the same technology which is used by Bitcoin and has been proven to be extremely secure.", + rudscU: "Failed to load follows, please try again later", + sWnYKw: "Snort is designed to have a similar experience to Twitter.", + svOoEH: + "Name-squatting and impersonation is not allowed. Snort and our partners reserve the right to terminate your handle (not your account - nobody can take that away) for violating this rule.", + tOdNiY: "深色", + thnRpU: "Getting NIP-05 verified can help:", + "u/vOPu": "已付款", + "uD/N6c": "Zap {target} {n} sats", + uSV4Ti: "Reposts need to be manually confirmed", + usAvMr: "编辑个人资料", + "ut+2Cd": "Get a partner identifier", + vOKedj: "{n,plural,=1{& {n} other} other{& {n} others}}", + vZ4quW: "NIP-05 is a DNS based verification spec which helps to validate you as a real user.", + wEQDC6: "编辑", + wLtRCF: "Your key", + wih7iJ: "name is blocked", + "wqyN/i": "Find out more info about {service} at {link}", + wtLjP6: "复制 ID", + x82IOl: "屏蔽", + xIoGG9: "Go to", + xJ9n2N: "Your public key", + xKflGN: "{username}''s Follows on Nostr", + xbVgIm: "自动加载媒体", + xmcVZ0: "搜索", + zFegDD: "联系人", + zINlao: "Owner", + zQvVDJ: "全部", + zcaOTs: "Zap amount in sats", + zjJZBd: "You're ready!", + zonsdq: "文件上传服务", + zvCDao: "Automatically show latest notes", +}; diff --git a/src/useCopy.ts b/packages/app/src/useCopy.ts similarity index 100% rename from src/useCopy.ts rename to packages/app/src/useCopy.ts diff --git a/transifex.yml b/packages/app/transifex.yml similarity index 100% rename from transifex.yml rename to packages/app/transifex.yml diff --git a/tsconfig.json b/packages/app/tsconfig.json similarity index 87% rename from tsconfig.json rename to packages/app/tsconfig.json index 1b98689a..d3925f75 100644 --- a/tsconfig.json +++ b/packages/app/tsconfig.json @@ -9,6 +9,7 @@ "skipLibCheck": true, "resolveJsonModule": true, "allowSyntheticDefaultImports": true, - "allowJs": true + "allowJs": true, + "composite": true } } diff --git a/packages/nostr/.gitignore b/packages/nostr/.gitignore new file mode 100644 index 00000000..849ddff3 --- /dev/null +++ b/packages/nostr/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/nostr/package.json b/packages/nostr/package.json new file mode 100644 index 00000000..b291a25f --- /dev/null +++ b/packages/nostr/package.json @@ -0,0 +1,13 @@ +{ + "name": "@snort/nostr", + "version": "1.0.0", + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", + "scripts": { + "build": "tsc", + "watch": "tsc -w" + }, + "devDependencies": { + "typescript": "^4.9.5" + } +} diff --git a/src/Nostr/Connection.ts b/packages/nostr/src/Connection.ts similarity index 91% rename from src/Nostr/Connection.ts rename to packages/nostr/src/Connection.ts index d07cead0..7a9ce44d 100644 --- a/src/Nostr/Connection.ts +++ b/packages/nostr/src/Connection.ts @@ -1,15 +1,15 @@ import * as secp from "@noble/secp256k1"; import { v4 as uuid } from "uuid"; -import { Subscriptions } from "Nostr/Subscriptions"; -import { default as NEvent } from "Nostr/Event"; -import { DefaultConnectTimeout } from "Const"; -import { ConnectionStats } from "Nostr/ConnectionStats"; -import { RawEvent, RawReqFilter, TaggedRawEvent, u256 } from "Nostr"; +import { Subscriptions } from "./Subscriptions"; +import { default as NEvent } from "./Event"; +import { DefaultConnectTimeout } from "./Const"; +import { ConnectionStats } from "./ConnectionStats"; +import { RawEvent, RawReqFilter, TaggedRawEvent, u256 } from "./index"; import { RelayInfo } from "./RelayInfo"; import Nips from "./Nips"; import { System } from "./System"; -import { unwrap } from "Util"; +import { unwrap } from "./Util"; export type CustomHook = (state: Readonly) => void; @@ -116,9 +116,9 @@ export default class Connection { this.IsClosed = false; this.Socket = new WebSocket(this.Address); this.Socket.onopen = () => this.OnOpen(); - this.Socket.onmessage = e => this.OnMessage(e); - this.Socket.onerror = e => this.OnError(e); - this.Socket.onclose = e => this.OnClose(e); + this.Socket.onmessage = (e) => this.OnMessage(e); + this.Socket.onerror = (e) => this.OnError(e); + this.Socket.onclose = (e) => this.OnClose(e); } Close() { @@ -141,7 +141,9 @@ export default class Connection { if (!this.IsClosed) { this.ConnectTimeout = this.ConnectTimeout * 2; console.log( - `[${this.Address}] Closed (${e.reason}), trying again in ${(this.ConnectTimeout / 1000) + `[${this.Address}] Closed (${e.reason}), trying again in ${( + this.ConnectTimeout / 1000 + ) .toFixed(0) .toLocaleString()} sec` ); @@ -222,7 +224,7 @@ export default class Connection { * Send event on this connection and wait for OK response */ async SendAsync(e: NEvent, timeout = 5000) { - return new Promise(resolve => { + return new Promise((resolve) => { if (!this.Settings.write) { resolve(); return; @@ -302,7 +304,7 @@ export default class Connection { * Using relay document to determine if this relay supports a feature */ SupportsNip(n: number) { - return this.Info?.supported_nips?.some(a => a === n) ?? false; + return this.Info?.supported_nips?.some((a) => a === n) ?? false; } _UpdateState() { @@ -310,7 +312,10 @@ export default class Connection { this.CurrentState.events.received = this.Stats.EventsReceived; this.CurrentState.events.send = this.Stats.EventsSent; this.CurrentState.avgLatency = - this.Stats.Latency.length > 0 ? this.Stats.Latency.reduce((acc, v) => acc + v, 0) / this.Stats.Latency.length : 0; + this.Stats.Latency.length > 0 + ? this.Stats.Latency.reduce((acc, v) => acc + v, 0) / + this.Stats.Latency.length + : 0; this.CurrentState.disconnects = this.Stats.Disconnects; this.CurrentState.info = this.Info; this.CurrentState.id = this.Id; @@ -347,7 +352,7 @@ export default class Connection { let req = ["REQ", sub.Id, sub.ToObject()]; if (sub.OrSubs.length > 0) { - req = [...req, ...sub.OrSubs.map(o => o.ToObject())]; + req = [...req, ...sub.OrSubs.map((o) => o.ToObject())]; } sub.Started.set(this.Address, new Date().getTime()); this._SendJson(req); @@ -382,7 +387,7 @@ export default class Connection { }; this.AwaitingAuth.set(challenge, true); const authEvent = await System.nip42Auth(challenge, this.Address); - return new Promise(resolve => { + return new Promise((resolve) => { if (!authEvent) { authCleanup(); return Promise.reject("no event"); @@ -419,7 +424,11 @@ export default class Connection { if (started) { const responseTime = now - started; if (responseTime > 10_000) { - console.warn(`[${this.Address}][${subId}] Slow response time ${(responseTime / 1000).toFixed(1)} seconds`); + console.warn( + `[${this.Address}][${subId}] Slow response time ${( + responseTime / 1000 + ).toFixed(1)} seconds` + ); } this.Stats.Latency.push(responseTime); } else { diff --git a/src/Nostr/ConnectionStats.ts b/packages/nostr/src/ConnectionStats.ts similarity index 100% rename from src/Nostr/ConnectionStats.ts rename to packages/nostr/src/ConnectionStats.ts diff --git a/packages/nostr/src/Const.ts b/packages/nostr/src/Const.ts new file mode 100644 index 00000000..eb6c9b28 --- /dev/null +++ b/packages/nostr/src/Const.ts @@ -0,0 +1,149 @@ +import { RelaySettings } from "./Connection"; + +/** + * Add-on api for snort features + */ +export const ApiHost = "https://api.snort.social"; + +/** + * LibreTranslate endpoint + */ +export const TranslateHost = "https://translate.snort.social"; + +/** + * Void.cat file upload service url + */ +export const VoidCatHost = "https://void.cat"; + +/** + * Kierans pubkey + */ +export const KieranPubKey = + "npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49"; + +/** + * Official snort account + */ +export const SnortPubKey = + "npub1sn0rtcjcf543gj4wsg7fa59s700d5ztys5ctj0g69g2x6802npjqhjjtws"; + +/** + * Websocket re-connect timeout + */ +export const DefaultConnectTimeout = 2000; + +/** + * How long profile cache should be considered valid for + */ +export const ProfileCacheExpire = 1_000 * 60 * 5; + +/** + * Default bootstrap relays + */ +export const DefaultRelays = new Map([ + ["wss://relay.snort.social", { read: true, write: true }], + ["wss://eden.nostr.land", { read: true, write: true }], + ["wss://atlas.nostr.land", { read: true, write: true }], +]); + +/** + * Default search relays + */ +export const SearchRelays = new Map([ + ["wss://relay.nostr.band", { read: true, write: false }], +]); + +/** + * List of recommended follows for new users + */ +export const RecommendedFollows = [ + "82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2", // jack + "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d", // fiatjaf + "020f2d21ae09bf35fcdfb65decf1478b846f5f728ab30c5eaabcd6d081a81c3e", // adam3us + "6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93", // gigi + "63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed", // Kieran + "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245", // jb55 + "e33fe65f1fde44c6dc17eeb38fdad0fceaf1cae8722084332ed1e32496291d42", // wiz + "00000000827ffaa94bfea288c3dfce4422c794fbb96625b6b31e9049f729d700", // cameri + "A341F45FF9758F570A21B000C17D4E53A3A497C8397F26C0E6D61E5ACFFC7A98", // Saylor + "E88A691E98D9987C964521DFF60025F60700378A4879180DCBBB4A5027850411", // NVK + "C4EABAE1BE3CF657BC1855EE05E69DE9F059CB7A059227168B80B89761CBC4E0", // jackmallers + "85080D3BAD70CCDCD7F74C29A44F55BB85CBCD3DD0CBB957DA1D215BDB931204", // preston + "C49D52A573366792B9A6E4851587C28042FB24FA5625C6D67B8C95C8751ACA15", // holdonaut + "83E818DFBECCEA56B0F551576B3FD39A7A50E1D8159343500368FA085CCD964B", // jeffbooth + "3F770D65D3A764A9C5CB503AE123E62EC7598AD035D836E2A810F3877A745B24", // DerekRoss + "472F440F29EF996E92A186B8D320FF180C855903882E59D50DE1B8BD5669301E", // MartyBent + "1577e4599dd10c863498fe3c20bd82aafaf829a595ce83c5cf8ac3463531b09b", // yegorpetrov + "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9", // ODELL + "7fa56f5d6962ab1e3cd424e758c3002b8665f7b0d8dcee9fe9e288d7751ac194", // verbiricha + "52b4a076bcbbbdc3a1aefa3735816cf74993b1b8db202b01c883c58be7fad8bd", // semisol +]; + +/** + * Regex to match email address + */ +export const EmailRegex = + // eslint-disable-next-line no-useless-escape + /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + +/** + * Generic URL regex + */ +export const UrlRegex = + // eslint-disable-next-line no-useless-escape + /((?:http|ftp|https):\/\/(?:[\w+?\.\w+])+(?:[a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?)/i; + +/** + * Extract file extensions regex + */ +// eslint-disable-next-line no-useless-escape +export const FileExtensionRegex = /\.([\w]+)$/i; + +/** + * Extract note reactions regex + */ +export const MentionRegex = /(#\[\d+\])/gi; + +/** + * Simple lightning invoice regex + */ +export const InvoiceRegex = /(lnbc\w+)/i; + +/** + * YouTube URL regex + */ +export const YoutubeUrlRegex = + /(?:https?:\/\/)?(?:www|m\.)?(?:youtu\.be\/|youtube\.com\/(?:shorts\/|embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})/; + +/** + * Tweet Regex + */ +export const TweetUrlRegex = + /https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)/; + +/** + * Hashtag regex + */ +// eslint-disable-next-line no-useless-escape +export const HashtagRegex = /(#[^\s!@#$%^&*()=+.\/,\[{\]};:'"?><]+)/; + +/** + * Tidal share link regex + */ +export const TidalRegex = /tidal\.com\/(?:browse\/)?(\w+)\/([a-z0-9-]+)/i; + +/** + * SoundCloud regex + */ +export const SoundCloudRegex = + /soundcloud\.com\/(?!live)([a-zA-Z0-9]+)\/([a-zA-Z0-9-]+)/; + +/** + * Mixcloud regex + */ + +export const MixCloudRegex = + /mixcloud\.com\/(?!live)([a-zA-Z0-9]+)\/([a-zA-Z0-9-]+)/; + +export const SpotifyRegex = + /open\.spotify\.com\/(track|album|playlist|episode)\/([a-zA-Z0-9]+)/; diff --git a/src/Nostr/Event.ts b/packages/nostr/src/Event.ts similarity index 88% rename from src/Nostr/Event.ts rename to packages/nostr/src/Event.ts index 2ac388db..e7493fb9 100644 --- a/src/Nostr/Event.ts +++ b/packages/nostr/src/Event.ts @@ -1,9 +1,9 @@ import * as secp from "@noble/secp256k1"; import * as base64 from "@protobufjs/base64"; -import { HexKey, RawEvent, TaggedRawEvent } from "Nostr"; -import EventKind from "Nostr/EventKind"; -import Tag from "Nostr/Tag"; -import Thread from "Nostr/Thread"; +import { HexKey, RawEvent, TaggedRawEvent } from "./index"; +import EventKind from "./EventKind"; +import Tag from "./Tag"; +import Thread from "./Thread"; export default class Event { /** @@ -67,7 +67,7 @@ export default class Event { * Get the pub key of the creator of this event NIP-26 */ get RootPubKey() { - const delegation = this.Tags.find(a => a.Key === "delegation"); + const delegation = this.Tags.find((a) => a.Key === "delegation"); if (delegation?.PubKey) { return delegation.PubKey; } @@ -103,7 +103,7 @@ export default class Event { this.PubKey, this.CreatedAt, this.Kind, - this.Tags.map(a => a.ToObject()).filter(a => a !== null), + this.Tags.map((a) => a.ToObject()).filter((a) => a !== null), this.Content, ]; @@ -124,8 +124,8 @@ export default class Event { created_at: this.CreatedAt, kind: this.Kind, tags: this.Tags.sort((a, b) => a.Index - b.Index) - .map(a => a.ToObject()) - .filter(a => a !== null), + .map((a) => a.ToObject()) + .filter((a) => a !== null), content: this.Content, sig: this.Signature, }; @@ -156,7 +156,11 @@ export default class Event { data ); const uData = new Uint8Array(result); - return `${base64.encode(uData, 0, result.byteLength)}?iv=${base64.encode(iv, 0, 16)}`; + return `${base64.encode(uData, 0, result.byteLength)}?iv=${base64.encode( + iv, + 0, + 16 + )}`; } /** @@ -199,6 +203,12 @@ export default class Event { async _GetDmSharedKey(pubkey: HexKey, privkey: HexKey) { const sharedPoint = secp.getSharedSecret(privkey, "02" + pubkey); const sharedX = sharedPoint.slice(1, 33); - return await window.crypto.subtle.importKey("raw", sharedX, { name: "AES-CBC" }, false, ["encrypt", "decrypt"]); + return await window.crypto.subtle.importKey( + "raw", + sharedX, + { name: "AES-CBC" }, + false, + ["encrypt", "decrypt"] + ); } } diff --git a/src/Nostr/EventKind.ts b/packages/nostr/src/EventKind.ts similarity index 95% rename from src/Nostr/EventKind.ts rename to packages/nostr/src/EventKind.ts index 021a4bb5..2ab6297d 100644 --- a/src/Nostr/EventKind.ts +++ b/packages/nostr/src/EventKind.ts @@ -1,4 +1,4 @@ -const enum EventKind { +enum EventKind { Unknown = -1, SetMetadata = 0, TextNote = 1, diff --git a/src/Nostr/Links.ts b/packages/nostr/src/Links.ts similarity index 100% rename from src/Nostr/Links.ts rename to packages/nostr/src/Links.ts diff --git a/src/Nostr/Nips.ts b/packages/nostr/src/Nips.ts similarity index 100% rename from src/Nostr/Nips.ts rename to packages/nostr/src/Nips.ts diff --git a/src/Nostr/RelayInfo.ts b/packages/nostr/src/RelayInfo.ts similarity index 100% rename from src/Nostr/RelayInfo.ts rename to packages/nostr/src/RelayInfo.ts diff --git a/src/Nostr/Subscriptions.ts b/packages/nostr/src/Subscriptions.ts similarity index 96% rename from src/Nostr/Subscriptions.ts rename to packages/nostr/src/Subscriptions.ts index d22050d8..40f6cff9 100644 --- a/src/Nostr/Subscriptions.ts +++ b/packages/nostr/src/Subscriptions.ts @@ -1,7 +1,7 @@ import { v4 as uuid } from "uuid"; -import { TaggedRawEvent, RawReqFilter, u256 } from "Nostr"; -import Connection from "Nostr/Connection"; -import EventKind from "Nostr/EventKind"; +import { TaggedRawEvent, RawReqFilter, u256 } from "./index"; +import Connection from "./Connection"; +import EventKind from "./EventKind"; export type NEventHandler = (e: TaggedRawEvent) => void; export type OnEndHandler = (c: Connection) => void; diff --git a/src/Nostr/System.ts b/packages/nostr/src/System.ts similarity index 70% rename from src/Nostr/System.ts rename to packages/nostr/src/System.ts index 8d9cc48f..0001f6ca 100644 --- a/src/Nostr/System.ts +++ b/packages/nostr/src/System.ts @@ -1,11 +1,46 @@ -import { HexKey, TaggedRawEvent } from "Nostr"; -import { ProfileCacheExpire } from "Const"; -import { mapEventToProfile, UsersDb } from "State/Users"; -import Connection, { RelaySettings } from "Nostr/Connection"; -import Event from "Nostr/Event"; -import EventKind from "Nostr/EventKind"; -import { Subscriptions } from "Nostr/Subscriptions"; -import { unwrap } from "Util"; +import { HexKey, TaggedRawEvent, UserMetadata } from "./index"; +import { ProfileCacheExpire } from "./Const"; +import Connection, { RelaySettings } from "./Connection"; +import Event from "./Event"; +import EventKind from "./EventKind"; +import { Subscriptions } from "./Subscriptions"; +import { hexToBech32, unwrap } from "./Util"; + +// TODO This interface is repeated in State/Users, revisit this. +export interface MetadataCache extends UserMetadata { + /** + * When the object was saved in cache + */ + loaded: number; + + /** + * When the source metadata event was created + */ + created: number; + + /** + * The pubkey of the owner of this metadata + */ + pubkey: HexKey; + + /** + * The bech32 encoded pubkey + */ + npub: string; +} + +// TODO This interface is repeated in State/Users, revisit this. +export interface UsersDb { + isAvailable(): Promise; + query(str: string): Promise; + find(key: HexKey): Promise; + add(user: MetadataCache): Promise; + put(user: MetadataCache): Promise; + bulkAdd(users: MetadataCache[]): Promise; + bulkGet(keys: HexKey[]): Promise; + bulkPut(users: MetadataCache[]): Promise; + update(key: HexKey, fields: Record): Promise; +} /** * Manages nostr content retrieval system @@ -137,7 +172,7 @@ export class NostrSystem { * Request/Response pattern */ RequestSubscription(sub: Subscriptions) { - return new Promise(resolve => { + return new Promise((resolve) => { const events: TaggedRawEvent[] = []; // force timeout returning current results @@ -147,14 +182,14 @@ export class NostrSystem { }, 10_000); const onEventPassthrough = sub.OnEvent; - sub.OnEvent = ev => { + sub.OnEvent = (ev) => { if (typeof onEventPassthrough === "function") { onEventPassthrough(ev); } - if (!events.some(a => a.id === ev.id)) { + if (!events.some((a) => a.id === ev.id)) { events.push(ev); } else { - const existing = events.find(a => a.id === ev.id); + const existing = events.find((a) => a.id === ev.id); if (existing) { for (const v of ev.relays) { existing.relays.push(v); @@ -162,7 +197,7 @@ export class NostrSystem { } } }; - sub.OnEnd = c => { + sub.OnEnd = (c) => { c.RemoveSubscription(sub.Id); if (sub.IsFinished()) { clearInterval(timeout); @@ -180,7 +215,7 @@ export class NostrSystem { const meta = await this.UserDb.bulkGet(Array.from(this.WantsMetadata)); const expire = new Date().getTime() - ProfileCacheExpire; for (const pk of this.WantsMetadata) { - const m = meta.find(a => a?.pubkey === pk); + const m = meta.find((a) => a?.pubkey === pk); if (!m || m.loaded < expire) { missing.add(pk); // cap 100 missing profiles @@ -197,7 +232,7 @@ export class NostrSystem { sub.Id = `profiles:${sub.Id.slice(0, 8)}`; sub.Kinds = new Set([EventKind.SetMetadata]); sub.Authors = missing; - sub.OnEvent = async e => { + sub.OnEvent = async (e) => { const profile = mapEventToProfile(e); const userDb = unwrap(this.UserDb); if (profile) { @@ -212,17 +247,19 @@ export class NostrSystem { } }; const results = await this.RequestSubscription(sub); - const couldNotFetch = Array.from(missing).filter(a => !results.some(b => b.pubkey === a)); + const couldNotFetch = Array.from(missing).filter( + (a) => !results.some((b) => b.pubkey === a) + ); console.debug("No profiles: ", couldNotFetch); if (couldNotFetch.length > 0) { const updates = couldNotFetch - .map(a => { + .map((a) => { return { pubkey: a, loaded: new Date().getTime(), }; }) - .map(a => unwrap(this.UserDb).update(a.pubkey, a)); + .map((a) => unwrap(this.UserDb).update(a.pubkey, a)); await Promise.all(updates); } } @@ -230,7 +267,23 @@ export class NostrSystem { setTimeout(() => this._FetchMetadata(), 500); } - nip42Auth: (challenge: string, relay: string) => Promise = async () => undefined; + nip42Auth: (challenge: string, relay: string) => Promise = + async () => undefined; +} + +function mapEventToProfile(ev: TaggedRawEvent) { + try { + const data: UserMetadata = JSON.parse(ev.content); + return { + pubkey: ev.pubkey, + npub: hexToBech32("npub", ev.pubkey), + created: ev.created_at, + loaded: new Date().getTime(), + ...data, + } as MetadataCache; + } catch (e) { + console.error("Failed to parse JSON", ev, e); + } } export const System = new NostrSystem(); diff --git a/src/Nostr/Tag.ts b/packages/nostr/src/Tag.ts similarity index 91% rename from src/Nostr/Tag.ts rename to packages/nostr/src/Tag.ts index 11ab41e3..d2ca31b0 100644 --- a/src/Nostr/Tag.ts +++ b/packages/nostr/src/Tag.ts @@ -1,5 +1,5 @@ -import { HexKey, u256 } from "Nostr"; -import { unwrap } from "Util"; +import { HexKey, u256 } from "./index"; +import { unwrap } from "./Util"; export default class Tag { Original: string[]; @@ -57,7 +57,7 @@ export default class Tag { switch (this.Key) { case "e": { let ret = ["e", this.Event, this.Relay, this.Marker]; - const trimEnd = ret.reverse().findIndex(a => a !== undefined); + const trimEnd = ret.reverse().findIndex((a) => a !== undefined); ret = ret.reverse().slice(0, ret.length - trimEnd); return ret; } diff --git a/src/Nostr/Thread.ts b/packages/nostr/src/Thread.ts similarity index 57% rename from src/Nostr/Thread.ts rename to packages/nostr/src/Thread.ts index b26b5241..b753ac0e 100644 --- a/src/Nostr/Thread.ts +++ b/packages/nostr/src/Thread.ts @@ -1,7 +1,7 @@ -import { u256 } from "Nostr"; -import { default as NEvent } from "Nostr/Event"; -import EventKind from "Nostr/EventKind"; -import Tag from "Nostr/Tag"; +import { u256 } from "./index"; +import { default as NEvent } from "./Event"; +import EventKind from "./EventKind"; +import Tag from "./Tag"; export default class Thread { Root?: Tag; @@ -19,15 +19,15 @@ export default class Thread { * @param ev Event to extract thread from */ static ExtractThread(ev: NEvent) { - const isThread = ev.Tags.some(a => a.Key === "e"); + const isThread = ev.Tags.some((a) => a.Key === "e"); if (!isThread) { return null; } const shouldWriteMarkers = ev.Kind === EventKind.TextNote; const ret = new Thread(); - const eTags = ev.Tags.filter(a => a.Key === "e"); - const marked = eTags.some(a => a.Marker !== undefined); + const eTags = ev.Tags.filter((a) => a.Key === "e"); + const marked = eTags.some((a) => a.Marker !== undefined); if (!marked) { ret.Root = eTags[0]; ret.Root.Marker = shouldWriteMarkers ? "root" : undefined; @@ -38,17 +38,19 @@ export default class Thread { if (eTags.length > 2) { ret.Mentions = eTags.slice(2); if (shouldWriteMarkers) { - ret.Mentions.forEach(a => (a.Marker = "mention")); + ret.Mentions.forEach((a) => (a.Marker = "mention")); } } } else { - const root = eTags.find(a => a.Marker === "root"); - const reply = eTags.find(a => a.Marker === "reply"); + const root = eTags.find((a) => a.Marker === "root"); + const reply = eTags.find((a) => a.Marker === "reply"); ret.Root = root; ret.ReplyTo = reply; - ret.Mentions = eTags.filter(a => a.Marker === "mention"); + ret.Mentions = eTags.filter((a) => a.Marker === "mention"); } - ret.PubKeys = Array.from(new Set(ev.Tags.filter(a => a.Key === "p").map(a => a.PubKey))); + ret.PubKeys = Array.from( + new Set(ev.Tags.filter((a) => a.Key === "p").map((a) => a.PubKey)) + ); return ret; } } diff --git a/packages/nostr/src/Util.ts b/packages/nostr/src/Util.ts new file mode 100644 index 00000000..d3df842c --- /dev/null +++ b/packages/nostr/src/Util.ts @@ -0,0 +1,26 @@ +import * as secp from "@noble/secp256k1"; +import { bech32 } from "bech32"; + +export function unwrap(v: T | undefined | null): T { + if (v === undefined || v === null) { + throw new Error("missing value"); + } + return v; +} + +/** + * Convert hex to bech32 + */ +export function hexToBech32(hrp: string, hex?: string) { + if (typeof hex !== "string" || hex.length === 0 || hex.length % 2 !== 0) { + return ""; + } + + try { + const buf = secp.utils.hexToBytes(hex); + return bech32.encode(hrp, bech32.toWords(buf)); + } catch (e) { + console.warn("Invalid hex", hex, e); + return ""; + } +} diff --git a/src/Nostr/index.ts b/packages/nostr/src/index.ts similarity index 79% rename from src/Nostr/index.ts rename to packages/nostr/src/index.ts index f961b280..1f2aab3b 100644 --- a/src/Nostr/index.ts +++ b/packages/nostr/src/index.ts @@ -1,3 +1,10 @@ +export * from "./System"; +export * from "./Connection"; +export { default as EventKind } from "./EventKind"; +export { Subscriptions } from "./Subscriptions"; +export { default as Event } from "./Event"; +export { default as Tag } from "./Tag"; + export type RawEvent = { id: u256; pubkey: HexKey; @@ -21,7 +28,7 @@ export interface TaggedRawEvent extends RawEvent { export type HexKey = string; /** - * Optinally undefined HexKey + * Optional HexKey */ export type MaybeHexKey = HexKey | undefined; @@ -73,7 +80,7 @@ export enum Lists { Followed = "follow", } -export interface RelaySettings { +export interface FullRelaySettings { url: string; settings: { read: boolean; write: boolean }; } diff --git a/packages/nostr/tsconfig.json b/packages/nostr/tsconfig.json new file mode 100644 index 00000000..a6370537 --- /dev/null +++ b/packages/nostr/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES2015", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "composite": true, + "outDir": "dist", + "moduleResolution": "node" + }, + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock index 23833ff6..ba19f067 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27,9 +27,9 @@ "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": - version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" - integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== + version "7.20.14" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" + integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== "@babel/core@^7.1.0", "@babel/core@^7.10.4", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.20.12" @@ -62,9 +62,9 @@ semver "^6.3.0" "@babel/generator@^7.20.7", "@babel/generator@^7.7.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== + version "7.20.14" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== dependencies: "@babel/types" "^7.20.7" "@jridgewell/gen-mapping" "^0.3.2" @@ -96,7 +96,7 @@ lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7": +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.12", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7": version "7.20.12" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819" integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ== @@ -266,12 +266,12 @@ "@babel/types" "^7.20.5" "@babel/helpers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" - integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" + integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== dependencies: "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" + "@babel/traverse" "^7.20.13" "@babel/types" "^7.20.7" "@babel/highlight@^7.18.6": @@ -283,12 +283,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" - integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== - -"@babel/parser@^7.20.13": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7": version "7.20.15" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== @@ -337,11 +332,11 @@ "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz#05d37453c2ce818f3e47bbeda9468c8de947eecc" - integrity sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A== + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.13.tgz#b6bea3b18e88443688fa7ed2cc06d2c60da9f4a7" + integrity sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.20.7" + "@babel/helper-create-class-features-plugin" "^7.20.12" "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-replace-supers" "^7.20.7" "@babel/helper-split-export-declaration" "^7.18.6" @@ -620,9 +615,9 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-block-scoping@^7.20.2": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz#9f5a3424bd112a3f32fe0cf9364fbb155cff262a" - integrity sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw== + version "7.20.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz#3e1b2aa9cbbe1eb8d644c823141a9c5c2a22392d" + integrity sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -811,9 +806,9 @@ "@babel/plugin-transform-react-jsx" "^7.18.6" "@babel/plugin-transform-react-jsx@^7.18.6": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz#025d85a1935fd7e19dfdcb1b1d4df34d4da484f7" - integrity sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ== + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz#f950f0b0c36377503d29a712f16287cedf886cbb" + integrity sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-module-imports" "^7.18.6" @@ -893,11 +888,11 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typescript@^7.18.6": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz#673f49499cd810ae32a1ea5f3f8fab370987e055" - integrity sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw== + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz#e3581b356b8694f6ff450211fe6774eaff8d25ab" + integrity sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.20.7" + "@babel/helper-create-class-features-plugin" "^7.20.12" "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-typescript" "^7.20.0" @@ -1029,6 +1024,11 @@ "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-transform-typescript" "^7.18.6" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/runtime@7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" @@ -1037,9 +1037,9 @@ regenerator-runtime "^0.13.2" "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" - integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" + integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== dependencies: regenerator-runtime "^0.13.11" @@ -1052,7 +1052,7 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@7": +"@babel/traverse@7", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2": version "7.20.13" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== @@ -1068,22 +1068,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5" - integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - debug "^4.1.0" - globals "^11.1.0" - "@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" @@ -1205,9 +1189,9 @@ integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== "@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" - integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz#c9c61d9fe5ca5ac664e1153bb0aa0eba1c6d6308" + integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw== "@eslint/eslintrc@^1.4.1": version "1.4.1" @@ -1312,24 +1296,24 @@ tslib "^2.4.0" typescript "^4.7" -"@fortawesome/fontawesome-common-types@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.1.tgz#411e02a820744d3f7e0d8d9df9d82b471beaa073" - integrity sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ== +"@fortawesome/fontawesome-common-types@6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz#51f734e64511dbc3674cd347044d02f4dd26e86b" + integrity sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg== "@fortawesome/fontawesome-svg-core@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.1.tgz#e87e905e444b5e7b715af09b64d27b53d4c8f9d9" - integrity sha512-HELwwbCz6C1XEcjzyT1Jugmz2NNklMrSPjZOWMlc+ZsHIVk+XOvOXLGGQtFBwSyqfJDNgRq4xBCwWOaZ/d9DEA== + version "6.3.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz#b6a17d48d231ac1fad93e43fca7271676bf316cf" + integrity sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw== dependencies: - "@fortawesome/fontawesome-common-types" "6.2.1" + "@fortawesome/fontawesome-common-types" "6.3.0" "@fortawesome/free-solid-svg-icons@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.1.tgz#2290ea5adcf1537cbd0c43de6feb38af02141d27" - integrity sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw== + version "6.3.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz#d3bd33ae18bb15fdfc3ca136e2fea05f32768a65" + integrity sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA== dependencies: - "@fortawesome/fontawesome-common-types" "6.2.1" + "@fortawesome/fontawesome-common-types" "6.3.0" "@fortawesome/react-fontawesome@^0.2.0": version "0.2.0" @@ -1441,12 +1425,12 @@ "@types/node" "*" jest-mock "^27.5.1" -"@jest/expect-utils@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.3.1.tgz#531f737039e9b9e27c42449798acb5bba01935b6" - integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g== +"@jest/expect-utils@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.2.tgz#cd0065dfdd8e8a182aa350cc121db97b5eed7b3f" + integrity sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA== dependencies: - jest-get-type "^29.2.0" + jest-get-type "^29.4.2" "@jest/fake-timers@^27.5.1": version "27.5.1" @@ -1507,12 +1491,12 @@ dependencies: "@sinclair/typebox" "^0.24.1" -"@jest/schemas@^29.0.0": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" - integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== +"@jest/schemas@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.2.tgz#cf7cfe97c5649f518452b176c47ed07486270fc1" + integrity sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g== dependencies: - "@sinclair/typebox" "^0.24.1" + "@sinclair/typebox" "^0.25.16" "@jest/source-map@^27.5.1": version "27.5.1" @@ -1597,12 +1581,12 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jest/types@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" - integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== +"@jest/types@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.2.tgz#8f724a414b1246b2bfd56ca5225d9e1f39540d82" + integrity sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw== dependencies: - "@jest/schemas" "^29.0.0" + "@jest/schemas" "^29.4.2" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -1730,19 +1714,19 @@ integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== "@reduxjs/toolkit@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.1.tgz#4c34dc4ddcec161535288c60da5c19c3ef15180e" - integrity sha512-HikrdY+IDgRfRYlCTGUQaiCxxDDgM1mQrRbZ6S1HFZX5ZYuJ4o8EstNmhTwHdPl2rTmLxzwSu0b3AyeyTlR+RA== + version "1.9.2" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.2.tgz#4cd153491118038e2eebcb63b2264e42a8a2d74c" + integrity sha512-5ZAZ7hwAKWSii5T6NTPmgIBUqyVdlDs+6JjThz6J6dmHLDm6zCzv2OjHIFAi3Vvs1qjmXU0bm6eBojukYXjVMQ== dependencies: immer "^9.0.16" redux "^4.2.0" redux-thunk "^2.4.2" reselect "^4.1.7" -"@remix-run/router@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.3.0.tgz#b6ee542c7f087b73b3d8215b9bf799f648be71cb" - integrity sha512-nwQoYb3m4DDpHTeOwpJEuDt8lWVcujhYYSFGLluC+9es2PyLjm+jjq3IeRBQbwBtPLJE/lkuHuGHr8uQLgmJRA== +"@remix-run/router@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.3.2.tgz#58cd2bd25df2acc16c628e1b6f6150ea6c7455bc" + integrity sha512-t54ONhl/h75X94SWsHGQ4G/ZrCEguKSRQr7DrjTciJXW0YU1QhlwYeycvK5JgkzlxmvrK7wq1NB/PLtHxoiDcA== "@rollup/plugin-babel@^5.2.0": version "5.3.1" @@ -1791,6 +1775,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== +"@sinclair/typebox@^0.25.16": + version "0.25.21" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.21.tgz#763b05a4b472c93a8db29b2c3e359d55b29ce272" + integrity sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g== + "@sinonjs/commons@^1.7.0": version "1.8.6" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" @@ -1919,9 +1908,9 @@ loader-utils "^2.0.0" "@szhsin/react-menu@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@szhsin/react-menu/-/react-menu-3.3.1.tgz#c974c887bfcf94aca4c4cc07688a3c20d4e952bd" - integrity sha512-e8vK+N1YWwTdYXElvRRf5GIImtcDecqTCzpAa0DkGAknKwfQwtQtUnBn+DECodwsWi5H5ONKTU+kn0qJ70hEYQ== + version "3.4.1" + resolved "https://registry.yarnpkg.com/@szhsin/react-menu/-/react-menu-3.4.1.tgz#6ed92890e49ff644604fa4677a546c01a9c84c78" + integrity sha512-Pxt7Kyp3yuX7zkT5tjdLRJGNFMa5Tx4BP+01gJ/dnMmHQpI1H2or9gEC0X+t3cLldO3LGmm4ViGypNCmQLv/4A== dependencies: prop-types "^15.7.2" react-transition-state "^1.1.5" @@ -2022,9 +2011,9 @@ "@types/estree" "*" "@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.4.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" - integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== + version "8.21.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.0.tgz#21724cfe12b96696feafab05829695d4d7bd7c48" + integrity sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2044,22 +2033,22 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.31": - version "4.17.32" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82" - integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/express@*", "@types/express@^4.17.13": - version "4.17.15" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff" - integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ== + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.31" + "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" @@ -2117,9 +2106,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.2.5": - version "29.2.6" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.6.tgz#1d43c8e533463d0437edef30b2d45d5aa3d95b0a" - integrity sha512-XEUC/Tgw3uMh6Ho8GkUtQ2lPhY5Fmgyp3TdlkTJs1W9VgNxs+Ow/x3Elh8lHQKqCbZL0AubQuqWjHVT033Hhrw== + version "29.4.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.0.tgz#a8444ad1704493e84dbf07bb05990b275b3b9206" + integrity sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2157,9 +2146,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*", "@types/node@^18.11.18": - version "18.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" - integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== + version "18.13.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" + integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg== "@types/node@14 || 16 || 17": version "17.0.45" @@ -2204,9 +2193,9 @@ "@types/react" "*" "@types/react@*", "@types/react@16 || 17 || 18", "@types/react@^18.0.26": - version "18.0.27" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.27.tgz#d9425abe187a00f8a5ec182b010d4fd9da703b71" - integrity sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA== + version "18.0.28" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" + integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2308,21 +2297,22 @@ "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.20" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.20.tgz#107f0fcc13bd4a524e352b41c49fe88aab5c54d5" - integrity sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A== + version "17.0.22" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" + integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" - integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg== + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.51.0.tgz#da3f2819633061ced84bb82c53bba45a6fe9963a" + integrity sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ== dependencies: - "@typescript-eslint/scope-manager" "5.48.2" - "@typescript-eslint/type-utils" "5.48.2" - "@typescript-eslint/utils" "5.48.2" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/type-utils" "5.51.0" + "@typescript-eslint/utils" "5.51.0" debug "^4.3.4" + grapheme-splitter "^1.0.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" regexpp "^3.2.0" @@ -2330,78 +2320,78 @@ tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.0.0": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.2.tgz#04057cd6e96d225a6ed10e6881086add6c230781" - integrity sha512-Iwx8De8dwl6qPaPZWIaEfP1feN/YFlA5FlCxF3zUIm+2AG92C5Tefkugj2L9ytOFrmTYkTE/CqvJFZbYoVZQMg== + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.51.0.tgz#936124843a9221863f027a08063b737578838bea" + integrity sha512-8/3+ZyBENl2aog1/QB3S39ptkZ2oRhDB+sJt15UWXBE3skgwL1C8BN9RjpOyhTejwR2hVrvqEjcYcNY6qtZ7nw== dependencies: - "@typescript-eslint/utils" "5.48.2" + "@typescript-eslint/utils" "5.51.0" "@typescript-eslint/parser@^5.5.0": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.2.tgz#c9edef2a0922d26a37dba03be20c5fff378313b3" - integrity sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw== + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.51.0.tgz#2d74626652096d966ef107f44b9479f02f51f271" + integrity sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA== dependencies: - "@typescript-eslint/scope-manager" "5.48.2" - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/typescript-estree" "5.48.2" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/typescript-estree" "5.51.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc" - integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== +"@typescript-eslint/scope-manager@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz#ad3e3c2ecf762d9a4196c0fbfe19b142ac498990" + integrity sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ== dependencies: - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/visitor-keys" "5.48.2" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/visitor-keys" "5.51.0" -"@typescript-eslint/type-utils@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7" - integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== +"@typescript-eslint/type-utils@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988" + integrity sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ== dependencies: - "@typescript-eslint/typescript-estree" "5.48.2" - "@typescript-eslint/utils" "5.48.2" + "@typescript-eslint/typescript-estree" "5.51.0" + "@typescript-eslint/utils" "5.51.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e" - integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== +"@typescript-eslint/types@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.51.0.tgz#e7c1622f46c7eea7e12bbf1edfb496d4dec37c90" + integrity sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw== -"@typescript-eslint/typescript-estree@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0" - integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== +"@typescript-eslint/typescript-estree@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de" + integrity sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA== dependencies: - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/visitor-keys" "5.48.2" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/visitor-keys" "5.51.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.48.2", "@typescript-eslint/utils@^5.13.0": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3" - integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== +"@typescript-eslint/utils@5.51.0", "@typescript-eslint/utils@^5.43.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47" + integrity sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.2" - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/typescript-estree" "5.48.2" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/typescript-estree" "5.51.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060" - integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== +"@typescript-eslint/visitor-keys@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87" + integrity sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ== dependencies: - "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/types" "5.51.0" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": @@ -2594,9 +2584,9 @@ acorn@^7.0.0, acorn@^7.1.1: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2859,9 +2849,9 @@ available-typed-arrays@^1.0.5: integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axe-core@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.2.tgz#6e566ab2a3d29e415f5115bc0fd2597a5eb3e5e3" - integrity sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg== + version "4.6.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" + integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== axobject-query@^3.1.1: version "3.1.1" @@ -3163,14 +3153,14 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" bser@2.1.1: version "2.1.1" @@ -3253,10 +3243,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: - version "1.0.30001446" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001446.tgz#6d4ba828ab19f49f9bcd14a8430d30feebf1e0c5" - integrity sha512-fEoga4PrImGcwUUGEol/PoFCSBnSkA9drgdkxXkJLsUBOnJ8rs3zDv6ApqYXGQFOyMPsjh79naWhF4DAxbF8rw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449: + version "1.0.30001451" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz#2e197c698fc1373d63e1406d6607ea4617c613f1" + integrity sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" @@ -3321,9 +3311,9 @@ chrome-trace-event@^1.0.2: integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^3.2.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" - integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cjs-module-lexer@^1.0.0: version "1.2.2" @@ -3517,9 +3507,9 @@ content-disposition@0.5.4: safe-buffer "5.2.1" content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" @@ -3697,9 +3687,9 @@ css-what@^6.0.1: integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssdb@^7.1.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.2.1.tgz#f6f59e2c4249bcb5ca5606fc4ab6f9a808d55486" - integrity sha512-btohrCpVaLqOoMt90aumHe6HU4c06duiYA8ymwtpGfwuZAhWKDBve/c2k+E85Jeq5iojPkeonqiKV+aLeY8QlA== + version "7.4.1" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.4.1.tgz#61d55c0173126689922a219e15e131e4b5caf422" + integrity sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ== cssesc@^3.0.0: version "3.0.0" @@ -3877,9 +3867,9 @@ deep-is@^0.1.3, deep-is@~0.1.3: integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" + integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== default-gateway@^6.0.3: version "6.0.3" @@ -3894,9 +3884,9 @@ define-lazy-prop@^2.0.0: integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -3964,9 +3954,9 @@ dexie-react-hooks@^1.1.1: integrity sha512-Cam5JP6PxHN564RvWEoe8cqLhosW0O4CAZ9XEVYeGHJBa6KEJlOpd9CUpV3kmU9dm2MrW97/lk7qkf1xpij7gA== dexie@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/dexie/-/dexie-3.2.2.tgz#fa6f2a3c0d6ed0766f8d97a03720056f88fe0e01" - integrity sha512-q5dC3HPmir2DERlX+toCBbHQXW5MsyrFqPFcovkH9N2S/UW/H3H5AWAB6iEOExeraAu+j+zRDG+zg/D7YhH0qg== + version "3.2.3" + resolved "https://registry.yarnpkg.com/dexie/-/dexie-3.2.3.tgz#f35c91ca797599df8e771b998e9ae9669c877f8c" + integrity sha512-iHayBd4UYryDCVUNa3PMsJMEnd8yjyh5p7a+RFeC8i8n476BC9wMhVvqiImq5zJZJf5Tuer+s4SSj+AA3x+ZbQ== didyoumean@^1.2.2: version "1.2.2" @@ -3978,10 +3968,10 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff-sequences@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e" - integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ== +diff-sequences@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.2.tgz#711fe6bd8a5869fe2539cee4a5152425ff671fda" + integrity sha512-R6P0Y6PrsH3n4hUXxL3nns0rbRk6Q33js3ygJBeEpbzLzgcNuJ61+u0RXasFpTKISw99TxUzFnumSnRLsjhLaw== diff@^5.0.0: version "5.1.0" @@ -4131,10 +4121,10 @@ ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== +electron-to-chromium@^1.4.284: + version "1.4.295" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz#911d5df67542bf7554336142eb302c5ec90bba66" + integrity sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw== emittery@^0.10.2: version "0.10.2" @@ -4424,9 +4414,9 @@ eslint-plugin-react-hooks@^4.3.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.27.1: - version "7.32.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz#88cdeb4065da8ca0b64e1274404f53a0f9890200" - integrity sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www== + version "7.32.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" @@ -4445,11 +4435,11 @@ eslint-plugin-react@^7.27.1: string.prototype.matchall "^4.0.8" eslint-plugin-testing-library@^5.0.1: - version "5.9.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz#12e4bd34c48683ee98af4df2e3318ec9f51dcf8a" - integrity sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ== + version "5.10.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.1.tgz#16ef8adb74d59a4dda24db1d5e750a0ee9b79471" + integrity sha512-GRy87AqUi2Ij69pe0YnOXm3oGBCgnFwfIv+Hu9q/kT3jL0pX1cXA7aO+oJnvdpbJy2+riOPqGsa3iAkL888NLg== dependencies: - "@typescript-eslint/utils" "^5.13.0" + "@typescript-eslint/utils" "^5.43.0" eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" @@ -4496,9 +4486,9 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^4.0.0" eslint@^8.3.0: - version "8.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861" - integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ== + version "8.34.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" + integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== dependencies: "@eslint/eslintrc" "^1.4.1" "@humanwhocodes/config-array" "^0.11.8" @@ -4649,15 +4639,15 @@ expect@^27.5.1: jest-message-util "^27.5.1" expect@^29.0.0: - version "29.3.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6" - integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA== + version "29.4.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.2.tgz#2ae34eb88de797c64a1541ad0f1e2ea8a7a7b492" + integrity sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ== dependencies: - "@jest/expect-utils" "^29.3.1" - jest-get-type "^29.2.0" - jest-matcher-utils "^29.3.1" - jest-message-util "^29.3.1" - jest-util "^29.3.1" + "@jest/expect-utils" "^29.4.2" + jest-get-type "^29.4.2" + jest-matcher-utils "^29.4.2" + jest-message-util "^29.4.2" + jest-util "^29.4.2" express@^4.17.3: version "4.18.2" @@ -4959,10 +4949,10 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -5044,9 +5034,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.19.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" - integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" @@ -5357,9 +5347,9 @@ ignore@^5.2.0: integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== immer@^9.0.16, immer@^9.0.7: - version "9.0.18" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.18.tgz#d2faee58fd0e34f017f329b98cdab37826fa31b8" - integrity sha512-eAPNpsj7Ax1q6Y/3lm2PmlwRcFzpON7HSNQ3ru5WQH1/PSpnyed/HpNOELl2CxLKoj4r+bAHgdyKqW5gc2Se1A== + version "9.0.19" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.19.tgz#67fb97310555690b5f9cd8380d38fc0aabb6b38b" + integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ== import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" @@ -5416,11 +5406,11 @@ inline-style-parser@0.1.1: integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== internal-slot@^1.0.3, internal-slot@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" - integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" @@ -5852,15 +5842,15 @@ jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-diff@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.3.1.tgz#d8215b72fed8f1e647aed2cae6c752a89e757527" - integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw== +jest-diff@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.2.tgz#b88502d5dc02d97f6512d73c37da8b36f49b4871" + integrity sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g== dependencies: chalk "^4.0.0" - diff-sequences "^29.3.1" - jest-get-type "^29.2.0" - pretty-format "^29.3.1" + diff-sequences "^29.4.2" + jest-get-type "^29.4.2" + pretty-format "^29.4.2" jest-docblock@^27.5.1: version "27.5.1" @@ -5910,10 +5900,10 @@ jest-get-type@^27.5.1: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" - integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== +jest-get-type@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.2.tgz#7cb63f154bca8d8f57364d01614477d466fa43fe" + integrity sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg== jest-haste-map@^27.5.1: version "27.5.1" @@ -5976,15 +5966,15 @@ jest-matcher-utils@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz#6e7f53512f80e817dfa148672bd2d5d04914a572" - integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ== +jest-matcher-utils@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.2.tgz#08d0bf5abf242e3834bec92c7ef5071732839e85" + integrity sha512-EZaAQy2je6Uqkrm6frnxBIdaWtSYFoR8SVb2sNLAtldswlR/29JAgx+hy67llT3+hXBaLB0zAm5UfeqerioZyg== dependencies: chalk "^4.0.0" - jest-diff "^29.3.1" - jest-get-type "^29.2.0" - pretty-format "^29.3.1" + jest-diff "^29.4.2" + jest-get-type "^29.4.2" + pretty-format "^29.4.2" jest-message-util@^27.5.1: version "27.5.1" @@ -6016,18 +6006,18 @@ jest-message-util@^28.1.3: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb" - integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== +jest-message-util@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.2.tgz#309a2924eae6ca67cf7f25781a2af1902deee717" + integrity sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.2" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.3.1" + pretty-format "^29.4.2" slash "^3.0.0" stack-utils "^2.0.3" @@ -6194,12 +6184,12 @@ jest-util@^28.1.3: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" - integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== +jest-util@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.2.tgz#3db8580b295df453a97de4a1b42dd2578dabd2c2" + integrity sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.2" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" @@ -6295,9 +6285,9 @@ jest@^27.4.3: jest-cli "^27.5.1" js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== js-sha3@0.8.0: version "0.8.0" @@ -6694,18 +6684,18 @@ match-sorter@^6.0.2: remove-accents "0.4.2" mdast-util-definitions@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz#2c1d684b28e53f84938bb06317944bee8efa79db" - integrity sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" + integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== dependencies: "@types/mdast" "^3.0.0" "@types/unist" "^2.0.0" unist-util-visit "^4.0.0" mdast-util-from-markdown@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz#84df2924ccc6c995dec1e2368b2b208ad0a76268" - integrity sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q== + version "1.3.0" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz#0214124154f26154a2b3f9d401155509be45e894" + integrity sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g== dependencies: "@types/mdast" "^3.0.0" "@types/unist" "^2.0.0" @@ -6721,24 +6711,25 @@ mdast-util-from-markdown@^1.0.0: uvu "^0.5.0" mdast-util-to-hast@^12.1.0: - version "12.2.5" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.2.5.tgz#91532ebd929a7def21585034f7901eb367d2d272" - integrity sha512-EFNhT35ZR/VZ85/EedDdCNTq0oFM+NM/+qBomVGQ0+Lcg0nhI8xIwmdCzNMlVlCJNXRprpobtKP/IUh8cfz6zQ== + version "12.3.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" + integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== dependencies: "@types/hast" "^2.0.0" "@types/mdast" "^3.0.0" mdast-util-definitions "^5.0.0" micromark-util-sanitize-uri "^1.1.0" trim-lines "^3.0.0" - unist-builder "^3.0.0" unist-util-generated "^2.0.0" unist-util-position "^4.0.0" unist-util-visit "^4.0.0" mdast-util-to-string@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" - integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.1.tgz#db859050d79d48cf9896d294de06f3ede7474d16" + integrity sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA== + dependencies: + "@types/mdast" "^3.0.0" mdn-data@2.0.14: version "2.0.14" @@ -7044,9 +7035,9 @@ minimatch@^5.0.1: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp@~0.5.1: version "0.5.6" @@ -7133,10 +7124,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.6: - version "2.0.8" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" - integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -7313,9 +7304,9 @@ onetime@^6.0.0: mimic-fn "^4.0.0" open@^8.0.9, open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + version "8.4.1" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.1.tgz#2ab3754c07f5d1f99a7a8d6a82737c95e3101cff" + integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" @@ -7712,9 +7703,9 @@ postcss-initial@^4.0.1: integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== postcss-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" - integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== dependencies: camelcase-css "^2.0.1" @@ -8039,7 +8030,7 @@ postcss-selector-not@^6.0.1: dependencies: postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.11" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== @@ -8075,7 +8066,7 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.3.5, postcss@^8.4.18, postcss@^8.4.19, postcss@^8.4.4: +postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.4: version "8.4.21" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== @@ -8131,12 +8122,12 @@ pretty-format@^28.1.3: ansi-styles "^5.0.0" react-is "^18.0.0" -pretty-format@^29.0.0, pretty-format@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" - integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== +pretty-format@^29.0.0, pretty-format@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.2.tgz#64bf5ccc0d718c03027d94ac957bdd32b3fb2401" + integrity sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg== dependencies: - "@jest/schemas" "^29.0.0" + "@jest/schemas" "^29.4.2" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -8188,9 +8179,9 @@ psl@^1.1.33: integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== punycode@^2.1.0, punycode@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74" - integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== q@^1.1.2: version "1.5.1" @@ -8323,9 +8314,9 @@ react-error-overlay@^6.0.11: integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== react-intersection-observer@^9.4.1: - version "9.4.1" - resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz#4ccb21e16acd0b9cf5b28d275af7055bef878f6b" - integrity sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw== + version "9.4.2" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.4.2.tgz#a80401d290715d8b89941d037bc4ad1398b8397f" + integrity sha512-AdK+ryzZ7U9ZJYttDUZ8q2Am3nqE0exg5Ryl5Y124KeVsix/1hGZPbdu58EqA98TwnzwDNWHxg/kwNawmIiUig== react-intl@^6.2.8: version "6.2.8" @@ -8380,9 +8371,9 @@ react-markdown@^8.0.4: vfile "^5.0.0" react-query@^3.39.2: - version "3.39.2" - resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.2.tgz#9224140f0296f01e9664b78ed6e4f69a0cc9216f" - integrity sha512-F6hYDKyNgDQfQOuR1Rsp3VRzJnWHx6aRnnIZHMNGGgbL3SBgpZTDg8MQwmxOgpCAoqZJA+JSNCydF1xGJqKOCA== + version "3.39.3" + resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.3.tgz#4cea7127c6c26bdea2de5fb63e51044330b03f35" + integrity sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g== dependencies: "@babel/runtime" "^7.5.5" broadcast-channel "^3.4.1" @@ -8406,19 +8397,19 @@ react-refresh@^0.11.0: integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== react-router-dom@^6.5.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.7.0.tgz#0249f4ca4eb704562b8b0ff29caeb928c3a6ed38" - integrity sha512-jQtXUJyhso3kFw430+0SPCbmCmY1/kJv8iRffGHwHy3CkoomGxeYzMkmeSPYo6Egzh3FKJZRAL22yg5p2tXtfg== + version "6.8.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.8.1.tgz#7e136b67d9866f55999e9a8482c7008e3c575ac9" + integrity sha512-67EXNfkQgf34P7+PSb6VlBuaacGhkKn3kpE51+P6zYSG2kiRoumXEL6e27zTa9+PGF2MNXbgIUHTVlleLbIcHQ== dependencies: - "@remix-run/router" "1.3.0" - react-router "6.7.0" + "@remix-run/router" "1.3.2" + react-router "6.8.1" -react-router@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.7.0.tgz#db262684c13b5c2970694084ae9e8531718a0681" - integrity sha512-KNWlG622ddq29MAM159uUsNMdbX8USruoKnwMMQcs/QWZgFUayICSn2oB7reHce1zPj6CG18kfkZIunSSRyGHg== +react-router@6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.8.1.tgz#e362caf93958a747c649be1b47cd505cf28ca63e" + integrity sha512-Jgi8BzAJQ8MkPt8ipXnR73rnD7EmZ0HFFb7jdQU24TynGW1Ooqin2KVDN9voSC+7xhqbbCd2cjGUepb6RObnyg== dependencies: - "@remix-run/router" "1.3.0" + "@remix-run/router" "1.3.2" react-scripts@5.0.1: version "5.0.1" @@ -8552,9 +8543,9 @@ redux-thunk@^2.4.2: integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== redux@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" - integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== dependencies: "@babel/runtime" "^7.9.2" @@ -8602,22 +8593,17 @@ regexpp@^3.2.0: integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" - integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== + version "5.3.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.0.tgz#4d0d044b76fedbad6238703ae84bfdedee2cf074" + integrity sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ== dependencies: + "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" regenerate-unicode-properties "^10.1.0" - regjsgen "^0.7.1" regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -regjsgen@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" - integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== - regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -9010,9 +8996,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" - integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + version "1.8.0" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" + integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== side-channel@^1.0.4: version "1.0.4" @@ -9434,9 +9420,9 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tailwindcss@^3.0.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.4.tgz#afe3477e7a19f3ceafb48e4b083e292ce0dc0250" - integrity sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ== + version "3.2.6" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.6.tgz#9bedbc744a4a85d6120ce0cc3db024c551a5c733" + integrity sha512-BfgQWZrtqowOQMC2bwaSNe7xcIjdDEgixWGYOd6AL0CbKHJlvhfdbINeAW76l1sO+1ov/MJ93ODJ9yluRituIw== dependencies: arg "^5.0.2" chokidar "^3.5.3" @@ -9452,12 +9438,12 @@ tailwindcss@^3.0.2: normalize-path "^3.0.0" object-hash "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.18" + postcss "^8.0.9" postcss-import "^14.1.0" postcss-js "^4.0.0" postcss-load-config "^3.1.4" postcss-nested "6.0.0" - postcss-selector-parser "^6.0.10" + postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" quick-lru "^5.1.1" resolve "^1.22.1" @@ -9507,9 +9493,9 @@ terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5: terser "^5.14.1" terser@^5.0.0, terser@^5.10.0, terser@^5.14.1: - version "5.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" - integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== + version "5.16.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.3.tgz#3266017a9b682edfe019b8ecddd2abaae7b39c6b" + integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -9626,12 +9612,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -9701,16 +9682,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^4.7: +typescript@^4.7, typescript@^4.9.4, typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -typescript@^4.9.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -9764,55 +9740,39 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -unist-builder@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.0.tgz#728baca4767c0e784e1e64bb44b5a5a753021a04" - integrity sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-generated@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.0.tgz#86fafb77eb6ce9bfa6b663c3f5ad4f8e56a60113" - integrity sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" + integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== unist-util-is@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" - integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.0.tgz#37eed0617b76c114fd34d44c201aa96fd928b309" + integrity sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ== unist-util-position@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.3.tgz#5290547b014f6222dff95c48d5c3c13a88fadd07" - integrity sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ== + version "4.0.4" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" + integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== dependencies: "@types/unist" "^2.0.0" unist-util-stringify-position@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447" - integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== dependencies: "@types/unist" "^2.0.0" unist-util-visit-parents@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz#868f353e6fce6bf8fa875b251b0f4fec3be709bb" - integrity sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw== + version "5.1.3" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" + integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== dependencies: "@types/unist" "^2.0.0" unist-util-is "^5.0.0" -unist-util-visit@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.1.tgz#1c4842d70bd3df6cc545276f5164f933390a9aad" - integrity sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.1.1" - -unist-util-visit@^4.1.2: +unist-util-visit@^4.0.0, unist-util-visit@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== @@ -9854,7 +9814,7 @@ upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.9: +update-browserslist-db@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== @@ -9959,17 +9919,17 @@ vary@~1.1.2: integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vfile-message@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.3.tgz#1360c27a99234bebf7bddbbbca67807115e6b0dd" - integrity sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA== + version "3.1.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" + integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== dependencies: "@types/unist" "^2.0.0" unist-util-stringify-position "^3.0.0" vfile@^5.0.0: - version "5.3.6" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.6.tgz#61b2e70690cc835a5d0d0fd135beae74e5a39546" - integrity sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA== + version "5.3.7" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" + integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== dependencies: "@types/unist" "^2.0.0" is-buffer "^2.0.0"