From aa3e0125d4f5b43c6b0ec08d95294af6eacf1441 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Tue, 22 Apr 2025 10:25:18 +0530 Subject: [PATCH 1/3] feat: Rename DotYouClient to OdinClient --- README.md | 4 +- docs/js-lib/core/DotYouClient.md | 16 -- docs/js-lib/core/OdinClient.md | 16 ++ docs/ui-lib/index.md | 8 +- packages/apps/chat-app/src/app/App.tsx | 10 +- .../src/components/Auth/LoginBox/LoginBox.tsx | 4 +- .../Chat/Composer/ChatReactionComposer.tsx | 4 +- .../Conversations/Item/ConversationAvatar.tsx | 8 +- .../Conversations/Item/ConversationItem.tsx | 4 +- .../Item/ConversationListItem.tsx | 4 +- .../Conversations/Item/ConversationTitle.tsx | 8 +- .../Sidenav/EditConversationGroup.tsx | 4 +- .../Chat/Detail/ChatDeliveryIndicator.tsx | 4 +- .../src/components/Chat/Detail/ChatInfo.tsx | 8 +- .../Chat/Detail/ChatMessageInfo.tsx | 4 +- .../Chat/Detail/ChatMessageItem.tsx | 4 +- .../components/Chat/Detail/ContextMenu.tsx | 4 +- .../Chat/Detail/EmbeddedMessage.tsx | 8 +- .../Chat/Detail/Media/ChatMedia.tsx | 12 +- .../Chat/Detail/Media/ChatMediaGallery.tsx | 8 +- .../apps/chat-app/src/hooks/auth/useAuth.ts | 8 +- .../chat-app/src/hooks/auth/useVerifyToken.ts | 8 +- .../hooks/chat/live/useChatInboxProcessor.ts | 28 +-- .../src/hooks/chat/live/useChatWebsocket.ts | 34 ++-- .../chat-app/src/hooks/chat/useChatMessage.ts | 30 ++-- .../src/hooks/chat/useChatMessages.ts | 50 +++--- .../src/hooks/chat/useChatReaction.ts | 16 +- .../hooks/chat/useChatToggleMessageStar.ts | 6 +- .../src/hooks/chat/useConversation.ts | 44 ++--- .../src/hooks/chat/useConversationMetadata.ts | 6 +- .../chat/useConversationWithRecentMessage.ts | 8 +- .../src/hooks/chat/useConversations.ts | 50 +++--- .../src/hooks/chat/useMarkMessagesAsRead.ts | 6 +- .../src/hooks/chat/useStarredMessages.ts | 20 +-- .../chat-app/src/providers/ChatProvider.ts | 62 +++---- .../src/providers/ConversationProvider.ts | 78 ++++----- .../apps/chat-app/src/templates/Auth/Auth.tsx | 4 +- .../src/templates/Chat/ChatDetail.tsx | 14 +- packages/apps/community-app/src/app/App.tsx | 10 +- .../Auth/ExtendCirclePermissionDialog.tsx | 4 +- .../src/components/Auth/LoginBox/LoginBox.tsx | 4 +- .../Community/CommunityInfoDialog.tsx | 4 +- .../Message/detail/CommunityMediaGallery.tsx | 8 +- .../Message/detail/CommunityMessageInfo.tsx | 4 +- .../item/CommunityDeliveryIndicator.tsx | 4 +- .../Community/Message/item/CommunityMedia.tsx | 12 +- .../reactions/CommunityReactionComposer.tsx | 4 +- .../Message/reactions/CommunityReactions.tsx | 6 +- .../catchup/CommunityChannelCatchup.tsx | 4 +- .../catchup/CommunityThreadCatchup.tsx | 4 +- .../Community/channel/CommunityHistory.tsx | 4 +- .../Community/channel/ContextMenu.tsx | 4 +- .../community-app/src/hooks/auth/useAuth.ts | 8 +- .../src/hooks/auth/useVerifyToken.ts | 8 +- .../community/channels/useCommunityChannel.ts | 12 +- .../channels/useCommunityChannels.ts | 6 +- .../useCommunityChannelsWithRecentMessages.ts | 6 +- .../live/useCommunityInboxProcessor.ts | 48 +++--- .../live/useCommunityPeerWebsocket.ts | 12 +- .../community/live/useCommunityWebsocket.ts | 12 +- .../community/messages/useCommunityMessage.ts | 26 +-- .../messages/useCommunityMessages.ts | 60 +++---- .../messages/useEditLastMessageShortcut.ts | 4 +- .../reactions/useCommunityReaction.ts | 12 +- .../src/hooks/community/status/useMyStatus.ts | 10 +- .../community/threads/useCommunityThreads.ts | 14 +- .../src/hooks/community/useCommunities.ts | 14 +- .../src/hooks/community/useCommunity.ts | 18 +- .../community/useCommunityCollaborativeMsg.ts | 16 +- .../src/hooks/community/useCommunityDrafts.ts | 24 +-- .../src/hooks/community/useCommunityLater.ts | 6 +- .../community/useCommunityMemberUpdater.ts | 4 +- .../hooks/community/useCommunityMetadata.ts | 28 +-- .../community/useCommunityNotifications.ts | 8 +- .../src/hooks/community/useCommunityPin.ts | 16 +- .../community/useLocalCommunityDrives.ts | 6 +- .../hooks/community/useMarkCommunityAsRead.ts | 12 +- .../providers/CommunityDefinitionProvider.ts | 90 +++++----- .../src/providers/CommunityDraftsProvider.ts | 16 +- .../src/providers/CommunityMessageProvider.ts | 66 +++---- .../providers/CommunityMetadataProvider.ts | 22 +-- .../src/providers/CommunityProvider.ts | 54 +++--- .../src/providers/CommunityStatusProvider.ts | 36 ++-- .../providers/PeerNotificationSubscriber.ts | 6 +- .../community-app/src/templates/Auth/Auth.tsx | 4 +- .../Community/CommunityDirectDetail.tsx | 4 +- .../src/templates/Community/CommunityNav.tsx | 10 +- .../src/templates/Community/CommunityNew.tsx | 4 +- packages/apps/feed-app/src/app/App.tsx | 10 +- .../src/components/Auth/LoginBox/LoginBox.tsx | 4 +- .../src/components/Auth/LoginNav/LoginNav.tsx | 12 +- .../SocialFeed/MainContent/PostPreview.tsx | 13 +- .../components/SocialFeed/PostTeaserCard.tsx | 6 +- .../ChannelsOverview/ChannelsOverview.tsx | 10 +- .../Sidebars/IdentityLink/IdentityLink.tsx | 8 +- .../SocialFeed/UnreachableIdentity.tsx | 13 +- .../apps/feed-app/src/hooks/auth/useAuth.ts | 8 +- .../feed-app/src/hooks/auth/useVerifyToken.ts | 8 +- .../src/hooks/useLiveFeedProcessor.ts | 38 ++-- .../apps/feed-app/src/templates/Auth/Auth.tsx | 4 +- .../SocialFeed/NavigateToReferencedPost.tsx | 8 +- packages/apps/mail-app/src/app/App.tsx | 10 +- .../src/components/Composer/MailComposer.tsx | 4 +- .../components/Composer/RecipientInput.tsx | 4 +- .../Thread/MailAttachmentPreview.tsx | 6 +- .../Threads/MailConversationItem.tsx | 4 +- .../src/components/Threads/MailThreads.tsx | 6 +- .../src/components/Threads/RecipientsList.tsx | 6 +- .../apps/mail-app/src/hooks/auth/useAuth.ts | 8 +- .../mail-app/src/hooks/auth/useVerifyToken.ts | 8 +- .../src/hooks/mail/useFilteredMailThreads.ts | 68 ++++---- .../src/hooks/mail/useLiveMailProcessor.ts | 34 ++-- .../src/hooks/mail/useMailConversation.ts | 98 +++++------ .../src/hooks/mail/useMailConversations.ts | 10 +- .../src/hooks/mail/useMailSettings.ts | 8 +- .../mail-app/src/hooks/mail/useMailThread.ts | 60 +++---- .../mail/useMarkMailConversationsAsRead.ts | 4 +- .../src/providers/DebugDataProvider.ts | 22 +-- .../mail-app/src/providers/MailProvider.ts | 70 ++++---- .../src/providers/MailSettingsProvider.ts | 10 +- .../apps/mail-app/src/templates/Auth/Auth.tsx | 4 +- .../mail-app/src/templates/Mail/DebugData.tsx | 8 +- .../templates/Mail/MailAttachmentOverview.tsx | 6 +- .../templates/Mail/MailAttachmentsInfo.tsx | 12 +- .../src/templates/Mail/MailHistory.tsx | 8 +- .../src/templates/Mail/MailThread.tsx | 10 +- .../src/templates/Mail/MailThreadInfo.tsx | 6 +- packages/apps/owner-app/src/app/App.tsx | 10 +- .../ConnectionSummary/ConnectionSummary.tsx | 12 +- .../Drives/FileBrowser/FileCard.tsx | 6 +- .../apps/owner-app/src/hooks/apps/useApp.ts | 28 +-- .../owner-app/src/hooks/apps/useAppClients.ts | 14 +- .../apps/owner-app/src/hooks/apps/useApps.ts | 6 +- .../apps/owner-app/src/hooks/auth/useAuth.ts | 4 +- .../src/hooks/auth/useVerifyToken.ts | 4 +- .../owner-app/src/hooks/configure/useInit.ts | 22 +-- .../src/hooks/configure/useIsConfigured.ts | 8 +- .../hooks/connections/useConnectionActions.ts | 26 +-- .../src/hooks/connections/useDomainClients.ts | 8 +- .../connections/useManageAutoConnection.ts | 6 +- .../src/hooks/connections/useManageDomain.ts | 10 +- .../hooks/connections/usePendingConnection.ts | 32 ++-- .../hooks/connections/useVerifyConnection.ts | 6 +- .../owner-app/src/hooks/drives/useDrive.ts | 16 +- .../owner-app/src/hooks/drives/useDrives.ts | 6 +- .../owner-app/src/hooks/drives/useExport.ts | 10 +- .../apps/owner-app/src/hooks/eula/useEula.ts | 8 +- .../owner-app/src/hooks/files/useFiles.ts | 35 ++-- .../owner-app/src/hooks/follow/useFollower.ts | 6 +- .../src/hooks/inbox/useOwnerInboxProcessor.ts | 6 +- .../usePushNotificationClients.ts | 20 +-- .../src/hooks/profiles/useAttribute.ts | 20 +-- .../hooks/profiles/useAttributeVersions.ts | 6 +- .../src/hooks/profiles/useAttributes.ts | 20 +-- .../src/hooks/profiles/useHomeAttributes.ts | 6 +- .../src/hooks/profiles/useProfileSections.ts | 10 +- .../src/hooks/recovery/useRecoveryKey.ts | 6 +- .../src/hooks/removal/useAccountRemoval.ts | 12 +- .../src/hooks/settings/useSettings.ts | 12 +- .../src/hooks/useAutoFixDefaultConfig.ts | 10 +- .../src/hooks/useLiveOwnerProcessor.ts | 4 +- .../src/provider/app/AppManagementProvider.ts | 58 +++---- .../provider/auth/AuthenticationProvider.ts | 52 +++--- .../src/provider/auth/RecoveryProvider.ts | 6 +- .../network/domainNetwork/DomainManager.ts | 22 +-- .../troubleshooting/DataConversionProvider.ts | 10 +- .../notifications/PushClientProvider.ts | 30 ++-- .../AttributeData/ManageAttributeProvider.ts | 28 +-- .../src/provider/setup/SetupProvider.ts | 72 ++++---- .../src/provider/system/RemoveProvider.ts | 18 +- .../src/provider/system/SettingsProvider.ts | 18 +- .../src/provider/system/SystemProvider.ts | 10 +- .../Details/ConnectionDetailsAbout.tsx | 6 +- .../Details/IdentityPageMetaAndActions.tsx | 8 +- .../src/templates/Dashboard/FeedTeaser.tsx | 4 +- .../owner-app/src/templates/Debug/Debug.tsx | 6 +- .../owner-app/src/templates/Follow/Follow.tsx | 12 +- .../owner-app/src/templates/Login/Login.tsx | 4 +- .../templates/Notifications/Notifications.tsx | 8 +- .../templates/Settings/SecuritySettings.tsx | 6 +- packages/apps/public-app/src/app/App.tsx | 20 +-- .../components/Auth/ProfileNav/ProfileNav.tsx | 14 +- .../SaveCollaborativeChannelLink.tsx | 14 +- .../useCheckWriteAccessOnChannel.ts | 6 +- .../ConnectLink/ConnectLink.tsx | 14 +- .../FollowLink/FollowLink.tsx | 14 +- .../components/ui/Layout/Header/Header.tsx | 4 +- .../src/components/ui/Layout/Layout.tsx | 6 +- .../apps/public-app/src/hooks/auth/useAuth.ts | 6 +- .../src/hooks/follow/useFollowDetail.ts | 10 +- .../templates/Home/Common/Posts/Channels.tsx | 8 +- .../Home/Common/Posts/HorizontalPosts.tsx | 8 +- .../Home/Common/Posts/VerticalPosts.tsx | 14 +- .../src/templates/Home/Cover/HomeCover.tsx | 8 +- .../src/templates/Posts/Detail/PostDetail.tsx | 8 +- .../Posts/Detail/PostImageDetail.tsx | 8 +- .../templates/Posts/Overview/PostOverview.tsx | 4 +- .../src/auth/DotYouClientProvider.tsx | 12 -- .../src/auth/OdinClientProvider.tsx | 10 ++ packages/common/common-app/src/auth/index.ts | 2 +- .../common-app/src/channels/ChannelItem.tsx | 8 +- .../src/channels/CollaborativeChannelitem.tsx | 4 +- .../common/common-app/src/core/OwnerClient.ts | 4 +- .../dialogs/ImageLightbox/ImageLightbox.tsx | 6 +- .../src/form/files/FileOverview.tsx | 8 +- .../attributes/biography/useBiography.ts | 24 +-- .../src/hooks/attributes/links/useLinks.ts | 16 +- .../src/hooks/attributes/links/useSocials.tsx | 12 +- .../src/hooks/auth/useDotYouClientContext.ts | 12 -- .../src/hooks/auth/useMissingPermissions.ts | 4 +- .../{useDotYouClient.ts => useOdinClient.ts} | 16 +- .../src/hooks/auth/useOdinClientContext.ts | 12 ++ .../hooks/checkIdentity/useCheckIdentity.ts | 6 +- .../common-app/src/hooks/circles/useCircle.ts | 32 ++-- .../src/hooks/circles/useCircles.ts | 6 +- .../src/hooks/connections/useAllContacts.ts | 6 +- .../connections/useConnectionGrantStatus.ts | 6 +- .../hooks/connections/useConnectionInfo.ts | 16 +- .../src/hooks/connections/useConnections.ts | 54 +++--- .../src/hooks/connections/useDomain.ts | 6 +- .../src/hooks/connections/useDomains.ts | 6 +- .../src/hooks/contacts/useContact.ts | 22 +-- .../src/hooks/file/useContentFromPayload.ts | 10 +- .../common-app/src/hooks/file/useFile.ts | 54 +++--- .../src/hooks/file/useTransferHistory.ts | 6 +- .../src/hooks/follow/useFollowers.ts | 6 +- .../src/hooks/follow/useFollowing.ts | 8 +- .../src/hooks/follow/useIdentityIFollow.ts | 8 +- .../common-app/src/hooks/image/useRawImage.ts | 38 ++-- packages/common/common-app/src/hooks/index.ts | 4 +- .../hooks/introductions/useIntroductions.ts | 6 +- .../src/hooks/links/useLinkMetadata.ts | 12 +- .../src/hooks/links/useLinkPreviewBuilder.ts | 6 +- .../notifications/useLiveNotifications.tsx | 8 +- .../notifications/usePushNotifications.ts | 26 +-- .../src/hooks/profiles/useProfiles.ts | 10 +- .../hooks/reactions/comments/useComments.tsx | 6 +- .../reactions/emojis/useEmojiReactions.tsx | 6 +- .../reactions/emojis/useEmojiSummary.tsx | 6 +- .../reactions/emojis/useMyEmojiReactions.tsx | 8 +- .../src/hooks/reactions/useCanReact.tsx | 4 +- .../src/hooks/reactions/useReaction.tsx | 12 +- .../securityContext/useSecurityContext.ts | 10 +- .../src/hooks/siteData/useSiteData.ts | 14 +- .../hooks/socialFeed/channels/useChannel.ts | 20 +-- .../socialFeed/channels/useChannelDrives.ts | 6 +- .../hooks/socialFeed/channels/useChannels.ts | 8 +- .../channels/useCollaborativeChannel.ts | 22 +-- .../channels/useCollaborativeChannels.ts | 10 +- .../socialFeed/channels/useManageChannel.ts | 22 +-- .../src/hooks/socialFeed/drafts/useDrafts.ts | 8 +- .../socialFeed/post/cachedDataHelpers.ts | 26 +-- .../hooks/socialFeed/post/useManagePost.ts | 162 +++++++++--------- .../src/hooks/socialFeed/post/usePost.ts | 36 ++-- .../hooks/socialFeed/post/usePostsInfinite.ts | 42 ++--- .../hooks/socialFeed/useManageSocialFeed.ts | 10 +- .../src/hooks/socialFeed/useSocialChannels.ts | 6 +- .../src/hooks/socialFeed/useSocialFeed.ts | 18 +- .../src/hooks/staticFiles/useStaticFiles.ts | 12 +- .../useWebsocketSubscriber.ts | 28 +-- .../src/identity/Contact/ContactImage.tsx | 4 +- .../src/identity/IdentityTeaser.tsx | 12 +- .../common/common-app/src/media/Image.tsx | 8 +- .../common/common-app/src/media/Video.tsx | 26 ++- .../CirclePermissionView.tsx | 8 +- .../auth/OwnerAuthenticationProvider.ts | 22 +-- .../auth/PublicAuthenticationProvider.ts | 14 +- .../src/provider/contact/ContactProvider.ts | 14 +- .../provider/contact/ContactSourceProvider.ts | 50 +++--- .../network/domainNetwork/DomainProvider.ts | 10 +- .../socialFeed/Blocks/Author/AuthorImage.tsx | 4 +- .../socialFeed/Blocks/Author/AuthorName.tsx | 8 +- .../Interacts/Comments/CommentComposer.tsx | 4 +- .../Interacts/Comments/Parts/CommentHead.tsx | 8 +- .../Comments/Parts/CommentLikeButton.tsx | 4 +- .../Interacts/Comments/Parts/CommentMedia.tsx | 6 +- .../Blocks/Interacts/PostInteracts.tsx | 4 +- .../Blocks/Interacts/Reactions/LikeButton.tsx | 4 +- .../Interacts/Reactions/ReactionsBar.tsx | 4 +- .../Blocks/Media/DoubleClickHeartForMedia.tsx | 4 +- .../socialFeed/Blocks/Media/MediaGallery.tsx | 6 +- .../src/socialFeed/Blocks/Meta/Meta.tsx | 26 +-- .../socialFeed/Blocks/Meta/OwnerActions.tsx | 8 +- .../src/socialFeed/Composer/PostComposer.tsx | 10 +- .../socialFeed/PostListItem/PostTeaser.tsx | 8 +- .../src/editor/ImagePlugin/ImagePlugin.tsx | 6 +- packages/libs/js-lib/package.json | 4 +- .../auth/providers/AuthenticationProvider.ts | 22 +-- .../src/core/DriveData/Drive/DriveProvider.ts | 50 +++--- .../DriveFileByGlobalTransitIdProvider.ts | 14 +- .../File/DriveFileByUniqueIdProvider.ts | 60 +++---- .../core/DriveData/File/DriveFileHelper.ts | 6 +- .../core/DriveData/File/DriveFileManager.ts | 14 +- .../core/DriveData/File/DriveFileProvider.ts | 82 ++++----- .../core/DriveData/Query/DriveQueryService.ts | 24 +-- .../src/core/DriveData/SecurityHelpers.ts | 24 +-- .../DriveData/Upload/DriveFileUploader.ts | 66 +++---- .../core/DriveData/Upload/UploadHelpers.ts | 56 +++--- .../PushNotificationsService.ts | 34 ++-- ...otYouClient.test.ts => OdinClient.test.ts} | 38 ++-- .../core/{DotYouClient.ts => OdinClient.ts} | 15 +- .../core/ReactionData/GroupReactionService.ts | 16 +- .../src/core/ReactionData/ReactionService.ts | 32 ++-- .../src/core/SecurityData/SecurityProvider.ts | 12 +- .../core/WebsocketData/WebsocketProvider.ts | 39 ++--- packages/libs/js-lib/src/core/core.ts | 4 +- .../libs/js-lib/src/media/ImageProvider.ts | 18 +- .../src/media/Link/LinkPreviewProvider.ts | 6 +- .../libs/js-lib/src/media/MediaProvider.ts | 41 +++-- .../libs/js-lib/src/media/VideoProvider.ts | 6 +- .../circle/CircleDomainMembershipManager.ts | 18 +- .../network/circle/CircleMembershipManager.ts | 20 +-- .../src/network/circle/CircleProvider.ts | 44 ++--- .../network/connection/ConnectionManager.ts | 36 ++-- .../connection/ConnectionRequestManager.ts | 66 +++---- .../network/connection/IntroductionManager.ts | 18 +- .../src/network/contact/ContactManager.ts | 20 +-- .../src/network/follow/FollowManager.ts | 50 +++--- .../ConnectionGrantProvider.ts | 18 +- .../WebsocketProviderOverPeer.ts | 32 ++-- .../peer/peerData/Drive/PeerDriveProvider.ts | 8 +- .../peerData/ExternalPostsDataProvider.ts | 46 ++--- .../peerData/ExternalProfileDataProvider.ts | 12 +- .../File/PeerFileByGlobalTransitProvider.ts | 68 ++++---- .../File/PeerFileByUniqueIdProvider.ts | 14 +- .../src/peer/peerData/File/PeerFileManager.ts | 6 +- .../peer/peerData/File/PeerFileProvider.ts | 62 +++---- .../peerData/File/PeerReadReceiptManager.ts | 6 +- .../js-lib/src/peer/peerData/InboxProvider.ts | 6 +- .../peerData/Media/ExternalImageProvider.ts | 36 ++-- .../peerData/Media/ExternalMediaProvider.ts | 22 +-- .../peerData/Media/ExternalVideoProvider.ts | 46 ++--- .../peerData/Query/PeerDriveQueryService.ts | 18 +- .../peer/peerData/Upload/PeerFileUploader.ts | 12 +- .../AttributeData/AttributeDataProvider.ts | 18 +- .../ProfileData/ProfileDefinitionManager.ts | 78 ++++----- .../js-lib/src/public/file/FileProvider.ts | 26 +-- .../src/public/file/FilePublishManager.ts | 12 +- .../src/public/file/ProfileCardManager.ts | 36 ++-- .../posts/Channel/PostChannelManager.ts | 60 +++---- .../PostCollaborativeChannelsManager.ts | 20 +-- .../js-lib/src/public/posts/PostProvider.ts | 52 +++--- .../Reaction/PostCommentReactionManager.ts | 56 +++--- .../Reaction/PostEmojiReactionManager.ts | 32 ++-- .../public/posts/Upload/PostUploadHelpers.ts | 34 ++-- .../public/posts/Upload/PostUploader.test.ts | 26 +-- .../src/public/posts/Upload/PostUploader.ts | 104 ++++++----- .../src/components/OdinAudio/OdinAudio.tsx | 8 +- .../OdinAudio/OdinAudioWaveForm.tsx | 8 +- .../components/OdinImage/OdinPayloadImage.tsx | 8 +- .../components/OdinImage/OdinPreviewImage.tsx | 10 +- .../OdinImage/OdinThumbnailImage.tsx | 8 +- .../src/components/OdinVideo/DirectSource.tsx | 4 +- .../OdinVideo/EncryptedMseSource.tsx | 4 +- .../src/components/OdinVideo/HlsSource.tsx | 10 +- .../src/components/OdinVideo/MseSource.tsx | 4 +- .../src/components/OdinVideo/OdinVideo.tsx | 8 +- .../libs/ui-lib/src/hooks/audio/useAudio.ts | 84 ++++----- .../libs/ui-lib/src/hooks/image/useImage.ts | 74 ++++---- .../ui-lib/src/hooks/image/useTinyThumb.ts | 10 +- .../ui-lib/src/hooks/video/useHlsManifest.ts | 22 +-- .../libs/ui-lib/src/hooks/video/useVideo.ts | 78 ++++----- 362 files changed, 3262 insertions(+), 3282 deletions(-) delete mode 100644 docs/js-lib/core/DotYouClient.md create mode 100644 docs/js-lib/core/OdinClient.md delete mode 100644 packages/common/common-app/src/auth/DotYouClientProvider.tsx create mode 100644 packages/common/common-app/src/auth/OdinClientProvider.tsx delete mode 100644 packages/common/common-app/src/hooks/auth/useDotYouClientContext.ts rename packages/common/common-app/src/hooks/auth/{useDotYouClient.ts => useOdinClient.ts} (88%) create mode 100644 packages/common/common-app/src/hooks/auth/useOdinClientContext.ts rename packages/libs/js-lib/src/core/{DotYouClient.test.ts => OdinClient.test.ts} (73%) rename packages/libs/js-lib/src/core/{DotYouClient.ts => OdinClient.ts} (90%) diff --git a/README.md b/README.md index 795bbbab0..7b60ad281 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,9 @@ To use the libraries in your project, you can install them directly from GitHub - [JS-Lib](https://github.com/homebase-id/odin-js/pkgs/npm/js-lib) - [UI-Lib](https://github.com/homebase-id/odin-js/pkgs/npm/ui-lib) -#### Prerequisite: DotYouClient +#### Prerequisite: OdinClient -The libraries depend on a **DotYouClient** instance, which manages authentication parameters for API requests. Ensure you configure the `DotYouClient` correctly to interact with your Homebase Identity backend. +The libraries depend on a **OdinClient** instance, which manages authentication parameters for API requests. Ensure you configure the `OdinClient` correctly to interact with your Homebase Identity backend. ### Running the Apps Locally diff --git a/docs/js-lib/core/DotYouClient.md b/docs/js-lib/core/DotYouClient.md deleted file mode 100644 index 2c82f7021..000000000 --- a/docs/js-lib/core/DotYouClient.md +++ /dev/null @@ -1,16 +0,0 @@ -# DotYouClient - -Before you can interact with any data on a Homebase Identity you need a instance of a `DotYouClient`. Based on the authorization level different underlying api endpoints will be called, and different authorization keys will be expected. With the `DotYouClient` you pass alongs these properties as a single strongly-typed object. - -``` -const headers = { - bx0900 = BASE64_APP_AUTH_TOKEN; -}; - -new DotYouClient({ - sharedSecret: BASE64_APP_SHAREDSECRET, - api: ApiType.App, - identity: `frodo.dotyou.cloud`, - headers: headers, -}); -``` diff --git a/docs/js-lib/core/OdinClient.md b/docs/js-lib/core/OdinClient.md new file mode 100644 index 000000000..1857b564a --- /dev/null +++ b/docs/js-lib/core/OdinClient.md @@ -0,0 +1,16 @@ +# OdinClient + +Before you can interact with any data on a Homebase Identity you need a instance of a `OdinClient`. Based on the authorization level different underlying api endpoints will be called, and different authorization keys will be expected. With the `OdinClient` you pass alongs these properties as a single strongly-typed object. + +``` +const headers = { + bx0900 = BASE64_APP_AUTH_TOKEN; +}; + +new OdinClient({ + sharedSecret: BASE64_APP_SHAREDSECRET, + api: ApiType.App, + identity: `frodo.dotyou.cloud`, + headers: headers, +}); +``` diff --git a/docs/ui-lib/index.md b/docs/ui-lib/index.md index 4372de132..971c83875 100644 --- a/docs/ui-lib/index.md +++ b/docs/ui-lib/index.md @@ -1,12 +1,12 @@ # Odin Image -Before you can interact with any data on a Homebase Identity you need a instance of a `DotYouClient`. Based on the authorization level different underlying api endpoints will be called, and different authorization keys will be expected. With the `DotYouClient` you pass alongs these properties as a single strongly-typed object. +Before you can interact with any data on a Homebase Identity you need a instance of a `OdinClient`. Based on the authorization level different underlying api endpoints will be called, and different authorization keys will be expected. With the `OdinClient` you pass alongs these properties as a single strongly-typed object. -Look at the [DotYouClient documentation](https://github.com/YouFoundation/dotyoucore-js/blob/main/docs/js-lib/core/DotYouClient.md) for more info. +Look at the [OdinClient documentation](https://github.com/YouFoundation/dotyoucore-js/blob/main/docs/js-lib/core/OdinClient.md) for more info. ``` - + } @@ -114,7 +114,7 @@ function App() { v7_startTransition: true, }} /> - + ); @@ -123,7 +123,7 @@ function App() { const RootRoute = ({ children }: { children: ReactNode }) => { useValidateAuthorization(); - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); const location = useLocation(); if (!isAuthenticated) { diff --git a/packages/apps/chat-app/src/components/Auth/LoginBox/LoginBox.tsx b/packages/apps/chat-app/src/components/Auth/LoginBox/LoginBox.tsx index ed4bfe664..b2138b2df 100644 --- a/packages/apps/chat-app/src/components/Auth/LoginBox/LoginBox.tsx +++ b/packages/apps/chat-app/src/components/Auth/LoginBox/LoginBox.tsx @@ -11,7 +11,7 @@ import { Helmet } from 'react-helmet-async'; import { useQuery } from '@tanstack/react-query'; import { useEffect } from 'react'; import { MinimalLayout } from '../../ui/Layout/Layout'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; const AUTHORIZE_PATH = '/api/owner/v1/youauth/authorize'; @@ -35,7 +35,7 @@ export const LoginBox = () => { const isAutoAuthorize = window.location.pathname.startsWith(OWNER_APPS_ROOT); useEffect(() => { - const host = new DotYouClient({ + const host = new OdinClient({ hostIdentity: window.location.hostname, api: ApiType.Guest, }).getRoot(); diff --git a/packages/apps/chat-app/src/components/Chat/Composer/ChatReactionComposer.tsx b/packages/apps/chat-app/src/components/Chat/Composer/ChatReactionComposer.tsx index b4c8590d5..c5cc439e5 100644 --- a/packages/apps/chat-app/src/components/Chat/Composer/ChatReactionComposer.tsx +++ b/packages/apps/chat-app/src/components/Chat/Composer/ChatReactionComposer.tsx @@ -2,7 +2,7 @@ import { Lol } from '@homebase-id/common-app/icons'; import { ReactionsBar, t, - useDotYouClientContext, + useOdinClientContext, useMostSpace, useOutsideTrigger, } from '@homebase-id/common-app'; @@ -19,7 +19,7 @@ export const ChatReactionComposer = ({ conversation: HomebaseFile; msg: HomebaseFile; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const [isReact, setIsReact] = useState(false); const wrapperRef = useRef(null); useOutsideTrigger(wrapperRef, () => setIsReact(false)); diff --git a/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationAvatar.tsx b/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationAvatar.tsx index 2e7e7a4fe..33e2c31cc 100644 --- a/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationAvatar.tsx +++ b/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationAvatar.tsx @@ -1,4 +1,4 @@ -import { useDotYouClientContext, ConnectionImage, OwnerImage } from '@homebase-id/common-app'; +import { useOdinClientContext, ConnectionImage, OwnerImage } from '@homebase-id/common-app'; import { Persons } from '@homebase-id/common-app/icons'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { OdinImage } from '@homebase-id/ui-lib'; @@ -17,8 +17,8 @@ export const ConversationAvatar = ({ conversation: HomebaseFile; sizeClassName?: string; }) => { - const dotYouClient = useDotYouClientContext(); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const odinClient = useOdinClientContext(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); if (!loggedOnIdentity) return null; const conversationContent = conversation.fileMetadata.appData.content; @@ -38,7 +38,7 @@ export const ConversationAvatar = ({ {payload ? ( { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { data: conversationMetadata } = useConversationMetadata({ conversationId }).single; const { data: conversation } = useConversation({ conversationId }).single; const { data, isFetched: fetchedMessages } = useChatMessages({ conversationId }).all; diff --git a/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationListItem.tsx b/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationListItem.tsx index eaf6d2d5d..216d1c539 100644 --- a/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationListItem.tsx +++ b/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationListItem.tsx @@ -1,4 +1,4 @@ -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { ConversationMetadata, @@ -15,7 +15,7 @@ export const ConversationListItem = ({ onClick: () => void; isActive: boolean; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const recipients = conversation.fileMetadata.appData.content.recipients.filter( (recipient) => recipient !== loggedOnIdentity ); diff --git a/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationTitle.tsx b/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationTitle.tsx index 7e2a12e60..c8ef3ff70 100644 --- a/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationTitle.tsx +++ b/packages/apps/chat-app/src/components/Chat/Conversations/Item/ConversationTitle.tsx @@ -1,6 +1,6 @@ -import { useDotYouClientContext, ConnectionName, OwnerName, t } from '@homebase-id/common-app'; +import { useOdinClientContext, ConnectionName, OwnerName, t } from '@homebase-id/common-app'; import { House } from '@homebase-id/common-app/icons'; -import { HomebaseFile, DotYouClient, ApiType } from '@homebase-id/js-lib/core'; +import { HomebaseFile, OdinClient, ApiType } from '@homebase-id/js-lib/core'; import { UnifiedConversation, ConversationMetadata, @@ -16,7 +16,7 @@ export const ConversationTitle = ({ sizeClassName?: string; includeLink?: boolean; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); if (!loggedOnIdentity) return null; const conversationContent = conversation.fileMetadata.appData.content; @@ -36,7 +36,7 @@ export const ConversationTitle = ({ { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { conversationKey } = useParams(); const { single: { data: conversation, isFetched: isConversationFetched }, diff --git a/packages/apps/chat-app/src/components/Chat/Detail/ChatDeliveryIndicator.tsx b/packages/apps/chat-app/src/components/Chat/Detail/ChatDeliveryIndicator.tsx index 945de5f0f..a15daac4b 100644 --- a/packages/apps/chat-app/src/components/Chat/Detail/ChatDeliveryIndicator.tsx +++ b/packages/apps/chat-app/src/components/Chat/Detail/ChatDeliveryIndicator.tsx @@ -1,4 +1,4 @@ -import { t, useDotYouClientContext } from '@homebase-id/common-app'; +import { t, useOdinClientContext } from '@homebase-id/common-app'; import { Clock, SubtleCheck, Times } from '@homebase-id/common-app/icons'; import { HomebaseFile, RecipientTransferHistory, TransferStatus } from '@homebase-id/js-lib/core'; import { ChatMessage, ChatDeliveryStatus } from '../../../providers/ChatProvider'; @@ -10,7 +10,7 @@ export const ChatDeliveryIndicator = ({ msg: HomebaseFile; className?: string; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const content = msg.fileMetadata.appData.content; const authorOdinId = msg.fileMetadata.senderOdinId || ''; const messageFromMe = !authorOdinId || authorOdinId === loggedOnIdentity; diff --git a/packages/apps/chat-app/src/components/Chat/Detail/ChatInfo.tsx b/packages/apps/chat-app/src/components/Chat/Detail/ChatInfo.tsx index c06c7f72c..cddfe0fe0 100644 --- a/packages/apps/chat-app/src/components/Chat/Detail/ChatInfo.tsx +++ b/packages/apps/chat-app/src/components/Chat/Detail/ChatInfo.tsx @@ -1,5 +1,5 @@ import { createPortal } from 'react-dom'; -import { ApiType, DotYouClient, HomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile } from '@homebase-id/js-lib/core'; import { ActionLink, CHAT_ROOT_PATH, @@ -7,7 +7,7 @@ import { ConnectionName, DialogWrapper, t, - useDotYouClientContext, + useOdinClientContext, usePortal, } from '@homebase-id/common-app'; import { ConversationMetadata, UnifiedConversation } from '../../../providers/ConversationProvider'; @@ -25,7 +25,7 @@ export const ChatInfo = ({ }) => { const target = usePortal('modal-container'); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); if (!loggedOnIdentity) return null; const conversationContent = conversation.fileMetadata.appData.content; const recipients = conversationContent.recipients.filter( @@ -67,7 +67,7 @@ export const ChatInfo = ({
{recipients.map((recipient) => ( ; onClose: () => void; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const target = usePortal('modal-container'); const conversationContent = conversation.fileMetadata.appData.content; const recipients = conversationContent.recipients.filter( diff --git a/packages/apps/chat-app/src/components/Chat/Detail/ChatMessageItem.tsx b/packages/apps/chat-app/src/components/Chat/Detail/ChatMessageItem.tsx index 30d659087..d69cf90ea 100644 --- a/packages/apps/chat-app/src/components/Chat/Detail/ChatMessageItem.tsx +++ b/packages/apps/chat-app/src/components/Chat/Detail/ChatMessageItem.tsx @@ -6,7 +6,7 @@ import { useDarkMode, RichTextRenderer, getPlainTextFromRichText, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { DEFAULT_PAYLOAD_KEY, HomebaseFile, RichText } from '@homebase-id/js-lib/core'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; @@ -32,7 +32,7 @@ export const ChatMessageItem = ({ conversation?: HomebaseFile; chatActions?: ChatActions; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const authorOdinId = msg.fileMetadata.senderOdinId || ''; const messageFromMe = !authorOdinId || authorOdinId === loggedOnIdentity; diff --git a/packages/apps/chat-app/src/components/Chat/Detail/ContextMenu.tsx b/packages/apps/chat-app/src/components/Chat/Detail/ContextMenu.tsx index aa8cd3777..5a41ffac6 100644 --- a/packages/apps/chat-app/src/components/Chat/Detail/ContextMenu.tsx +++ b/packages/apps/chat-app/src/components/Chat/Detail/ContextMenu.tsx @@ -5,7 +5,7 @@ import { t, ActionGroup, ErrorNotification, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { ChevronDown } from '@homebase-id/common-app/icons'; import { HomebaseFile } from '@homebase-id/js-lib/core'; @@ -42,7 +42,7 @@ export const ContextMenu = ({ const { isStarred } = useChatToggleMessageStar({ msg }); const { mutate: resend, error: resendError } = useChatMessage().update; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const authorOdinId = msg.fileMetadata.senderOdinId; const messageFromMe = !authorOdinId || authorOdinId === loggedOnIdentity; diff --git a/packages/apps/chat-app/src/components/Chat/Detail/EmbeddedMessage.tsx b/packages/apps/chat-app/src/components/Chat/Detail/EmbeddedMessage.tsx index 093eed9b4..a4c7e59ab 100644 --- a/packages/apps/chat-app/src/components/Chat/Detail/EmbeddedMessage.tsx +++ b/packages/apps/chat-app/src/components/Chat/Detail/EmbeddedMessage.tsx @@ -4,7 +4,7 @@ import { ExtensionThumbnail, getPlainTextFromRichText, t, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { useChatMessage } from '../../../hooks/chat/useChatMessage'; @@ -32,7 +32,7 @@ export const EmbeddedMessage = ({ msg: HomebaseFile | undefined; className?: string; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const hasMedia = msg && !!msg.fileMetadata.payloads?.length; const plainText = msg && getPlainTextFromRichText(msg.fileMetadata.appData.content.message); return ( @@ -68,14 +68,14 @@ export const EmbeddedMessageMedia = ({ msg: HomebaseFile; className?: string; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const firstPayload = msg.fileMetadata.payloads?.[0]; if (!firstPayload) return null; if (firstPayload.contentType.includes('image/')) { return ( void; }) => { const { isDarkMode } = useDarkMode(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const isVideo = payload.contentType?.startsWith('video') || payload.contentType === 'application/vnd.apple.mpegurl'; @@ -95,7 +95,7 @@ const MediaItem = ({ } > ) : isImage ? ( { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const [tinyLoaded, setTinyLoaded] = useState(false); const [finalLoaded, setFinalLoaded] = useState(false); @@ -226,7 +226,7 @@ const CustomOdinImage = ({ > { @@ -246,7 +246,7 @@ const CustomOdinImage = ({ {tinyLoaded ? ( { - const { hasSharedSecret } = useDotYouClient(); + const { hasSharedSecret } = useOdinClient(); const { data: hasValidToken, isFetched } = useVerifyToken(); useEffect(() => { @@ -46,8 +46,8 @@ export const useValidateAuthorization = () => { }; export const useAuth = () => { - const { getDotYouClient } = useDotYouClient(); - const preauth = async (): Promise => await preauthApps(getDotYouClient()); + const { getOdinClient } = useOdinClient(); + const preauth = async (): Promise => await preauthApps(getOdinClient()); return { preauth, diff --git a/packages/apps/chat-app/src/hooks/auth/useVerifyToken.ts b/packages/apps/chat-app/src/hooks/auth/useVerifyToken.ts index 424f63c6b..2b06bd3cf 100644 --- a/packages/apps/chat-app/src/hooks/auth/useVerifyToken.ts +++ b/packages/apps/chat-app/src/hooks/auth/useVerifyToken.ts @@ -1,16 +1,16 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { hasValidToken as hasValidYouAuthToken } from '@homebase-id/js-lib/auth'; const MINUTE_IN_MS = 60000; export const useVerifyToken = () => { - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isAuthenticated = odinClient.isAuthenticated(); const fetchData = async () => { // When hasValidYouAuthToken returns undefined, it means that it couldn't be checked.. so we assume it's valid, to avoid unnecessary logouts - return (await hasValidYouAuthToken(dotYouClient)) ?? true; + return (await hasValidYouAuthToken(odinClient)) ?? true; }; return useQuery({ queryKey: ['verify-chat-token'], diff --git a/packages/apps/chat-app/src/hooks/chat/live/useChatInboxProcessor.ts b/packages/apps/chat-app/src/hooks/chat/live/useChatInboxProcessor.ts index 8eedb22bc..aebd1baf3 100644 --- a/packages/apps/chat-app/src/hooks/chat/live/useChatInboxProcessor.ts +++ b/packages/apps/chat-app/src/hooks/chat/live/useChatInboxProcessor.ts @@ -1,7 +1,7 @@ -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { HomebaseFile, - DotYouClient, + OdinClient, FileQueryParams, queryBatch, queryModified, @@ -30,18 +30,18 @@ const MINUTE_IN_MS = 60000; const BATCH_SIZE = 2000; // Process the inbox on startup export const useChatInboxProcessor = (connected?: boolean) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetchData = async () => { const lastProcessedTime = queryClient.getQueryState(['process-chat-inbox'])?.dataUpdatedAt; const lastProcessedWithBuffer = lastProcessedTime && lastProcessedTime - MINUTE_IN_MS * 2; - const processedresult = await processInbox(dotYouClient, ChatDrive, BATCH_SIZE); + const processedresult = await processInbox(odinClient, ChatDrive, BATCH_SIZE); isDebug && console.debug('[InboxProcessor] fetching updates since', lastProcessedWithBuffer); if (lastProcessedWithBuffer) { const updatedMessages = await findChangesSinceTimestamp( - dotYouClient, + odinClient, lastProcessedWithBuffer, { targetDrive: ChatDrive, @@ -55,7 +55,7 @@ export const useChatInboxProcessor = (connected?: boolean) => { updatedMessages.map( async (msg) => await dsrToMessage( - dotYouClient, + odinClient, msg as unknown as HomebaseFile, ChatDrive, false @@ -63,11 +63,11 @@ export const useChatInboxProcessor = (connected?: boolean) => { ) ) ).filter(Boolean) as HomebaseFile[]; - await processChatMessagesBatch(dotYouClient, queryClient, fullMessages); + await processChatMessagesBatch(odinClient, queryClient, fullMessages); } const updatedConversations = await findChangesSinceTimestamp( - dotYouClient, + odinClient, lastProcessedWithBuffer, { targetDrive: ChatDrive, @@ -75,7 +75,7 @@ export const useChatInboxProcessor = (connected?: boolean) => { } ); isDebug && console.debug('[InboxProcessor] new conversations', updatedConversations.length); - await processConversationsBatch(dotYouClient, queryClient, updatedConversations); + await processConversationsBatch(odinClient, queryClient, updatedConversations); } else { console.warn('[useChatInboxProcessor] Invalidating all conversations & chat messages'); // We have no reference to the last time we processed the inbox, so we can only invalidate all chat messages @@ -96,21 +96,21 @@ export const useChatInboxProcessor = (connected?: boolean) => { }; const findChangesSinceTimestamp = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, timeStamp: number, params: FileQueryParams ) => { const modifiedCursor = getQueryModifiedCursorFromTime(timeStamp); // Friday, 31 May 2024 09:38:54.678 const batchCursor = getQueryBatchCursorFromTime(new Date().getTime(), timeStamp); - const newFiles = await queryBatch(dotYouClient, params, { + const newFiles = await queryBatch(odinClient, params, { maxRecords: BATCH_SIZE, cursorState: batchCursor, includeMetadataHeader: true, includeTransferHistory: true, }); - const modifiedFiles = await queryModified(dotYouClient, params, { + const modifiedFiles = await queryModified(odinClient, params, { maxRecords: BATCH_SIZE, cursor: modifiedCursor + '', excludePreviewThumbnail: false, @@ -122,7 +122,7 @@ const findChangesSinceTimestamp = async ( }; const processConversationsBatch = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, conversations: (HomebaseFile | DeletedHomebaseFile)[] ) => { @@ -134,7 +134,7 @@ const processConversationsBatch = async ( } const updatedConversation = await dsrToConversation( - dotYouClient, + odinClient, conversationsDsr, ChatDrive, true diff --git a/packages/apps/chat-app/src/hooks/chat/live/useChatWebsocket.ts b/packages/apps/chat-app/src/hooks/chat/live/useChatWebsocket.ts index 0dc45ae47..e42b28d01 100644 --- a/packages/apps/chat-app/src/hooks/chat/live/useChatWebsocket.ts +++ b/packages/apps/chat-app/src/hooks/chat/live/useChatWebsocket.ts @@ -1,12 +1,12 @@ import { - useDotYouClientContext, + useOdinClientContext, insertNewNotification, incrementAppIdNotificationCount, useWebsocketSubscriber, } from '@homebase-id/common-app'; import { HomebaseFile, - DotYouClient, + OdinClient, TypedConnectionNotification, AppNotification, ReactionNotification, @@ -57,10 +57,10 @@ export const useChatWebsocket = (isEnabled: boolean) => { }; export const useChatSocketHandler = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); // Added to ensure we have the conversation query available const { @@ -70,7 +70,7 @@ export const useChatSocketHandler = () => { const [chatMessagesQueue, setChatMessagesQueue] = useState[]>([]); const chatHandler = useCallback( - async (_: DotYouClient, notification: TypedConnectionNotification) => { + async (_: OdinClient, notification: TypedConnectionNotification) => { isDebug && console.debug('[ChatWebsocket] Got notification', notification); if ( @@ -86,7 +86,7 @@ export const useChatSocketHandler = () => { if (isNewMessageFile) { // Check if the message is orphaned from a conversation const conversation = await queryClient.fetchQuery( - getConversationQueryOptions(dotYouClient, queryClient, conversationId) + getConversationQueryOptions(odinClient, queryClient, conversationId) ); if (!conversation) { @@ -102,7 +102,7 @@ export const useChatSocketHandler = () => { // This skips the invalidation of all chat messages, as we only need to add/update this specific message const updatedChatMessage = await dsrToMessage( - dotYouClient, + odinClient, notification.header, ChatDrive, true @@ -128,7 +128,7 @@ export const useChatSocketHandler = () => { ) { const isNewConversationFile = notification.notificationType === 'fileAdded'; const updatedConversation = await dsrToConversation( - dotYouClient, + odinClient, notification.header, ChatDrive, true @@ -223,7 +223,7 @@ export const useChatSocketHandler = () => { return acc; }, [] as HomebaseFile[]); - await processChatMessagesBatch(dotYouClient, queryClient, filteredMessages); + await processChatMessagesBatch(odinClient, queryClient, filteredMessages); }, []); const timeout = useRef(null); @@ -247,7 +247,7 @@ export const useChatSocketHandler = () => { }; export const processChatMessagesBatch = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, chatMessages: (HomebaseFile | DeletedHomebaseFile)[] ) => { @@ -284,11 +284,11 @@ export const processChatMessagesBatch = async ( uniqueMessagesPerConversation[conversationId].map(async (newMessage) => typeof newMessage.fileMetadata.appData.content === 'string' ? await dsrToMessage( - dotYouClient, - newMessage as HomebaseFile, - ChatDrive, - true - ) + odinClient, + newMessage as HomebaseFile, + ChatDrive, + true + ) : (newMessage as HomebaseFile) ) ) @@ -297,14 +297,14 @@ export const processChatMessagesBatch = async ( // Check if the message is orphaned from a conversation const conversation = await queryClient.fetchQuery( - getConversationQueryOptions(dotYouClient, queryClient, conversationId) + getConversationQueryOptions(odinClient, queryClient, conversationId) ); if ( conversation && (conversation.fileMetadata.appData.archivalStatus === 2 || conversation.fileMetadata.appData.archivalStatus === 3) ) { - restoreChat(dotYouClient, conversation); + restoreChat(odinClient, conversation); } }) ); diff --git a/packages/apps/chat-app/src/hooks/chat/useChatMessage.ts b/packages/apps/chat-app/src/hooks/chat/useChatMessage.ts index f48ad8e97..5ce6cce37 100644 --- a/packages/apps/chat-app/src/hooks/chat/useChatMessage.ts +++ b/packages/apps/chat-app/src/hooks/chat/useChatMessage.ts @@ -22,26 +22,26 @@ import { UnifiedConversation, } from '../../providers/ConversationProvider'; import { LinkPreview } from '@homebase-id/js-lib/media'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { insertNewMessage, updateCacheChatMessages } from './useChatMessages'; export const useChatMessage = (props?: { conversationId?: string | undefined; // Optional: if we have it we can use the cache messageId: string | undefined; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const getMessageByUniqueId = async (conversationId: string | undefined, messageId: string) => { const extistingMessages = conversationId ? queryClient.getQueryData< - InfiniteData<{ - searchResults: (HomebaseFile | null)[]; - cursorState: string; - queryTime: number; - includeMetadataHeader: boolean; - }> - >(['chat-messages', conversationId]) + InfiniteData<{ + searchResults: (HomebaseFile | null)[]; + cursorState: string; + queryTime: number; + includeMetadataHeader: boolean; + }> + >(['chat-messages', conversationId]) : undefined; if (extistingMessages) { @@ -54,7 +54,7 @@ export const useChatMessage = (props?: { } } - return await getChatMessage(dotYouClient, messageId); + return await getChatMessage(odinClient, messageId); }; const sendMessage = async ({ @@ -78,7 +78,7 @@ export const useChatMessage = (props?: { }): Promise | null> => { const conversationId = conversation.fileMetadata.appData.uniqueId as string; const conversationContent = conversation.fileMetadata.appData.content; - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const recipients = conversationContent.recipients.filter((recipient) => recipient !== identity); // We prefer having the uniqueId set outside of the mutation, so that an auto-retry of the mutation doesn't create duplicates @@ -123,7 +123,7 @@ export const useChatMessage = (props?: { : 'a 📄 file'; const uploadResult = await uploadChatMessage( - dotYouClient, + odinClient, newChat, recipients, files, @@ -160,10 +160,10 @@ export const useChatMessage = (props?: { conversation: HomebaseFile; }) => { const conversationContent = conversation.fileMetadata.appData.content; - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const recipients = conversationContent.recipients.filter((recipient) => recipient !== identity); - await updateChatMessage(dotYouClient, updatedChatMessage, recipients); + await updateChatMessage(odinClient, updatedChatMessage, recipients); }; return { @@ -176,7 +176,7 @@ export const useChatMessage = (props?: { send: useMutation({ mutationFn: sendMessage, onMutate: async ({ conversation, replyId, files, message, chatId, userDate, tags }) => { - const identity = dotYouClient.getLoggedInIdentity(); + const identity = odinClient.getLoggedInIdentity(); const newMessageDsr: NewHomebaseFile = { fileMetadata: { created: userDate, diff --git a/packages/apps/chat-app/src/hooks/chat/useChatMessages.ts b/packages/apps/chat-app/src/hooks/chat/useChatMessages.ts index d535ec03a..384c1adf0 100644 --- a/packages/apps/chat-app/src/hooks/chat/useChatMessages.ts +++ b/packages/apps/chat-app/src/hooks/chat/useChatMessages.ts @@ -13,7 +13,7 @@ import { requestMarkAsRead, softDeleteChatMessage, } from '../../providers/ChatProvider'; -import { DotYouClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; +import { OdinClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { ConversationMetadata, @@ -22,14 +22,14 @@ import { } from '../../providers/ConversationProvider'; import { formatGuidId, stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { SendReadReceiptResponseRecipientStatus } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { updateCacheChatMessage } from './useChatMessage'; const FIRST_PAGE_SIZE = 30; const PAGE_SIZE = 100; export const useChatMessages = (props?: { conversationId: string | undefined }) => { const { conversationId } = props || { conversationId: undefined }; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); @@ -40,7 +40,7 @@ export const useChatMessages = (props?: { conversationId: string | undefined }) conversation: HomebaseFile; messages: HomebaseFile[]; }) => { - const response = await requestMarkAsRead(dotYouClient, conversation, messages); + const response = await requestMarkAsRead(odinClient, conversation, messages); response.results.forEach((result) => { const someFailed = result.status.some( @@ -64,7 +64,7 @@ export const useChatMessages = (props?: { conversationId: string | undefined }) deleteForEveryone?: boolean; }) => { const conversationContent = conversation.fileMetadata.appData.content; - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const recipients = conversationContent.recipients.filter((recipient) => recipient !== identity); const hardDelete = stringGuidsEqual( @@ -75,19 +75,19 @@ export const useChatMessages = (props?: { conversationId: string | undefined }) return await Promise.all( messages.map(async (msg) => hardDelete - ? await hardDeleteChatMessage(dotYouClient, msg) + ? await hardDeleteChatMessage(odinClient, msg) : await softDeleteChatMessage( - dotYouClient, - msg, - recipients.filter(Boolean), - deleteForEveryone - ) + odinClient, + msg, + recipients.filter(Boolean), + deleteForEveryone + ) ) ); }; return { - all: useInfiniteQuery(getChatMessageInfiniteQueryOptions(dotYouClient, conversationId)), + all: useInfiniteQuery(getChatMessageInfiniteQueryOptions(odinClient, conversationId)), markAsRead: useMutation({ mutationKey: ['markAsRead', conversationId], mutationFn: markAsRead, @@ -109,12 +109,12 @@ export const useChatMessages = (props?: { conversationId: string | undefined }) }; const fetchMessages = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversationId: string, cursorState: string | undefined ) => { return await getChatMessages( - dotYouClient, + odinClient, conversationId, cursorState, cursorState ? PAGE_SIZE : FIRST_PAGE_SIZE @@ -122,25 +122,25 @@ const fetchMessages = async ( }; export const getChatMessageInfiniteQueryOptions: ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversationId: string | undefined ) => UndefinedInitialDataInfiniteOptions<{ searchResults: (HomebaseFile | null)[]; cursorState: string; queryTime: number; includeMetadataHeader: boolean; -}> = (dotYouClient, conversationId) => ({ +}> = (odinClient, conversationId) => ({ queryKey: ['chat-messages', formatGuidId(conversationId)], initialPageParam: undefined as string | undefined, queryFn: ({ pageParam }) => fetchMessages( - dotYouClient, + odinClient, formatGuidId(conversationId as string), pageParam as string | undefined ), getNextPageParam: (lastPage, pages) => lastPage && - lastPage.searchResults?.length >= (lastPage === pages[0] ? FIRST_PAGE_SIZE : PAGE_SIZE) + lastPage.searchResults?.length >= (lastPage === pages[0] ? FIRST_PAGE_SIZE : PAGE_SIZE) ? lastPage.cursorState : undefined, enabled: !!conversationId, @@ -166,11 +166,11 @@ export const updateCacheChatMessages = ( }> ) => | InfiniteData<{ - searchResults: (HomebaseFile | NewHomebaseFile)[]; - cursorState: string; - queryTime: number; - includeMetadataHeader: boolean; - }> + searchResults: (HomebaseFile | NewHomebaseFile)[]; + cursorState: string; + queryTime: number; + includeMetadataHeader: boolean; + }> | undefined ) => { const currentData = queryClient.getQueryData< @@ -327,8 +327,8 @@ export const internalInsertNewMessage = ( searchResults: index === 0 ? [newMessage, ...filteredSearchResults].sort( - (a, b) => (b.fileMetadata.created || 0) - (a.fileMetadata.created || 0) - ) // Re-sort the first page, as the new message might be older than the first message in the page; + (a, b) => (b.fileMetadata.created || 0) - (a.fileMetadata.created || 0) + ) // Re-sort the first page, as the new message might be older than the first message in the page; : filteredSearchResults, }; } diff --git a/packages/apps/chat-app/src/hooks/chat/useChatReaction.ts b/packages/apps/chat-app/src/hooks/chat/useChatReaction.ts index ad4358741..55722cab6 100644 --- a/packages/apps/chat-app/src/hooks/chat/useChatReaction.ts +++ b/packages/apps/chat-app/src/hooks/chat/useChatReaction.ts @@ -13,7 +13,7 @@ import { import { ChatMessage } from '../../providers/ChatProvider'; import { UnifiedConversation } from '../../providers/ConversationProvider'; import { getNewId, tryJsonParse } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { insertNewMessage } from './useChatMessages'; export const useChatReaction = (props?: { @@ -22,13 +22,13 @@ export const useChatReaction = (props?: { }) => { const { messageGlobalTransitId, messageFileId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const getReactionsByMessageGlobalTransitId = (messageGlobalTransitId: string) => async () => { const reactions = ( - await getGroupReactions(dotYouClient, { + await getGroupReactions(odinClient, { target: { globalTransitId: messageGlobalTransitId, targetDrive: ChatDrive, @@ -49,14 +49,14 @@ export const useChatReaction = (props?: { reaction: string; }) => { const conversationContent = conversation.fileMetadata.appData.content; - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const recipients = conversationContent.recipients.filter((recipient) => recipient !== identity); if (!message.fileMetadata.globalTransitId) throw new Error('Message does not have a global transit id'); return await uploadGroupReaction( - dotYouClient, + odinClient, ChatDrive, message.fileMetadata.globalTransitId, reaction, @@ -74,13 +74,13 @@ export const useChatReaction = (props?: { reaction: EmojiReaction; }) => { const conversationContent = conversation.fileMetadata.appData.content; - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const recipients = conversationContent.recipients.filter((recipient) => recipient !== identity); if (!message.fileMetadata.globalTransitId) throw new Error('Message does not have a global transit id'); - return await deleteGroupReaction(dotYouClient, ChatDrive, recipients, reaction, { + return await deleteGroupReaction(odinClient, ChatDrive, recipients, reaction, { fileId: message.fileId, globalTransitId: message.fileMetadata.globalTransitId, targetDrive: ChatDrive, @@ -102,7 +102,7 @@ export const useChatReaction = (props?: { queryClient.getQueryData(['chat-reaction', message.fileId]) || []; const newReaction: EmojiReaction = { - authorOdinId: dotYouClient.getHostIdentity(), + authorOdinId: odinClient.getHostIdentity(), body: reaction, }; diff --git a/packages/apps/chat-app/src/hooks/chat/useChatToggleMessageStar.ts b/packages/apps/chat-app/src/hooks/chat/useChatToggleMessageStar.ts index 54d71c0bb..b4bb6101e 100644 --- a/packages/apps/chat-app/src/hooks/chat/useChatToggleMessageStar.ts +++ b/packages/apps/chat-app/src/hooks/chat/useChatToggleMessageStar.ts @@ -7,7 +7,7 @@ import { toGuidId, uint8ArrayToBase64, } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { ChatDrive } from '../../providers/ConversationProvider'; import { insertNewMessage } from './useChatMessages'; import { invalidateStarredMessages } from './useStarredMessages'; @@ -15,11 +15,11 @@ import { invalidateStarredMessages } from './useStarredMessages'; export const STARRED_MSG_TAG = toGuidId('starred'); export const useChatToggleMessageStar = (props?: { msg: HomebaseFile }) => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const toggleStar = async (msg: HomebaseFile) => { return uploadLocalMetadataTags( - dotYouClient, + odinClient, { fileId: msg.fileId, targetDrive: ChatDrive, diff --git a/packages/apps/chat-app/src/hooks/chat/useConversation.ts b/packages/apps/chat-app/src/hooks/chat/useConversation.ts index bd7016926..492ba4ab5 100644 --- a/packages/apps/chat-app/src/hooks/chat/useConversation.ts +++ b/packages/apps/chat-app/src/hooks/chat/useConversation.ts @@ -14,7 +14,7 @@ import { uploadConversation, } from '../../providers/ConversationProvider'; import { - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, SecurityGroupType, @@ -22,14 +22,14 @@ import { import { formatGuidId, getNewId, getNewXorId, stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { invalidateConversations, updateCacheConversations } from './useConversations'; import { deleteAllChatMessages } from '../../providers/ChatProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { invalidateChatMessages } from './useChatMessages'; export const useConversation = (props?: { conversationId?: string | undefined }) => { const { conversationId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const createConversation = async ({ recipients, @@ -46,7 +46,7 @@ export const useConversation = (props?: { conversationId?: string | undefined }) : formatGuidId(getNewId()); if (recipients.length === 1) { - const existingConversation = await getConversation(dotYouClient, newConversationId); + const existingConversation = await getConversation(odinClient, newConversationId); if (existingConversation) return { ...existingConversation, newConversationId }; } @@ -71,7 +71,7 @@ export const useConversation = (props?: { conversationId?: string | undefined }) const uploadResult = { newConversationId, - ...(await uploadConversation(dotYouClient, newConversation, imagePayload)), + ...(await uploadConversation(odinClient, newConversation, imagePayload)), }; return uploadResult; @@ -82,7 +82,7 @@ export const useConversation = (props?: { conversationId?: string | undefined }) }: { conversation: HomebaseFile; }) => { - return await updateConversation(dotYouClient, conversation, undefined, true); + return await updateConversation(odinClient, conversation, undefined, true); }; const updateExistingConversation = async ({ @@ -95,9 +95,9 @@ export const useConversation = (props?: { conversationId?: string | undefined }) distribute?: boolean; }) => { if (distribute && conversation.fileMetadata.appData.content.recipients?.length >= 2) { - return await updateConversation(dotYouClient, conversation, imagePayload, distribute); + return await updateConversation(odinClient, conversation, imagePayload, distribute); } else { - return await updateConversation(dotYouClient, conversation, imagePayload); + return await updateConversation(odinClient, conversation, imagePayload); } }; @@ -107,7 +107,7 @@ export const useConversation = (props?: { conversationId?: string | undefined }) conversation: HomebaseFile; }) => { return await deleteAllChatMessages( - dotYouClient, + odinClient, conversation.fileMetadata.appData.uniqueId as string ); }; @@ -118,7 +118,7 @@ export const useConversation = (props?: { conversationId?: string | undefined }) conversation: HomebaseFile; }) => { const deletedResult = await deleteAllChatMessages( - dotYouClient, + odinClient, conversation.fileMetadata.appData.uniqueId as string ); if (!deletedResult) throw new Error('Failed to delete chat messages'); @@ -132,7 +132,7 @@ export const useConversation = (props?: { conversationId?: string | undefined }) }, }; - return await updateConversation(dotYouClient, newConversation, undefined); + return await updateConversation(odinClient, newConversation, undefined); }; const archiveChat = async ({ @@ -148,11 +148,11 @@ export const useConversation = (props?: { conversationId?: string | undefined }) }, }; - return await updateConversation(dotYouClient, newConversation, undefined); + return await updateConversation(odinClient, newConversation, undefined); }; return { - single: useQuery(getConversationQueryOptions(dotYouClient, queryClient, conversationId)), + single: useQuery(getConversationQueryOptions(odinClient, queryClient, conversationId)), create: useMutation({ mutationFn: createConversation, onSettled: async (_data) => { @@ -235,7 +235,7 @@ export const useConversation = (props?: { conversationId?: string | undefined }) conversation, }: { conversation: HomebaseFile; - }) => restoreChat(dotYouClient, conversation), + }) => restoreChat(odinClient, conversation), onSettled: async (_data, _error, variables) => { invalidateConversations(queryClient); @@ -250,7 +250,7 @@ export const useConversation = (props?: { conversationId?: string | undefined }) }; export const restoreChat = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversation: HomebaseFile ) => { const newConversation: HomebaseFile = { @@ -261,7 +261,7 @@ export const restoreChat = async ( }, }; - return await updateConversation(dotYouClient, newConversation, undefined); + return await updateConversation(odinClient, newConversation, undefined); }; export const invalidateConversation = (queryClient: QueryClient, conversationId?: string) => { @@ -291,7 +291,7 @@ export const updateCacheConversation = ( }; const fetchSingleConversation = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, conversationId: string ): Promise | null> => { @@ -313,7 +313,7 @@ const fetchSingleConversation = async ( if (!conversationId) return null; - const conversationFromServer = await getConversation(dotYouClient, conversationId); + const conversationFromServer = await getConversation(odinClient, conversationId); // Don't cache if the conversation is not found if (!conversationFromServer) throw new Error('Conversation not found'); @@ -321,16 +321,16 @@ const fetchSingleConversation = async ( }; export const getConversationQueryOptions: ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, conversationId: string | undefined ) => UndefinedInitialDataOptions | null> = ( - dotYouClient, + odinClient, queryClient, conversationId ) => ({ queryKey: ['conversation', conversationId], - queryFn: () => fetchSingleConversation(dotYouClient, queryClient, conversationId as string), + queryFn: () => fetchSingleConversation(odinClient, queryClient, conversationId as string), staleTime: 1000 * 60 * 60 * 24, // 24 hours enabled: !!conversationId, retry: (failureCount, error) => { diff --git a/packages/apps/chat-app/src/hooks/chat/useConversationMetadata.ts b/packages/apps/chat-app/src/hooks/chat/useConversationMetadata.ts index d53de95af..ac3d0c925 100644 --- a/packages/apps/chat-app/src/hooks/chat/useConversationMetadata.ts +++ b/packages/apps/chat-app/src/hooks/chat/useConversationMetadata.ts @@ -5,13 +5,13 @@ import { UnifiedConversation, ChatDrive, } from '../../providers/ConversationProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { useConversation } from './useConversation'; import { insertNewConversation } from './useConversations'; export const useConversationMetadata = (props?: { conversationId?: string | undefined }) => { const { conversationId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const conversationQuery = useConversation({ @@ -25,7 +25,7 @@ export const useConversationMetadata = (props?: { conversationId?: string | unde conversation: HomebaseFile; newMetadata: ConversationMetadata; }) => { - return await uploadLocalMetadataContent(dotYouClient, ChatDrive, conversation, { + return await uploadLocalMetadataContent(odinClient, ChatDrive, conversation, { ...conversation.fileMetadata.localAppData, content: newMetadata, }); diff --git a/packages/apps/chat-app/src/hooks/chat/useConversationWithRecentMessage.ts b/packages/apps/chat-app/src/hooks/chat/useConversationWithRecentMessage.ts index 8212a903d..5240132ff 100644 --- a/packages/apps/chat-app/src/hooks/chat/useConversationWithRecentMessage.ts +++ b/packages/apps/chat-app/src/hooks/chat/useConversationWithRecentMessage.ts @@ -4,7 +4,7 @@ import { HomebaseFile } from '@homebase-id/js-lib/core'; import { useCallback, useEffect, useMemo } from 'react'; import { getChatMessageInfiniteQueryOptions } from './useChatMessages'; import { useConversations } from './useConversations'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { ChatMessage } from '../../providers/ChatProvider'; import { ConversationMetadata, UnifiedConversation } from '../../providers/ConversationProvider'; @@ -15,7 +15,7 @@ export type ConversationWithRecentMessage = HomebaseFile< lastMessage: HomebaseFile | null; }; export const useConversationsWithRecentMessage = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const { data: conversations } = useConversations().all; @@ -39,7 +39,7 @@ export const useConversationsWithRecentMessage = () => { ).map(async (convo) => { const conversationId = convo.fileMetadata.appData.uniqueId; const messages = await queryClient.fetchInfiniteQuery( - getChatMessageInfiniteQueryOptions(dotYouClient, conversationId) + getChatMessageInfiniteQueryOptions(odinClient, conversationId) ); return { ...convo, @@ -59,7 +59,7 @@ export const useConversationsWithRecentMessage = () => { queryClient.setQueryData(['conversations-with-recent-message'], convoWithMessage, { updatedAt: Date.now(), }); - }, [flatConversations, dotYouClient, queryClient]); + }, [flatConversations, odinClient, queryClient]); const lastUpdate = useLastUpdatedChatMessages(); const lastConversationUpdate = useLastUpdatedConversations(); diff --git a/packages/apps/chat-app/src/hooks/chat/useConversations.ts b/packages/apps/chat-app/src/hooks/chat/useConversations.ts index 3f12e1ce5..1d2aab914 100644 --- a/packages/apps/chat-app/src/hooks/chat/useConversations.ts +++ b/packages/apps/chat-app/src/hooks/chat/useConversations.ts @@ -4,7 +4,7 @@ import { getConversations, } from '../../providers/ConversationProvider'; import { InfiniteData, QueryClient, useInfiniteQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { invalidateConversation, updateCacheConversation } from './useConversation'; @@ -18,12 +18,12 @@ export interface ChatConversationsReturn { const PAGE_SIZE = 500; export const useConversations = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchConversations = async ( cursorState: string | undefined ): Promise => - await getConversations(dotYouClient, cursorState, PAGE_SIZE); + await getConversations(odinClient, cursorState, PAGE_SIZE); return { all: useInfiniteQuery({ @@ -48,8 +48,8 @@ export const insertNewConversation = ( const isNewFile = isUpdate === undefined ? !data.pages.some((page) => - page.searchResults.some((msg) => stringGuidsEqual(msg?.fileId, newConversation.fileId)) - ) + page.searchResults.some((msg) => stringGuidsEqual(msg?.fileId, newConversation.fileId)) + ) : !isUpdate; return { @@ -59,23 +59,23 @@ export const insertNewConversation = ( searchResults: isNewFile ? index === 0 ? [ - newConversation, - // There shouldn't be any duplicates for a fileAdded, but just in case - ...page.searchResults.filter( - (msg) => !stringGuidsEqual(msg?.fileId, newConversation.fileId) - ), - ].sort((a, b) => b.fileMetadata.created - a.fileMetadata.created) // Re-sort the first page, as the new message might be older than the first message in the page; - : page.searchResults.filter( + newConversation, + // There shouldn't be any duplicates for a fileAdded, but just in case + ...page.searchResults.filter( (msg) => !stringGuidsEqual(msg?.fileId, newConversation.fileId) - ) // There shouldn't be any duplicates for a fileAdded, but just in case + ), + ].sort((a, b) => b.fileMetadata.created - a.fileMetadata.created) // Re-sort the first page, as the new message might be older than the first message in the page; + : page.searchResults.filter( + (msg) => !stringGuidsEqual(msg?.fileId, newConversation.fileId) + ) // There shouldn't be any duplicates for a fileAdded, but just in case : page.searchResults.map((conversation) => - stringGuidsEqual( - conversation.fileMetadata.appData.uniqueId, - newConversation.fileMetadata.appData.uniqueId - ) - ? newConversation - : conversation - ), + stringGuidsEqual( + conversation.fileMetadata.appData.uniqueId, + newConversation.fileMetadata.appData.uniqueId + ) + ? newConversation + : conversation + ), })), }; }); @@ -107,11 +107,11 @@ export const updateCacheConversations = ( }> ) => | InfiniteData<{ - searchResults: HomebaseFile[]; - cursorState: string; - queryTime: number; - includeMetadataHeader: boolean; - }> + searchResults: HomebaseFile[]; + cursorState: string; + queryTime: number; + includeMetadataHeader: boolean; + }> | undefined ) => { const existingConversations = queryClient.getQueryData< diff --git a/packages/apps/chat-app/src/hooks/chat/useMarkMessagesAsRead.ts b/packages/apps/chat-app/src/hooks/chat/useMarkMessagesAsRead.ts index b5463dde8..d8955d337 100644 --- a/packages/apps/chat-app/src/hooks/chat/useMarkMessagesAsRead.ts +++ b/packages/apps/chat-app/src/hooks/chat/useMarkMessagesAsRead.ts @@ -5,7 +5,7 @@ import { useChatMessages } from './useChatMessages'; import { useEffect, useState } from 'react'; import { ConversationMetadata, UnifiedConversation } from '../../providers/ConversationProvider'; import { useConversationMetadata } from './useConversationMetadata'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useMarkMessagesAsRead = ({ conversation, @@ -14,7 +14,7 @@ export const useMarkMessagesAsRead = ({ conversation: HomebaseFile | undefined; messages: HomebaseFile[] | undefined; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { mutateAsync: markAsRead } = useChatMessages({ conversationId: conversation?.fileMetadata.appData.uniqueId, }).markAsRead; @@ -33,7 +33,7 @@ export const useMarkMessagesAsRead = ({ const unreadMessages = messages.filter( (msg) => (msg?.fileMetadata.transitCreated || msg?.fileMetadata.created) > - (conversation.fileMetadata.localAppData?.content?.lastReadTime || 0) && + (conversation.fileMetadata.localAppData?.content?.lastReadTime || 0) && (!msg.fileMetadata.senderOdinId || msg.fileMetadata.senderOdinId !== loggedOnIdentity) ); diff --git a/packages/apps/chat-app/src/hooks/chat/useStarredMessages.ts b/packages/apps/chat-app/src/hooks/chat/useStarredMessages.ts index 8a7241bd8..7cd44bb70 100644 --- a/packages/apps/chat-app/src/hooks/chat/useStarredMessages.ts +++ b/packages/apps/chat-app/src/hooks/chat/useStarredMessages.ts @@ -1,40 +1,40 @@ -import { DotYouClient, HomebaseFile } from '@homebase-id/js-lib/core'; +import { OdinClient, HomebaseFile } from '@homebase-id/js-lib/core'; import { QueryClient, UndefinedInitialDataInfiniteOptions, useInfiniteQuery, } from '@tanstack/react-query'; import { ChatMessage, getStarredChatMessages } from '../../providers/ChatProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; const FIRST_PAGE_SIZE = 100; const PAGE_SIZE = 100; const fetchMessages = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, cursorState: string | undefined ) => { return await getStarredChatMessages( - dotYouClient, + odinClient, cursorState, cursorState ? PAGE_SIZE : FIRST_PAGE_SIZE ); }; const getStarredChatMessageInfiniteQueryOptions: ( - dotYouClient: DotYouClient + odinClient: OdinClient ) => UndefinedInitialDataInfiniteOptions<{ searchResults: (HomebaseFile | null)[]; cursorState: string; queryTime: number; includeMetadataHeader: boolean; -}> = (dotYouClient) => ({ +}> = (odinClient) => ({ queryKey: ['starred-chat-messages'], initialPageParam: undefined as string | undefined, - queryFn: ({ pageParam }) => fetchMessages(dotYouClient, pageParam as string | undefined), + queryFn: ({ pageParam }) => fetchMessages(odinClient, pageParam as string | undefined), getNextPageParam: (lastPage, pages) => lastPage && - lastPage.searchResults?.length >= (lastPage === pages[0] ? FIRST_PAGE_SIZE : PAGE_SIZE) + lastPage.searchResults?.length >= (lastPage === pages[0] ? FIRST_PAGE_SIZE : PAGE_SIZE) ? lastPage.cursorState : undefined, @@ -42,9 +42,9 @@ const getStarredChatMessageInfiniteQueryOptions: ( }); export const useStarredMessages = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); return { - all: useInfiniteQuery(getStarredChatMessageInfiniteQueryOptions(dotYouClient)), + all: useInfiniteQuery(getStarredChatMessageInfiniteQueryOptions(odinClient)), }; }; diff --git a/packages/apps/chat-app/src/providers/ChatProvider.ts b/packages/apps/chat-app/src/providers/ChatProvider.ts index d0611578f..ffb60ebf0 100644 --- a/packages/apps/chat-app/src/providers/ChatProvider.ts +++ b/packages/apps/chat-app/src/providers/ChatProvider.ts @@ -1,6 +1,6 @@ import { AppFileMetaData, - DotYouClient, + OdinClient, HomebaseFile, EmbeddedThumb, FileQueryParams, @@ -99,7 +99,7 @@ const CHAT_MESSAGE_PAYLOAD_KEY = 'chat_web'; export const CHAT_LINKS_PAYLOAD_KEY = 'chat_links'; export const getChatMessages = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversationId: string, cursorState: string | undefined, pageSize: number @@ -116,20 +116,20 @@ export const getChatMessages = async ( includeTransferHistory: true, }; - const response = await queryBatch(dotYouClient, params, ro); + const response = await queryBatch(odinClient, params, ro); return { ...response, searchResults: ((await Promise.all( response.searchResults - .map(async (result) => await dsrToMessage(dotYouClient, result, ChatDrive, true)) + .map(async (result) => await dsrToMessage(odinClient, result, ChatDrive, true)) .filter(Boolean) )) as HomebaseFile[]) || [], }; }; export const getStarredChatMessages = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, cursorState: string | undefined, pageSize: number ) => { @@ -145,35 +145,35 @@ export const getStarredChatMessages = async ( includeTransferHistory: true, }; - const response = await queryBatch(dotYouClient, params, ro); + const response = await queryBatch(odinClient, params, ro); return { ...response, searchResults: ((await Promise.all( response.searchResults - .map(async (result) => await dsrToMessage(dotYouClient, result, ChatDrive, true)) + .map(async (result) => await dsrToMessage(odinClient, result, ChatDrive, true)) .filter(Boolean) )) as HomebaseFile[]) || [], }; }; -export const deleteAllChatMessages = async (dotYouClient: DotYouClient, conversationId: string) => { - return await deleteFilesByGroupId(dotYouClient, ChatDrive, [conversationId]); +export const deleteAllChatMessages = async (odinClient: OdinClient, conversationId: string) => { + return await deleteFilesByGroupId(odinClient, ChatDrive, [conversationId]); }; -export const getChatMessage = async (dotYouClient: DotYouClient, chatMessageId: string) => { - const fileHeader = await getFileHeaderByUniqueId(dotYouClient, ChatDrive, chatMessageId, { +export const getChatMessage = async (odinClient: OdinClient, chatMessageId: string) => { + const fileHeader = await getFileHeaderByUniqueId(odinClient, ChatDrive, chatMessageId, { decrypt: false, }); if (!fileHeader) return null; - return await dsrToMessage(dotYouClient, fileHeader, ChatDrive, true); + return await dsrToMessage(odinClient, fileHeader, ChatDrive, true); }; // Built on top of getContentFromHeaderOrPayload // This function fetches the full json payload(if exists) and extends deliveryDetails with the payload content export const getChatMessageContentFromHeaderOrPayload = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, dsr: { fileId: string; @@ -194,7 +194,7 @@ export const getChatMessageContentFromHeaderOrPayload = async ( if (fileMetadata.isEncrypted && !sharedSecretEncryptedKeyHeader) return null; const messageContent = await getContentFromHeader( - dotYouClient, + odinClient, targetDrive, dsr, includesJsonContent, @@ -207,7 +207,7 @@ export const getChatMessageContentFromHeaderOrPayload = async ( const payloadDescriptor = dsr.fileMetadata.payloads?.find( (payload) => payload.key === DEFAULT_PAYLOAD_KEY ); - const payload = await getPayloadAsJson(dotYouClient, targetDrive, fileId, DEFAULT_PAYLOAD_KEY, { + const payload = await getPayloadAsJson(odinClient, targetDrive, fileId, DEFAULT_PAYLOAD_KEY, { systemFileType: dsr.fileSystemType || systemFileType, lastModified: payloadDescriptor?.lastModified, }); @@ -222,14 +222,14 @@ export const getChatMessageContentFromHeaderOrPayload = async ( }; export const dsrToMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { try { const msgContent = await getChatMessageContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader @@ -310,7 +310,7 @@ export const buildDeliveryStatus = ( }; export const uploadChatMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, message: NewHomebaseFile, recipients: string[], files: NewMediaFile[] | undefined, @@ -463,7 +463,7 @@ export const uploadChatMessage = async ( previewThumbnails.length >= 2 ? await makeGrid(previewThumbnails) : previewThumbnails[0]; const uploadResult = await uploadFile( - dotYouClient, + odinClient, uploadInstructions, uploadMetadata, payloads, @@ -488,7 +488,7 @@ export const uploadChatMessage = async ( message.fileMetadata.appData.content.deliveryStatus = ChatDeliveryStatus.Failed; const updateResult = await updateChatMessage( - dotYouClient, + odinClient, message, recipients, uploadResult.keyHeader @@ -511,7 +511,7 @@ export const uploadChatMessage = async ( }; export const updateChatMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, message: HomebaseFile | NewHomebaseFile, recipients: string[], keyHeader?: KeyHeader @@ -570,7 +570,7 @@ export const updateChatMessage = async ( }; return await patchFile( - dotYouClient, + odinClient, keyHeader || (message as HomebaseFile).sharedSecretEncryptedKeyHeader, uploadInstructions, uploadMetadata, @@ -579,25 +579,25 @@ export const updateChatMessage = async ( undefined, async () => { const existingChatMessage = await getChatMessage( - dotYouClient, + odinClient, message.fileMetadata.appData.uniqueId as string ); if (!existingChatMessage) return; message.fileMetadata.versionTag = existingChatMessage.fileMetadata.versionTag; - return await updateChatMessage(dotYouClient, message, recipients, keyHeader); + return await updateChatMessage(odinClient, message, recipients, keyHeader); } ); }; export const hardDeleteChatMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, message: HomebaseFile ) => { - return await deleteFile(dotYouClient, ChatDrive, message.fileId, []); + return await deleteFile(odinClient, ChatDrive, message.fileId, []); }; export const softDeleteChatMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, message: HomebaseFile, recipients: string[], deleteForEveryone?: boolean @@ -625,7 +625,7 @@ export const softDeleteChatMessage = async ( }; return await patchFile( - dotYouClient, + odinClient, message.sharedSecretEncryptedKeyHeader, { file: { @@ -645,7 +645,7 @@ export const softDeleteChatMessage = async ( }; export const requestMarkAsRead = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversation: HomebaseFile, messages: HomebaseFile[] ) => { @@ -654,9 +654,9 @@ export const requestMarkAsRead = async ( (msg) => msg.fileMetadata.appData.content.deliveryStatus !== ChatDeliveryStatus.Read && msg.fileMetadata.senderOdinId && - msg.fileMetadata.senderOdinId !== dotYouClient.getHostIdentity() + msg.fileMetadata.senderOdinId !== odinClient.getHostIdentity() ) .map((msg) => msg.fileId) as string[]; - return sendReadReceipt(dotYouClient, ChatDrive, chatFileIds); + return sendReadReceipt(odinClient, ChatDrive, chatFileIds); }; diff --git a/packages/apps/chat-app/src/providers/ConversationProvider.ts b/packages/apps/chat-app/src/providers/ConversationProvider.ts index 77d790e13..4954f6e96 100644 --- a/packages/apps/chat-app/src/providers/ConversationProvider.ts +++ b/packages/apps/chat-app/src/providers/ConversationProvider.ts @@ -1,5 +1,5 @@ import { - DotYouClient, + OdinClient, HomebaseFile, FileQueryParams, GetBatchQueryResultOptions, @@ -88,7 +88,7 @@ export interface GroupConversation extends BaseConversation { export type Conversation = SingleConversation | GroupConversation; export const getConversations = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, cursorState: string | undefined, pageSize: number ) => { @@ -103,7 +103,7 @@ export const getConversations = async ( includeMetadataHeader: true, }; - const response = await queryBatch(dotYouClient, params, ro); + const response = await queryBatch(odinClient, params, ro); if (!response) return null; @@ -112,41 +112,41 @@ export const getConversations = async ( searchResults: ((await Promise.all( response.searchResults - .map(async (result) => await dsrToConversation(dotYouClient, result, ChatDrive, true)) + .map(async (result) => await dsrToConversation(odinClient, result, ChatDrive, true)) .filter(Boolean) )) as HomebaseFile[]) || [], }; }; -export const getConversation = async (dotYouClient: DotYouClient, conversationId: string) => { +export const getConversation = async (odinClient: OdinClient, conversationId: string) => { if (conversationId === ConversationWithYourselfId) return ConversationWithYourself; const conversationHeader = await getFileHeaderByUniqueId( - dotYouClient, + odinClient, ChatDrive, conversationId ); if (!conversationHeader) return null; - return dsrToConversation(dotYouClient, conversationHeader, ChatDrive, true); + return dsrToConversation(odinClient, conversationHeader, ChatDrive, true); }; export const dsrToConversation = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { try { const attrContent = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader ); if (!attrContent) return null; - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const conversation: HomebaseFile = { ...dsr, fileMetadata: { @@ -157,11 +157,11 @@ export const dsrToConversation = async ( ...attrContent, recipients: (attrContent as GroupConversation).recipients ? [ - ...(attrContent as GroupConversation).recipients.filter( - (recipient) => recipient !== identity - ), - identity, - ] + ...(attrContent as GroupConversation).recipients.filter( + (recipient) => recipient !== identity + ), + identity, + ] : [(attrContent as SingleConversation).recipient, identity], }, }, @@ -173,7 +173,7 @@ export const dsrToConversation = async ( if (localContent) { try { const localMetadata = await getLocalContentFromHeader( - dotYouClient, + odinClient, ChatDrive, conversation, true @@ -190,7 +190,7 @@ export const dsrToConversation = async ( // TODO: remove at any point after july 2025 (couple months after the deprecation of the local metadata file) const serverFile = await getConversationMetadata( - dotYouClient, + odinClient, conversation.fileMetadata.appData.uniqueId as string ); return ( @@ -215,7 +215,7 @@ export const dsrToConversation = async ( }; export const uploadConversation = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversation: | NewHomebaseFile | HomebaseFile, @@ -267,7 +267,7 @@ export const uploadConversation = async ( }; return await uploadFile( - dotYouClient, + odinClient, uploadInstructions, uploadMetadata, payloads, @@ -278,13 +278,13 @@ export const uploadConversation = async ( }; export const updateConversation = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversation: HomebaseFile, imagePayload: Blob | null | undefined, // undefined means no change distribute = false, ignoreConflict = false ): Promise => { - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); if (!conversation.fileId) throw new Error('Message does not have a fileId'); const recipients = conversation.fileMetadata.appData.content.recipients.filter( @@ -346,7 +346,7 @@ export const updateConversation = async ( }; return await patchFile( - dotYouClient, + odinClient, conversation.sharedSecretEncryptedKeyHeader, uploadInstructions, uploadMetadata, @@ -355,19 +355,19 @@ export const updateConversation = async ( toDeletePayloads, !ignoreConflict ? async () => { - const existingConversation = await getConversation( - dotYouClient, - conversation.fileMetadata.appData.uniqueId as string - ); - if (!existingConversation) return; - conversation.fileMetadata.versionTag = existingConversation.fileMetadata.versionTag; - conversation.sharedSecretEncryptedKeyHeader = - existingConversation.sharedSecretEncryptedKeyHeader; - return updateConversation(dotYouClient, conversation, imagePayload, distribute, true); - } + const existingConversation = await getConversation( + odinClient, + conversation.fileMetadata.appData.uniqueId as string + ); + if (!existingConversation) return; + conversation.fileMetadata.versionTag = existingConversation.fileMetadata.versionTag; + conversation.sharedSecretEncryptedKeyHeader = + existingConversation.sharedSecretEncryptedKeyHeader; + return updateConversation(odinClient, conversation, imagePayload, distribute, true); + } : () => { - // We just supress the warning; As we are ignoring the conflict following @param ignoreConflict - } + // We just supress the warning; As we are ignoring the conflict following @param ignoreConflict + } ); }; @@ -380,13 +380,13 @@ export interface ConversationMetadata { * @deprecated Use getConversation instead */ export const getConversationMetadata = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversationId: string ) => { if (conversationId === ConversationWithYourselfId) return null; const result = await queryBatch( - dotYouClient, + odinClient, { fileType: [CHAT_CONVERSATION_LOCAL_METADATA_FILE_TYPE], tagsMatchAtLeastOne: [conversationId], @@ -397,18 +397,18 @@ export const getConversationMetadata = async ( if (!result || !result.searchResults?.length) return null; - return dsrToConversationMetadata(dotYouClient, result.searchResults[0], ChatDrive, true); + return dsrToConversationMetadata(odinClient, result.searchResults[0], ChatDrive, true); }; const dsrToConversationMetadata = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { try { const attrContent = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader diff --git a/packages/apps/chat-app/src/templates/Auth/Auth.tsx b/packages/apps/chat-app/src/templates/Auth/Auth.tsx index 91796b343..7911ca53b 100644 --- a/packages/apps/chat-app/src/templates/Auth/Auth.tsx +++ b/packages/apps/chat-app/src/templates/Auth/Auth.tsx @@ -5,7 +5,7 @@ import { DialogWrapper, Alert, t, - useDotYouClientContext, + useOdinClientContext, OWNER_APPS_ROOT, } from '@homebase-id/common-app'; import { AutoAuthorize, LoginBox } from '../../components/Auth/LoginBox/LoginBox'; @@ -18,7 +18,7 @@ const Auth = () => { const [searchParams] = useSearchParams(); const isError = searchParams.get('state') === 'finalize-error'; - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); useEffect(() => { if (isAuthenticated) window.location.href = '/'; diff --git a/packages/apps/chat-app/src/templates/Chat/ChatDetail.tsx b/packages/apps/chat-app/src/templates/Chat/ChatDetail.tsx index 92de9e850..7c04155a3 100644 --- a/packages/apps/chat-app/src/templates/Chat/ChatDetail.tsx +++ b/packages/apps/chat-app/src/templates/Chat/ChatDetail.tsx @@ -6,12 +6,12 @@ import { ErrorNotification, HybridLink, t, - useDotYouClientContext, + useOdinClientContext, useIntroductions, useIsConnected, } from '@homebase-id/common-app'; import { ChevronDown, ChevronLeft } from '@homebase-id/common-app/icons'; -import { ApiType, DotYouClient, HomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile } from '@homebase-id/js-lib/core'; import { ConversationMetadata, ConversationWithYourselfId, @@ -45,7 +45,7 @@ export const ChatDetail = ({ const { mutate: inviteRecipient } = useConversation().inviteRecipient; const { mutate: introduceIdentities } = useIntroductions().introduceIdentities; const [replyMsg, setReplyMsg] = useState | undefined>(); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const Composer = useMemo(() => options?.composer || ChatComposer, [options]); if (!conversationId || isLoading || (!conversation && isFetched)) @@ -117,7 +117,7 @@ const ChatHeader = ({ rootPath: string; }) => { const navigate = useNavigate(); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const withYourself = conversationDsr?.fileMetadata.appData.uniqueId === ConversationWithYourselfId; @@ -282,7 +282,7 @@ const GroupChatConnectedState = ({ }: { conversation: HomebaseFile | undefined; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); if (!conversation) return null; const recipients = conversation.fileMetadata.appData.content.recipients; @@ -301,7 +301,7 @@ const GroupChatConnectedState = ({ const RecipientConnectedState = ({ recipient }: { recipient: string }) => { const { data: isConnected, isFetched: isFetchedConnected } = useIsConnected(recipient); - const host = useDotYouClientContext().getRoot(); + const host = useOdinClientContext().getRoot(); if (!isConnected && isFetchedConnected) { return ( @@ -309,7 +309,7 @@ const RecipientConnectedState = ({ recipient }: { recipient: string }) => {

{t('You can only chat with connected identities, messages will not be delivered to')}:{' '} {recipient} diff --git a/packages/apps/community-app/src/app/App.tsx b/packages/apps/community-app/src/app/App.tsx index 1b5995512..89078af18 100644 --- a/packages/apps/community-app/src/app/App.tsx +++ b/packages/apps/community-app/src/app/App.tsx @@ -15,11 +15,11 @@ import { Layout, MinimalLayout } from '../components/ui/Layout/Layout'; import './App.css'; import { COMMUNITY_ROOT_PATH, - DotYouClientProvider, + OdinClientProvider, ErrorBoundary, NotFound, OdinQueryClient, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { useValidateAuthorization } from '../hooks/auth/useAuth'; @@ -193,7 +193,7 @@ function App() { - + } @@ -201,7 +201,7 @@ function App() { v7_startTransition: true, }} /> - + ); @@ -223,7 +223,7 @@ const RootRoute = ({ children }: { children: ReactNode }) => { useValidateAuthorization(); const location = useLocation(); - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); if (!isAuthenticated) { if (location.pathname === AUTH_PATH || location.pathname === AUTH_FINALIZE_PATH) diff --git a/packages/apps/community-app/src/components/Auth/ExtendCirclePermissionDialog.tsx b/packages/apps/community-app/src/components/Auth/ExtendCirclePermissionDialog.tsx index 4c71aa4ca..fc9ed2825 100644 --- a/packages/apps/community-app/src/components/Auth/ExtendCirclePermissionDialog.tsx +++ b/packages/apps/community-app/src/components/Auth/ExtendCirclePermissionDialog.tsx @@ -3,7 +3,7 @@ import { DialogWrapper, t, ActionLink, - useDotYouClientContext, + useOdinClientContext, useCircle, } from '@homebase-id/common-app'; import { Shield } from '@homebase-id/common-app/icons'; @@ -44,7 +44,7 @@ const useCommunityAccessVerifier = ( communityId: string | undefined ) => { const { data: community } = useCommunity({ odinId, communityId }).fetch; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const isAdmin = community?.fileMetadata.originalAuthor === loggedOnIdentity; const communityCircleId = community?.fileMetadata.appData.content.acl.circleIdList?.[0]; diff --git a/packages/apps/community-app/src/components/Auth/LoginBox/LoginBox.tsx b/packages/apps/community-app/src/components/Auth/LoginBox/LoginBox.tsx index 0b91262d1..ed2f0f633 100644 --- a/packages/apps/community-app/src/components/Auth/LoginBox/LoginBox.tsx +++ b/packages/apps/community-app/src/components/Auth/LoginBox/LoginBox.tsx @@ -11,7 +11,7 @@ import { Helmet } from 'react-helmet-async'; import { useQuery } from '@tanstack/react-query'; import { useEffect } from 'react'; import { MinimalLayout } from '../../ui/Layout/Layout'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; const AUTHORIZE_PATH = '/api/owner/v1/youauth/authorize'; @@ -35,7 +35,7 @@ export const LoginBox = () => { const isAutoAuthorize = window.location.pathname.startsWith(OWNER_APPS_ROOT); useEffect(() => { - const host = new DotYouClient({ + const host = new OdinClient({ hostIdentity: window.location.hostname, api: ApiType.Guest, }).getRoot(); diff --git a/packages/apps/community-app/src/components/Community/CommunityInfoDialog.tsx b/packages/apps/community-app/src/components/Community/CommunityInfoDialog.tsx index 5e8d030de..3a4d0e1eb 100644 --- a/packages/apps/community-app/src/components/Community/CommunityInfoDialog.tsx +++ b/packages/apps/community-app/src/components/Community/CommunityInfoDialog.tsx @@ -12,7 +12,7 @@ import { useCircle, ActionLink, OWNER_ROOT, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { Circles, Clipboard } from '@homebase-id/common-app/icons'; import { useState } from 'react'; @@ -24,7 +24,7 @@ export const CommunityInfoDialog = ({ onClose }: { onClose: () => void }) => { const { odinKey, communityKey } = useParams(); const { data: community } = useCommunity({ odinId: odinKey, communityId: communityKey }).fetch; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const isCommunityOwner = community?.fileMetadata?.senderOdinId === loggedOnIdentity; const target = usePortal('modal-container'); diff --git a/packages/apps/community-app/src/components/Community/Message/detail/CommunityMediaGallery.tsx b/packages/apps/community-app/src/components/Community/Message/detail/CommunityMediaGallery.tsx index 8dd837167..cb9d494c8 100644 --- a/packages/apps/community-app/src/components/Community/Message/detail/CommunityMediaGallery.tsx +++ b/packages/apps/community-app/src/components/Community/Message/detail/CommunityMediaGallery.tsx @@ -11,7 +11,7 @@ import { BoringFile, VideoClickToLoad, usePortal, - useDotYouClientContext, + useOdinClientContext, useFile, bytesToSize, } from '@homebase-id/common-app'; @@ -232,7 +232,7 @@ const CustomOdinImage = ({ previewThumbnail, ...props }: { className?: string; previewThumbnail?: EmbeddedThumb } & ImageSource) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const [tinyLoaded, setTinyLoaded] = useState(false); const [finalLoaded, setFinalLoaded] = useState(false); @@ -252,7 +252,7 @@ const CustomOdinImage = ({ > ; onClose: () => void; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const target = usePortal('modal-container'); const messageContent = msg.fileMetadata.appData.content; const communityContent = community.fileMetadata.appData.content; diff --git a/packages/apps/community-app/src/components/Community/Message/item/CommunityDeliveryIndicator.tsx b/packages/apps/community-app/src/components/Community/Message/item/CommunityDeliveryIndicator.tsx index f8e1fb71b..5fd141765 100644 --- a/packages/apps/community-app/src/components/Community/Message/item/CommunityDeliveryIndicator.tsx +++ b/packages/apps/community-app/src/components/Community/Message/item/CommunityDeliveryIndicator.tsx @@ -1,4 +1,4 @@ -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { Clock } from '@homebase-id/common-app/icons'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { @@ -13,7 +13,7 @@ export const CommunityDeliveryIndicator = ({ msg: HomebaseFile; className?: string; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const content = msg.fileMetadata.appData.content; const authorOdinId = msg.fileMetadata.senderOdinId || ''; const messageFromMe = !authorOdinId || authorOdinId === loggedOnIdentity; diff --git a/packages/apps/community-app/src/components/Community/Message/item/CommunityMedia.tsx b/packages/apps/community-app/src/components/Community/Message/item/CommunityMedia.tsx index 1e23e098e..b475c45e3 100644 --- a/packages/apps/community-app/src/components/Community/Message/item/CommunityMedia.tsx +++ b/packages/apps/community-app/src/components/Community/Message/item/CommunityMedia.tsx @@ -13,7 +13,7 @@ import { BoringFile, useDarkMode, LinkPreviewItem, - useDotYouClientContext, + useOdinClientContext, COMMUNITY_ROOT_PATH, } from '@homebase-id/common-app'; import { Triangle } from '@homebase-id/common-app/icons'; @@ -100,7 +100,7 @@ const MediaItem = ({ onLoad?: () => void; }) => { const { isDarkMode } = useDarkMode(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const isVideo = payload.contentType?.startsWith('video') || payload.contentType === 'application/vnd.apple.mpegurl'; @@ -134,7 +134,7 @@ const MediaItem = ({ } > ) : isImage ? ( ) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { mutate: addReaction } = useCommunityReaction().add; const { mutate: removeReaction } = useCommunityReaction().remove; diff --git a/packages/apps/community-app/src/components/Community/Message/reactions/CommunityReactions.tsx b/packages/apps/community-app/src/components/Community/Message/reactions/CommunityReactions.tsx index 336144305..4f050e4b1 100644 --- a/packages/apps/community-app/src/components/Community/Message/reactions/CommunityReactions.tsx +++ b/packages/apps/community-app/src/components/Community/Message/reactions/CommunityReactions.tsx @@ -6,7 +6,7 @@ import { AuthorName, DialogWrapper, t, - useDotYouClientContext, + useOdinClientContext, useLongPress, usePortal, } from '@homebase-id/common-app'; @@ -25,7 +25,7 @@ export const CommunityReactions = ({ community: HomebaseFile | undefined; scrollRef?: React.RefObject; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const [showDetails, setShowDetails] = useState(false); const hasReactions = @@ -109,7 +109,7 @@ const ReactionButton = ({ myReactions: ReactionBase[] | undefined; onLongPress: (e?: React.MouseEvent | React.TouchEvent) => void; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { mutate: addReaction } = useCommunityReaction().add; const { mutate: removeReaction } = useCommunityReaction().remove; diff --git a/packages/apps/community-app/src/components/Community/catchup/CommunityChannelCatchup.tsx b/packages/apps/community-app/src/components/Community/catchup/CommunityChannelCatchup.tsx index 526a7eb4a..401fb9236 100644 --- a/packages/apps/community-app/src/components/Community/catchup/CommunityChannelCatchup.tsx +++ b/packages/apps/community-app/src/components/Community/catchup/CommunityChannelCatchup.tsx @@ -2,7 +2,7 @@ import { HomebaseFile } from '@homebase-id/js-lib/core'; import { CommunityDefinition } from '../../../providers/CommunityDefinitionProvider'; import { ChannelWithRecentMessage } from '../../../hooks/community/channels/useCommunityChannelsWithRecentMessages'; import { CommunityHistory } from '../channel/CommunityHistory'; -import { ActionLink, COMMUNITY_ROOT_PATH, useDotYouClientContext } from '@homebase-id/common-app'; +import { ActionLink, COMMUNITY_ROOT_PATH, useOdinClientContext } from '@homebase-id/common-app'; import { ExternalLink } from '@homebase-id/common-app/icons'; import { useCommunityMetadata } from '../../../hooks/community/useCommunityMetadata'; import { useMemo } from 'react'; @@ -33,7 +33,7 @@ export const CommunityChannelCatchup = ({ [metadata, channel] ); - const loggedInIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedInIdentity = useOdinClientContext().getLoggedInIdentity(); const defaultMaxAge = useMemo(() => { if (!channel.lastMessage) return 0; diff --git a/packages/apps/community-app/src/components/Community/catchup/CommunityThreadCatchup.tsx b/packages/apps/community-app/src/components/Community/catchup/CommunityThreadCatchup.tsx index 2346569b0..6aaa2c211 100644 --- a/packages/apps/community-app/src/components/Community/catchup/CommunityThreadCatchup.tsx +++ b/packages/apps/community-app/src/components/Community/catchup/CommunityThreadCatchup.tsx @@ -5,7 +5,7 @@ import { ActionLink, COMMUNITY_ROOT_PATH, ErrorBoundary, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { useCommunityMessage } from '../../../hooks/community/messages/useCommunityMessage'; import { useCommunityChannel } from '../../../hooks/community/channels/useCommunityChannel'; @@ -59,7 +59,7 @@ export const CommunityThreadCatchup = ({ }; }, [community, channel]); - const loggedInIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedInIdentity = useOdinClientContext().getLoggedInIdentity(); const defaultMaxAge = useMemo(() => { const todayDate = new Date(threadMeta.lastMessageCreated); diff --git a/packages/apps/community-app/src/components/Community/channel/CommunityHistory.tsx b/packages/apps/community-app/src/components/Community/channel/CommunityHistory.tsx index 3dcf38922..5246a2575 100644 --- a/packages/apps/community-app/src/components/Community/channel/CommunityHistory.tsx +++ b/packages/apps/community-app/src/components/Community/channel/CommunityHistory.tsx @@ -12,7 +12,7 @@ import { findMentionedInRichText, formatToDateAgoWithRelativeDetail, t, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { CommunityMessageItem } from '../Message/item/CommunityMessageItem'; import { useCommunityMessages } from '../../../hooks/community/messages/useCommunityMessages'; @@ -48,7 +48,7 @@ export const CommunityHistory = memo( setParticipants, } = props; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const scrollRef = useRef(null); const inAThread = !!origin && origin.fileMetadata.appData.fileType === COMMUNITY_MESSAGE_FILE_TYPE; diff --git a/packages/apps/community-app/src/components/Community/channel/ContextMenu.tsx b/packages/apps/community-app/src/components/Community/channel/ContextMenu.tsx index 9a4c732fa..8ddfeacfa 100644 --- a/packages/apps/community-app/src/components/Community/channel/ContextMenu.tsx +++ b/packages/apps/community-app/src/components/Community/channel/ContextMenu.tsx @@ -9,7 +9,7 @@ import { t, ErrorNotification, ActionGroup, - useDotYouClientContext, + useOdinClientContext, useOutsideTrigger, ReactionsBarHandle, usePortal, @@ -202,7 +202,7 @@ const CommunityContextActions = ({ const { mutate: resend, error: resendError } = useCommunityMessage().update; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const authorOdinId = msg.fileMetadata.originalAuthor; const messageFromMe = !authorOdinId || authorOdinId === loggedOnIdentity; diff --git a/packages/apps/community-app/src/hooks/auth/useAuth.ts b/packages/apps/community-app/src/hooks/auth/useAuth.ts index 719cf28ab..b152a4352 100644 --- a/packages/apps/community-app/src/hooks/auth/useAuth.ts +++ b/packages/apps/community-app/src/hooks/auth/useAuth.ts @@ -21,14 +21,14 @@ import { COMMUNITY_ROOT_PATH, logoutOwnerAndAllApps, OWNER_APPS_ROOT, - useDotYouClient, + useOdinClient, } from '@homebase-id/common-app'; import { LOCAL_COMMUNITY_APP_DRIVE } from '../../providers/CommunityMetadataProvider'; import { useQueryClient } from '@tanstack/react-query'; import { ChatDrive } from '@homebase-id/chat-app/src/providers/ConversationProvider'; export const useValidateAuthorization = () => { - const { hasSharedSecret } = useDotYouClient(); + const { hasSharedSecret } = useOdinClient(); const { data: hasValidToken, isFetched } = useVerifyToken(); useEffect(() => { @@ -42,8 +42,8 @@ export const useValidateAuthorization = () => { }; export const useAuth = () => { - const { getDotYouClient } = useDotYouClient(); - const preauth = async (): Promise => await preauthApps(getDotYouClient()); + const { getOdinClient } = useOdinClient(); + const preauth = async (): Promise => await preauthApps(getOdinClient()); return { preauth, diff --git a/packages/apps/community-app/src/hooks/auth/useVerifyToken.ts b/packages/apps/community-app/src/hooks/auth/useVerifyToken.ts index 24c7fd1ba..82c7b7599 100644 --- a/packages/apps/community-app/src/hooks/auth/useVerifyToken.ts +++ b/packages/apps/community-app/src/hooks/auth/useVerifyToken.ts @@ -1,16 +1,16 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { hasValidToken as hasValidYouAuthToken } from '@homebase-id/js-lib/auth'; const MINUTE_IN_MS = 60000; export const useVerifyToken = () => { - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isAuthenticated = odinClient.isAuthenticated(); const fetchData = async () => { // When hasValidYouAuthToken returns undefined, it means that it couldn't be checked.. so we assume it's valid, to avoid unnecessary logouts - return (await hasValidYouAuthToken(dotYouClient)) ?? true; + return (await hasValidYouAuthToken(odinClient)) ?? true; }; return useQuery({ queryKey: ['verify-community-token'], diff --git a/packages/apps/community-app/src/hooks/community/channels/useCommunityChannel.ts b/packages/apps/community-app/src/hooks/community/channels/useCommunityChannel.ts index b098c3971..3bb0e5f07 100644 --- a/packages/apps/community-app/src/hooks/community/channels/useCommunityChannel.ts +++ b/packages/apps/community-app/src/hooks/community/channels/useCommunityChannel.ts @@ -1,5 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { COMMUNITY_GENERAL_CHANNEL, CommunityChannel, @@ -16,7 +16,7 @@ export const useCommunityChannel = (props?: { channelId?: string; }) => { const { odinId, communityId, channelId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const channelsQuery = useCommunityChannels({ odinId, communityId }).fetch; @@ -44,7 +44,7 @@ export const useCommunityChannel = (props?: { }, }; - return await saveCommunityChannel(dotYouClient, community, newChannel); + return await saveCommunityChannel(odinClient, community, newChannel); }; const updateChannel = async ({ @@ -54,7 +54,7 @@ export const useCommunityChannel = (props?: { community: HomebaseFile; channel: HomebaseFile; }) => { - return await saveCommunityChannel(dotYouClient, community, channel); + return await saveCommunityChannel(odinClient, community, channel); }; return { @@ -63,8 +63,8 @@ export const useCommunityChannel = (props?: { data: stringGuidsEqual(channelId, COMMUNITY_GENERAL_CHANNEL.fileMetadata.appData.uniqueId) ? COMMUNITY_GENERAL_CHANNEL : channelsQuery.data?.find((channel) => - stringGuidsEqual(channel.fileMetadata.appData.uniqueId, channelId) - ), + stringGuidsEqual(channel.fileMetadata.appData.uniqueId, channelId) + ), }, create: useMutation({ mutationFn: createChannel, diff --git a/packages/apps/community-app/src/hooks/community/channels/useCommunityChannels.ts b/packages/apps/community-app/src/hooks/community/channels/useCommunityChannels.ts index fc4b8cf1f..2bbba13f5 100644 --- a/packages/apps/community-app/src/hooks/community/channels/useCommunityChannels.ts +++ b/packages/apps/community-app/src/hooks/community/channels/useCommunityChannels.ts @@ -1,15 +1,15 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { CommunityChannel, getCommunityChannels } from '../../../providers/CommunityProvider'; import { DeletedHomebaseFile, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { formatGuidId, stringGuidsEqual } from '@homebase-id/js-lib/helpers'; export const useCommunityChannels = (props: { odinId?: string; communityId?: string }) => { const { odinId, communityId } = props; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchChannels = async (odinId: string, communityId: string) => { - return await getCommunityChannels(dotYouClient, odinId, communityId); + return await getCommunityChannels(odinClient, odinId, communityId); }; return { diff --git a/packages/apps/community-app/src/hooks/community/channels/useCommunityChannelsWithRecentMessages.ts b/packages/apps/community-app/src/hooks/community/channels/useCommunityChannelsWithRecentMessages.ts index b4d3e311f..ddccce7ba 100644 --- a/packages/apps/community-app/src/hooks/community/channels/useCommunityChannelsWithRecentMessages.ts +++ b/packages/apps/community-app/src/hooks/community/channels/useCommunityChannelsWithRecentMessages.ts @@ -1,5 +1,5 @@ import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { CommunityChannel } from '../../../providers/CommunityProvider'; import { useCommunityChannels } from './useCommunityChannels'; import { HomebaseFile } from '@homebase-id/js-lib/core'; @@ -17,7 +17,7 @@ export const useCommunityChannelsWithRecentMessages = (props: { odinId?: string; communityId?: string; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const queryKey = ['channels-with-recent-message', formatGuidId(props.communityId)]; @@ -50,7 +50,7 @@ export const useCommunityChannelsWithRecentMessages = (props: { const chnlId = chnl.fileMetadata.appData.uniqueId; const messagesA = await queryClient.fetchInfiniteQuery( getCommunityMessagesInfiniteQueryOptions( - dotYouClient, + odinClient, props.odinId, props.communityId, chnlId, diff --git a/packages/apps/community-app/src/hooks/community/live/useCommunityInboxProcessor.ts b/packages/apps/community-app/src/hooks/community/live/useCommunityInboxProcessor.ts index 5a3b4ebae..6bc7adc83 100644 --- a/packages/apps/community-app/src/hooks/community/live/useCommunityInboxProcessor.ts +++ b/packages/apps/community-app/src/hooks/community/live/useCommunityInboxProcessor.ts @@ -1,4 +1,4 @@ -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { processInbox, queryBatchOverPeer, queryModifiedOverPeer } from '@homebase-id/js-lib/peer'; import { useQueryClient, useQuery, QueryClient } from '@tanstack/react-query'; import { getTargetDriveFromCommunityId } from '../../../providers/CommunityDefinitionProvider'; @@ -8,7 +8,7 @@ import { dsrToMessage, } from '../../../providers/CommunityMessageProvider'; import { - DotYouClient, + OdinClient, FileQueryParams, queryBatch, queryModified, @@ -52,7 +52,7 @@ export const useCommunityInboxProcessor = ( odinId: string | undefined, communityId: string | undefined ) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const targetDrive = getTargetDriveFromCommunityId(communityId || ''); @@ -65,15 +65,15 @@ export const useCommunityInboxProcessor = ( // Process community; const processedresult = - !odinId || odinId === dotYouClient.getHostIdentity() - ? await processInbox(dotYouClient, targetDrive, BATCH_SIZE) + !odinId || odinId === odinClient.getHostIdentity() + ? await processInbox(odinClient, targetDrive, BATCH_SIZE) : null; isDebug && console.debug('[CommunityInboxProcessor] fetching updates since', lastProcessedWithBuffer); if (lastProcessedWithBuffer) { const newMessages = await findChangesSinceTimestamp( - dotYouClient, + odinClient, odinId, lastProcessedWithBuffer, { @@ -85,7 +85,7 @@ export const useCommunityInboxProcessor = ( isDebug && console.debug('[CommunityInboxProcessor] new messages', newMessages); await processCommunityMessagesBatch( - dotYouClient, + odinClient, queryClient, odinId, targetDrive, @@ -94,7 +94,7 @@ export const useCommunityInboxProcessor = ( ); const newThreadMessages = await findChangesSinceTimestamp( - dotYouClient, + odinClient, odinId, lastProcessedWithBuffer, { @@ -107,7 +107,7 @@ export const useCommunityInboxProcessor = ( isDebug && console.debug('[CommunityInboxProcessor] new thread messages', newThreadMessages); await processCommunityMessagesBatch( - dotYouClient, + odinClient, queryClient, odinId, targetDrive, @@ -116,7 +116,7 @@ export const useCommunityInboxProcessor = ( ); const newChannels = await findChangesSinceTimestamp( - dotYouClient, + odinClient, odinId, lastProcessedWithBuffer, { targetDrive: targetDrive, fileType: [COMMUNITY_CHANNEL_FILE_TYPE], fileState: [0, 1] } @@ -127,7 +127,7 @@ export const useCommunityInboxProcessor = ( newChannels.map(async (updatedDsr) => { const newChannel = updatedDsr.fileState === 'active' - ? await dsrToCommunityChannel(dotYouClient, updatedDsr, odinId, targetDrive, true) + ? await dsrToCommunityChannel(odinClient, updatedDsr, odinId, targetDrive, true) : updatedDsr; if (!newChannel) return; @@ -136,7 +136,7 @@ export const useCommunityInboxProcessor = ( ); const newCommunityMetadata = await findChangesSinceTimestamp( - dotYouClient, + odinClient, undefined, lastProcessedWithBuffer, { @@ -152,7 +152,7 @@ export const useCommunityInboxProcessor = ( const newMetadata = updatedDsr.fileState === 'active' ? await dsrToCommunityMetadata( - dotYouClient, + odinClient, updatedDsr, LOCAL_COMMUNITY_APP_DRIVE, true @@ -164,7 +164,7 @@ export const useCommunityInboxProcessor = ( ); const newCommunityDrafts = await findChangesSinceTimestamp( - dotYouClient, + odinClient, undefined, lastProcessedWithBuffer, { @@ -180,7 +180,7 @@ export const useCommunityInboxProcessor = ( const newDrafts = updatedDsr.fileState === 'active' ? await dsrToCommunityDrafts( - dotYouClient, + odinClient, updatedDsr, LOCAL_COMMUNITY_APP_DRIVE, true @@ -209,7 +209,7 @@ export const useCommunityInboxProcessor = ( }; const findChangesSinceTimestamp = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string | undefined, timeStamp: number, params: FileQueryParams @@ -218,14 +218,14 @@ const findChangesSinceTimestamp = async ( const batchCursor = getQueryBatchCursorFromTime(new Date().getTime(), timeStamp); const newFiles = - odinId && dotYouClient.getHostIdentity() !== odinId - ? await queryBatchOverPeer(dotYouClient, odinId, params, { + odinId && odinClient.getHostIdentity() !== odinId + ? await queryBatchOverPeer(odinClient, odinId, params, { maxRecords: BATCH_SIZE, cursorState: batchCursor, includeMetadataHeader: true, includeTransferHistory: false, }) - : await queryBatch(dotYouClient, params, { + : await queryBatch(odinClient, params, { maxRecords: BATCH_SIZE, cursorState: batchCursor, includeMetadataHeader: true, @@ -233,15 +233,15 @@ const findChangesSinceTimestamp = async ( }); const modifiedFiles = - odinId && dotYouClient.getHostIdentity() !== odinId - ? await queryModifiedOverPeer(dotYouClient, odinId, params, { + odinId && odinClient.getHostIdentity() !== odinId + ? await queryModifiedOverPeer(odinClient, odinId, params, { maxRecords: BATCH_SIZE, cursor: modifiedCursor + '', excludePreviewThumbnail: false, includeHeaderContent: true, includeTransferHistory: false, }) - : await queryModified(dotYouClient, params, { + : await queryModified(odinClient, params, { maxRecords: BATCH_SIZE, cursor: modifiedCursor + '', excludePreviewThumbnail: false, @@ -254,7 +254,7 @@ const findChangesSinceTimestamp = async ( // Process batched updates after a processInbox const processCommunityMessagesBatch = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, odinId: string | undefined, targetDrive: TargetDrive, @@ -300,7 +300,7 @@ const processCommunityMessagesBatch = async ( typeof newMessage.fileMetadata.appData.content === 'string' || newMessage.fileMetadata.payloads?.some((pyld) => pyld.key === DEFAULT_PAYLOAD_KEY) ? await dsrToMessage( - dotYouClient, + odinClient, newMessage as HomebaseFile, odinId, targetDrive, diff --git a/packages/apps/community-app/src/hooks/community/live/useCommunityPeerWebsocket.ts b/packages/apps/community-app/src/hooks/community/live/useCommunityPeerWebsocket.ts index 0e06eac94..48397fb4c 100644 --- a/packages/apps/community-app/src/hooks/community/live/useCommunityPeerWebsocket.ts +++ b/packages/apps/community-app/src/hooks/community/live/useCommunityPeerWebsocket.ts @@ -1,6 +1,6 @@ import { useWebsocketSubscriber } from '@homebase-id/common-app'; import { - DotYouClient, + OdinClient, TypedConnectionNotification, TargetDrive, decryptKeyHeader, @@ -44,7 +44,7 @@ export const useCommunityPeerWebsocket = ( const targetDrive = getTargetDriveFromCommunityId(communityId || ''); const handler = useCallback( - async (decryptionClient: DotYouClient, notification: TypedConnectionNotification) => { + async (decryptionClient: OdinClient, notification: TypedConnectionNotification) => { if (!communityId) { console.warn('[CommunityWebsocket] No communityId', notification); return; @@ -125,7 +125,7 @@ export const useCommunityPeerWebsocket = ( }; const wsDsrToMessage = async ( - websocketDotyouClient: DotYouClient, + websocketOdinClient: OdinClient, dsr: HomebaseFile ): Promise | null> => { const { fileId, fileMetadata, sharedSecretEncryptedKeyHeader } = dsr; @@ -137,9 +137,9 @@ const wsDsrToMessage = async ( const keyHeader = fileMetadata.isEncrypted ? await decryptKeyHeader( - websocketDotyouClient, - sharedSecretEncryptedKeyHeader as EncryptedKeyHeader - ) + websocketOdinClient, + sharedSecretEncryptedKeyHeader as EncryptedKeyHeader + ) : undefined; const content = tryJsonParse(await decryptJsonContent(fileMetadata, keyHeader)); diff --git a/packages/apps/community-app/src/hooks/community/live/useCommunityWebsocket.ts b/packages/apps/community-app/src/hooks/community/live/useCommunityWebsocket.ts index 935cee096..cb5a30ad2 100644 --- a/packages/apps/community-app/src/hooks/community/live/useCommunityWebsocket.ts +++ b/packages/apps/community-app/src/hooks/community/live/useCommunityWebsocket.ts @@ -1,11 +1,11 @@ import { - useDotYouClientContext, + useOdinClientContext, insertNewNotification, incrementAppIdNotificationCount, useWebsocketSubscriber, } from '@homebase-id/common-app'; import { - DotYouClient, + OdinClient, TypedConnectionNotification, AppNotification, TargetDrive, @@ -30,14 +30,14 @@ export const useCommunityWebsocket = ( odinId: string | undefined, communityId: string | undefined ) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const targetDrive = LOCAL_COMMUNITY_APP_DRIVE; const { chatHandler } = useChatSocketHandler(); const handler = useCallback( - async (_: DotYouClient, notification: TypedConnectionNotification) => { + async (_: OdinClient, notification: TypedConnectionNotification) => { await chatHandler(_, notification); if (!communityId) return; @@ -50,7 +50,7 @@ export const useCommunityWebsocket = ( ) { if (notification.header.fileMetadata.appData.fileType === COMMUNITY_METADATA_FILE_TYPE) { const communityMetadata = await dsrToCommunityMetadata( - dotYouClient, + odinClient, notification.header, targetDrive, true @@ -64,7 +64,7 @@ export const useCommunityWebsocket = ( if (notification.header.fileMetadata.appData.fileType === COMMUNITY_DRAFTS_FILE_TYPE) { const communityDrafts = await dsrToCommunityDrafts( - dotYouClient, + odinClient, notification.header, targetDrive, true diff --git a/packages/apps/community-app/src/hooks/community/messages/useCommunityMessage.ts b/packages/apps/community-app/src/hooks/community/messages/useCommunityMessage.ts index 51fe623fa..441689379 100644 --- a/packages/apps/community-app/src/hooks/community/messages/useCommunityMessage.ts +++ b/packages/apps/community-app/src/hooks/community/messages/useCommunityMessage.ts @@ -5,9 +5,9 @@ import { useQuery, useQueryClient, } from '@tanstack/react-query'; -import { ellipsisAtMaxCharOfRichText, useDotYouClientContext } from '@homebase-id/common-app'; +import { ellipsisAtMaxCharOfRichText, useOdinClientContext } from '@homebase-id/common-app'; import { - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, NewMediaFile, @@ -40,7 +40,7 @@ import { export const getCommunityMessageQueryOptions = ( queryClient: QueryClient, - dotYouClient: DotYouClient, + odinClient: OdinClient, props?: { odinId: string | undefined; communityId: string | undefined; @@ -58,7 +58,7 @@ export const getCommunityMessageQueryOptions = ( queryFn: () => getMessageByUniqueId( queryClient, - dotYouClient, + odinClient, props?.odinId as string, props?.communityId as string, props?.channelId, @@ -76,9 +76,9 @@ export const useCommunityMessage = (props?: { messageId: string | undefined; fileSystemType?: SystemFileType; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const sendMessage = async ({ community, @@ -128,7 +128,7 @@ export const useCommunityMessage = (props?: { }; const uploadResult = await uploadCommunityMessage( - dotYouClient, + odinClient, community, newChat, files, @@ -174,7 +174,7 @@ export const useCommunityMessage = (props?: { const transformedMessage = { ...updatedChatMessage, }; - const identity = dotYouClient.getLoggedInIdentity(); + const identity = odinClient.getLoggedInIdentity(); if (identity && identity !== updatedChatMessage.fileMetadata.originalAuthor) { transformedMessage.fileMetadata.appData.content.collaborators = Array.from( new Set([ @@ -187,7 +187,7 @@ export const useCommunityMessage = (props?: { transformedMessage.fileMetadata.appData.content.lastEditedBy = identity; await updateCommunityMessage( - dotYouClient, + odinClient, community, transformedMessage, undefined, @@ -196,7 +196,7 @@ export const useCommunityMessage = (props?: { }; return { - get: useQuery(getCommunityMessageQueryOptions(queryClient, dotYouClient, props)), + get: useQuery(getCommunityMessageQueryOptions(queryClient, odinClient, props)), send: useMutation({ mutationFn: sendMessage, onMutate: async ({ community, channel, files, message, chatId, thread, userDate }) => { @@ -298,7 +298,7 @@ export const useCommunityMessage = (props?: { mutationFn: updateMessage, onMutate: async ({ updatedChatMessage, community }) => { const transformedMessage = { ...updatedChatMessage }; - const identity = dotYouClient.getLoggedInIdentity(); + const identity = odinClient.getLoggedInIdentity(); if (identity && identity !== updatedChatMessage.fileMetadata.originalAuthor) { transformedMessage.fileMetadata.appData.content.collaborators = Array.from( new Set([ @@ -362,7 +362,7 @@ export const useCommunityMessage = (props?: { const getMessageByUniqueId = async ( queryClient: QueryClient, - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string, channelId: string | undefined, @@ -387,7 +387,7 @@ const getMessageByUniqueId = async ( if (message) return message; } - return await getCommunityMessage(dotYouClient, odinId, communityId, messageId, fileSystemType); + return await getCommunityMessage(odinClient, odinId, communityId, messageId, fileSystemType); }; export const invalidateCommunityMessage = ( diff --git a/packages/apps/community-app/src/hooks/community/messages/useCommunityMessages.ts b/packages/apps/community-app/src/hooks/community/messages/useCommunityMessages.ts index d6468f980..aebf3004c 100644 --- a/packages/apps/community-app/src/hooks/community/messages/useCommunityMessages.ts +++ b/packages/apps/community-app/src/hooks/community/messages/useCommunityMessages.ts @@ -14,13 +14,13 @@ import { } from '../../../providers/CommunityMessageProvider'; import { DeletedHomebaseFile, - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, } from '@homebase-id/js-lib/core'; import { formatGuidId, stringGuidsEqual } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { CommunityDefinition } from '../../../providers/CommunityDefinitionProvider'; import { invalidateCommunityMessage, updateCacheCommunityMessage } from './useCommunityMessage'; @@ -33,7 +33,7 @@ export const useCommunityMessages = (props?: { maxAge?: number; }) => { const { odinId, communityId, threadId, channelId, maxAge } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const removeMessage = async ({ @@ -50,7 +50,7 @@ export const useCommunityMessages = (props?: { return await Promise.all( messages.map(async (msg) => { await hardDeleteCommunityMessage( - dotYouClient, + odinClient, community.fileMetadata.senderOdinId, community.fileMetadata.appData.uniqueId as string, msg @@ -62,7 +62,7 @@ export const useCommunityMessages = (props?: { return { all: useInfiniteQuery( getCommunityMessagesInfiniteQueryOptions( - dotYouClient, + odinClient, odinId, communityId, channelId, @@ -117,11 +117,11 @@ export const invalidateCommunityMessages = ( type TransformFnReturnData = | InfiniteData<{ - searchResults: (HomebaseFile | NewHomebaseFile | null)[]; - cursorState: string; - queryTime: number; - includeMetadataHeader: boolean; - }> + searchResults: (HomebaseFile | NewHomebaseFile | null)[]; + cursorState: string; + queryTime: number; + includeMetadataHeader: boolean; + }> | undefined; export const updateCacheCommunityMessages = ( queryClient: QueryClient, @@ -169,7 +169,7 @@ export const updateCacheCommunityMessages = ( }; const fetchMessages = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string, channelId: string | undefined, @@ -183,7 +183,7 @@ const fetchMessages = async ( const groupIds = threadId ? [threadId] : channelId ? [channelId] : undefined; return await getCommunityMessages( - dotYouClient, + odinClient, odinId, communityId, groupIds, @@ -195,7 +195,7 @@ const fetchMessages = async ( }; export const getCommunityMessagesInfiniteQueryOptions: ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId?: string, communityId?: string, channelId?: string, @@ -206,7 +206,7 @@ export const getCommunityMessagesInfiniteQueryOptions: ( cursorState: string; queryTime: number; includeMetadataHeader: boolean; -}> = (dotYouClient, odinId, communityId, channelId, threadId, maxAge) => { +}> = (odinClient, odinId, communityId, channelId, threadId, maxAge) => { if (stringGuidsEqual(communityId, threadId)) { throw new Error('ThreadId and CommunityId cannot be the same'); } @@ -223,7 +223,7 @@ export const getCommunityMessagesInfiniteQueryOptions: ( } return fetchMessages( - dotYouClient, + odinClient, odinId as string, communityId as string, channelId, @@ -238,20 +238,20 @@ export const getCommunityMessagesInfiniteQueryOptions: ( select: !maxAge ? undefined : (data) => ({ - ...data, - pages: data.pages.map((page) => { - const filteredPage = { - ...page, - - searchResults: page.searchResults.filter((msg) => { - if (!msg) return false; - return msg.fileMetadata.created > maxAge; - }), - }; - - return filteredPage; - }), + ...data, + pages: data.pages.map((page) => { + const filteredPage = { + ...page, + + searchResults: page.searchResults.filter((msg) => { + if (!msg) return false; + return msg.fileMetadata.created > maxAge; + }), + }; + + return filteredPage; }), + }), enabled: !!odinId && !!communityId && (!!channelId || !!threadId), refetchOnMount: true, staleTime: 1000 * 60 * 60 * 24, // 24 hour @@ -411,8 +411,8 @@ export const internalInsertNewMessage = ( searchResults: index === 0 ? [newMessage, ...filteredSearchResults].sort( - (a, b) => b.fileMetadata.created - a.fileMetadata.created - ) // Re-sort the first page, as the new message might be older than the first message in the page; + (a, b) => b.fileMetadata.created - a.fileMetadata.created + ) // Re-sort the first page, as the new message might be older than the first message in the page; : filteredSearchResults, }; } diff --git a/packages/apps/community-app/src/hooks/community/messages/useEditLastMessageShortcut.ts b/packages/apps/community-app/src/hooks/community/messages/useEditLastMessageShortcut.ts index f5eadc827..20fab796a 100644 --- a/packages/apps/community-app/src/hooks/community/messages/useEditLastMessageShortcut.ts +++ b/packages/apps/community-app/src/hooks/community/messages/useEditLastMessageShortcut.ts @@ -1,4 +1,4 @@ -import { COMMUNITY_ROOT_PATH, useDotYouClientContext } from '@homebase-id/common-app'; +import { COMMUNITY_ROOT_PATH, useOdinClientContext } from '@homebase-id/common-app'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { useMemo, useCallback } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; @@ -16,7 +16,7 @@ export const useEditLastMessageShortcut = ({ channel: HomebaseFile | undefined; origin?: HomebaseFile; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { odinKey, communityKey, channelKey, threadKey } = useParams(); const navigate = useNavigate(); diff --git a/packages/apps/community-app/src/hooks/community/reactions/useCommunityReaction.ts b/packages/apps/community-app/src/hooks/community/reactions/useCommunityReaction.ts index 760973d4b..fcb4eac87 100644 --- a/packages/apps/community-app/src/hooks/community/reactions/useCommunityReaction.ts +++ b/packages/apps/community-app/src/hooks/community/reactions/useCommunityReaction.ts @@ -10,7 +10,7 @@ import { uploadReaction, } from '@homebase-id/js-lib/core'; import { getNewId, tryJsonParse } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { CommunityDefinition, getTargetDriveFromCommunityId, @@ -25,7 +25,7 @@ export const useCommunityReaction = (props?: { }) => { const { messageGlobalTransitId, messageFileId, community } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const getReactionsByMessageGlobalTransitId = @@ -33,7 +33,7 @@ export const useCommunityReaction = (props?: { const reactions = ( await getReactions( - dotYouClient, + odinClient, community?.fileMetadata.senderOdinId, { fileId: messageFileId, @@ -64,7 +64,7 @@ export const useCommunityReaction = (props?: { if (!message.fileMetadata.globalTransitId) throw new Error('Message does not have a global transit id'); - return await uploadReaction(dotYouClient, reaction, community.fileMetadata.senderOdinId, { + return await uploadReaction(odinClient, reaction, community.fileMetadata.senderOdinId, { fileId: message.fileId, globalTransitId: message.fileMetadata.globalTransitId, targetDrive, @@ -89,7 +89,7 @@ export const useCommunityReaction = (props?: { if (!message.fileMetadata.globalTransitId) throw new Error('Message does not have a global transit id'); - return await deleteReaction(dotYouClient, reaction, community.fileMetadata.senderOdinId, { + return await deleteReaction(odinClient, reaction, community.fileMetadata.senderOdinId, { targetDrive, fileId: message.fileId, globalTransitId: message.fileMetadata.globalTransitId, @@ -114,7 +114,7 @@ export const useCommunityReaction = (props?: { queryClient.getQueryData(['community-reaction', message.fileId]) || []; const newReaction: EmojiReaction = { - authorOdinId: dotYouClient.getHostIdentity(), + authorOdinId: odinClient.getHostIdentity(), body: reaction, }; diff --git a/packages/apps/community-app/src/hooks/community/status/useMyStatus.ts b/packages/apps/community-app/src/hooks/community/status/useMyStatus.ts index 416db01f0..1a390d9d1 100644 --- a/packages/apps/community-app/src/hooks/community/status/useMyStatus.ts +++ b/packages/apps/community-app/src/hooks/community/status/useMyStatus.ts @@ -1,7 +1,7 @@ import { HomebaseFile } from '@homebase-id/js-lib/core'; import { CommunityDefinition } from '../../../providers/CommunityDefinitionProvider'; import { QueryClient, useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { CommunityStatus, getStatus, setStatus } from '../../../providers/CommunityStatusProvider'; import { formatGuidId } from '@homebase-id/js-lib/helpers'; @@ -10,14 +10,14 @@ export const useMyStatus = (props: { odinId?: string; }) => { const { community, odinId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetchMyStatus = async (community: HomebaseFile) => { return await getStatus( - dotYouClient, + odinClient, community, - odinId || dotYouClient.getLoggedInIdentity() || '' + odinId || odinClient.getLoggedInIdentity() || '' ); }; @@ -28,7 +28,7 @@ export const useMyStatus = (props: { community: HomebaseFile; status: CommunityStatus; }) => { - return setStatus(dotYouClient, community, status); + return setStatus(odinClient, community, status); }; return { diff --git a/packages/apps/community-app/src/hooks/community/threads/useCommunityThreads.ts b/packages/apps/community-app/src/hooks/community/threads/useCommunityThreads.ts index ce9c0585e..ddc2563f0 100644 --- a/packages/apps/community-app/src/hooks/community/threads/useCommunityThreads.ts +++ b/packages/apps/community-app/src/hooks/community/threads/useCommunityThreads.ts @@ -1,7 +1,7 @@ import { HomebaseFile } from '@homebase-id/js-lib/core'; import { QueryClient, useQuery, useQueryClient } from '@tanstack/react-query'; import { CommunityMessage } from '../../../providers/CommunityMessageProvider'; -import { findMentionedInRichText, useDotYouClientContext } from '@homebase-id/common-app'; +import { findMentionedInRichText, useOdinClientContext } from '@homebase-id/common-app'; import { useCommunityMetadata } from '../useCommunityMetadata'; import { useCommunityChannels } from '../channels/useCommunityChannels'; import { getCommunityMessagesInfiniteQueryOptions } from '../messages/useCommunityMessages'; @@ -25,8 +25,8 @@ export const useCommunityThreads = ({ communityId?: string; }) => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); - const identity = dotYouClient.getLoggedInIdentity(); + const odinClient = useOdinClientContext(); + const identity = odinClient.getLoggedInIdentity(); const { data: channels, isFetched } = useCommunityChannels({ odinId, communityId }).fetch; const lastUpdate = useLastUpdatedCommunityMessages({ communityId }); @@ -43,7 +43,7 @@ export const useCommunityThreads = ({ channels.map(async (channel) => { const channelMessages = await queryClient.fetchInfiniteQuery( getCommunityMessagesInfiniteQueryOptions( - dotYouClient, + odinClient, odinId, communityId, channel.fileMetadata.appData.uniqueId, @@ -66,7 +66,7 @@ export const useCommunityThreads = ({ const replies = await queryClient.fetchInfiniteQuery( getCommunityMessagesInfiniteQueryOptions( - dotYouClient, + odinClient, odinId, communityId, origin.fileMetadata.appData.content.channelId, @@ -130,7 +130,7 @@ export const useLastUpdatedThreadExcludingMine = (props: { odinId: string | undefined; communityId: string | undefined; }) => { - const identity = useDotYouClientContext().getLoggedInIdentity(); + const identity = useOdinClientContext().getLoggedInIdentity(); const { data: flattedThreads } = useCommunityThreads(props); return flattedThreads @@ -156,6 +156,6 @@ export const useHasUnreadThreads = (props: { odinId: string; communityId: string lastUpdatedThread && (!metadata || metadata?.fileMetadata.appData.content.threadsLastReadTime < - lastUpdatedThread.lastMessageCreated) + lastUpdatedThread.lastMessageCreated) ); }; diff --git a/packages/apps/community-app/src/hooks/community/useCommunities.ts b/packages/apps/community-app/src/hooks/community/useCommunities.ts index 20c131994..9a7bbfe2a 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunities.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunities.ts @@ -11,7 +11,7 @@ import { getCommunityDefinition, getTargetDriveFromCommunityId, } from '../../providers/CommunityDefinitionProvider'; -import { useAllContacts, useDotYouClientContext } from '@homebase-id/common-app'; +import { useAllContacts, useOdinClientContext } from '@homebase-id/common-app'; import { QueryClient, useQuery } from '@tanstack/react-query'; import { drivesEqual, stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { getCommunitiesMetadata } from '../../providers/CommunityMetadataProvider'; @@ -20,11 +20,11 @@ export const useCommunities = (enableDiscovery?: boolean) => { const { data: alllContacts, isFetched: fetchedAllContacts } = useAllContacts( enableDiscovery || false ); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchCommunities = async (): Promise[] | null> => { - const localCommunities = await getCommunities(dotYouClient); - const localMetdatas = await getCommunitiesMetadata(dotYouClient); + const localCommunities = await getCommunities(odinClient); + const localMetdatas = await getCommunitiesMetadata(odinClient); const remoteCommunitesForMetadata = ( await Promise.all( localMetdatas.map(async (metadata) => { @@ -34,7 +34,7 @@ export const useCommunities = (enableDiscovery?: boolean) => { ) return null; return await getCommunityDefinition( - dotYouClient, + odinClient, metadata?.fileMetadata.appData.content.odinId, metadata?.fileMetadata.appData.uniqueId ); @@ -68,8 +68,8 @@ export const useCommunities = (enableDiscovery?: boolean) => { const odinId = contact.fileMetadata.appData.content.odinId; if (!odinId) return undefined; - const securityContext = await getSecurityContextOverPeer(dotYouClient, odinId); - const allCommunities = await getCommunitiesOverPeer(dotYouClient, odinId); + const securityContext = await getSecurityContextOverPeer(odinClient, odinId); + const allCommunities = await getCommunitiesOverPeer(odinClient, odinId); return { odinId, diff --git a/packages/apps/community-app/src/hooks/community/useCommunity.ts b/packages/apps/community-app/src/hooks/community/useCommunity.ts index 9736b9f51..2d57fcaca 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunity.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunity.ts @@ -2,13 +2,13 @@ import { QueryClient, useMutation, useQuery, useQueryClient } from '@tanstack/re import { stringGuidsEqual, stringifyToQueryParams } from '@homebase-id/js-lib/helpers'; import { ApiType, - DotYouClient, + OdinClient, DrivePermissionType, HomebaseFile, NewHomebaseFile, TargetDrive, } from '@homebase-id/js-lib/core'; -import { COMMUNITY_ROOT_PATH, useDotYouClientContext } from '@homebase-id/common-app'; +import { COMMUNITY_ROOT_PATH, useOdinClientContext } from '@homebase-id/common-app'; import { CommunityDefinition, getCommunityDefinition, @@ -95,7 +95,7 @@ const ensureNewDriveAndPermission = ( returnUrl ); - const host = new DotYouClient({ + const host = new OdinClient({ hostIdentity: identity, api: ApiType.App, }).getRoot(); @@ -104,13 +104,13 @@ const ensureNewDriveAndPermission = ( export const useCommunity = (props?: useCommunityProps) => { const { odinId, communityId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetchCommunity = async ({ odinId, communityId }: useCommunityProps) => { if (!odinId || !communityId) return undefined; - return (await getCommunityDefinition(dotYouClient, odinId, communityId)) || undefined; + return (await getCommunityDefinition(odinClient, odinId, communityId)) || undefined; }; const saveData = async ( @@ -120,7 +120,7 @@ export const useCommunity = (props?: useCommunityProps) => { if (!communityDef.fileMetadata.appData.uniqueId) throw new Error('Community unique id is not set'); - const host = dotYouClient.getHostIdentity(); + const host = odinClient.getHostIdentity(); const returnUrl = `${COMMUNITY_ROOT_PATH}/new?draft=${JSON.stringify(communityDef)}`; const targetDrive = getTargetDriveFromCommunityId(communityDef.fileMetadata.appData.uniqueId); @@ -144,7 +144,7 @@ export const useCommunity = (props?: useCommunityProps) => { ); }; - return await saveCommunity(dotYouClient, { ...communityDef }, onMissingDrive); + return await saveCommunity(odinClient, { ...communityDef }, onMissingDrive); }; const getInviteLink = async ({ @@ -156,7 +156,7 @@ export const useCommunity = (props?: useCommunityProps) => { }; const removeCommunity = async (communityDef: HomebaseFile) => - await removeCommunityDefinition(dotYouClient, communityDef); + await removeCommunityDefinition(odinClient, communityDef); return { fetch: useQuery({ @@ -250,7 +250,7 @@ export const getExtendCirclePermissionUrl = ( c: circleIds.join(','), }; - const host = new DotYouClient({ + const host = new OdinClient({ hostIdentity: identity, api: ApiType.App, }).getRoot(); diff --git a/packages/apps/community-app/src/hooks/community/useCommunityCollaborativeMsg.ts b/packages/apps/community-app/src/hooks/community/useCommunityCollaborativeMsg.ts index ec60b13b8..6625e2405 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunityCollaborativeMsg.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunityCollaborativeMsg.ts @@ -5,7 +5,7 @@ import { CommunityDefinition, getTargetDriveFromCommunityId, } from '../../providers/CommunityDefinitionProvider'; -import { useContentFromPayload, useDotYouClientContext } from '@homebase-id/common-app'; +import { useContentFromPayload, useOdinClientContext } from '@homebase-id/common-app'; export const useCommunityCollaborativeMsg = ({ msg, @@ -14,7 +14,7 @@ export const useCommunityCollaborativeMsg = ({ msg: HomebaseFile; community?: HomebaseFile; }) => { - const loggedInOdinId = useDotYouClientContext().getLoggedInIdentity(); + const loggedInOdinId = useOdinClientContext().getLoggedInIdentity(); const { mutate, ...updateProps } = useCommunityMessage().update; const isCollaborative = msg.fileMetadata.appData.content.isCollaborative; @@ -26,12 +26,12 @@ export const useCommunityCollaborativeMsg = ({ community.fileMetadata.appData.uniqueId && msg.fileId ? { - odinId: community?.fileMetadata.senderOdinId, - targetDrive: getTargetDriveFromCommunityId(community.fileMetadata.appData.uniqueId), - fileId: msg.fileId, - payloadKey: BACKEDUP_PAYLOAD_KEY, - systemFileType: msg.fileSystemType, - } + odinId: community?.fileMetadata.senderOdinId, + targetDrive: getTargetDriveFromCommunityId(community.fileMetadata.appData.uniqueId), + fileId: msg.fileId, + payloadKey: BACKEDUP_PAYLOAD_KEY, + systemFileType: msg.fileSystemType, + } : undefined ); diff --git a/packages/apps/community-app/src/hooks/community/useCommunityDrafts.ts b/packages/apps/community-app/src/hooks/community/useCommunityDrafts.ts index 9c93b25a2..89ee18ed4 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunityDrafts.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunityDrafts.ts @@ -5,10 +5,10 @@ import { QueryClient, UndefinedInitialDataOptions, } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { DeletedHomebaseFile, - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, SecurityGroupType, @@ -27,7 +27,7 @@ export const useCommunityDrafts = (props?: { communityId: string | undefined; }) => { const { communityId, odinId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const saveDrafts = async ({ @@ -46,7 +46,7 @@ export const useCommunityDrafts = (props?: { maxRetries--; const serverVersion = await getCommunityDrafts( - dotYouClient, + odinClient, drafts.fileMetadata.appData.content.communityId ); if (!serverVersion) { @@ -56,7 +56,7 @@ export const useCommunityDrafts = (props?: { const newlyMerged = mergeDrafts(drafts, serverVersion); insertNewcommunityDrafts(queryClient, newlyMerged); - return await uploadCommunityDrafts(dotYouClient, newlyMerged, onVersionConflict); + return await uploadCommunityDrafts(odinClient, newlyMerged, onVersionConflict); }; // We cleanup the drafts only for the inital save; When we retry we want to keep the drafts to avoid bad merging @@ -64,12 +64,12 @@ export const useCommunityDrafts = (props?: { draftsCopy.fileMetadata.appData.content.drafts = cleanupDrafts( draftsCopy.fileMetadata.appData.content.drafts || {} ); - return await uploadCommunityDrafts(dotYouClient, draftsCopy, onVersionConflict); + return await uploadCommunityDrafts(odinClient, draftsCopy, onVersionConflict); }; return { single: useQuery( - getCommunityDraftsQueryOptions(dotYouClient, queryClient, odinId, communityId) + getCommunityDraftsQueryOptions(odinClient, queryClient, odinId, communityId) ), update: useMutation({ mutationFn: saveDrafts, @@ -116,12 +116,12 @@ export const useCommunityDrafts = (props?: { }; const getDrafts = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, odinId: string, communityId: string ) => { - const serverFile = await getCommunityDrafts(dotYouClient, communityId); + const serverFile = await getCommunityDrafts(odinClient, communityId); if (!serverFile) { const newDrafts: NewHomebaseFile = { fileMetadata: { @@ -149,16 +149,16 @@ const getDrafts = async ( }; export const getCommunityDraftsQueryOptions: ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, odinId: string | undefined, communityId: string | undefined ) => UndefinedInitialDataOptions< HomebaseFile | NewHomebaseFile | null -> = (dotYouClient, queryClient, odinId, communityId) => ({ +> = (odinClient, queryClient, odinId, communityId) => ({ queryKey: ['community-drafts', formatGuidId(communityId)], queryFn: () => - getDrafts(dotYouClient, queryClient, odinId as string, formatGuidId(communityId) as string), + getDrafts(odinClient, queryClient, odinId as string, formatGuidId(communityId) as string), enabled: !!odinId && !!communityId, staleTime: 1000 * 60 * 5, // 5 minutes }); diff --git a/packages/apps/community-app/src/hooks/community/useCommunityLater.ts b/packages/apps/community-app/src/hooks/community/useCommunityLater.ts index 6cd7bfc0a..3c8cd1534 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunityLater.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunityLater.ts @@ -1,4 +1,4 @@ -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { getCommunityMetadataQueryOptions, useCommunityMetadata, @@ -34,14 +34,14 @@ export const useManageCommunityLater = (props?: { }) => { const { messageId, systemFileType } = props || {}; const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const { odinKey, communityKey } = useParams(); const { mutate: updateMeta, ...saveProps } = useCommunityMetadata().update; const mutate = useCallback(() => { queryClient .fetchQuery( - getCommunityMetadataQueryOptions(dotYouClient, queryClient, odinKey, communityKey) + getCommunityMetadataQueryOptions(odinClient, queryClient, odinKey, communityKey) ) .then((communityMetadata) => { if (!messageId || !systemFileType || !communityMetadata) return; diff --git a/packages/apps/community-app/src/hooks/community/useCommunityMemberUpdater.ts b/packages/apps/community-app/src/hooks/community/useCommunityMemberUpdater.ts index bb94ed630..135a61f4b 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunityMemberUpdater.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunityMemberUpdater.ts @@ -1,4 +1,4 @@ -import { useCircle, useDotYouClientContext } from '@homebase-id/common-app'; +import { useCircle, useOdinClientContext } from '@homebase-id/common-app'; import { useCommunity } from './useCommunity'; import { useEffect } from 'react'; @@ -7,7 +7,7 @@ export const useCommunityMemberUpdater = ( communityId: string | undefined ) => { const { data: community } = useCommunity({ odinId, communityId }).fetch; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const isAdmin = community?.fileMetadata.originalAuthor === loggedOnIdentity; diff --git a/packages/apps/community-app/src/hooks/community/useCommunityMetadata.ts b/packages/apps/community-app/src/hooks/community/useCommunityMetadata.ts index 9e86186b0..5d223b2d8 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunityMetadata.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunityMetadata.ts @@ -5,10 +5,10 @@ import { QueryClient, UndefinedInitialDataOptions, } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { DeletedHomebaseFile, - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, SecurityGroupType, @@ -26,7 +26,7 @@ export const useCommunityMetadata = (props?: { communityId: string | undefined; }) => { const { communityId, odinId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const saveMetadata = async ({ @@ -45,7 +45,7 @@ export const useCommunityMetadata = (props?: { maxRetries--; const serverVersion = await getCommunityMetadata( - dotYouClient, + odinClient, metadata.fileMetadata.appData.content.communityId ); if (!serverVersion) { @@ -55,15 +55,15 @@ export const useCommunityMetadata = (props?: { const newlyMerged = mergeMetadata(metadata, serverVersion); insertNewcommunityMetadata(queryClient, newlyMerged); - return await uploadCommunityMetadata(dotYouClient, newlyMerged, onVersionConflict); + return await uploadCommunityMetadata(odinClient, newlyMerged, onVersionConflict); }; - return await uploadCommunityMetadata(dotYouClient, metadata, onVersionConflict); + return await uploadCommunityMetadata(odinClient, metadata, onVersionConflict); }; return { single: useQuery( - getCommunityMetadataQueryOptions(dotYouClient, queryClient, odinId, communityId) + getCommunityMetadataQueryOptions(odinClient, queryClient, odinId, communityId) ), update: useMutation({ mutationFn: saveMetadata, @@ -110,12 +110,12 @@ export const useCommunityMetadata = (props?: { }; const getMetadata = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, odinId: string, communityId: string ) => { - const serverFile = await getCommunityMetadata(dotYouClient, communityId); + const serverFile = await getCommunityMetadata(odinClient, communityId); if (!serverFile) { const newMetadata: NewHomebaseFile = { fileMetadata: { @@ -147,16 +147,16 @@ const getMetadata = async ( }; export const getCommunityMetadataQueryOptions: ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, odinId: string | undefined, communityId: string | undefined ) => UndefinedInitialDataOptions< HomebaseFile | NewHomebaseFile | null -> = (dotYouClient, queryClient, odinId, communityId) => ({ +> = (odinClient, queryClient, odinId, communityId) => ({ queryKey: ['community-metadata', formatGuidId(communityId)], queryFn: () => - getMetadata(dotYouClient, queryClient, odinId as string, formatGuidId(communityId) as string), + getMetadata(odinClient, queryClient, odinId as string, formatGuidId(communityId) as string), enabled: !!odinId && !!communityId, staleTime: 1000 * 60 * 5, // 5 minutes }); @@ -243,7 +243,7 @@ export const useCommunityMetadataSavedOnly = (props?: { communityId: string | undefined; }) => { const { communityId, odinId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); return useQuery({ @@ -251,7 +251,7 @@ export const useCommunityMetadataSavedOnly = (props?: { enabled: !!odinId && !!communityId, queryFn: async () => { const communityMetadata = await queryClient.fetchQuery( - getCommunityMetadataQueryOptions(dotYouClient, queryClient, odinId, communityId) + getCommunityMetadataQueryOptions(odinClient, queryClient, odinId, communityId) ); return communityMetadata?.fileMetadata.appData.content.savedMessages || []; }, diff --git a/packages/apps/community-app/src/hooks/community/useCommunityNotifications.ts b/packages/apps/community-app/src/hooks/community/useCommunityNotifications.ts index 3f80aabdc..08bbbbd65 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunityNotifications.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunityNotifications.ts @@ -1,5 +1,5 @@ import { useMutation } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { SubscribeToPeerNotifications } from '../../providers/PeerNotificationSubscriber'; import { useCommunityMetadata } from './useCommunityMetadata'; import { useEffect } from 'react'; @@ -9,7 +9,7 @@ export const useCommunityNotifications = ( odinId: string | undefined, communityId: string | undefined ) => { - const identity = useDotYouClientContext().getHostIdentity(); + const identity = useOdinClientContext().getHostIdentity(); const { data: community } = useCommunity({ odinId, communityId }).fetch; const { @@ -20,7 +20,7 @@ export const useCommunityNotifications = ( communityId: community?.fileMetadata.appData.uniqueId as string, }); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const enableCommunityNotifications = async () => { if ( @@ -31,7 +31,7 @@ export const useCommunityNotifications = ( return; return await SubscribeToPeerNotifications( - dotYouClient, + odinClient, community.fileMetadata.senderOdinId, community.fileMetadata.appData.uniqueId as string ); diff --git a/packages/apps/community-app/src/hooks/community/useCommunityPin.ts b/packages/apps/community-app/src/hooks/community/useCommunityPin.ts index 616b1af8b..7712ebb0f 100644 --- a/packages/apps/community-app/src/hooks/community/useCommunityPin.ts +++ b/packages/apps/community-app/src/hooks/community/useCommunityPin.ts @@ -1,4 +1,4 @@ -import { DotYouClient, HomebaseFile } from '@homebase-id/js-lib/core'; +import { OdinClient, HomebaseFile } from '@homebase-id/js-lib/core'; import { COMMUNITY_PINNED_TAG, CommunityMessage, @@ -8,7 +8,7 @@ import { useCommunityMessage } from './messages/useCommunityMessage'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { CommunityDefinition } from '../../providers/CommunityDefinitionProvider'; import { useQuery, UseQueryOptions } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useCommunityPin = ({ msg, @@ -58,16 +58,16 @@ export const useCommunityPins = (props?: { channelId?: string; }) => { const { odinId, communityId, channelId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); return { - all: useQuery(getFetchPinnedMessagesQueryOptions(dotYouClient, odinId, communityId, channelId)), + all: useQuery(getFetchPinnedMessagesQueryOptions(odinClient, odinId, communityId, channelId)), }; }; const PAGE_SIZE = 100; const fetchPinnedMessages = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string, channelId: string | undefined, @@ -76,7 +76,7 @@ const fetchPinnedMessages = async ( const groupIds = channelId ? [channelId] : undefined; return await getCommunityMessages( - dotYouClient, + odinClient, odinId, communityId, groupIds, @@ -87,7 +87,7 @@ const fetchPinnedMessages = async ( }; const getFetchPinnedMessagesQueryOptions = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId?: string, communityId?: string, channelId?: string @@ -101,7 +101,7 @@ const getFetchPinnedMessagesQueryOptions = ( queryKey: ['community-pinned-messages'], queryFn: () => fetchPinnedMessages( - dotYouClient, + odinClient, odinId as string, communityId as string, channelId, diff --git a/packages/apps/community-app/src/hooks/community/useLocalCommunityDrives.ts b/packages/apps/community-app/src/hooks/community/useLocalCommunityDrives.ts index cc11ca430..dec0185fc 100644 --- a/packages/apps/community-app/src/hooks/community/useLocalCommunityDrives.ts +++ b/packages/apps/community-app/src/hooks/community/useLocalCommunityDrives.ts @@ -1,13 +1,13 @@ -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { getDrivesByType } from '@homebase-id/js-lib/core'; import { COMMUNITY_DRIVE_TYPE } from '../../providers/CommunityDefinitionProvider'; import { useQuery } from '@tanstack/react-query'; export const useLocalCommunityDrives = (isEnabled: boolean) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchChannelData = async () => { - return (await getDrivesByType(dotYouClient, COMMUNITY_DRIVE_TYPE, 1, 100)).results; + return (await getDrivesByType(odinClient, COMMUNITY_DRIVE_TYPE, 1, 100)).results; }; return useQuery({ diff --git a/packages/apps/community-app/src/hooks/community/useMarkCommunityAsRead.ts b/packages/apps/community-app/src/hooks/community/useMarkCommunityAsRead.ts index 31a83c1fa..b5bda8b6e 100644 --- a/packages/apps/community-app/src/hooks/community/useMarkCommunityAsRead.ts +++ b/packages/apps/community-app/src/hooks/community/useMarkCommunityAsRead.ts @@ -3,7 +3,7 @@ import { useCommunityMetadata } from './useCommunityMetadata'; import { useLastUpdatedThreadExcludingMine } from './threads/useCommunityThreads'; import { useCommunityChannelsWithRecentMessages } from './channels/useCommunityChannelsWithRecentMessages'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { useLastUpdatedCommunityMessages } from './messages/useLastUpdatedCommunityMessages'; interface MarkCommunityChannelAsReadProps { @@ -25,7 +25,7 @@ export const useMarkCommunityAsRead = ({ }: MarkCommunityChannelAsReadProps | MarkCommunityThreadsAsReadProps) => { const channelId = (props as MarkCommunityChannelAsReadProps).channelId; const threads = (props as MarkCommunityThreadsAsReadProps).threads; - const loggedInIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedInIdentity = useOdinClientContext().getLoggedInIdentity(); const { data: channelsWithRecent } = useCommunityChannelsWithRecentMessages({ odinId, @@ -94,10 +94,10 @@ export const useMarkCommunityAsRead = ({ channelLastReadTime: matchedChannel && matchedChannel.lastMessage ? { - ...metadata.fileMetadata.appData.content.channelLastReadTime, - [matchedChannel.fileMetadata.appData.uniqueId as string]: - matchedChannel.lastMessage.fileMetadata.created, - } + ...metadata.fileMetadata.appData.content.channelLastReadTime, + [matchedChannel.fileMetadata.appData.uniqueId as string]: + matchedChannel.lastMessage.fileMetadata.created, + } : metadata.fileMetadata.appData.content.channelLastReadTime, }, }, diff --git a/packages/apps/community-app/src/providers/CommunityDefinitionProvider.ts b/packages/apps/community-app/src/providers/CommunityDefinitionProvider.ts index 8990f44a5..9b82a6f04 100644 --- a/packages/apps/community-app/src/providers/CommunityDefinitionProvider.ts +++ b/packages/apps/community-app/src/providers/CommunityDefinitionProvider.ts @@ -6,7 +6,7 @@ import { ApiType, DEFAULT_PAYLOAD_KEY, deleteFile, - DotYouClient, + OdinClient, ensureDrive, FileQueryParams, GetBatchQueryResultOptions, @@ -48,8 +48,8 @@ export interface CommunityDefinition { export const COMMUNITY_DRIVE_TYPE = '63db75f1-e999-40b2-a321-41ebffa5e363'; export const COMMUNITY_FILE_TYPE = 7010; -export const getCommunities = async (dotYouClient: DotYouClient) => { - const drives = await getDrivesByType(dotYouClient, COMMUNITY_DRIVE_TYPE, 1, 1000); +export const getCommunities = async (odinClient: OdinClient) => { + const drives = await getDrivesByType(odinClient, COMMUNITY_DRIVE_TYPE, 1, 1000); const communityHeaders = drives.results.map((drive) => { return { id: drive.targetDriveInfo.alias, @@ -80,14 +80,14 @@ export const getCommunities = async (dotYouClient: DotYouClient) => { }; }); - const response = await queryBatchCollection(dotYouClient, queries); + const response = await queryBatchCollection(odinClient, queries); const definitions = await Promise.all( response.results.map(async (response) => { if (response.searchResults.length == 1) { const communityDrive = getTargetDriveFromCommunityId(response.name); const dsr = response.searchResults[0]; - return dsrToCommunity(dotYouClient, dsr, communityDrive, response.includeMetadataHeader); + return dsrToCommunity(odinClient, dsr, communityDrive, response.includeMetadataHeader); } }) ); @@ -97,8 +97,8 @@ export const getCommunities = async (dotYouClient: DotYouClient) => { ) as HomebaseFile[]; }; -export const getCommunitiesOverPeer = async (dotYouClient: DotYouClient, odinId: string) => { - const drives = await getDrivesByTypeOverPeer(dotYouClient, COMMUNITY_DRIVE_TYPE, 1, 1000, odinId); +export const getCommunitiesOverPeer = async (odinClient: OdinClient, odinId: string) => { + const drives = await getDrivesByTypeOverPeer(odinClient, COMMUNITY_DRIVE_TYPE, 1, 1000, odinId); const communityHeaders = drives.results.map((drive) => { return { id: drive.targetDriveInfo.alias, @@ -110,7 +110,7 @@ export const getCommunitiesOverPeer = async (dotYouClient: DotYouClient, odinId: return ( await Promise.all( communityHeaders.map(async (header) => { - const definition = await getCommunityOverPeer(dotYouClient, odinId, header.id); + const definition = await getCommunityOverPeer(odinClient, odinId, header.id); return definition; }) ) @@ -119,7 +119,7 @@ export const getCommunitiesOverPeer = async (dotYouClient: DotYouClient, odinId: }; export const getCommunityOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string ): Promise | null> => { @@ -136,13 +136,13 @@ export const getCommunityOverPeer = async ( includeMetadataHeader: true, }; - const response = await queryBatchOverPeer(dotYouClient, odinId, queryParams, ro); + const response = await queryBatchOverPeer(odinClient, odinId, queryParams, ro); try { if (response.searchResults.length == 1) { const dsr = response.searchResults[0]; const definitionContent = await getContentFromHeaderOrPayloadOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, dsr, @@ -170,7 +170,7 @@ export const getCommunityOverPeer = async ( }; export const saveCommunity = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, definition: NewHomebaseFile, onMissingDrive?: () => void ): Promise => { @@ -182,15 +182,15 @@ export const saveCommunity = async ( const encrypt = !( definition.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Anonymous || + SecurityGroupType.Anonymous || definition.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Authenticated + SecurityGroupType.Authenticated ); const targetDrive = getTargetDriveFromCommunityId(definition.fileMetadata.appData.uniqueId); const existingCommunityDefinition = await getCommunityDefinition( - dotYouClient, - definition.fileMetadata.senderOdinId || dotYouClient.getHostIdentity(), + odinClient, + definition.fileMetadata.senderOdinId || odinClient.getHostIdentity(), definition.fileMetadata.appData.uniqueId ); const fileId = existingCommunityDefinition?.fileId; @@ -198,7 +198,7 @@ export const saveCommunity = async ( if (!fileId) { // Channel doesn't exist yet, we need to check if the drive does exist and if there is access: - const securityContext = await getSecurityContext(dotYouClient); + const securityContext = await getSecurityContext(odinClient); if ( !securityContext?.permissionContext.permissionGroups.some((x) => x.driveGrants.some((driveGrant) => @@ -206,9 +206,9 @@ export const saveCommunity = async ( ) ) ) { - if (dotYouClient.getType() === ApiType.Owner) { + if (odinClient.getType() === ApiType.Owner) { await ensureDrive( - dotYouClient, + odinClient, targetDrive, communityContent.title, `Drive for community ${communityContent.title}`, @@ -250,17 +250,17 @@ export const saveCommunity = async ( }; const result = await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, shouldEmbedContent ? undefined : [ - { - payload: new OdinBlob([payloadBytes], { type: 'application/json' }), - key: DEFAULT_PAYLOAD_KEY, - }, - ], + { + payload: new OdinBlob([payloadBytes], { type: 'application/json' }), + key: DEFAULT_PAYLOAD_KEY, + }, + ], undefined, encrypt ); @@ -270,7 +270,7 @@ export const saveCommunity = async ( }; export const getCommunityDefinition = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string ): Promise | undefined> => { @@ -289,13 +289,13 @@ export const getCommunityDefinition = async ( try { const response = - odinId && odinId !== dotYouClient.getHostIdentity() - ? await queryBatchOverPeer(dotYouClient, odinId, params, ro) - : await queryBatch(dotYouClient, params, ro); + odinId && odinId !== odinClient.getHostIdentity() + ? await queryBatchOverPeer(odinClient, odinId, params, ro) + : await queryBatch(odinClient, params, ro); if (response.searchResults.length == 1) { const dsr = response.searchResults[0]; - return dsrToCommunity(dotYouClient, dsr, targetDrive, response.includeMetadataHeader); + return dsrToCommunity(odinClient, dsr, targetDrive, response.includeMetadataHeader); } } catch (ex) { console.debug(`[CommunityDefinitionProvider] getCommunityDefinition: ${ex}`); @@ -306,12 +306,12 @@ export const getCommunityDefinition = async ( }; export const removeCommunityDefinition = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, community: HomebaseFile ) => { if (!community.fileMetadata.appData.uniqueId) throw new Error('Community unique id is not set'); return await deleteFile( - dotYouClient, + odinClient, getTargetDriveFromCommunityId(community.fileMetadata.appData.uniqueId as string), community.fileId ); @@ -320,26 +320,26 @@ export const removeCommunityDefinition = async ( // Helpers export const dsrToCommunity = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | undefined> => { const definitionContent = - dsr.fileMetadata.senderOdinId !== dotYouClient.getHostIdentity() + dsr.fileMetadata.senderOdinId !== odinClient.getHostIdentity() ? await getContentFromHeaderOrPayloadOverPeer( - dotYouClient, - dsr.fileMetadata.senderOdinId, - targetDrive, - dsr, - includeMetadataHeader - ) + odinClient, + dsr.fileMetadata.senderOdinId, + targetDrive, + dsr, + includeMetadataHeader + ) : await getContentFromHeaderOrPayload( - dotYouClient, - targetDrive, - dsr, - includeMetadataHeader - ); + odinClient, + targetDrive, + dsr, + includeMetadataHeader + ); if (!definitionContent) return undefined; const file: HomebaseFile = { diff --git a/packages/apps/community-app/src/providers/CommunityDraftsProvider.ts b/packages/apps/community-app/src/providers/CommunityDraftsProvider.ts index 40afbc5b9..3519b9746 100644 --- a/packages/apps/community-app/src/providers/CommunityDraftsProvider.ts +++ b/packages/apps/community-app/src/providers/CommunityDraftsProvider.ts @@ -1,6 +1,6 @@ import { DEFAULT_PAYLOAD_KEY, - DotYouClient, + OdinClient, getContentFromHeaderOrPayload, getFileHeaderByUniqueId, HomebaseFile, @@ -43,7 +43,7 @@ export const LOCAL_COMMUNITY_APP_DRIVE: TargetDrive = { export const COMMUNITY_DRAFTS_FILE_TYPE = 7012; export const uploadCommunityDrafts = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, definition: NewHomebaseFile | HomebaseFile, onVersionConflicht?: () => Promise | void ): Promise => { @@ -105,7 +105,7 @@ export const uploadCommunityDrafts = async ( }; const result = await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, payloads, @@ -119,30 +119,30 @@ export const uploadCommunityDrafts = async ( }; export const getCommunityDrafts = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, communityId: string ): Promise | null> => { const header = await getFileHeaderByUniqueId( - dotYouClient, + odinClient, LOCAL_COMMUNITY_APP_DRIVE, communityId ); if (!header) return null; - return dsrToCommunityDrafts(dotYouClient, header, LOCAL_COMMUNITY_APP_DRIVE, true); + return dsrToCommunityDrafts(odinClient, header, LOCAL_COMMUNITY_APP_DRIVE, true); }; // Helpers export const dsrToCommunityDrafts = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { try { const definitionContent = await getContentFromHeaderOrPayload>( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader diff --git a/packages/apps/community-app/src/providers/CommunityMessageProvider.ts b/packages/apps/community-app/src/providers/CommunityMessageProvider.ts index 07197edb1..dc64189ab 100644 --- a/packages/apps/community-app/src/providers/CommunityMessageProvider.ts +++ b/packages/apps/community-app/src/providers/CommunityMessageProvider.ts @@ -1,5 +1,5 @@ import { - DotYouClient, + OdinClient, NewHomebaseFile, NewMediaFile, UploadInstructionSet, @@ -89,7 +89,7 @@ export interface CommunityMessage { } export const uploadCommunityMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, community: HomebaseFile, message: NewHomebaseFile, files: NewMediaFile[] | undefined, @@ -201,7 +201,7 @@ export const uploadCommunityMessage = async ( uploadMetadata.appData.previewThumbnail = previewThumbnails.length >= 2 ? await makeGrid(previewThumbnails) : previewThumbnails[0]; - const identity = dotYouClient.getLoggedInIdentity(); + const identity = odinClient.getLoggedInIdentity(); if (!shouldEmbedContent) { payloads.push({ key: DEFAULT_PAYLOAD_KEY, @@ -212,7 +212,7 @@ export const uploadCommunityMessage = async ( let uploadResult: UploadResult | TransitUploadResult | void; if ( community.fileMetadata.senderOdinId && - community.fileMetadata.senderOdinId !== dotYouClient.getHostIdentity() + community.fileMetadata.senderOdinId !== odinClient.getHostIdentity() ) { const transitInstructions: TransitInstructionSet = { remoteTargetDrive: targetDrive, @@ -234,7 +234,7 @@ export const uploadCommunityMessage = async ( }; uploadResult = await uploadFileOverPeer( - dotYouClient, + odinClient, transitInstructions, uploadMetadata, payloads, @@ -268,7 +268,7 @@ export const uploadCommunityMessage = async ( }; uploadResult = await uploadFile( - dotYouClient, + odinClient, uploadInstructions, uploadMetadata, payloads, @@ -300,7 +300,7 @@ export const uploadCommunityMessage = async ( ) { message.fileMetadata.appData.content.deliveryStatus = CommunityDeliveryStatus.Failed; await updateCommunityMessage( - dotYouClient, + odinClient, community, message as HomebaseFile, 'keyHeader' in uploadResult ? uploadResult.keyHeader : undefined @@ -316,7 +316,7 @@ export const uploadCommunityMessage = async ( export const BACKEDUP_PAYLOAD_KEY = 'bckp_key'; export const updateCommunityMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, community: HomebaseFile, message: HomebaseFile, keyHeader?: KeyHeader, @@ -373,7 +373,7 @@ export const updateCommunityMessage = async ( const encryptedKeyHeader = message.sharedSecretEncryptedKeyHeader; const odinId = community.fileMetadata.senderOdinId; const instructionSet: UpdateInstructionSet = - odinId && odinId !== dotYouClient.getHostIdentity() + odinId && odinId !== odinClient.getHostIdentity() ? { transferIv: getRandom16ByteArray(), locale: 'peer', @@ -414,7 +414,7 @@ export const updateCommunityMessage = async ( } const updateResult = await patchFile( - dotYouClient, + odinClient, encryptedKeyHeader, instructionSet, uploadMetadata, @@ -423,14 +423,14 @@ export const updateCommunityMessage = async ( undefined, async () => { const existingChatMessage = await getCommunityMessage( - dotYouClient, + odinClient, community.fileMetadata.senderOdinId, communityId, message.fileMetadata.appData.uniqueId as string ); if (!existingChatMessage) return; message.fileMetadata.versionTag = existingChatMessage.fileMetadata.versionTag; - return await updateCommunityMessage(dotYouClient, community, message, keyHeader); + return await updateCommunityMessage(odinClient, community, message, keyHeader); } ); @@ -438,18 +438,18 @@ export const updateCommunityMessage = async ( }; export const hardDeleteCommunityMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string, message: HomebaseFile ) => { const targetDrive = getTargetDriveFromCommunityId(communityId); - if (odinId !== dotYouClient.getHostIdentity()) { + if (odinId !== odinClient.getHostIdentity()) { if (!message.fileMetadata.globalTransitId) { throw new Error('Global Transit Id is required for hard delete over peer'); } return await deleteFileOverPeer( - dotYouClient, + odinClient, targetDrive, message.fileMetadata.globalTransitId, [odinId], @@ -458,7 +458,7 @@ export const hardDeleteCommunityMessage = async ( } return await deleteFile( - dotYouClient, + odinClient, targetDrive, message.fileId, undefined, @@ -467,7 +467,7 @@ export const hardDeleteCommunityMessage = async ( }; export const getCommunityMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string, chatMessageId: string, @@ -476,9 +476,9 @@ export const getCommunityMessage = async ( const targetDrive = getTargetDriveFromCommunityId(communityId); const fileHeader = - odinId !== dotYouClient.getHostIdentity() + odinId !== odinClient.getHostIdentity() ? await getFileHeaderOverPeerByUniqueId( - dotYouClient, + odinClient, odinId, targetDrive, chatMessageId, @@ -487,18 +487,18 @@ export const getCommunityMessage = async ( systemFileType, } ) - : await getFileHeaderByUniqueId(dotYouClient, targetDrive, chatMessageId, { + : await getFileHeaderByUniqueId(odinClient, targetDrive, chatMessageId, { decrypt: true, systemFileType, }); if (!fileHeader) return null; - return await dsrToMessage(dotYouClient, fileHeader, odinId, targetDrive, true); + return await dsrToMessage(odinClient, fileHeader, odinId, targetDrive, true); }; export const getCommunityMessages = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string, groupIds: string[] | undefined, @@ -524,16 +524,16 @@ export const getCommunityMessages = async ( }; const response = - odinId && odinId !== dotYouClient.getHostIdentity() - ? await queryBatchOverPeer(dotYouClient, odinId, params, ro) - : await queryBatch(dotYouClient, params, ro); + odinId && odinId !== odinClient.getHostIdentity() + ? await queryBatchOverPeer(odinClient, odinId, params, ro) + : await queryBatch(odinClient, params, ro); return { ...response, searchResults: ((await Promise.all( response.searchResults .map( - async (result) => await dsrToMessage(dotYouClient, result, odinId, targetDrive, true) + async (result) => await dsrToMessage(odinClient, result, odinId, targetDrive, true) ) .filter(Boolean) )) as HomebaseFile[]) || [], @@ -541,7 +541,7 @@ export const getCommunityMessages = async ( }; export const dsrToMessage = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, odinId: string | undefined, targetDrive: TargetDrive, @@ -552,9 +552,9 @@ export const dsrToMessage = async ( // Only here for backwards compatibility; Can be removed once Community is pushed live for all on production const hasPartialOrFullContent = !!dsr.fileMetadata.appData.content?.length; if (hasPartialOrFullContent) - return odinId && dotYouClient.getHostIdentity() !== odinId + return odinId && odinClient.getHostIdentity() !== odinId ? await getContentFromHeaderOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, dsr, @@ -562,16 +562,16 @@ export const dsrToMessage = async ( dsr.fileSystemType ) : await getContentFromHeader( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader, dsr.fileSystemType ); else - return odinId && dotYouClient.getHostIdentity() !== odinId + return odinId && odinClient.getHostIdentity() !== odinId ? await getContentFromHeaderOrPayloadOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, dsr, @@ -579,7 +579,7 @@ export const dsrToMessage = async ( dsr.fileSystemType ) : await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader, diff --git a/packages/apps/community-app/src/providers/CommunityMetadataProvider.ts b/packages/apps/community-app/src/providers/CommunityMetadataProvider.ts index 0ee37b003..e9643672d 100644 --- a/packages/apps/community-app/src/providers/CommunityMetadataProvider.ts +++ b/packages/apps/community-app/src/providers/CommunityMetadataProvider.ts @@ -1,6 +1,6 @@ import { DEFAULT_PAYLOAD_KEY, - DotYouClient, + OdinClient, getContentFromHeaderOrPayload, getFileHeaderByUniqueId, HomebaseFile, @@ -50,7 +50,7 @@ export const LOCAL_COMMUNITY_APP_DRIVE: TargetDrive = { export const COMMUNITY_METADATA_FILE_TYPE = 7011; export const uploadCommunityMetadata = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, definition: NewHomebaseFile | HomebaseFile, onVersionConflicht?: () => Promise | void ): Promise => { @@ -115,7 +115,7 @@ export const uploadCommunityMetadata = async ( }; const result = await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, payloads, @@ -129,22 +129,22 @@ export const uploadCommunityMetadata = async ( }; export const getCommunityMetadata = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, communityId: string ): Promise | null> => { const header = await getFileHeaderByUniqueId( - dotYouClient, + odinClient, LOCAL_COMMUNITY_APP_DRIVE, communityId ); if (!header) return null; - return dsrToCommunityMetadata(dotYouClient, header, LOCAL_COMMUNITY_APP_DRIVE, true); + return dsrToCommunityMetadata(odinClient, header, LOCAL_COMMUNITY_APP_DRIVE, true); }; -export const getCommunitiesMetadata = async (dotYouClient: DotYouClient) => { +export const getCommunitiesMetadata = async (odinClient: OdinClient) => { const response = await queryBatch( - dotYouClient, + odinClient, { targetDrive: LOCAL_COMMUNITY_APP_DRIVE, fileType: [COMMUNITY_METADATA_FILE_TYPE], @@ -157,7 +157,7 @@ export const getCommunitiesMetadata = async (dotYouClient: DotYouClient) => { return await Promise.all( response.searchResults.map((dsr) => - dsrToCommunityMetadata(dotYouClient, dsr, LOCAL_COMMUNITY_APP_DRIVE, true) + dsrToCommunityMetadata(odinClient, dsr, LOCAL_COMMUNITY_APP_DRIVE, true) ) ); }; @@ -165,14 +165,14 @@ export const getCommunitiesMetadata = async (dotYouClient: DotYouClient) => { // Helpers export const dsrToCommunityMetadata = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { try { const definitionContent = await getContentFromHeaderOrPayload>( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader diff --git a/packages/apps/community-app/src/providers/CommunityProvider.ts b/packages/apps/community-app/src/providers/CommunityProvider.ts index 6b152df94..694a204f0 100644 --- a/packages/apps/community-app/src/providers/CommunityProvider.ts +++ b/packages/apps/community-app/src/providers/CommunityProvider.ts @@ -1,5 +1,5 @@ import { - DotYouClient, + OdinClient, EncryptedKeyHeader, FileQueryParams, GetBatchQueryResultOptions, @@ -65,7 +65,7 @@ export interface CommunityChannel { } export const getCommunityChannels = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string, pageSize = 100 @@ -84,15 +84,15 @@ export const getCommunityChannels = async ( }; const response = - odinId && dotYouClient.getHostIdentity() !== odinId - ? await queryBatchOverPeer(dotYouClient, odinId, params, ro) - : await queryBatch(dotYouClient, params, ro); + odinId && odinClient.getHostIdentity() !== odinId + ? await queryBatchOverPeer(odinClient, odinId, params, ro) + : await queryBatch(odinClient, params, ro); const serverChannels = (( await Promise.all( response.searchResults.map(async (dsr) => { return await dsrToCommunityChannel( - dotYouClient, + odinClient, dsr, odinId, targetDrive, @@ -106,7 +106,7 @@ export const getCommunityChannels = async ( }; export const getCommunityChannel = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, communityId: string, channelId: string @@ -115,17 +115,17 @@ export const getCommunityChannel = async ( const targetDrive = getTargetDriveFromCommunityId(communityId); - if (odinId && odinId !== dotYouClient.getHostIdentity()) { + if (odinId && odinId !== odinClient.getHostIdentity()) { throw new Error('Not implemented'); } - const dsr = await getFileHeaderByUniqueId(dotYouClient, targetDrive, channelId); + const dsr = await getFileHeaderByUniqueId(odinClient, targetDrive, channelId); if (!dsr) return undefined; - return dsrToCommunityChannel(dotYouClient, dsr, odinId, targetDrive, true); + return dsrToCommunityChannel(odinClient, dsr, odinId, targetDrive, true); }; export const saveCommunityChannel = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, community: HomebaseFile, channel: NewHomebaseFile | HomebaseFile ) => { @@ -159,7 +159,7 @@ export const saveCommunityChannel = async ( }; let uploadResult: UploadResult | TransitUploadResult | void; - if (community.fileMetadata.senderOdinId !== dotYouClient.getHostIdentity()) { + if (community.fileMetadata.senderOdinId !== odinClient.getHostIdentity()) { const transitInstructions: TransitInstructionSet = { remoteTargetDrive: targetDrive, transferIv: getRandom16ByteArray(), @@ -167,7 +167,7 @@ export const saveCommunityChannel = async ( overwriteGlobalTransitFileId: channel.fileMetadata.globalTransitId, }; uploadResult = await uploadFileOverPeer( - dotYouClient, + odinClient, transitInstructions, uploadMetadata, undefined, @@ -176,7 +176,7 @@ export const saveCommunityChannel = async ( ); } else { uploadResult = await uploadFile( - dotYouClient, + odinClient, uploadInstructions, uploadMetadata, undefined, @@ -193,27 +193,27 @@ export const saveCommunityChannel = async ( // Helpers export const dsrToCommunityChannel = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, odinId: string | undefined, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | undefined> => { const definitionContent = - odinId && dotYouClient.getHostIdentity() !== odinId + odinId && odinClient.getHostIdentity() !== odinId ? await getContentFromHeaderOrPayloadOverPeer( - dotYouClient, - odinId, - targetDrive, - dsr, - includeMetadataHeader - ) + odinClient, + odinId, + targetDrive, + dsr, + includeMetadataHeader + ) : await getContentFromHeaderOrPayload( - dotYouClient, - targetDrive, - dsr, - includeMetadataHeader - ); + odinClient, + targetDrive, + dsr, + includeMetadataHeader + ); if (!definitionContent) return undefined; const file: HomebaseFile = { diff --git a/packages/apps/community-app/src/providers/CommunityStatusProvider.ts b/packages/apps/community-app/src/providers/CommunityStatusProvider.ts index 3d84b53ba..2a53be52e 100644 --- a/packages/apps/community-app/src/providers/CommunityStatusProvider.ts +++ b/packages/apps/community-app/src/providers/CommunityStatusProvider.ts @@ -1,5 +1,5 @@ import { - DotYouClient, + OdinClient, getFileHeaderBytesByUniqueId, HomebaseFile, NewHomebaseFile, @@ -30,14 +30,14 @@ export interface CommunityStatus { export const COMMUNITY_STATUS_FILE_TYPE = 7030; export const setStatus = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, community: HomebaseFile, status: CommunityStatus ) => { const currentStatus = await internalGetStatus( - dotYouClient, + odinClient, community, - dotYouClient.getLoggedInIdentity() || '' + odinClient.getLoggedInIdentity() || '' ); const newStatus: NewHomebaseFile = { @@ -56,18 +56,18 @@ export const setStatus = async ( ...currentStatus?.serverMetadata, }, }; - return await internalSaveStatusFile(dotYouClient, community, newStatus); + return await internalSaveStatusFile(odinClient, community, newStatus); }; const internalSaveStatusFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, community: HomebaseFile, status: HomebaseFile | NewHomebaseFile ) => { const targetDrive = getTargetDriveFromCommunityId( community.fileMetadata.appData.uniqueId as string ); - const uniqueId = toGuidId(dotYouClient.getLoggedInIdentity() || ''); + const uniqueId = toGuidId(odinClient.getLoggedInIdentity() || ''); const metedata: UploadFileMetadata = { versionTag: status?.fileMetadata.versionTag, allowDistribution: true, @@ -80,11 +80,11 @@ const internalSaveStatusFile = async ( isEncrypted: true, accessControlList: status.serverMetadata?.accessControlList || community.fileMetadata.appData.content.acl || { - requiredSecurityGroup: SecurityGroupType.AutoConnected, - }, + requiredSecurityGroup: SecurityGroupType.AutoConnected, + }, }; - if (dotYouClient.getHostIdentity() !== community.fileMetadata.senderOdinId) { + if (odinClient.getHostIdentity() !== community.fileMetadata.senderOdinId) { const instructions: TransitInstructionSet = { remoteTargetDrive: targetDrive, overwriteGlobalTransitFileId: status.fileMetadata.globalTransitId, @@ -93,7 +93,7 @@ const internalSaveStatusFile = async ( }; return await uploadFileOverPeer( - dotYouClient, + odinClient, instructions, metedata, undefined, @@ -108,12 +108,12 @@ const internalSaveStatusFile = async ( }, }; - return await uploadFile(dotYouClient, instructions, metedata, undefined, undefined, true); + return await uploadFile(odinClient, instructions, metedata, undefined, undefined, true); } }; export const internalGetStatus = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, community: HomebaseFile, odinId: string ): Promise | null> => { @@ -122,9 +122,9 @@ export const internalGetStatus = async ( community.fileMetadata.appData.uniqueId as string ); - if (dotYouClient.getHostIdentity() !== community.fileMetadata.senderOdinId) { + if (odinClient.getHostIdentity() !== community.fileMetadata.senderOdinId) { const header = await getFileHeaderBytesOverPeerByUniqueId( - dotYouClient, + odinClient, community.fileMetadata.senderOdinId, targetDrive, uniqueId @@ -141,7 +141,7 @@ export const internalGetStatus = async ( }, }; } else { - const header = await getFileHeaderBytesByUniqueId(dotYouClient, targetDrive, uniqueId); + const header = await getFileHeaderBytesByUniqueId(odinClient, targetDrive, uniqueId); if (!header) return null; return { @@ -158,11 +158,11 @@ export const internalGetStatus = async ( }; export const getStatus = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, community: HomebaseFile, odinId: string ): Promise => { return ( - (await internalGetStatus(dotYouClient, community, odinId))?.fileMetadata.appData.content || null + (await internalGetStatus(odinClient, community, odinId))?.fileMetadata.appData.content || null ); }; diff --git a/packages/apps/community-app/src/providers/PeerNotificationSubscriber.ts b/packages/apps/community-app/src/providers/PeerNotificationSubscriber.ts index 32c8151d0..de07b84cc 100644 --- a/packages/apps/community-app/src/providers/PeerNotificationSubscriber.ts +++ b/packages/apps/community-app/src/providers/PeerNotificationSubscriber.ts @@ -1,11 +1,11 @@ -import { DotYouClient } from '@homebase-id/js-lib/core'; +import { OdinClient } from '@homebase-id/js-lib/core'; export const SubscribeToPeerNotifications = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, peerOdinId: string, peerSubscriptionId: string ): Promise => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); ///api/apps/v1/notify/peer/subscriptions/push-notification return await axiosClient diff --git a/packages/apps/community-app/src/templates/Auth/Auth.tsx b/packages/apps/community-app/src/templates/Auth/Auth.tsx index aad84f48d..3821940ca 100644 --- a/packages/apps/community-app/src/templates/Auth/Auth.tsx +++ b/packages/apps/community-app/src/templates/Auth/Auth.tsx @@ -5,7 +5,7 @@ import { DialogWrapper, Alert, t, - useDotYouClientContext, + useOdinClientContext, OWNER_APPS_ROOT, } from '@homebase-id/common-app'; import { AutoAuthorize, LoginBox } from '../../components/Auth/LoginBox/LoginBox'; @@ -17,7 +17,7 @@ const Auth = () => { const [searchParams] = useSearchParams(); const isError = searchParams.get('state') === 'finalize-error'; - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); useEffect(() => { if (isAuthenticated) window.location.href = '/'; diff --git a/packages/apps/community-app/src/templates/Community/CommunityDirectDetail.tsx b/packages/apps/community-app/src/templates/Community/CommunityDirectDetail.tsx index fb5bb061e..8d82af545 100644 --- a/packages/apps/community-app/src/templates/Community/CommunityDirectDetail.tsx +++ b/packages/apps/community-app/src/templates/Community/CommunityDirectDetail.tsx @@ -9,14 +9,14 @@ import { useParams } from 'react-router-dom'; import { useState, useEffect } from 'react'; import { ChatDetail } from '@homebase-id/chat-app/src/templates/Chat/ChatDetail'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { getNewXorId, isAGuidId } from '@homebase-id/js-lib/helpers'; import { ConversationWithYourselfId } from '@homebase-id/chat-app/src/providers/ConversationProvider'; import { useConversation } from '@homebase-id/chat-app/src/hooks/chat/useConversation'; import { CommunityDirectComposer } from '../../components/Community/Message/composer/CommunityDirectComposer'; export const CommunityDirectDetail = () => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { odinKey, communityKey, dmKey } = useParams(); const communityId = communityKey; diff --git a/packages/apps/community-app/src/templates/Community/CommunityNav.tsx b/packages/apps/community-app/src/templates/Community/CommunityNav.tsx index 7943bea77..3353f0948 100644 --- a/packages/apps/community-app/src/templates/Community/CommunityNav.tsx +++ b/packages/apps/community-app/src/templates/Community/CommunityNav.tsx @@ -9,7 +9,7 @@ import { ConnectionName, ErrorBoundary, t, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { getNewXorId, isTouchDevice, tryJsonParse } from '@homebase-id/js-lib/helpers'; @@ -298,7 +298,7 @@ const ChannelItem = memo( const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); const { odinKey, communityKey } = useParams(); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const channelId = channel.fileMetadata.appData.uniqueId; const href = `${COMMUNITY_ROOT_PATH}/${odinKey}/${communityKey}/${channelId}`; const isActive = !!useMatch({ path: href, end: false }); @@ -461,8 +461,8 @@ const DirectMessageItem = memo( if (!recipient) return null; const { odinKey, communityKey } = useParams(); - const dotYouClient = useDotYouClientContext(); - const identity = dotYouClient.getHostIdentity(); + const odinClient = useOdinClientContext(); + const identity = odinClient.getHostIdentity(); const href = `${COMMUNITY_ROOT_PATH}/${odinKey}/${communityKey}/direct/${recipient}`; const isActive = !!useMatch({ path: href }); @@ -498,7 +498,7 @@ const DirectMessageItem = memo( }, [messages, conversationMetadata]); useEffect(() => setUnreadCount(recipient, unreadCount || 0), [unreadCount]); - const isYou = recipient === dotYouClient.getHostIdentity(); + const isYou = recipient === odinClient.getHostIdentity(); return ( { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { data: circles } = useCircles(true).fetch; const [selectedCircle, setSelectedCircle] = useState<{ diff --git a/packages/apps/feed-app/src/app/App.tsx b/packages/apps/feed-app/src/app/App.tsx index 07d8a4815..eb27e3b62 100644 --- a/packages/apps/feed-app/src/app/App.tsx +++ b/packages/apps/feed-app/src/app/App.tsx @@ -36,12 +36,12 @@ const AUTH_PATH = FEED_ROOT_PATH + '/auth'; const AUTH_FINALIZE_PATH = FEED_ROOT_PATH + '/auth/finalize'; import { - DotYouClientProvider, + OdinClientProvider, ErrorBoundary, FEED_ROOT_PATH, NotFound, OdinQueryClient, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { useValidateAuthorization } from '../hooks/auth/useAuth'; @@ -119,7 +119,7 @@ function App() { - + } @@ -127,7 +127,7 @@ function App() { v7_startTransition: true, }} /> - + ); @@ -137,7 +137,7 @@ const RootRoute = ({ children }: { children: ReactNode }) => { useValidateAuthorization(); const location = useLocation(); - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); if (!isAuthenticated) { if (location.pathname === AUTH_PATH || location.pathname === AUTH_FINALIZE_PATH) diff --git a/packages/apps/feed-app/src/components/Auth/LoginBox/LoginBox.tsx b/packages/apps/feed-app/src/components/Auth/LoginBox/LoginBox.tsx index 3ca3d63c7..5a2ca5ab0 100644 --- a/packages/apps/feed-app/src/components/Auth/LoginBox/LoginBox.tsx +++ b/packages/apps/feed-app/src/components/Auth/LoginBox/LoginBox.tsx @@ -11,7 +11,7 @@ import { Helmet } from 'react-helmet-async'; import { useQuery } from '@tanstack/react-query'; import { useEffect } from 'react'; import { MinimalLayout } from '../../ui/Layout/Layout'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; const AUTHORIZE_PATH = '/api/owner/v1/youauth/authorize'; @@ -34,7 +34,7 @@ export const LoginBox = () => { const isAutoAuthorize = window.location.pathname.startsWith(OWNER_APPS_ROOT); - const host = new DotYouClient({ + const host = new OdinClient({ api: ApiType.Guest, hostIdentity: window.location.host, }).getRoot(); diff --git a/packages/apps/feed-app/src/components/Auth/LoginNav/LoginNav.tsx b/packages/apps/feed-app/src/components/Auth/LoginNav/LoginNav.tsx index d86ae5a3a..5f56b85ee 100644 --- a/packages/apps/feed-app/src/components/Auth/LoginNav/LoginNav.tsx +++ b/packages/apps/feed-app/src/components/Auth/LoginNav/LoginNav.tsx @@ -5,18 +5,18 @@ import { useOutsideTrigger, ConnectionImage, t, - useDotYouClientContext, + useOdinClientContext, logoutOwnerAndAllApps, } from '@homebase-id/common-app'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { Times, Person } from '@homebase-id/common-app/icons'; const LoginNav = () => { const [isOpen, setIsOpen] = useState(false); - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); - const identity = dotYouClient.getLoggedInIdentity(); + const odinClient = useOdinClientContext(); + const isAuthenticated = odinClient.isAuthenticated(); + const identity = odinClient.getLoggedInIdentity(); const wrapperRef = useRef(null); useOutsideTrigger(wrapperRef, () => setIsOpen(false)); @@ -56,7 +56,7 @@ const LoginNav = () => { { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); - const isLocal = identityKey === dotYouClient.getHostIdentity(); + const isLocal = identityKey === odinClient.getHostIdentity(); const { data: channel } = useChannel({ odinId: !isLocal ? identityKey : undefined, diff --git a/packages/apps/feed-app/src/components/SocialFeed/PostTeaserCard.tsx b/packages/apps/feed-app/src/components/SocialFeed/PostTeaserCard.tsx index ea1028d28..14613c531 100644 --- a/packages/apps/feed-app/src/components/SocialFeed/PostTeaserCard.tsx +++ b/packages/apps/feed-app/src/components/SocialFeed/PostTeaserCard.tsx @@ -13,7 +13,7 @@ import { LoadingBlock, t, ToGroupBlock, - useDotYouClientContext, + useOdinClientContext, PostSource, } from '@homebase-id/common-app'; import { useNavigate } from 'react-router-dom'; @@ -30,9 +30,9 @@ interface PostTeaserCardProps { } const PostTeaserCard: FC = ({ className, odinId, postFile, showSummary }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const post = postFile.fileMetadata.appData.content; - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const isExternal = odinId && odinId !== identity; const navigate = useNavigate(); diff --git a/packages/apps/feed-app/src/components/SocialFeed/Sidebars/ChannelsOverview/ChannelsOverview.tsx b/packages/apps/feed-app/src/components/SocialFeed/Sidebars/ChannelsOverview/ChannelsOverview.tsx index b05c0c747..b27071a38 100644 --- a/packages/apps/feed-app/src/components/SocialFeed/Sidebars/ChannelsOverview/ChannelsOverview.tsx +++ b/packages/apps/feed-app/src/components/SocialFeed/Sidebars/ChannelsOverview/ChannelsOverview.tsx @@ -5,14 +5,14 @@ import { HybridLink, LoadingBlock, FEED_ROOT_PATH, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { Persons, Quote } from '@homebase-id/common-app/icons'; import React from 'react'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; const ChannelsOverview = ({ className }: { className?: string }) => { - const identity = useDotYouClientContext().getHostIdentity(); + const identity = useOdinClientContext().getHostIdentity(); const { data: channels, isLoading } = useChannels({ isAuthenticated: true, isOwner: true }); const { data: collaborativeChannels } = useCollaborativeChannels().fetch; @@ -32,7 +32,7 @@ const ChannelsOverview = ({ className }: { className?: string }) => { {channels?.map((chnl) => ( @@ -53,7 +53,7 @@ const ChannelsOverview = ({ className }: { className?: string }) => { {collaborative.channels.map((chnl) => ( diff --git a/packages/apps/feed-app/src/components/SocialFeed/Sidebars/IdentityLink/IdentityLink.tsx b/packages/apps/feed-app/src/components/SocialFeed/Sidebars/IdentityLink/IdentityLink.tsx index dfcfef2b3..b51d377b5 100644 --- a/packages/apps/feed-app/src/components/SocialFeed/Sidebars/IdentityLink/IdentityLink.tsx +++ b/packages/apps/feed-app/src/components/SocialFeed/Sidebars/IdentityLink/IdentityLink.tsx @@ -6,16 +6,16 @@ import { Image, HOME_ROOT_PATH, ThemeLinksSettings, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { BuiltInProfiles, GetTargetDriveFromProfileId } from '@homebase-id/js-lib/profile'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; const IdentityLink = ({ className }: { className?: string }) => { const { data } = useSiteData(); - const odinId = useDotYouClientContext().getHostIdentity(); + const odinId = useOdinClientContext().getHostIdentity(); - const host = new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot(); + const host = new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot(); return (

diff --git a/packages/apps/feed-app/src/components/SocialFeed/UnreachableIdentity.tsx b/packages/apps/feed-app/src/components/SocialFeed/UnreachableIdentity.tsx index 08ba0e499..da7f09962 100644 --- a/packages/apps/feed-app/src/components/SocialFeed/UnreachableIdentity.tsx +++ b/packages/apps/feed-app/src/components/SocialFeed/UnreachableIdentity.tsx @@ -1,11 +1,6 @@ -import { - ActionGroup, - t, - useDotYouClientContext, - useManageSocialFeed, -} from '@homebase-id/common-app'; +import { ActionGroup, t, useOdinClientContext, useManageSocialFeed } from '@homebase-id/common-app'; import { Times, UserX } from '@homebase-id/common-app/icons'; -import { ApiType, DotYouClient, HomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile } from '@homebase-id/js-lib/core'; import { PostContent } from '@homebase-id/js-lib/public'; interface UnreachableIdentityProps { @@ -15,7 +10,7 @@ interface UnreachableIdentityProps { } export const UnreachableIdentity = ({ className, postFile, odinId }: UnreachableIdentityProps) => { - const host = useDotYouClientContext().getRoot; + const host = useOdinClientContext().getRoot; const { removeFromFeed: { mutateAsync: removeFromMyFeed }, @@ -30,7 +25,7 @@ export const UnreachableIdentity = ({ className, postFile, odinId }: Unreachable {t('This content is no longer accessible')}. { - const { hasSharedSecret } = useDotYouClient(); + const { hasSharedSecret } = useOdinClient(); const { data: hasValidToken, isFetched } = useVerifyToken(); useEffect(() => { @@ -45,8 +45,8 @@ export const useValidateAuthorization = () => { }; export const useAuth = () => { - const { getDotYouClient } = useDotYouClient(); - const preauth = async (): Promise => await preauthApps(getDotYouClient()); + const { getOdinClient } = useOdinClient(); + const preauth = async (): Promise => await preauthApps(getOdinClient()); return { preauth, diff --git a/packages/apps/feed-app/src/hooks/auth/useVerifyToken.ts b/packages/apps/feed-app/src/hooks/auth/useVerifyToken.ts index de2ecfcf9..26034959f 100644 --- a/packages/apps/feed-app/src/hooks/auth/useVerifyToken.ts +++ b/packages/apps/feed-app/src/hooks/auth/useVerifyToken.ts @@ -1,16 +1,16 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { hasValidToken as hasValidYouAuthToken } from '@homebase-id/js-lib/auth'; const MINUTE_IN_MS = 60000; export const useVerifyToken = () => { - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isAuthenticated = odinClient.isAuthenticated(); const fetchData = async () => { // When hasValidYouAuthToken returns undefined, it means that it couldn't be checked.. so we assume it's valid, to avoid unnecessary logouts - return (await hasValidYouAuthToken(dotYouClient)) ?? true; + return (await hasValidYouAuthToken(odinClient)) ?? true; }; return useQuery({ queryKey: ['verify-feed-token'], diff --git a/packages/apps/feed-app/src/hooks/useLiveFeedProcessor.ts b/packages/apps/feed-app/src/hooks/useLiveFeedProcessor.ts index 7b93dce07..a70d82717 100644 --- a/packages/apps/feed-app/src/hooks/useLiveFeedProcessor.ts +++ b/packages/apps/feed-app/src/hooks/useLiveFeedProcessor.ts @@ -3,7 +3,7 @@ import { QueryClient, useQuery, useQueryClient } from '@tanstack/react-query'; import { DeletedHomebaseFile, - DotYouClient, + OdinClient, FileQueryParams, HomebaseFile, queryBatch, @@ -23,7 +23,7 @@ import { invalidateComments, invalidateEmojiSummary, invalidateSocialFeeds, - useDotYouClientContext, + useOdinClientContext, useWebsocketSubscriber, } from '@homebase-id/common-app'; import { BlogConfig, dsrToPostFile } from '@homebase-id/js-lib/public'; @@ -50,31 +50,31 @@ export const useLiveFeedProcessor = () => { const useFeedInboxProcessor = (isEnabled?: boolean) => { const { data: chnlDrives, isFetchedAfterMount: channelsFetched } = useChannelDrives(!!isEnabled); const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchData = async () => { const lastProcessedTime = queryClient.getQueryState(['process-feed-inbox'])?.dataUpdatedAt; const lastProcessedWithBuffer = lastProcessedTime && lastProcessedTime - MINUTE_IN_MS * 2; - await processInbox(dotYouClient, BlogConfig.FeedDrive, 100); + await processInbox(odinClient, BlogConfig.FeedDrive, 100); if (lastProcessedWithBuffer) { - const updatedPosts = await findChangesSinceTimestamp(dotYouClient, lastProcessedWithBuffer, { + const updatedPosts = await findChangesSinceTimestamp(odinClient, lastProcessedWithBuffer, { targetDrive: BlogConfig.FeedDrive, fileType: [BlogConfig.PostFileType], }); isDebug && console.debug('[FeedInboxProcessor] new posts', updatedPosts.length); - await processPostsBatch(dotYouClient, queryClient, BlogConfig.FeedDrive, updatedPosts); + await processPostsBatch(odinClient, queryClient, BlogConfig.FeedDrive, updatedPosts); } if (chnlDrives) await Promise.all( chnlDrives.map(async (chnlDrive) => { - await processInbox(dotYouClient, chnlDrive.targetDriveInfo, 100); + await processInbox(odinClient, chnlDrive.targetDriveInfo, 100); if (lastProcessedWithBuffer) { const updatedPosts = await findChangesSinceTimestamp( - dotYouClient, + odinClient, lastProcessedWithBuffer, { targetDrive: chnlDrive.targetDriveInfo, @@ -84,7 +84,7 @@ const useFeedInboxProcessor = (isEnabled?: boolean) => { isDebug && console.debug('[FeedInboxProcessor] new posts for channel', updatedPosts.length); await processPostsBatch( - dotYouClient, + odinClient, queryClient, chnlDrive.targetDriveInfo, updatedPosts @@ -110,12 +110,12 @@ const useFeedInboxProcessor = (isEnabled?: boolean) => { }; const useFeedWebSocket = (isEnabled: boolean) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const websocketDrives = useWebsocketDrives(); const handler = useCallback( - async (_: DotYouClient, notification: TypedConnectionNotification) => { + async (_: OdinClient, notification: TypedConnectionNotification) => { if ( (notification.notificationType === 'fileAdded' || notification.notificationType === 'fileModified' || @@ -125,7 +125,7 @@ const useFeedWebSocket = (isEnabled: boolean) => { notification.header.fileSystemType.toLowerCase() === 'standard' ) { await internalProcessNewPost( - dotYouClient, + odinClient, queryClient, BlogConfig.FeedDrive, notification.header @@ -148,21 +148,21 @@ const useFeedWebSocket = (isEnabled: boolean) => { const BATCH_SIZE = 2000; const findChangesSinceTimestamp = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, timeStamp: number, params: FileQueryParams ) => { const modifiedCursor = getQueryModifiedCursorFromTime(timeStamp); // Friday, 31 May 2024 09:38:54.678 const batchCursor = getQueryBatchCursorFromTime(new Date().getTime(), timeStamp); - const newFiles = await queryBatch(dotYouClient, params, { + const newFiles = await queryBatch(odinClient, params, { maxRecords: BATCH_SIZE, cursorState: batchCursor, includeMetadataHeader: true, includeTransferHistory: false, }); - const modifiedFiles = await queryModified(dotYouClient, params, { + const modifiedFiles = await queryModified(odinClient, params, { maxRecords: BATCH_SIZE, cursor: modifiedCursor + '', excludePreviewThumbnail: false, @@ -174,20 +174,20 @@ const findChangesSinceTimestamp = async ( }; const processPostsBatch = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, targetDrive: TargetDrive, posts: (HomebaseFile | DeletedHomebaseFile)[] ) => { await Promise.all( posts.map(async (postDsr) => - internalProcessNewPost(dotYouClient, queryClient, targetDrive, postDsr) + internalProcessNewPost(odinClient, queryClient, targetDrive, postDsr) ) ); }; const internalProcessNewPost = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, targetDrive: TargetDrive, dsr: HomebaseFile | DeletedHomebaseFile @@ -197,7 +197,7 @@ const internalProcessNewPost = async ( return; } - const post = await dsrToPostFile(dotYouClient, dsr, targetDrive, true); + const post = await dsrToPostFile(odinClient, dsr, targetDrive, true); if (post) insertNewPostIntoFeed(queryClient, post); else invalidateSocialFeeds(queryClient); diff --git a/packages/apps/feed-app/src/templates/Auth/Auth.tsx b/packages/apps/feed-app/src/templates/Auth/Auth.tsx index f07ec92b0..ba0eece75 100644 --- a/packages/apps/feed-app/src/templates/Auth/Auth.tsx +++ b/packages/apps/feed-app/src/templates/Auth/Auth.tsx @@ -5,7 +5,7 @@ import { DialogWrapper, Alert, t, - useDotYouClientContext, + useOdinClientContext, OWNER_APPS_ROOT, } from '@homebase-id/common-app'; import { AutoAuthorize, LoginBox } from '../../components/Auth/LoginBox/LoginBox'; @@ -17,7 +17,7 @@ const Auth = () => { const [searchParams] = useSearchParams(); const isError = searchParams.get('state') === 'finalize-error'; - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); useEffect(() => { if (isAuthenticated) window.location.href = '/'; }, [isAuthenticated]); diff --git a/packages/apps/feed-app/src/templates/SocialFeed/NavigateToReferencedPost.tsx b/packages/apps/feed-app/src/templates/SocialFeed/NavigateToReferencedPost.tsx index 5ea8aae50..33b97aac3 100644 --- a/packages/apps/feed-app/src/templates/SocialFeed/NavigateToReferencedPost.tsx +++ b/packages/apps/feed-app/src/templates/SocialFeed/NavigateToReferencedPost.tsx @@ -2,7 +2,7 @@ import { getPostQueryOptions, NotFound, useChannels, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { Loader } from '@homebase-id/common-app/icons'; import { HomebaseFile } from '@homebase-id/js-lib/core'; @@ -14,7 +14,7 @@ import { useNavigate, useParams } from 'react-router-dom'; export const NavigateToReferencedPost = () => { const { postKey } = useParams(); const navigate = useNavigate(); - const identity = useDotYouClientContext().getHostIdentity(); + const identity = useOdinClientContext().getHostIdentity(); const post = useReferencedPost(postKey); useEffect(() => { @@ -43,7 +43,7 @@ export const NavigateToReferencedPost = () => { const useReferencedPost = (postKey: string | undefined) => { const [post, setPost] = useState | null>(null); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const { data: allChannels } = useChannels({ isOwner: true, isAuthenticated: true }); @@ -52,7 +52,7 @@ const useReferencedPost = (postKey: string | undefined) => { allChannels?.forEach(async (channel) => { const post = await queryClient.fetchQuery( - getPostQueryOptions(dotYouClient, queryClient, true, undefined, channel, postKey) + getPostQueryOptions(odinClient, queryClient, true, undefined, channel, postKey) ); if (post) { setPost(post); diff --git a/packages/apps/mail-app/src/app/App.tsx b/packages/apps/mail-app/src/app/App.tsx index a85538425..8a6b9bb88 100644 --- a/packages/apps/mail-app/src/app/App.tsx +++ b/packages/apps/mail-app/src/app/App.tsx @@ -45,9 +45,9 @@ import { ErrorBoundary, NotFound, OdinQueryClient, - DotYouClientProvider, + OdinClientProvider, MAIL_ROOT_PATH, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { useValidateAuthorization } from '../hooks/auth/useAuth'; @@ -121,7 +121,7 @@ function App() { - + } @@ -129,7 +129,7 @@ function App() { v7_startTransition: true, }} /> - + ); @@ -139,7 +139,7 @@ const RootRoute = ({ children }: { children: ReactNode }) => { useValidateAuthorization(); const location = useLocation(); - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); if (!isAuthenticated) { if (location.pathname === AUTH_PATH || location.pathname === AUTH_FINALIZE_PATH) diff --git a/packages/apps/mail-app/src/components/Composer/MailComposer.tsx b/packages/apps/mail-app/src/components/Composer/MailComposer.tsx index 802d3091b..93c449f3f 100644 --- a/packages/apps/mail-app/src/components/Composer/MailComposer.tsx +++ b/packages/apps/mail-app/src/components/Composer/MailComposer.tsx @@ -33,7 +33,7 @@ import { MailDrive, } from '../../providers/MailProvider'; import { RecipientInput } from './RecipientInput'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { RichTextEditor } from '@homebase-id/rich-text-editor'; import { useBlocker } from 'react-router-dom'; import { MediaOptions } from '@homebase-id/rich-text-editor/src/editor/ImagePlugin/ImagePlugin'; @@ -67,7 +67,7 @@ export const MailComposer = ({ const { data: mailSettings, isFetched: mailSettingsFetched } = useMailSettings().get; const [expanded, setExpanded] = useState(!forwardedMailThread || !currentRecipients?.length); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const [autosavedDsr, setAutosavedDsr] = useState< NewHomebaseFile | HomebaseFile >( diff --git a/packages/apps/mail-app/src/components/Composer/RecipientInput.tsx b/packages/apps/mail-app/src/components/Composer/RecipientInput.tsx index 43eaf50d8..1b838b2f9 100644 --- a/packages/apps/mail-app/src/components/Composer/RecipientInput.tsx +++ b/packages/apps/mail-app/src/components/Composer/RecipientInput.tsx @@ -1,6 +1,6 @@ import { useState, useCallback } from 'react'; -import { useAllContacts, ActionButton, useDotYouClientContext } from '@homebase-id/common-app'; +import { useAllContacts, ActionButton, useOdinClientContext } from '@homebase-id/common-app'; import { Times } from '@homebase-id/common-app/icons'; import { ContactFile } from '@homebase-id/js-lib/network'; @@ -19,7 +19,7 @@ export const RecipientInput = ({ const [selectedIndex, setSelectedIndex] = useState(0); const [inputStateIndex, setInputStateIndex] = useState(0); const [isFocused, setIsFocused] = useState(false); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const ownContactFile: ContactFile = { odinId: loggedOnIdentity, diff --git a/packages/apps/mail-app/src/components/Thread/MailAttachmentPreview.tsx b/packages/apps/mail-app/src/components/Thread/MailAttachmentPreview.tsx index 417a5fe88..8fcb07f24 100644 --- a/packages/apps/mail-app/src/components/Thread/MailAttachmentPreview.tsx +++ b/packages/apps/mail-app/src/components/Thread/MailAttachmentPreview.tsx @@ -7,7 +7,7 @@ import { ActionButton, bytesToSize, ExtensionThumbnail, - useDotYouClientContext, + useOdinClientContext, useFile, } from '@homebase-id/common-app'; import { OdinImage } from '@homebase-id/ui-lib'; @@ -21,7 +21,7 @@ export const MailAttachmentPreview = ({ messageId: string; payloadKey: string; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const { data: mailMessage, isLoading: mailMessageLoading } = useMailConversation({ messageFileId: messageId, }).getMessage; @@ -157,7 +157,7 @@ export const MailAttachmentPreview = ({ <> {payloadDescriptor.contentType.startsWith('image/') ? ( { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const lastConversation = mailThread[0]; const lastReceivedConversation = mailThread.find( diff --git a/packages/apps/mail-app/src/components/Threads/MailThreads.tsx b/packages/apps/mail-app/src/components/Threads/MailThreads.tsx index a945b57f7..cd6a7cde5 100644 --- a/packages/apps/mail-app/src/components/Threads/MailThreads.tsx +++ b/packages/apps/mail-app/src/components/Threads/MailThreads.tsx @@ -13,7 +13,7 @@ import { Archive, Download, Trash } from '@homebase-id/common-app/icons'; import { MailConversation } from '../../providers/MailProvider'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { useWindowVirtualizer } from '@tanstack/react-virtual'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { useMailThread } from '../../hooks/mail/useMailThread'; import { MailThreadsFilter, useFilteredMailThreads } from '../../hooks/mail/useFilteredMailThreads'; import { useMailConversation } from '../../hooks/mail/useMailConversation'; @@ -28,7 +28,7 @@ export const MailThreads = ({ }) => { const [selection, setSelection] = useState[][]>([]); const [isAllSelected, setIsAllSelected] = useState(false); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); // Don't auto load next pages when there's a query const autoPage = !query; @@ -218,7 +218,7 @@ const MailConversationsHeader = ({ clearSelection: () => void; filter?: MailThreadsFilter; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const hasASelection = selection.length > 0; const { mutate: removeThread, diff --git a/packages/apps/mail-app/src/components/Threads/RecipientsList.tsx b/packages/apps/mail-app/src/components/Threads/RecipientsList.tsx index b4a798189..b1068e934 100644 --- a/packages/apps/mail-app/src/components/Threads/RecipientsList.tsx +++ b/packages/apps/mail-app/src/components/Threads/RecipientsList.tsx @@ -1,7 +1,7 @@ import { t, ConnectionName } from '@homebase-id/common-app'; import { MailConversation, getAllRecipients } from '../../providers/MailProvider'; import { HomebaseFile } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import React from 'react'; export const RecipientsList = ({ @@ -9,7 +9,7 @@ export const RecipientsList = ({ }: { mailThread: HomebaseFile[]; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const allRecipients = getAllRecipients(mailThread[0]); const anyReply = mailThread.some( @@ -56,7 +56,7 @@ export const RecipientsList = ({ }; const InnerRecipients = ({ recipients }: { recipients: string[] }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); return recipients.map((recipient, index) => ( diff --git a/packages/apps/mail-app/src/hooks/auth/useAuth.ts b/packages/apps/mail-app/src/hooks/auth/useAuth.ts index 1b334e7f6..7c804bf5c 100644 --- a/packages/apps/mail-app/src/hooks/auth/useAuth.ts +++ b/packages/apps/mail-app/src/hooks/auth/useAuth.ts @@ -26,7 +26,7 @@ import { MAIL_APP_ID, MAIL_ROOT_PATH, OWNER_APPS_ROOT, - useDotYouClient, + useOdinClient, } from '@homebase-id/common-app'; import { useQueryClient } from '@tanstack/react-query'; @@ -36,7 +36,7 @@ const MailDrive: TargetDrive = { }; export const useValidateAuthorization = () => { - const { hasSharedSecret } = useDotYouClient(); + const { hasSharedSecret } = useOdinClient(); const { data: hasValidToken, isFetched } = useVerifyToken(); useEffect(() => { @@ -50,8 +50,8 @@ export const useValidateAuthorization = () => { }; export const useAuth = () => { - const { getDotYouClient } = useDotYouClient(); - const preauth = async (): Promise => await preauthApps(getDotYouClient()); + const { getOdinClient } = useOdinClient(); + const preauth = async (): Promise => await preauthApps(getOdinClient()); return { preauth, diff --git a/packages/apps/mail-app/src/hooks/auth/useVerifyToken.ts b/packages/apps/mail-app/src/hooks/auth/useVerifyToken.ts index dca521a9b..161abdef7 100644 --- a/packages/apps/mail-app/src/hooks/auth/useVerifyToken.ts +++ b/packages/apps/mail-app/src/hooks/auth/useVerifyToken.ts @@ -1,16 +1,16 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { hasValidToken as hasValidYouAuthToken } from '@homebase-id/js-lib/auth'; const MINUTE_IN_MS = 60000; export const useVerifyToken = () => { - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isAuthenticated = odinClient.isAuthenticated(); const fetchData = async () => { // When hasValidYouAuthToken returns undefined, it means that it couldn't be checked.. so we assume it's valid, to avoid unnecessary logouts - return (await hasValidYouAuthToken(dotYouClient)) ?? true; + return (await hasValidYouAuthToken(odinClient)) ?? true; }; return useQuery({ queryKey: ['verify-mail-token'], diff --git a/packages/apps/mail-app/src/hooks/mail/useFilteredMailThreads.ts b/packages/apps/mail-app/src/hooks/mail/useFilteredMailThreads.ts index 664f9d9a6..81ef6168f 100644 --- a/packages/apps/mail-app/src/hooks/mail/useFilteredMailThreads.ts +++ b/packages/apps/mail-app/src/hooks/mail/useFilteredMailThreads.ts @@ -8,7 +8,7 @@ import { REMOVE_ARCHIVAL_STATUS, MAIL_DRAFT_CONVERSATION_FILE_TYPE, } from '../../providers/MailProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { MAIL_CONVERSATIONS_PAGE_SIZE, useMailConversations } from './useMailConversations'; import fuzzysort from 'fuzzysort'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; @@ -16,7 +16,7 @@ import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; export type MailThreadsFilter = 'inbox' | 'sent' | 'drafts' | 'archive' | 'trash'; export const useFilteredMailThreads = (filter: MailThreadsFilter, query: string | undefined) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { data: conversations, hasNextPage: hasMorePosts, @@ -108,38 +108,38 @@ export const useFilteredMailThreads = (filter: MailThreadsFilter, query: string const today = new Date().getTime(); const searchResults = query ? fuzzysort - .go(query, filteredConversations, { - keys: [ - 'fileMetadata.appData.content.subject', - 'fileMetadata.appData.content.plainMessage', - 'fileMetadata.appData.content.plainAttachment', - ], - threshold: -10000, - scoreFn: (a) => { - // Less than 0 days old, no penalty - const agePenalty = Math.abs( - Math.round( - (today - - (a as unknown as { obj: HomebaseFile }).obj.fileMetadata - .created) / - (1000 * 60 * 60 * 24) - ) - ); - - // -100 to the plainMessage score makes it a worse match than a subject match - return ( - Math.max( - a[0] ? a[0].score : -Infinity, - a[1] ? a[1].score - 100 : -Infinity, - a[2] ? a[2].score - 50 : -Infinity - ) - agePenalty - ); - }, - }) - .map((result) => ({ - originId: result.obj.fileMetadata.appData.content.originId, - threadId: result.obj.fileMetadata.appData.content.threadId, - })) + .go(query, filteredConversations, { + keys: [ + 'fileMetadata.appData.content.subject', + 'fileMetadata.appData.content.plainMessage', + 'fileMetadata.appData.content.plainAttachment', + ], + threshold: -10000, + scoreFn: (a) => { + // Less than 0 days old, no penalty + const agePenalty = Math.abs( + Math.round( + (today - + (a as unknown as { obj: HomebaseFile }).obj.fileMetadata + .created) / + (1000 * 60 * 60 * 24) + ) + ); + + // -100 to the plainMessage score makes it a worse match than a subject match + return ( + Math.max( + a[0] ? a[0].score : -Infinity, + a[1] ? a[1].score - 100 : -Infinity, + a[2] ? a[2].score - 50 : -Infinity + ) - agePenalty + ); + }, + }) + .map((result) => ({ + originId: result.obj.fileMetadata.appData.content.originId, + threadId: result.obj.fileMetadata.appData.content.threadId, + })) : []; // filter threadsDictionary by searchResults if there's a query diff --git a/packages/apps/mail-app/src/hooks/mail/useLiveMailProcessor.ts b/packages/apps/mail-app/src/hooks/mail/useLiveMailProcessor.ts index b22eeb2f1..a62a868f8 100644 --- a/packages/apps/mail-app/src/hooks/mail/useLiveMailProcessor.ts +++ b/packages/apps/mail-app/src/hooks/mail/useLiveMailProcessor.ts @@ -1,5 +1,5 @@ import { InfiniteData, useQuery, useQueryClient } from '@tanstack/react-query'; -import { DotYouClient, TypedConnectionNotification } from '@homebase-id/js-lib/core'; +import { OdinClient, TypedConnectionNotification } from '@homebase-id/js-lib/core'; import { processInbox } from '@homebase-id/js-lib/peer'; @@ -7,7 +7,7 @@ import { useWebsocketSubscriber } from '@homebase-id/common-app'; import { useCallback } from 'react'; import { hasDebugFlag, stringGuidsEqual } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { MAIL_CONVERSATION_FILE_TYPE, MailConversationsReturn, @@ -29,11 +29,11 @@ export const useLiveMailProcessor = () => { // Process the inbox on startup const useInboxProcessor = (connected?: boolean) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetchData = async () => { - const processedresult = await processInbox(dotYouClient, MailDrive, 2000); + const processedresult = await processInbox(odinClient, MailDrive, 2000); // We don't know how many messages we have processed, so we can only invalidate the entire mail query // TODO: Extend with a queryBatch + queryModified with a timestamp check to directly add the new messages into the cache queryClient.invalidateQueries({ queryKey: ['mail-conversations'] }); @@ -52,10 +52,10 @@ const isDebug = hasDebugFlag(); const useMailWebsocket = (isEnabled: boolean) => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const handler = useCallback( - async (_: DotYouClient, notification: TypedConnectionNotification) => { + async (_: OdinClient, notification: TypedConnectionNotification) => { isDebug && console.debug('[MailWebsocket] Got notification', notification); if ( @@ -67,7 +67,7 @@ const useMailWebsocket = (isEnabled: boolean) => { // This skips the invalidation of all chat messages, as we only need to add/update this specific message const updatedChatMessage = await dsrToMailConversation( - dotYouClient, + odinClient, notification.header, MailDrive, true @@ -86,18 +86,18 @@ const useMailWebsocket = (isEnabled: boolean) => { results: isNewFile ? index === 0 ? [ - updatedChatMessage, - ...page.results.filter( - (existingMail) => - !stringGuidsEqual(existingMail.fileId, updatedChatMessage.fileId) - ), - ] + updatedChatMessage, + ...page.results.filter( + (existingMail) => + !stringGuidsEqual(existingMail.fileId, updatedChatMessage.fileId) + ), + ] : page.results : page.results.map((msg) => - stringGuidsEqual(msg?.fileId, updatedChatMessage.fileId) - ? updatedChatMessage - : msg - ), + stringGuidsEqual(msg?.fileId, updatedChatMessage.fileId) + ? updatedChatMessage + : msg + ), })), }; queryClient.setQueryData(['mail-conversations'], newConversations); diff --git a/packages/apps/mail-app/src/hooks/mail/useMailConversation.ts b/packages/apps/mail-app/src/hooks/mail/useMailConversation.ts index 426af7544..b8cb9f274 100644 --- a/packages/apps/mail-app/src/hooks/mail/useMailConversation.ts +++ b/packages/apps/mail-app/src/hooks/mail/useMailConversation.ts @@ -1,5 +1,5 @@ import { InfiniteData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { t, useDotYouClientContext, useIntroductions } from '@homebase-id/common-app'; +import { t, useOdinClientContext, useIntroductions } from '@homebase-id/common-app'; import { HomebaseFile, NewHomebaseFile, @@ -24,14 +24,14 @@ import { export const useMailConversation = (props?: { messageFileId: string }) => { const { messageFileId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const { mutateAsync: introduceRecipients } = useIntroductions().introduceIdentities; const getMessage = async (messageFileId: string) => - await getMailConversation(dotYouClient, messageFileId); + await getMailConversation(odinClient, messageFileId); const sendMessage = async ({ conversation, @@ -72,8 +72,8 @@ export const useMailConversation = (props?: { messageFileId: string }) => { }; const uploadResult = newMailConversation.fileId - ? await updateMail(dotYouClient, newMailConversation as HomebaseFile, files) - : await uploadMail(dotYouClient, newMailConversation, files as NewMediaFile[]); + ? await updateMail(odinClient, newMailConversation as HomebaseFile, files) + : await uploadMail(odinClient, newMailConversation, files as NewMediaFile[]); if (!uploadResult) throw new Error('Failed to send the mail message'); newMailConversation.fileId = uploadResult.file.fileId; @@ -119,15 +119,15 @@ export const useMailConversation = (props?: { messageFileId: string }) => { }, }; return await updateMail( - dotYouClient, + odinClient, updatedConversation, updatedConversation.fileMetadata.payloads, async () => { - const serverData = await getMailConversation(dotYouClient, conversation.fileId); + const serverData = await getMailConversation(odinClient, conversation.fileId); if (!serverData) return; updatedConversation.fileMetadata.versionTag = serverData.fileMetadata.versionTag; return await updateMail( - dotYouClient, + odinClient, updatedConversation, updatedConversation.fileMetadata.payloads ); @@ -170,15 +170,15 @@ export const useMailConversation = (props?: { messageFileId: string }) => { }, }; return await updateMail( - dotYouClient, + odinClient, updatedConversation, updatedConversation.fileMetadata.payloads, async () => { - const serverData = await getMailConversation(dotYouClient, conversation.fileId); + const serverData = await getMailConversation(odinClient, conversation.fileId); if (!serverData) return; updatedConversation.fileMetadata.versionTag = serverData.fileMetadata.versionTag; await updateMail( - dotYouClient, + odinClient, updatedConversation, updatedConversation.fileMetadata.payloads ); @@ -215,11 +215,11 @@ export const useMailConversation = (props?: { messageFileId: string }) => { results: index === 0 ? [ - conversation as HomebaseFile, - ...(existingConversations?.pages[0].results.filter( - (item) => !stringGuidsEqual(item.fileId, conversation.fileId) - ) || []), - ] + conversation as HomebaseFile, + ...(existingConversations?.pages[0].results.filter( + (item) => !stringGuidsEqual(item.fileId, conversation.fileId) + ) || []), + ] : page.results, }; }), @@ -256,18 +256,18 @@ export const useMailConversation = (props?: { messageFileId: string }) => { stringGuidsEqual(msg.fileId, conversation.fileId) ) ? { - ...conversation, - fileMetadata: { - ...conversation.fileMetadata, - appData: { - ...conversation.fileMetadata.appData, - content: { - ...conversation.fileMetadata.appData.content, - isRead: true, - }, + ...conversation, + fileMetadata: { + ...conversation.fileMetadata, + appData: { + ...conversation.fileMetadata.appData, + content: { + ...conversation.fileMetadata.appData.content, + isRead: true, }, }, - } + }, + } : conversation; }), }; @@ -338,18 +338,18 @@ export const useMailConversation = (props?: { messageFileId: string }) => { stringGuidsEqual(msg.fileId, conversation.fileId) ) ? { - ...conversation, - fileMetadata: { - ...conversation.fileMetadata, - appData: { - ...conversation.fileMetadata.appData, - content: { - ...conversation.fileMetadata.appData.content, - isRead: false, - }, + ...conversation, + fileMetadata: { + ...conversation.fileMetadata, + appData: { + ...conversation.fileMetadata.appData, + content: { + ...conversation.fileMetadata.appData.content, + isRead: false, }, }, - } + }, + } : conversation; }), }; @@ -405,7 +405,7 @@ export const useMailConversation = (props?: { messageFileId: string }) => { }; export const useMailDraft = (props?: { draftFileId: string }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const { draftFileId } = props || {}; @@ -446,8 +446,8 @@ export const useMailDraft = (props?: { draftFileId: string }) => { }; const uploadResult = newMailConversation.fileId - ? await updateMail(dotYouClient, newMailConversation as HomebaseFile, files) - : await uploadMail(dotYouClient, newMailConversation, files as NewMediaFile[]); + ? await updateMail(odinClient, newMailConversation as HomebaseFile, files) + : await uploadMail(odinClient, newMailConversation, files as NewMediaFile[]); if (!uploadResult) throw new Error('Failed to save the mail message draft'); @@ -459,10 +459,10 @@ export const useMailDraft = (props?: { draftFileId: string }) => { return newMailConversation; }; - const getDraft = async (fileId: string) => await getMailConversation(dotYouClient, fileId); + const getDraft = async (fileId: string) => await getMailConversation(odinClient, fileId); const removeDraft = async (draftConversation: HomebaseFile) => - deleteFile(dotYouClient, MailDrive, draftConversation.fileId); + deleteFile(odinClient, MailDrive, draftConversation.fileId); return { getDraft: useQuery({ @@ -492,14 +492,14 @@ export const useMailDraft = (props?: { draftFileId: string }) => { results: index === 0 && !alreadyExisted ? [ - draftedConversation as HomebaseFile, - ...(existingConversations?.pages[0].results || []), - ] + draftedConversation as HomebaseFile, + ...(existingConversations?.pages[0].results || []), + ] : page.results.map((result) => { - return stringGuidsEqual(result.fileId, draftedConversation.fileId) - ? (draftedConversation as HomebaseFile) - : result; - }), + return stringGuidsEqual(result.fileId, draftedConversation.fileId) + ? (draftedConversation as HomebaseFile) + : result; + }), }; }), ], diff --git a/packages/apps/mail-app/src/hooks/mail/useMailConversations.ts b/packages/apps/mail-app/src/hooks/mail/useMailConversations.ts index 06f120c12..ee8a5eae1 100644 --- a/packages/apps/mail-app/src/hooks/mail/useMailConversations.ts +++ b/packages/apps/mail-app/src/hooks/mail/useMailConversations.ts @@ -1,20 +1,20 @@ import { MailConversationsReturn, getMailConversations } from '../../providers/MailProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { useInfiniteQuery, InfiniteData } from '@tanstack/react-query'; export const MAIL_CONVERSATIONS_PAGE_SIZE = 100; export const useMailConversations = ( select?: | (( - data: InfiniteData - ) => InfiniteData) + data: InfiniteData + ) => InfiniteData) | undefined ) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchMailConversations = async (cursorState: string | undefined) => { return await getMailConversations( - dotYouClient, + odinClient, cursorState, undefined, MAIL_CONVERSATIONS_PAGE_SIZE diff --git a/packages/apps/mail-app/src/hooks/mail/useMailSettings.ts b/packages/apps/mail-app/src/hooks/mail/useMailSettings.ts index e694f4e2e..8edb9e79a 100644 --- a/packages/apps/mail-app/src/hooks/mail/useMailSettings.ts +++ b/packages/apps/mail-app/src/hooks/mail/useMailSettings.ts @@ -5,20 +5,20 @@ import { fetchMailSettings, uploadMailSettings, } from '../../providers/MailSettingsProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useMailSettings = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const getMailSettings = async () => { - return await fetchMailSettings(dotYouClient); + return await fetchMailSettings(odinClient); }; const saveMailSettings = async ( settings: HomebaseFile | NewHomebaseFile ) => { - return await uploadMailSettings(dotYouClient, settings); + return await uploadMailSettings(odinClient, settings); }; return { diff --git a/packages/apps/mail-app/src/hooks/mail/useMailThread.ts b/packages/apps/mail-app/src/hooks/mail/useMailThread.ts index 821976ffa..168bb39de 100644 --- a/packages/apps/mail-app/src/hooks/mail/useMailThread.ts +++ b/packages/apps/mail-app/src/hooks/mail/useMailThread.ts @@ -9,7 +9,7 @@ import { REMOVE_ARCHIVAL_STATUS, updateMail, } from '../../providers/MailProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { useMailConversations } from './useMailConversations'; @@ -17,18 +17,18 @@ import { useMailConversations } from './useMailConversations'; export const useMailThread = (props?: { threadId: string | undefined }) => { const { threadId } = props || {}; const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const removeMailThread = async (mailThread: HomebaseFile[]) => { return await Promise.all( mailThread.map((message) => { if (message.fileMetadata.appData.fileType === MAIL_DRAFT_CONVERSATION_FILE_TYPE) { - return deleteFile(dotYouClient, MailDrive, message.fileId); + return deleteFile(odinClient, MailDrive, message.fileId); } const updatedMailMessage = { ...message }; updatedMailMessage.fileMetadata.appData.archivalStatus = REMOVE_ARCHIVAL_STATUS; - return updateMail(dotYouClient, message, message.fileMetadata.payloads); + return updateMail(odinClient, message, message.fileMetadata.payloads); }) ); }; @@ -38,7 +38,7 @@ export const useMailThread = (props?: { threadId: string | undefined }) => { mailThread.map((message) => { const updatedMailMessage = { ...message }; updatedMailMessage.fileMetadata.appData.archivalStatus = ARCHIVE_ARCHIVAL_STATUS; - return updateMail(dotYouClient, message, message.fileMetadata.payloads); + return updateMail(odinClient, message, message.fileMetadata.payloads); }) ); }; @@ -48,7 +48,7 @@ export const useMailThread = (props?: { threadId: string | undefined }) => { mailThread.map((message) => { const updatedMailMessage = { ...message }; updatedMailMessage.fileMetadata.appData.archivalStatus = DEFAULT_ARCHIVAL_STATUS; - return updateMail(dotYouClient, message, message.fileMetadata.payloads); + return updateMail(odinClient, message, message.fileMetadata.payloads); }) ); }; @@ -87,15 +87,15 @@ export const useMailThread = (props?: { threadId: string | undefined }) => { stringGuidsEqual(msg.fileId, conversation.fileId) ) ? { - ...conversation, - fileMetadata: { - ...conversation.fileMetadata, - appData: { - ...conversation.fileMetadata.appData, - archivalStatus: REMOVE_ARCHIVAL_STATUS, - }, + ...conversation, + fileMetadata: { + ...conversation.fileMetadata, + appData: { + ...conversation.fileMetadata.appData, + archivalStatus: REMOVE_ARCHIVAL_STATUS, }, - } + }, + } : conversation; }), }; @@ -133,15 +133,15 @@ export const useMailThread = (props?: { threadId: string | undefined }) => { stringGuidsEqual(msg.fileId, conversation.fileId) ) ? { - ...conversation, - fileMetadata: { - ...conversation.fileMetadata, - appData: { - ...conversation.fileMetadata.appData, - archivalStatus: ARCHIVE_ARCHIVAL_STATUS, - }, + ...conversation, + fileMetadata: { + ...conversation.fileMetadata, + appData: { + ...conversation.fileMetadata.appData, + archivalStatus: ARCHIVE_ARCHIVAL_STATUS, }, - } + }, + } : conversation; }), }; @@ -184,15 +184,15 @@ export const useMailThread = (props?: { threadId: string | undefined }) => { stringGuidsEqual(msg.fileId, conversation.fileId) ) ? { - ...conversation, - fileMetadata: { - ...conversation.fileMetadata, - appData: { - ...conversation.fileMetadata.appData, - archivalStatus: DEFAULT_ARCHIVAL_STATUS, - }, + ...conversation, + fileMetadata: { + ...conversation.fileMetadata, + appData: { + ...conversation.fileMetadata.appData, + archivalStatus: DEFAULT_ARCHIVAL_STATUS, }, - } + }, + } : conversation; }), }; diff --git a/packages/apps/mail-app/src/hooks/mail/useMarkMailConversationsAsRead.ts b/packages/apps/mail-app/src/hooks/mail/useMarkMailConversationsAsRead.ts index ca1300cf8..8a1c72e29 100644 --- a/packages/apps/mail-app/src/hooks/mail/useMarkMailConversationsAsRead.ts +++ b/packages/apps/mail-app/src/hooks/mail/useMarkMailConversationsAsRead.ts @@ -2,7 +2,7 @@ import { HomebaseFile } from '@homebase-id/js-lib/core'; import { MailConversation } from '../../providers/MailProvider'; import { useEffect, useMemo, useRef } from 'react'; import { useMailConversation } from './useMailConversation'; -import { useDotYouClient } from '@homebase-id/common-app'; +import { useOdinClient } from '@homebase-id/common-app'; export const useMarkMailConversationsAsRead = ({ mailThread, @@ -11,7 +11,7 @@ export const useMarkMailConversationsAsRead = ({ }) => { // We really want this to only run once const isProcessing = useRef(false); - const identity = useDotYouClient().getDotYouClient().getLoggedInIdentity(); + const identity = useOdinClient().getOdinClient().getLoggedInIdentity(); const { mutateAsync: markAsRead } = useMailConversation().markAsRead; const unreadMessages = useMemo( diff --git a/packages/apps/mail-app/src/providers/DebugDataProvider.ts b/packages/apps/mail-app/src/providers/DebugDataProvider.ts index 9bbd88f2d..e34c3fff4 100644 --- a/packages/apps/mail-app/src/providers/DebugDataProvider.ts +++ b/packages/apps/mail-app/src/providers/DebugDataProvider.ts @@ -1,5 +1,5 @@ import { - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, SecurityGroupType, @@ -95,7 +95,7 @@ export const getFunName = () => { return `${rando(adjectives)} ${rando(adjectives)} ${rando(nouns)}`; }; -const sendOne = async (dotYouClient: DotYouClient, threadId: string, recipients: string[]) => { +const sendOne = async (odinClient: OdinClient, threadId: string, recipients: string[]) => { const uniqueId = getNewId(); const originId = getNewId(); @@ -107,7 +107,7 @@ const sendOne = async (dotYouClient: DotYouClient, threadId: string, recipients: fileType: MAIL_CONVERSATION_FILE_TYPE, content: { subject: getFunName(), - sender: dotYouClient.getHostIdentity(), + sender: odinClient.getHostIdentity(), message: [ { type: 'p', @@ -133,12 +133,12 @@ const sendOne = async (dotYouClient: DotYouClient, threadId: string, recipients: }, }; - await uploadMail(dotYouClient, newMailConversation, undefined); + await uploadMail(odinClient, newMailConversation, undefined); }; -export const MakeConversation = async (dotYouClient: DotYouClient) => { +export const MakeConversation = async (odinClient: OdinClient) => { const connections = ( - await getConnections(dotYouClient, { + await getConnections(odinClient, { cursor: undefined, count: 5, }) @@ -147,13 +147,13 @@ export const MakeConversation = async (dotYouClient: DotYouClient) => { for (let i = 0; i < 25; i++) { const threadId = getNewId(); - await sendOne(dotYouClient, threadId, recipients); + await sendOne(odinClient, threadId, recipients); } }; const PAGE_SIZE = 100; -export const BePolite = async (dotYouClient: DotYouClient) => { - const allThreads = await getMailConversations(dotYouClient, undefined, undefined, PAGE_SIZE); +export const BePolite = async (odinClient: OdinClient) => { + const allThreads = await getMailConversations(odinClient, undefined, undefined, PAGE_SIZE); // Group the flattenedConversations by their groupId const threadsDictionary = allThreads.results.reduce( @@ -172,8 +172,8 @@ export const BePolite = async (dotYouClient: DotYouClient) => { for (let i = 0; i < threads.length; i++) { const thread = threads[i][0]; if (!thread) continue; - const recipients = getAllRecipients(thread, dotYouClient.getHostIdentity()); + const recipients = getAllRecipients(thread, odinClient.getHostIdentity()); - await sendOne(dotYouClient, thread.fileMetadata.appData.content.threadId, recipients); + await sendOne(odinClient, thread.fileMetadata.appData.content.threadId, recipients); } }; diff --git a/packages/apps/mail-app/src/providers/MailProvider.ts b/packages/apps/mail-app/src/providers/MailProvider.ts index 35e0e99a9..0f730d109 100644 --- a/packages/apps/mail-app/src/providers/MailProvider.ts +++ b/packages/apps/mail-app/src/providers/MailProvider.ts @@ -1,6 +1,6 @@ import { CursoredResult, - DotYouClient, + OdinClient, HomebaseFile, FileQueryParams, GetBatchQueryResultOptions, @@ -91,7 +91,7 @@ export const MailDrive: TargetDrive = { export type MailConversationsReturn = CursoredResult[]>; export const getMailConversations = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, cursorState: string | undefined, threadId: string | undefined, pageSize: number @@ -109,34 +109,34 @@ export const getMailConversations = async ( includeTransferHistory: true, }; - const response = await queryBatch(dotYouClient, params, ro); + const response = await queryBatch(odinClient, params, ro); return { cursorState: response.cursorState, results: (await Promise.all( response.searchResults - .map(async (result) => await dsrToMailConversation(dotYouClient, result, MailDrive, true)) + .map(async (result) => await dsrToMailConversation(odinClient, result, MailDrive, true)) .filter(Boolean) )) as HomebaseFile[], }; }; -export const getMailConversation = async (dotYouClient: DotYouClient, fileId: string) => { - const header = await getFileHeader(dotYouClient, MailDrive, fileId, { +export const getMailConversation = async (odinClient: OdinClient, fileId: string) => { + const header = await getFileHeader(odinClient, MailDrive, fileId, { decrypt: false, }); if (!header) return null; - return await dsrToMailConversation(dotYouClient, header, MailDrive, true); + return await dsrToMailConversation(odinClient, header, MailDrive, true); }; export const uploadMail = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversation: NewHomebaseFile, newMediaFiles: NewMediaFile[] | undefined, onVersionConflict?: () => void ) => { - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const recipients = conversation.fileMetadata.appData.content.recipients.filter( (recipient) => recipient !== identity ); @@ -149,7 +149,7 @@ export const uploadMail = async ( const encryptedKeyHeader = conversation.sharedSecretEncryptedKeyHeader || GenerateKeyHeader(); const decryptedKeyHeader = encryptedKeyHeader - ? await decryptKeyHeader(dotYouClient, encryptedKeyHeader) + ? await decryptKeyHeader(odinClient, encryptedKeyHeader) : undefined; const aesKey = decryptedKeyHeader?.aesKey || getRandom16ByteArray(); @@ -172,18 +172,18 @@ export const uploadMail = async ( }, transitOptions: distribute ? { - recipients: recipients, - schedule: ScheduleOptions.SendLater, - priority: PriorityOptions.Medium, - sendContents: SendContents.All, - useAppNotification: true, - appNotificationOptions: { - appId: appId, - typeId: conversation.fileMetadata.appData.groupId || getNewId(), - tagId: conversation.fileMetadata.appData.uniqueId || getNewId(), - silent: false, - }, - } + recipients: recipients, + schedule: ScheduleOptions.SendLater, + priority: PriorityOptions.Medium, + sendContents: SendContents.All, + useAppNotification: true, + appNotificationOptions: { + appId: appId, + typeId: conversation.fileMetadata.appData.groupId || getNewId(), + tagId: conversation.fileMetadata.appData.uniqueId || getNewId(), + silent: false, + }, + } : undefined, }; @@ -218,7 +218,7 @@ export const uploadMail = async ( } const uploadResult = await uploadFile( - dotYouClient, + odinClient, uploadInstructions, uploadMetadata, payloads, @@ -248,7 +248,7 @@ export const uploadMail = async ( conversation.fileMetadata.appData.content.deliveryStatus = MailDeliveryStatus.Failed; await updateMail( - dotYouClient, + odinClient, conversation as HomebaseFile, payloads.map((pyld) => { return { @@ -271,12 +271,12 @@ export const uploadMail = async ( }; export const updateMail = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, conversation: HomebaseFile, existingAndNewMediaFiles?: (NewMediaFile | MediaFile)[], onVersionConflict?: () => void ) => { - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const recipients = conversation.fileMetadata.appData.content.recipients.filter( (recipient) => recipient !== identity ); @@ -294,11 +294,11 @@ export const updateMail = async ( useAppNotification: distribute, appNotificationOptions: distribute ? { - appId: appId, - typeId: conversation.fileMetadata.appData.groupId || getNewId(), - tagId: conversation.fileMetadata.appData.uniqueId || getNewId(), - silent: false, - } + appId: appId, + typeId: conversation.fileMetadata.appData.groupId || getNewId(), + tagId: conversation.fileMetadata.appData.uniqueId || getNewId(), + silent: false, + } : undefined, recipients: distribute ? recipients : undefined, }; @@ -348,7 +348,7 @@ export const updateMail = async ( // decrypt keyheader; const decryptedKeyHeader = encryptedKeyHeader - ? await decryptKeyHeader(dotYouClient, encryptedKeyHeader) + ? await decryptKeyHeader(odinClient, encryptedKeyHeader) : undefined; const { payloads: newMediaPayloads, thumbnails: newMediaThumbnails } = @@ -375,7 +375,7 @@ export const updateMail = async ( } const patchResult = await patchFile( - dotYouClient, + odinClient, conversation.sharedSecretEncryptedKeyHeader, uploadInstructions, uploadMetadata, @@ -399,14 +399,14 @@ export const updateMail = async ( }; export const dsrToMailConversation = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { try { const mailContent = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader diff --git a/packages/apps/mail-app/src/providers/MailSettingsProvider.ts b/packages/apps/mail-app/src/providers/MailSettingsProvider.ts index f4a3d3d46..754f16d51 100644 --- a/packages/apps/mail-app/src/providers/MailSettingsProvider.ts +++ b/packages/apps/mail-app/src/providers/MailSettingsProvider.ts @@ -1,5 +1,5 @@ import { - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, RichText, @@ -21,10 +21,10 @@ export interface MailSettings { export const mailSettingsUniqueId = toGuidId('mail-settings'); export const fetchMailSettings = async ( - dotYouClient: DotYouClient + odinClient: OdinClient ): Promise | null> => { const fileHeader = await getFileHeaderByUniqueId( - dotYouClient, + odinClient, MailDrive, mailSettingsUniqueId ); @@ -37,7 +37,7 @@ export const fetchMailSettings = async ( }; export const uploadMailSettings = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, settings: HomebaseFile | NewHomebaseFile ): Promise => { if (!stringGuidsEqual(settings.fileMetadata.appData.uniqueId, mailSettingsUniqueId)) { @@ -68,7 +68,7 @@ export const uploadMailSettings = async ( }, }; - const uploadResult = await uploadFile(dotYouClient, uploadInstructions, uploadMetadata); + const uploadResult = await uploadFile(odinClient, uploadInstructions, uploadMetadata); if (!uploadResult) { throw new Error('Failed to save mail settings'); } diff --git a/packages/apps/mail-app/src/templates/Auth/Auth.tsx b/packages/apps/mail-app/src/templates/Auth/Auth.tsx index aad84f48d..3821940ca 100644 --- a/packages/apps/mail-app/src/templates/Auth/Auth.tsx +++ b/packages/apps/mail-app/src/templates/Auth/Auth.tsx @@ -5,7 +5,7 @@ import { DialogWrapper, Alert, t, - useDotYouClientContext, + useOdinClientContext, OWNER_APPS_ROOT, } from '@homebase-id/common-app'; import { AutoAuthorize, LoginBox } from '../../components/Auth/LoginBox/LoginBox'; @@ -17,7 +17,7 @@ const Auth = () => { const [searchParams] = useSearchParams(); const isError = searchParams.get('state') === 'finalize-error'; - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); useEffect(() => { if (isAuthenticated) window.location.href = '/'; diff --git a/packages/apps/mail-app/src/templates/Mail/DebugData.tsx b/packages/apps/mail-app/src/templates/Mail/DebugData.tsx index d62897bc9..dc721a10f 100644 --- a/packages/apps/mail-app/src/templates/Mail/DebugData.tsx +++ b/packages/apps/mail-app/src/templates/Mail/DebugData.tsx @@ -1,14 +1,14 @@ import { ActionButton } from '@homebase-id/common-app'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { BePolite, MakeConversation } from '../../providers/DebugDataProvider'; export const DebugDataPage = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); return (
{ - await MakeConversation(dotYouClient); + await MakeConversation(odinClient); alert('done!'); }} > @@ -16,7 +16,7 @@ export const DebugDataPage = () => { { - await BePolite(dotYouClient); + await BePolite(odinClient); alert('done!'); }} > diff --git a/packages/apps/mail-app/src/templates/Mail/MailAttachmentOverview.tsx b/packages/apps/mail-app/src/templates/Mail/MailAttachmentOverview.tsx index 985ecd15f..2dad137b1 100644 --- a/packages/apps/mail-app/src/templates/Mail/MailAttachmentOverview.tsx +++ b/packages/apps/mail-app/src/templates/Mail/MailAttachmentOverview.tsx @@ -6,7 +6,7 @@ import { } from '@homebase-id/common-app'; import { PayloadDescriptor } from '@homebase-id/js-lib/core'; import { OdinPreviewImage } from '@homebase-id/ui-lib'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { MailDrive } from '../../providers/MailProvider'; import { useNavigate, useParams } from 'react-router-dom'; @@ -61,7 +61,7 @@ export const AttachmentFile = ({ query?: string | null; children?: React.ReactNode; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const navigate = useNavigate(); const { filter } = useParams(); @@ -85,7 +85,7 @@ export const AttachmentFile = ({ > {file.contentType.startsWith('image/') ? ( void; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const hasMultiple = files.length > 1; @@ -117,7 +117,7 @@ const FileGroup = ({ > {firstFile.contentType.startsWith('image/') ? ( { - const dotYouClient = useDotYouClientContext(); - const identity = dotYouClient.getHostIdentity(); + const odinClient = useOdinClientContext(); + const identity = odinClient.getHostIdentity(); const navigate = useNavigate(); const { filter } = useParams(); const fileName = @@ -175,7 +175,7 @@ export const AttachmentFile = ({ file }: { file: ExtendedFile }) => { > {file.contentType.startsWith('image/') ? ( [] | undefined; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const filteredMailThread = mailThread?.filter( (conv) => !getAllRecipients(conv).some((recipient) => recipient === loggedOnIdentity) ); @@ -361,7 +361,7 @@ const ConversationalAwareness = ({ message: HomebaseFile; query: string | undefined | null; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const lastSender = message.fileMetadata.senderOdinId || message.fileMetadata.appData.content.sender; diff --git a/packages/apps/mail-app/src/templates/Mail/MailThread.tsx b/packages/apps/mail-app/src/templates/Mail/MailThread.tsx index e18c60645..68b259ab1 100644 --- a/packages/apps/mail-app/src/templates/Mail/MailThread.tsx +++ b/packages/apps/mail-app/src/templates/Mail/MailThread.tsx @@ -2,7 +2,7 @@ import { useEffect, useMemo, useState, useRef } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { MailHomeHeader } from '../../components/Header/Header'; import { useMailThread } from '../../hooks/mail/useMailThread'; -import { ApiType, DotYouClient, HomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile } from '@homebase-id/js-lib/core'; import { ARCHIVE_ARCHIVAL_STATUS, MailConversation, @@ -19,7 +19,7 @@ import { highlightQuery, MAIL_ROOT_PATH, t, - useDotYouClientContext, + useOdinClientContext, useIsConnected, } from '@homebase-id/common-app'; import { MailHistory } from './MailHistory'; @@ -42,7 +42,7 @@ export const MailThread = () => { const scrollRef = useRef(null); const headerRef = useRef(null); const [headerHeight, setHeaderHeight] = useState(0); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { conversationKey, messageKey, payloadKey } = useParams(); const previewAttachment = !!messageKey && !!payloadKey; @@ -412,7 +412,7 @@ const MailConnectedState = ({ recipients }: { recipients: string[] }) => { const RecipientConnectedState = ({ recipient }: { recipient: string }) => { const { data: isConnected, isFetched } = useIsConnected(recipient); - const host = useDotYouClientContext().getRoot(); + const host = useOdinClientContext().getRoot(); if (isConnected || !isFetched) return null; return ( @@ -420,7 +420,7 @@ const RecipientConnectedState = ({ recipient }: { recipient: string }) => {

{t('You can only chat with connected identities, messages will not be delivered to')}:{' '} {recipient} diff --git a/packages/apps/mail-app/src/templates/Mail/MailThreadInfo.tsx b/packages/apps/mail-app/src/templates/Mail/MailThreadInfo.tsx index 89410b70f..75051838b 100644 --- a/packages/apps/mail-app/src/templates/Mail/MailThreadInfo.tsx +++ b/packages/apps/mail-app/src/templates/Mail/MailThreadInfo.tsx @@ -13,7 +13,7 @@ import { } from '@homebase-id/common-app'; import { Arrow } from '@homebase-id/common-app/icons'; import { MailConversation, getAllRecipients } from '../../providers/MailProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { useMailOrigin } from '../../hooks/mail/useMailOrigin'; import { RecipientsList } from '../../components/Threads/RecipientsList'; @@ -25,10 +25,10 @@ export const MailThreadInfo = ({ mailThread: HomebaseFile[]; onClose: () => void; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const target = usePortal('modal-container'); const lastMessage = mailThread[mailThread.length - 1]; - const host = useDotYouClientContext().getRoot(); + const host = useOdinClientContext().getRoot(); const lastMessageContent = lastMessage.fileMetadata.appData.content; const recipients = getAllRecipients(lastMessage, loggedOnIdentity); diff --git a/packages/apps/owner-app/src/app/App.tsx b/packages/apps/owner-app/src/app/App.tsx index 16da6f166..5572195ec 100644 --- a/packages/apps/owner-app/src/app/App.tsx +++ b/packages/apps/owner-app/src/app/App.tsx @@ -70,11 +70,11 @@ import { } from '../hooks/auth/useAuth'; import { useIsConfigured } from '../hooks/configure/useIsConfigured'; import { - DotYouClientProvider, + OdinClientProvider, ErrorBoundary, NotFound, OdinQueryClient, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { useOwnerInboxProcessor } from '../hooks/inbox/useOwnerInboxProcessor'; @@ -244,7 +244,7 @@ function App() { - + } @@ -252,7 +252,7 @@ function App() { v7_startTransition: true, }} /> - + ); @@ -262,7 +262,7 @@ const RootRoute = ({ children }: { children: ReactNode }) => { useValidateAuthorization(); const location = useLocation(); - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); const { data: isConfigured, isFetched } = useIsConfigured().isConfigured; useOwnerInboxProcessor(isAuthenticated); diff --git a/packages/apps/owner-app/src/components/Connection/ConnectionSummary/ConnectionSummary.tsx b/packages/apps/owner-app/src/components/Connection/ConnectionSummary/ConnectionSummary.tsx index ec14e4048..84c7318d7 100644 --- a/packages/apps/owner-app/src/components/Connection/ConnectionSummary/ConnectionSummary.tsx +++ b/packages/apps/owner-app/src/components/Connection/ConnectionSummary/ConnectionSummary.tsx @@ -7,7 +7,7 @@ import { ActionLink, useIdentityIFollow, useCircles, - useDotYouClientContext, + useOdinClientContext, useConnectionInfo, useDetailedConnectionInfo, useIsConnected, @@ -27,7 +27,7 @@ import { Feed, } from '@homebase-id/common-app/icons'; import Section from '../../ui/Sections/Section'; -import { ApiType, DotYouClient, HomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile } from '@homebase-id/js-lib/core'; import { AUTO_CONNECTIONS_CIRCLE_ID, CONFIRMED_CONNECTIONS_CIRCLE_ID, @@ -60,7 +60,7 @@ export const ConnectionSummary = ({ odinId, contactId }: ContactInfoProps) => { const { fetch: { data: connectionInfo }, } = useDetailedConnectionInfo({ odinId: odinId }); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { data: isConnectedWithIntroducer } = useIsConnected(connectionInfo?.introducerOdinId); @@ -88,7 +88,7 @@ export const ConnectionSummary = ({ odinId, contactId }: ContactInfoProps) => { {connectionInfo?.connectionRequestOrigin === 'introduction' ? (

{ <> {t('was introduced by')} {

) : ( { const [isBroken, setIsBroken] = useState(false); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); useEffect(() => { (async () => { try { const keyheader = file.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, file.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, file.sharedSecretEncryptedKeyHeader) : undefined; const parsedContent = await decryptJsonContent(file.fileMetadata, keyheader); diff --git a/packages/apps/owner-app/src/hooks/apps/useApp.ts b/packages/apps/owner-app/src/hooks/apps/useApp.ts index 47e67570c..5a5d49ae8 100644 --- a/packages/apps/owner-app/src/hooks/apps/useApp.ts +++ b/packages/apps/owner-app/src/hooks/apps/useApp.ts @@ -17,7 +17,7 @@ import { PermissionUpdateRequest, } from '../../provider/app/AppManagementProviderTypes'; import { invalidateApps } from './useApps'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; interface PermissionExtensionRequest extends Omit { drives?: (DriveGrantRequest | DriveGrant)[]; @@ -25,10 +25,10 @@ interface PermissionExtensionRequest extends Omit { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetch = async ({ appId }: { appId: string }) => { - return (await GetAppRegistration(dotYouClient, { appId: appId })) || null; + return (await GetAppRegistration(odinClient, { appId: appId })) || null; }; const registerNewApp = async (appRegRequest: AppRegistrationRequest) => { @@ -37,7 +37,7 @@ export const useApp = ({ appId }: { appId?: string }) => { appRegRequest.drives.map(async (driveGrant) => { if (driveGrant.driveMeta && driveGrant.driveMeta.name) return await ensureDrive( - dotYouClient, + odinClient, driveGrant.permissionedDrive.drive, driveGrant.driveMeta.name, driveGrant.driveMeta.description, @@ -47,26 +47,26 @@ export const useApp = ({ appId }: { appId?: string }) => { }) ); - await RegisterApp(dotYouClient, { + await RegisterApp(odinClient, { ...appRegRequest, drives: appRegRequest.drives ? appRegRequest.drives.map((driveGrant) => { - return { ...driveGrant, driveMeta: undefined }; - }) + return { ...driveGrant, driveMeta: undefined }; + }) : [], }); }; const revokeAppInternal = async ({ appId }: { appId: string }) => { - return await RevokeApp(dotYouClient, { appId: appId }); + return await RevokeApp(odinClient, { appId: appId }); }; const allowAppInternal = async ({ appId }: { appId: string }) => { - return await AllowApp(dotYouClient, { appId: appId }); + return await AllowApp(odinClient, { appId: appId }); }; const removeAppInternal = async ({ appId }: { appId: string }) => { - return await RemoveApp(dotYouClient, { appId: appId }); + return await RemoveApp(odinClient, { appId: appId }); }; const updateAuthorizedCircles = async ({ @@ -78,7 +78,7 @@ export const useApp = ({ appId }: { appId?: string }) => { circleIds: string[]; circleMemberPermissionGrant: PermissionSetGrantRequest; }) => { - return await UpdateAuthorizedCircles(dotYouClient, { + return await UpdateAuthorizedCircles(odinClient, { appId, authorizedCircles: circleIds, circleMemberPermissionGrant, @@ -95,7 +95,7 @@ export const useApp = ({ appId }: { appId?: string }) => { drives.map(async (driveGrant: DriveGrantRequest) => { if (driveGrant.driveMeta && driveGrant.driveMeta.name) return await ensureDrive( - dotYouClient, + odinClient, driveGrant.permissionedDrive.drive, driveGrant.driveMeta.name, driveGrant.driveMeta.description, @@ -105,7 +105,7 @@ export const useApp = ({ appId }: { appId?: string }) => { }) ); - return await UpdatePermissions(dotYouClient, { + return await UpdatePermissions(odinClient, { appId, permissionSet, drives: drives || [], @@ -113,7 +113,7 @@ export const useApp = ({ appId }: { appId?: string }) => { }; const updatePermissions = async ({ appId, permissionSet, drives }: PermissionUpdateRequest) => { - return await UpdatePermissions(dotYouClient, { + return await UpdatePermissions(odinClient, { appId, permissionSet, drives, diff --git a/packages/apps/owner-app/src/hooks/apps/useAppClients.ts b/packages/apps/owner-app/src/hooks/apps/useAppClients.ts index 3f44cd737..4beac795c 100644 --- a/packages/apps/owner-app/src/hooks/apps/useAppClients.ts +++ b/packages/apps/owner-app/src/hooks/apps/useAppClients.ts @@ -7,14 +7,14 @@ import { AllowClient, } from '../../provider/app/AppManagementProvider'; import { AppClientRegistrationRequest } from '../../provider/app/AppManagementProviderTypes'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useAppClients = ({ appId }: { appId?: string }) => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetch = async ({ appId }: { appId: string }) => { - return await GetAppClients(dotYouClient, appId); + return await GetAppClients(odinClient, appId); }; const registerClient = async ({ @@ -32,7 +32,7 @@ export const useAppClients = ({ appId }: { appId?: string }) => { clientFriendlyName: clientFriendlyName, }; - return RegisterAppClient(dotYouClient, clientRegRequest); + return RegisterAppClient(odinClient, clientRegRequest); }; const removeClient = async ({ @@ -42,7 +42,7 @@ export const useAppClients = ({ appId }: { appId?: string }) => { appId: string; registrationId: string; }) => { - return await RemoveClient(dotYouClient, { appId, registrationId }); + return await RemoveClient(odinClient, { appId, registrationId }); }; const revokeClient = async ({ @@ -52,7 +52,7 @@ export const useAppClients = ({ appId }: { appId?: string }) => { appId: string; registrationId: string; }) => { - return await RevokeClient(dotYouClient, { appId, registrationId }); + return await RevokeClient(odinClient, { appId, registrationId }); }; const allowClient = async ({ @@ -62,7 +62,7 @@ export const useAppClients = ({ appId }: { appId?: string }) => { appId: string; registrationId: string; }) => { - return await AllowClient(dotYouClient, { appId, registrationId }); + return await AllowClient(odinClient, { appId, registrationId }); }; return { diff --git a/packages/apps/owner-app/src/hooks/apps/useApps.ts b/packages/apps/owner-app/src/hooks/apps/useApps.ts index fd46415ba..567dedc7e 100644 --- a/packages/apps/owner-app/src/hooks/apps/useApps.ts +++ b/packages/apps/owner-app/src/hooks/apps/useApps.ts @@ -1,12 +1,12 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; import { GetAppRegistrations } from '../../provider/app/AppManagementProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useApps = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchRegistered = async () => { - const apps = await GetAppRegistrations(dotYouClient); + const apps = await GetAppRegistrations(odinClient); return apps?.sort((a, b) => (a.isRevoked ? 1 : 0) - (b.isRevoked ? 1 : 0)); }; diff --git a/packages/apps/owner-app/src/hooks/auth/useAuth.ts b/packages/apps/owner-app/src/hooks/auth/useAuth.ts index 36b22b70e..dc6190e4c 100644 --- a/packages/apps/owner-app/src/hooks/auth/useAuth.ts +++ b/packages/apps/owner-app/src/hooks/auth/useAuth.ts @@ -15,7 +15,7 @@ import { STORAGE_IDENTITY_KEY, logoutOwnerAndAllApps, logoutPublicSession, - useDotYouClient, + useOdinClient, } from '@homebase-id/common-app'; import { useQueryClient } from '@tanstack/react-query'; @@ -29,7 +29,7 @@ export const RETURN_URL_PARAM = 'returnUrl'; export const HOME_PATH = '/owner'; export const useValidateAuthorization = () => { - const { hasSharedSecret } = useDotYouClient(); + const { hasSharedSecret } = useOdinClient(); const { data: hasValidToken, isFetched } = useVerifyToken(); useEffect(() => { diff --git a/packages/apps/owner-app/src/hooks/auth/useVerifyToken.ts b/packages/apps/owner-app/src/hooks/auth/useVerifyToken.ts index 364a627ec..630dd8f10 100644 --- a/packages/apps/owner-app/src/hooks/auth/useVerifyToken.ts +++ b/packages/apps/owner-app/src/hooks/auth/useVerifyToken.ts @@ -1,10 +1,10 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; -import { hasValidOwnerToken, useDotYouClientContext } from '@homebase-id/common-app'; +import { hasValidOwnerToken, useOdinClientContext } from '@homebase-id/common-app'; const MINUTE_IN_MS = 60000; export const useVerifyToken = () => { - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); const fetchData = async () => await hasValidOwnerToken(); return useQuery({ diff --git a/packages/apps/owner-app/src/hooks/configure/useInit.ts b/packages/apps/owner-app/src/hooks/configure/useInit.ts index d5021199d..c09d9b6e5 100644 --- a/packages/apps/owner-app/src/hooks/configure/useInit.ts +++ b/packages/apps/owner-app/src/hooks/configure/useInit.ts @@ -11,7 +11,7 @@ import { SetupHome, SetupProfileDefinition, } from '../../provider/setup/SetupProvider'; -import { useDotYouClientContext, useStaticFiles } from '@homebase-id/common-app'; +import { useOdinClientContext, useStaticFiles } from '@homebase-id/common-app'; import { getSettings, updateSettings } from '../../provider/system/SettingsProvider'; import { AUTO_FIX_VERSION } from '../useAutoFixDefaultConfig'; @@ -20,8 +20,8 @@ export const FIRST_RUN_TOKEN_STORAGE_KEY = 'first-run-token'; export const useInit = () => { const firstRunToken = localStorage.getItem(FIRST_RUN_TOKEN_STORAGE_KEY); - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isAuthenticated = odinClient.isAuthenticated(); const queryClient = useQueryClient(); @@ -44,17 +44,17 @@ export const useInit = () => { }); // Initialize - await initialize(dotYouClient, firstRunToken, initDrives, initCircles); + await initialize(odinClient, firstRunToken, initDrives, initCircles); // Ensure Config - await SetupProfileDefinition(dotYouClient); - await SetupBlog(dotYouClient); - await SetupHome(dotYouClient); + await SetupProfileDefinition(odinClient); + await SetupBlog(odinClient); + await SetupHome(odinClient); // Setup (default) Data - await SetupDefaultIdentity(queryClient, dotYouClient, data); + await SetupDefaultIdentity(queryClient, odinClient, data); try { - await SetupAutoFollow(dotYouClient); + await SetupAutoFollow(odinClient); } catch (ex) { console.error('[init] autofollow failed', ex); } @@ -63,9 +63,9 @@ export const useInit = () => { // This is normally a side effect from the useAttribute hook.. but we need to do it here after the first setup await publishStaticFiles(undefined); - const defaultServerSettings = getSettings(dotYouClient); + const defaultServerSettings = getSettings(odinClient); - await updateSettings(dotYouClient, { + await updateSettings(odinClient, { ...defaultServerSettings, lastRunAutoFix: AUTO_FIX_VERSION, }); diff --git a/packages/apps/owner-app/src/hooks/configure/useIsConfigured.ts b/packages/apps/owner-app/src/hooks/configure/useIsConfigured.ts index 9c4c5c4bf..954360d06 100644 --- a/packages/apps/owner-app/src/hooks/configure/useIsConfigured.ts +++ b/packages/apps/owner-app/src/hooks/configure/useIsConfigured.ts @@ -1,14 +1,14 @@ import { useQuery } from '@tanstack/react-query'; import { isConfigured } from '../../provider/system/SystemProvider'; import { FIRST_RUN_TOKEN_STORAGE_KEY } from './useInit'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; const LOCAL_STORAGE_KEY = 'isConfigured'; const MINUTE_IN_MS = 60000; export const useIsConfigured = () => { - const isAuthenticated = useDotYouClientContext().isAuthenticated(); - const dotYouClient = useDotYouClientContext(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); + const odinClient = useOdinClientContext(); const getIsConfigured = async () => { if (!isAuthenticated) { @@ -23,7 +23,7 @@ export const useIsConfigured = () => { ) return true; - const result = await isConfigured(dotYouClient); + const result = await isConfigured(odinClient); if (result) { localStorage.setItem(LOCAL_STORAGE_KEY, import.meta.env.VITE_VERSION); localStorage.removeItem(FIRST_RUN_TOKEN_STORAGE_KEY); diff --git a/packages/apps/owner-app/src/hooks/connections/useConnectionActions.ts b/packages/apps/owner-app/src/hooks/connections/useConnectionActions.ts index 9baa69291..ed1aa860e 100644 --- a/packages/apps/owner-app/src/hooks/connections/useConnectionActions.ts +++ b/packages/apps/owner-app/src/hooks/connections/useConnectionActions.ts @@ -17,15 +17,15 @@ import { invalidateSentConnections, saveContact, updateCacheSentConnections, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; export const useConnectionActions = () => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const disconnect = async ({ connectionOdinId }: { connectionOdinId: string }) => { - return await disconnectFromContact(dotYouClient, connectionOdinId); + return await disconnectFromContact(odinClient, connectionOdinId); }; const sendConnectionRequest = async ({ @@ -37,12 +37,12 @@ export const useConnectionActions = () => { message: string; circleIds: string[]; }) => { - await sendRequest(dotYouClient, targetOdinId, message, circleIds); + await sendRequest(odinClient, targetOdinId, message, circleIds); // Save contact - const connectionInfo = await fetchConnectionInfo(dotYouClient, targetOdinId); + const connectionInfo = await fetchConnectionInfo(odinClient, targetOdinId); if (connectionInfo) - await saveContact(dotYouClient, { + await saveContact(odinClient, { fileMetadata: { appData: { content: connectionInfo } }, serverMetadata: { accessControlList: { requiredSecurityGroup: SecurityGroupType.Owner } }, }); @@ -51,14 +51,14 @@ export const useConnectionActions = () => { }; const revokeConnectionRequest = async ({ targetOdinId }: { targetOdinId: string }) => { - return await deleteSentRequest(dotYouClient, targetOdinId); + return await deleteSentRequest(odinClient, targetOdinId); }; const block = async (odinId: string) => { - return await blockOdinId(dotYouClient, odinId); + return await blockOdinId(odinClient, odinId); }; const unblock = async (odinId: string) => { - return await unblockOdinId(dotYouClient, odinId); + return await unblockOdinId(odinClient, odinId); }; return { @@ -81,7 +81,7 @@ export const useConnectionActions = () => { recipient: targetOdinId, id: getNewId(), message: message, - senderOdinId: dotYouClient.getHostIdentity(), + senderOdinId: odinClient.getHostIdentity(), receivedTimestampMilliseconds: Date.now(), connectionRequestOrigin: 'identityowner', }; @@ -92,9 +92,9 @@ export const useConnectionActions = () => { pages: data.pages.map((page, index) => index === 0 ? { - ...page, - results: [newRequest, ...page.results], - } + ...page, + results: [newRequest, ...page.results], + } : page ), }; diff --git a/packages/apps/owner-app/src/hooks/connections/useDomainClients.ts b/packages/apps/owner-app/src/hooks/connections/useDomainClients.ts index b7979d995..9892e3795 100644 --- a/packages/apps/owner-app/src/hooks/connections/useDomainClients.ts +++ b/packages/apps/owner-app/src/hooks/connections/useDomainClients.ts @@ -3,16 +3,16 @@ import { getDomainClients, removeDomainClient, } from '../../provider/network/domainNetwork/DomainManager'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useDomainClients = ({ domain }: { domain?: string }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetchClients = async ({ domain }: { domain: string }) => { if (!domain) return; - return await getDomainClients(dotYouClient, domain); + return await getDomainClients(odinClient, domain); }; const removeClient = async ({ @@ -22,7 +22,7 @@ export const useDomainClients = ({ domain }: { domain?: string }) => { domain: string; registrationId: string; }) => { - return await removeDomainClient(dotYouClient, domain, registrationId); + return await removeDomainClient(odinClient, domain, registrationId); }; return { diff --git a/packages/apps/owner-app/src/hooks/connections/useManageAutoConnection.ts b/packages/apps/owner-app/src/hooks/connections/useManageAutoConnection.ts index 170abcd71..c54d80f01 100644 --- a/packages/apps/owner-app/src/hooks/connections/useManageAutoConnection.ts +++ b/packages/apps/owner-app/src/hooks/connections/useManageAutoConnection.ts @@ -5,13 +5,13 @@ import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { invalidateConnectionInfo, updateCachedConnectionInfo, - useDotYouClientContext, + useOdinClientContext, useFollowingInfinite, } from '@homebase-id/common-app'; export const useManageAutoConnection = ({ odinId }: { odinId?: string }) => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const { mutateAsync: follow } = useFollowingInfinite().follow; @@ -29,7 +29,7 @@ export const useManageAutoConnection = ({ odinId }: { odinId?: string }) => { }); } - return confirmIntroduction(dotYouClient, odinId); + return confirmIntroduction(odinClient, odinId); }; return { diff --git a/packages/apps/owner-app/src/hooks/connections/useManageDomain.ts b/packages/apps/owner-app/src/hooks/connections/useManageDomain.ts index 004ab77b4..c27b10968 100644 --- a/packages/apps/owner-app/src/hooks/connections/useManageDomain.ts +++ b/packages/apps/owner-app/src/hooks/connections/useManageDomain.ts @@ -7,22 +7,22 @@ import { import { invalidateDomainInfo, invalidateDomains, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; export const useManageDomain = () => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const revokeDomain = async ({ domain }: { domain: string }) => - await revokeDomainAccess(dotYouClient, domain); + await revokeDomainAccess(odinClient, domain); const restoreDomain = async ({ domain }: { domain: string }) => - await restoreDomainAccess(dotYouClient, domain); + await restoreDomainAccess(odinClient, domain); const removeDomain = async ({ domain }: { domain: string }) => - await disconnectFromDomain(dotYouClient, domain); + await disconnectFromDomain(odinClient, domain); return { revokeDomain: useMutation({ diff --git a/packages/apps/owner-app/src/hooks/connections/usePendingConnection.ts b/packages/apps/owner-app/src/hooks/connections/usePendingConnection.ts index 071933327..a71bf617b 100644 --- a/packages/apps/owner-app/src/hooks/connections/usePendingConnection.ts +++ b/packages/apps/owner-app/src/hooks/connections/usePendingConnection.ts @@ -15,17 +15,17 @@ import { saveContact, updateCacheActiveConnections, updateCachePendingConnections, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; export const usePendingConnection = ({ odinId }: { odinId?: string }) => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const getPendingConnectionInfo = async ({ odinId }: { odinId: string }) => { if (!odinId) return null; - return await getPendingRequest(dotYouClient, odinId); + return await getPendingRequest(odinClient, odinId); }; const acceptRequest = async ({ @@ -35,12 +35,12 @@ export const usePendingConnection = ({ odinId }: { odinId?: string }) => { senderOdinId: string; circleIds: string[]; }) => { - await acceptConnectionRequest(dotYouClient, senderOdinId, circleIds); + await acceptConnectionRequest(odinClient, senderOdinId, circleIds); // Save contact - const connectionInfo = await fetchConnectionInfo(dotYouClient, senderOdinId); + const connectionInfo = await fetchConnectionInfo(odinClient, senderOdinId); if (connectionInfo) - await saveContact(dotYouClient, { + await saveContact(odinClient, { fileMetadata: { appData: { content: connectionInfo } }, serverMetadata: { accessControlList: { requiredSecurityGroup: SecurityGroupType.Owner } }, }); @@ -49,7 +49,7 @@ export const usePendingConnection = ({ odinId }: { odinId?: string }) => { }; const ignoreRequest = async ({ senderOdinId }: { senderOdinId: string }) => { - return await deletePendingRequest(dotYouClient, senderOdinId); + return await deletePendingRequest(odinClient, senderOdinId); }; return { @@ -72,16 +72,16 @@ export const usePendingConnection = ({ odinId }: { odinId?: string }) => { pages: data.pages.map((page, index) => index === 0 ? { - ...page, - results: [ - newConnection, - ...page.results.filter((r) => r.odinId !== newRequest.senderOdinId), - ], - } + ...page, + results: [ + newConnection, + ...page.results.filter((r) => r.odinId !== newRequest.senderOdinId), + ], + } : { - ...page, - results: page.results.filter((r) => r.odinId !== newRequest.senderOdinId), - } + ...page, + results: page.results.filter((r) => r.odinId !== newRequest.senderOdinId), + } ), })); diff --git a/packages/apps/owner-app/src/hooks/connections/useVerifyConnection.ts b/packages/apps/owner-app/src/hooks/connections/useVerifyConnection.ts index ac37797cb..5e83dace0 100644 --- a/packages/apps/owner-app/src/hooks/connections/useVerifyConnection.ts +++ b/packages/apps/owner-app/src/hooks/connections/useVerifyConnection.ts @@ -1,11 +1,11 @@ import { useMutation } from '@tanstack/react-query'; import { verifyConnection } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useVerifyConnection = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); - const doVerifyConnection = async (odinId: string) => verifyConnection(dotYouClient, odinId); + const doVerifyConnection = async (odinId: string) => verifyConnection(odinClient, odinId); return { confirmConnection: useMutation({ diff --git a/packages/apps/owner-app/src/hooks/drives/useDrive.ts b/packages/apps/owner-app/src/hooks/drives/useDrive.ts index e6c98bf30..df2887523 100644 --- a/packages/apps/owner-app/src/hooks/drives/useDrive.ts +++ b/packages/apps/owner-app/src/hooks/drives/useDrive.ts @@ -10,11 +10,11 @@ import { editDriveAllowSubscriptions, } from '@homebase-id/js-lib/core'; import { drivesEqual } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useDrive = (props?: { targetDrive?: TargetDrive; fetchOutboxStatus?: boolean }) => { const { targetDrive, fetchOutboxStatus } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetch = async (targetDrive: TargetDrive) => { @@ -27,13 +27,13 @@ export const useDrive = (props?: { targetDrive?: TargetDrive; fetchOutboxStatus? if (foundDrive) return foundDrive; } - const allDrives = await (await getDrivesByType(dotYouClient, targetDrive.type, 1, 100)).results; + const allDrives = await (await getDrivesByType(odinClient, targetDrive.type, 1, 100)).results; return allDrives.find((drive) => drivesEqual(drive.targetDriveInfo, targetDrive)) || null; }; const fetchDriveDetail = async (targetDrive: TargetDrive) => - await getDriveStatus(dotYouClient, targetDrive); + await getDriveStatus(odinClient, targetDrive); const editDescription = async ({ targetDrive, @@ -42,7 +42,7 @@ export const useDrive = (props?: { targetDrive?: TargetDrive; fetchOutboxStatus? targetDrive: TargetDrive; newDescription: string; }) => { - return editDriveMetadata(dotYouClient, targetDrive, newDescription); + return editDriveMetadata(odinClient, targetDrive, newDescription); }; const editAnonymousRead = async ({ @@ -52,7 +52,7 @@ export const useDrive = (props?: { targetDrive?: TargetDrive; fetchOutboxStatus? targetDrive: TargetDrive; newAllowAnonymousRead: boolean; }) => { - return editDriveAllowAnonymousRead(dotYouClient, targetDrive, newAllowAnonymousRead); + return editDriveAllowAnonymousRead(odinClient, targetDrive, newAllowAnonymousRead); }; const editAllowSubscriptions = async ({ @@ -62,7 +62,7 @@ export const useDrive = (props?: { targetDrive?: TargetDrive; fetchOutboxStatus? targetDrive: TargetDrive; newAllowSubscriptions: boolean; }) => { - return editDriveAllowSubscriptions(dotYouClient, targetDrive, newAllowSubscriptions); + return editDriveAllowSubscriptions(odinClient, targetDrive, newAllowSubscriptions); }; const editAttributes = async ({ @@ -72,7 +72,7 @@ export const useDrive = (props?: { targetDrive?: TargetDrive; fetchOutboxStatus? targetDrive: TargetDrive; newAttributes: { [key: string]: string }; }) => { - return editDriveAttributes(dotYouClient, targetDrive, newAttributes); + return editDriveAttributes(odinClient, targetDrive, newAttributes); }; return { diff --git a/packages/apps/owner-app/src/hooks/drives/useDrives.ts b/packages/apps/owner-app/src/hooks/drives/useDrives.ts index e98841abf..175e59e42 100644 --- a/packages/apps/owner-app/src/hooks/drives/useDrives.ts +++ b/packages/apps/owner-app/src/hooks/drives/useDrives.ts @@ -1,12 +1,12 @@ import { useQuery } from '@tanstack/react-query'; import { DriveDefinition, getDrives } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useDrives = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchAll = async (): Promise => { - return (await getDrives(dotYouClient, { pageNumber: 1, pageSize: 100 })).results; + return (await getDrives(odinClient, { pageNumber: 1, pageSize: 100 })).results; }; return { diff --git a/packages/apps/owner-app/src/hooks/drives/useExport.ts b/packages/apps/owner-app/src/hooks/drives/useExport.ts index 2c00d6789..f67d839f3 100644 --- a/packages/apps/owner-app/src/hooks/drives/useExport.ts +++ b/packages/apps/owner-app/src/hooks/drives/useExport.ts @@ -12,7 +12,7 @@ import { DEFAULT_PAYLOAD_KEY, } from '@homebase-id/js-lib/core'; import { jsonStringify64 } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; const includeMetadataHeader = true; const pageSize = 10; @@ -73,12 +73,12 @@ export const isImportable = (obj: unknown): obj is importable => { }; export const useExport = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const getAllFilesOnDrive = async (drive: TargetDrive) => { const queryBatchPart = async (cursorState: string | undefined) => { return await queryBatch( - dotYouClient, + odinClient, { targetDrive: drive }, { maxRecords: pageSize, @@ -111,14 +111,14 @@ export const useExport = () => { const getPayloadForDsr = async (dsr: HomebaseFile) => { if (dsr.fileMetadata.appData.content) { return await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader ); } else { return ( - (await getPayloadBytes(dotYouClient, targetDrive, dsr.fileId, DEFAULT_PAYLOAD_KEY)) + (await getPayloadBytes(odinClient, targetDrive, dsr.fileId, DEFAULT_PAYLOAD_KEY)) ?.bytes || null ); } diff --git a/packages/apps/owner-app/src/hooks/eula/useEula.ts b/packages/apps/owner-app/src/hooks/eula/useEula.ts index 12fd46466..8af4cefa7 100644 --- a/packages/apps/owner-app/src/hooks/eula/useEula.ts +++ b/packages/apps/owner-app/src/hooks/eula/useEula.ts @@ -1,11 +1,11 @@ import { useMutation, useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useEula = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchRequired = async (): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const required = await client .post('/config/system/iseulasignaturerequired') .then((response) => !!response?.data); @@ -17,7 +17,7 @@ export const useEula = () => { }; const markAccepted = (version: string) => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client .post('/config/system/MarkEulaSigned', { version, diff --git a/packages/apps/owner-app/src/hooks/files/useFiles.ts b/packages/apps/owner-app/src/hooks/files/useFiles.ts index 64681ac5c..ceee069cf 100644 --- a/packages/apps/owner-app/src/hooks/files/useFiles.ts +++ b/packages/apps/owner-app/src/hooks/files/useFiles.ts @@ -22,7 +22,7 @@ import { getLocalContentFromHeader, } from '@homebase-id/js-lib/core'; import { jsonStringify64, tryJsonParse } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; const includeMetadataHeader = true; const includeTransferHistory = true; @@ -35,7 +35,7 @@ export const useFiles = ({ targetDrive: TargetDrive; systemFileType?: SystemFileType; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchFiles = async ({ targetDrive, @@ -45,7 +45,7 @@ export const useFiles = ({ pageParam: string | undefined; }) => { const response = await queryBatch( - dotYouClient, + odinClient, { targetDrive, systemFileType }, { cursorState: pageParam, @@ -78,7 +78,7 @@ export const useFileQuery = ({ id: string | undefined; systemFileType?: SystemFileType; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); return useQuery({ queryKey: ['file', targetDrive?.alias, id], @@ -87,14 +87,14 @@ export const useFileQuery = ({ const queryFile = async (decrypt = true) => { // Search by fileId - const fileByFileId = await getFileHeader(dotYouClient, targetDrive, id, { + const fileByFileId = await getFileHeader(odinClient, targetDrive, id, { systemFileType, decrypt, }); if (fileByFileId) return fileByFileId; // Search by uniqueId - const fileByUniqueId = await getFileHeaderByUniqueId(dotYouClient, targetDrive, id, { + const fileByUniqueId = await getFileHeaderByUniqueId(odinClient, targetDrive, id, { systemFileType, decrypt, }); @@ -102,7 +102,7 @@ export const useFileQuery = ({ // Search by globalTransitId const fileByGlobalTransitId = await getFileHeaderBytesByGlobalTransitId( - dotYouClient, + odinClient, targetDrive, id, { systemFileType } @@ -123,7 +123,7 @@ export const useFileQuery = ({ ...decryptedFile.fileMetadata.appData, }, localAppData: await getLocalContentFromHeader( - dotYouClient, + odinClient, targetDrive, decryptedFile, true @@ -153,20 +153,19 @@ export const useFile = ({ systemFileType?: SystemFileType; }) => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchFile = async (result: HomebaseFile | DeletedHomebaseFile, payloadKey?: string) => { if (payloadKey) { - const payload = await getPayloadBytes(dotYouClient, targetDrive, result.fileId, payloadKey, { + const payload = await getPayloadBytes(odinClient, targetDrive, result.fileId, payloadKey, { systemFileType: result.fileSystemType, }); if (!payload) return null; return window.URL.createObjectURL( new Blob([payload.bytes], { - type: `${ - result.fileMetadata.payloads?.find((payload) => payload.key === payloadKey)?.contentType - };charset=utf-8`, + type: `${result.fileMetadata.payloads?.find((payload) => payload.key === payloadKey)?.contentType + };charset=utf-8`, }) ); } @@ -175,9 +174,9 @@ export const useFile = ({ try { return result.fileMetadata.appData.content && result.fileMetadata.isEncrypted ? await decryptJsonContent( - result.fileMetadata, - await decryptKeyHeader(dotYouClient, result.sharedSecretEncryptedKeyHeader) - ) + result.fileMetadata, + await decryptKeyHeader(odinClient, result.sharedSecretEncryptedKeyHeader) + ) : result.fileMetadata.appData.content; } catch (e) { console.error('Failed to decrypt file', e); @@ -196,7 +195,7 @@ export const useFile = ({ }, serverMetadata: result.serverMetadata, defaultPayload: await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, result, includeMetadataHeader, @@ -213,7 +212,7 @@ export const useFile = ({ }; const removeFile = async (fileId: string) => - await deleteFile(dotYouClient, targetDrive, fileId, undefined, systemFileType); + await deleteFile(odinClient, targetDrive, fileId, undefined, systemFileType); return { fetchFile: fetchFile, diff --git a/packages/apps/owner-app/src/hooks/follow/useFollower.ts b/packages/apps/owner-app/src/hooks/follow/useFollower.ts index c24914be3..65df8808d 100644 --- a/packages/apps/owner-app/src/hooks/follow/useFollower.ts +++ b/packages/apps/owner-app/src/hooks/follow/useFollower.ts @@ -1,16 +1,16 @@ import { useQuery } from '@tanstack/react-query'; import { fetchFollower } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; type useFollowerProps = { odinId?: string; }; export const useFollower = ({ odinId }: useFollowerProps) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchFollowDetails = async ({ odinId }: { odinId: string }) => { - const response = await fetchFollower(dotYouClient, odinId); + const response = await fetchFollower(odinClient, odinId); return response; }; diff --git a/packages/apps/owner-app/src/hooks/inbox/useOwnerInboxProcessor.ts b/packages/apps/owner-app/src/hooks/inbox/useOwnerInboxProcessor.ts index 6871fbff9..cd246aaf7 100644 --- a/packages/apps/owner-app/src/hooks/inbox/useOwnerInboxProcessor.ts +++ b/packages/apps/owner-app/src/hooks/inbox/useOwnerInboxProcessor.ts @@ -1,14 +1,14 @@ import { processInbox } from '@homebase-id/js-lib/peer'; import { useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; const BATCH_SIZE = 100; export const useOwnerInboxProcessor = (connected?: boolean) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchData = async () => await processInbox( - dotYouClient, + odinClient, { alias: '90f5e74ab7f9efda0ac298373a32ad8c', type: '90f5e74ab7f9efda0ac298373a32ad8c' }, BATCH_SIZE ); diff --git a/packages/apps/owner-app/src/hooks/notifications/usePushNotificationClients.ts b/packages/apps/owner-app/src/hooks/notifications/usePushNotificationClients.ts index d772eca4f..52d138740 100644 --- a/packages/apps/owner-app/src/hooks/notifications/usePushNotificationClients.ts +++ b/packages/apps/owner-app/src/hooks/notifications/usePushNotificationClients.ts @@ -1,5 +1,5 @@ import { useQueryClient, useMutation, useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext, OWNER_APP_ID, t } from '@homebase-id/common-app'; +import { useOdinClientContext, OWNER_APP_ID, t } from '@homebase-id/common-app'; import { useState, useEffect } from 'react'; import { getApplicationServerKey, @@ -16,7 +16,7 @@ import { formatGuidId, getNewId, hasDebugFlag } from '@homebase-id/js-lib/helper const isDebug = hasDebugFlag(); const TestGuid = '00000000-0000-0000-0000-000000000000'; export const usePushNotificationClient = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const [isReady, setIsReady] = useState(false); @@ -41,7 +41,7 @@ export const usePushNotificationClient = () => { const correlationId = formatGuidId(getNewId()); return await SendNotification( - dotYouClient, + odinClient, { appId: OWNER_APP_ID, typeId: TestGuid, @@ -83,7 +83,7 @@ export const usePushNotificationClient = () => { .subscribe(options) .then(async (pushSubscription) => { console.log('Push registration success, sending to server...'); - await registerNewDevice(dotYouClient, pushSubscription); + await registerNewDevice(odinClient, pushSubscription); queryClient.invalidateQueries({ queryKey: ['notification-clients', 'current'], @@ -114,26 +114,26 @@ export const usePushNotificationClient = () => { export const usePushNotificationClients = () => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const getCurrentClient = async () => { - return await getCurrentDeviceDetails(dotYouClient); + return await getCurrentDeviceDetails(odinClient); }; const removeCurrentDevice = async () => { - return await removeCurrentRegisteredDevice(dotYouClient); + return await removeCurrentRegisteredDevice(odinClient); }; const _removeRegisteredDevice = async (key: string) => { - return await removeRegisteredDevice(dotYouClient, key); + return await removeRegisteredDevice(odinClient, key); }; const getNotificationClients = async () => { - return await getRegisteredDevices(dotYouClient); + return await getRegisteredDevices(odinClient); }; const removeAllClients = async () => { - return await removeAllRegisteredDevice(dotYouClient); + return await removeAllRegisteredDevice(odinClient); }; return { diff --git a/packages/apps/owner-app/src/hooks/profiles/useAttribute.ts b/packages/apps/owner-app/src/hooks/profiles/useAttribute.ts index 1ce206e84..61df9e4f6 100644 --- a/packages/apps/owner-app/src/hooks/profiles/useAttribute.ts +++ b/packages/apps/owner-app/src/hooks/profiles/useAttribute.ts @@ -2,7 +2,7 @@ import { QueryClient, useMutation, useQuery, useQueryClient } from '@tanstack/re import { Attribute, getProfileAttribute } from '@homebase-id/js-lib/profile'; import { invalidateSiteData, - useDotYouClientContext, + useOdinClientContext, useStaticFiles, } from '@homebase-id/common-app'; import { AttributeDefinitions } from './AttributeDefinitions'; @@ -23,7 +23,7 @@ const getListItemCacheKey = (newAttrVm: Attribute) => { export const useAttribute = (props?: { profileId?: string; attributeId?: string }) => { const { profileId, attributeId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const { mutate: publishStaticFiles } = useStaticFiles().publish; @@ -33,7 +33,7 @@ export const useAttribute = (props?: { profileId?: string; attributeId?: string if (!profileId || !attributeId) { return null; } - const foundAttribute = await getProfileAttribute(dotYouClient, profileId, attributeId); + const foundAttribute = await getProfileAttribute(odinClient, profileId, attributeId); return foundAttribute || null; }; @@ -41,19 +41,19 @@ export const useAttribute = (props?: { profileId?: string; attributeId?: string const saveData = async (attribute: NewHomebaseFile | HomebaseFile) => { const onVersionConflict = async () => { const serverAttr = await getProfileAttribute( - dotYouClient, + odinClient, attribute.fileMetadata.appData.content.profileId, attribute.fileMetadata.appData.content.id ); if (!serverAttr || !serverAttr.fileMetadata.appData.content) return; const newAttr = { ...attribute, ...(serverAttr as HomebaseFile) }; - return saveProfileAttribute(dotYouClient, newAttr, onVersionConflict); + return saveProfileAttribute(odinClient, newAttr, onVersionConflict); }; // Don't edit original attribute as it will be used for caching decisions in onSettled const uploadResult = saveProfileAttribute( - dotYouClient, + odinClient, { ...attribute, }, @@ -74,7 +74,7 @@ export const useAttribute = (props?: { profileId?: string; attributeId?: string (attribute.fileMetadata.appData.content as Attribute)?.profileId || overrideProfileId; if (attribute.fileId && profileId) - return await removeProfileAttribute(dotYouClient, profileId, attribute.fileId); + return await removeProfileAttribute(odinClient, profileId, attribute.fileId); else console.error('No FileId provided for removeData'); }; @@ -137,8 +137,8 @@ export const useAttribute = (props?: { profileId?: string; attributeId?: string (data) => (data?.some((attr) => attr.fileMetadata.appData.content.id === newAttrVm.id) ? data?.map((attr) => - attr.fileMetadata.appData.content.id === newAttrVm.id ? updatedDsr : attr - ) + attr.fileMetadata.appData.content.id === newAttrVm.id ? updatedDsr : attr + ) : [updatedDsr, ...(data ?? [])] )?.sort( (a, b) => @@ -221,7 +221,7 @@ export const useAttribute = (props?: { profileId?: string; attributeId?: string invalidateAttributes( queryClient, (variables.attribute.fileMetadata.appData.content as Attribute)?.profileId || - variables.overrideProfileId + variables.overrideProfileId ); return; } diff --git a/packages/apps/owner-app/src/hooks/profiles/useAttributeVersions.ts b/packages/apps/owner-app/src/hooks/profiles/useAttributeVersions.ts index c9df3210f..4e7d883e7 100644 --- a/packages/apps/owner-app/src/hooks/profiles/useAttributeVersions.ts +++ b/packages/apps/owner-app/src/hooks/profiles/useAttributeVersions.ts @@ -1,12 +1,12 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; import { getProfileAttributes } from '@homebase-id/js-lib/profile'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useAttributeVersions = ({ profileId, type }: { profileId: string; type: string }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchVersions = async ({ profileId, type }: { profileId: string; type: string }) => { - return await getProfileAttributes(dotYouClient, profileId, undefined, [type]); + return await getProfileAttributes(odinClient, profileId, undefined, [type]); }; return { fetchVersions: useQuery({ diff --git a/packages/apps/owner-app/src/hooks/profiles/useAttributes.ts b/packages/apps/owner-app/src/hooks/profiles/useAttributes.ts index fb2c74e05..1ec64acf0 100644 --- a/packages/apps/owner-app/src/hooks/profiles/useAttributes.ts +++ b/packages/apps/owner-app/src/hooks/profiles/useAttributes.ts @@ -3,7 +3,7 @@ import { Attribute, getProfileAttributes } from '@homebase-id/js-lib/profile'; import { AttributeDefinition, AttributeDefinitions } from './AttributeDefinitions'; import { HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { removeProfileAttribute } from '../../provider/profile/AttributeData/ManageAttributeProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export interface AttributeVm extends Attribute { typeDefinition?: AttributeDefinition; @@ -16,14 +16,14 @@ export const useAttributes = ({ profileId?: string; sectionId?: string; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetchData = async (profileId: string, sectionId: string) => { if (!profileId || !sectionId) return; const foundAttributes = await getProfileAttributes( - dotYouClient, + odinClient, profileId, sectionId, undefined, @@ -39,11 +39,11 @@ export const useAttributes = ({ ...attr.fileMetadata.appData, content: attr.fileMetadata.appData.content ? { - ...attr.fileMetadata.appData.content, - typeDefinition: Object.values(AttributeDefinitions).find((def) => { - return def.type === attr.fileMetadata.appData.content?.type; - }), - } + ...attr.fileMetadata.appData.content, + typeDefinition: Object.values(AttributeDefinitions).find((def) => { + return def.type === attr.fileMetadata.appData.content?.type; + }), + } : undefined, }, }, @@ -63,7 +63,7 @@ export const useAttributes = ({ } const foundAttributes = await getProfileAttributes( - dotYouClient, + odinClient, profileId, sectionId, undefined, @@ -72,7 +72,7 @@ export const useAttributes = ({ return await Promise.all( foundAttributes.map( - async (attr) => attr?.fileId && removeProfileAttribute(dotYouClient, profileId, attr.fileId) + async (attr) => attr?.fileId && removeProfileAttribute(odinClient, profileId, attr.fileId) ) ); }; diff --git a/packages/apps/owner-app/src/hooks/profiles/useHomeAttributes.ts b/packages/apps/owner-app/src/hooks/profiles/useHomeAttributes.ts index f392bddc6..31fec8935 100644 --- a/packages/apps/owner-app/src/hooks/profiles/useHomeAttributes.ts +++ b/packages/apps/owner-app/src/hooks/profiles/useHomeAttributes.ts @@ -4,15 +4,15 @@ import { HomePageAttributes, HomePageConfig } from '@homebase-id/js-lib/public'; import { AttributeVm } from './useAttributes'; import { AttributeDefinitions } from './AttributeDefinitions'; import { HomebaseFile } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useHomeAttributes = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchTheme = async () => { const foundThemeAttributes = ( await getProfileAttributes( - dotYouClient, + odinClient, HomePageConfig.DefaultDriveId, undefined, [HomePageAttributes.Theme], diff --git a/packages/apps/owner-app/src/hooks/profiles/useProfileSections.ts b/packages/apps/owner-app/src/hooks/profiles/useProfileSections.ts index c365a9add..cf13506b0 100644 --- a/packages/apps/owner-app/src/hooks/profiles/useProfileSections.ts +++ b/packages/apps/owner-app/src/hooks/profiles/useProfileSections.ts @@ -6,18 +6,18 @@ import { saveProfileSection, } from '@homebase-id/js-lib/profile'; import { useAttributes } from './useAttributes'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useProfileSections = ({ profileId }: { profileId?: string }) => { const queryClient = useQueryClient(); const { mutateAsync: removeAttributes } = useAttributes({}).removeAttributes; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchSections = async ({ profileId }: { profileId: string }) => { if (!profileId) { return []; } - const definitions = await getProfileSections(dotYouClient, profileId); + const definitions = await getProfileSections(odinClient, profileId); return definitions; }; @@ -29,7 +29,7 @@ export const useProfileSections = ({ profileId }: { profileId?: string }) => { profileId: string; profileSection: ProfileSection; }) => { - await saveProfileSection(dotYouClient, profileId, profileSection); + await saveProfileSection(odinClient, profileId, profileSection); return { profileId, profileSection }; }; @@ -42,7 +42,7 @@ export const useProfileSections = ({ profileId }: { profileId?: string }) => { }) => { await removeAttributes({ profileId: profileId, sectionId: profileSection.sectionId }); - return await removeProfileSection(dotYouClient, profileId, profileSection.sectionId); + return await removeProfileSection(odinClient, profileId, profileSection.sectionId); }; return { diff --git a/packages/apps/owner-app/src/hooks/recovery/useRecoveryKey.ts b/packages/apps/owner-app/src/hooks/recovery/useRecoveryKey.ts index 088347e1d..5077a4fa4 100644 --- a/packages/apps/owner-app/src/hooks/recovery/useRecoveryKey.ts +++ b/packages/apps/owner-app/src/hooks/recovery/useRecoveryKey.ts @@ -1,10 +1,10 @@ import { useQuery } from '@tanstack/react-query'; import { getRecoveryKey } from '../../provider/auth/RecoveryProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useRecoveryKey = () => { - const dotYouClient = useDotYouClientContext(); - const fetchKey = async () => await getRecoveryKey(dotYouClient); + const odinClient = useOdinClientContext(); + const fetchKey = async () => await getRecoveryKey(odinClient); return { fetchKey: useQuery({ diff --git a/packages/apps/owner-app/src/hooks/removal/useAccountRemoval.ts b/packages/apps/owner-app/src/hooks/removal/useAccountRemoval.ts index 0e02d7f8e..e5159d15e 100644 --- a/packages/apps/owner-app/src/hooks/removal/useAccountRemoval.ts +++ b/packages/apps/owner-app/src/hooks/removal/useAccountRemoval.ts @@ -1,5 +1,5 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { accountDeletionStatus, markAccountDeletion, @@ -10,20 +10,20 @@ const MINUTE_IN_MS = 60000; export const useAccountRemoval = () => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); const getAccountDeletionStatus = async () => { - return accountDeletionStatus(dotYouClient); + return accountDeletionStatus(odinClient); }; const markDeletion = async (currentPassword: string) => { - return await markAccountDeletion(dotYouClient, currentPassword); + return await markAccountDeletion(odinClient, currentPassword); }; const unMarkDeletion = async (currentPassword: string) => { - return await unmarkAccountDeletion(dotYouClient, currentPassword); + return await unmarkAccountDeletion(odinClient, currentPassword); }; return { diff --git a/packages/apps/owner-app/src/hooks/settings/useSettings.ts b/packages/apps/owner-app/src/hooks/settings/useSettings.ts index 4ea682ad2..9b82fa46a 100644 --- a/packages/apps/owner-app/src/hooks/settings/useSettings.ts +++ b/packages/apps/owner-app/src/hooks/settings/useSettings.ts @@ -6,26 +6,26 @@ import { updateFlag, updateSettings, } from '../../provider/system/SettingsProvider'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useSettings = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetchFlags = async () => { - return getFlags(dotYouClient); + return getFlags(odinClient); }; const updateFlagInternal = async ({ name, value }: { name: string; value: boolean }) => { - return updateFlag(dotYouClient, name, value); + return updateFlag(odinClient, name, value); }; const fetchUiSettings = async () => { - return getSettings(dotYouClient); + return getSettings(odinClient); }; const updateUiSetting = async (settings: uiSettings) => { - return updateSettings(dotYouClient, settings); + return updateSettings(odinClient, settings); }; return { diff --git a/packages/apps/owner-app/src/hooks/useAutoFixDefaultConfig.ts b/packages/apps/owner-app/src/hooks/useAutoFixDefaultConfig.ts index 4ea3a1600..64fea6dfb 100644 --- a/packages/apps/owner-app/src/hooks/useAutoFixDefaultConfig.ts +++ b/packages/apps/owner-app/src/hooks/useAutoFixDefaultConfig.ts @@ -1,4 +1,4 @@ -import { getOdinIdColor, useDotYouClientContext, useErrors } from '@homebase-id/common-app'; +import { getOdinIdColor, useOdinClientContext, useErrors } from '@homebase-id/common-app'; import { base64ToUint8Array, byteArrayToString, @@ -27,7 +27,7 @@ export const useAutofixDefaultConfig = () => { const lastRunAutoFix = uiSettings?.lastRunAutoFix; const shouldRun = lastRunAutoFix !== AUTO_FIX_VERSION; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const isRunning = useRef(); const { fixDefaultProfileImage } = useFixDefaultProfileImage(); @@ -39,7 +39,7 @@ export const useAutofixDefaultConfig = () => { (async () => { try { await fixDefaultProfileImage(); - await autoFixConnections(dotYouClient); + await autoFixConnections(odinClient); updateUiSetting({ ...uiSettings, lastRunAutoFix: AUTO_FIX_VERSION }); console.log('[useAutoFixDefaultConfig] Finished ', AUTO_FIX_VERSION); @@ -55,13 +55,13 @@ export const useAutofixDefaultConfig = () => { }; const useFixDefaultProfileImage = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const { mutateAsync: saveAttr } = useAttribute().save; return { fixDefaultProfileImage: async () => { const data = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.Photo], diff --git a/packages/apps/owner-app/src/hooks/useLiveOwnerProcessor.ts b/packages/apps/owner-app/src/hooks/useLiveOwnerProcessor.ts index b63dd2fe0..1d766d8b9 100644 --- a/packages/apps/owner-app/src/hooks/useLiveOwnerProcessor.ts +++ b/packages/apps/owner-app/src/hooks/useLiveOwnerProcessor.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import { useQueryClient } from '@tanstack/react-query'; -import { DotYouClient, TypedConnectionNotification } from '@homebase-id/js-lib/core'; +import { OdinClient, TypedConnectionNotification } from '@homebase-id/js-lib/core'; import { invalidateActiveConnections, invalidatePendingConnections, @@ -17,7 +17,7 @@ export const useLiveOwnerProcessor = () => { const useOwnerWebSocket = (isEnabled: boolean) => { const queryClient = useQueryClient(); - const handler = useCallback((_: DotYouClient, notification: TypedConnectionNotification) => { + const handler = useCallback((_: OdinClient, notification: TypedConnectionNotification) => { if (notification.notificationType === 'connectionFinalized') { setTimeout(() => { invalidatePendingConnections(queryClient); diff --git a/packages/apps/owner-app/src/provider/app/AppManagementProvider.ts b/packages/apps/owner-app/src/provider/app/AppManagementProvider.ts index d11c4cc32..55a592dac 100644 --- a/packages/apps/owner-app/src/provider/app/AppManagementProvider.ts +++ b/packages/apps/owner-app/src/provider/app/AppManagementProvider.ts @@ -13,15 +13,15 @@ import { PermissionUpdateRequest, PermissionSetGrantRequest, } from './AppManagementProviderTypes'; -import { DotYouClient } from '@homebase-id/js-lib/core'; +import { OdinClient } from '@homebase-id/js-lib/core'; import { DriveGrant } from '@homebase-id/js-lib/network'; //adds the specified client to the list of allowed clients for a given app; returns a CAT export const RegisterAppClient = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: AppClientRegistrationRequest ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post( 'appmanagement/register/client', request @@ -30,10 +30,10 @@ export const RegisterAppClient = async ( }; export const GetAppClients = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, appId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post(`appmanagement/clients`, { appId: appId, }); @@ -41,10 +41,10 @@ export const GetAppClients = async ( }; export const RemoveClient = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: { appId: string; registrationId: string } ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post('appmanagement/deleteClient', { accessRegistrationId: request.registrationId, }); @@ -52,10 +52,10 @@ export const RemoveClient = async ( }; export const RevokeClient = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: { appId: string; registrationId: string } ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post('appmanagement/revokeClient', { accessRegistrationId: request.registrationId, }); @@ -63,10 +63,10 @@ export const RevokeClient = async ( }; export const AllowClient = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: { appId: string; registrationId: string } ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post('appmanagement/allowClient', { accessRegistrationId: request.registrationId, }); @@ -74,10 +74,10 @@ export const AllowClient = async ( }; export const RegisterChatAppClient_temp = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: AppClientRegistrationRequest ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post( 'appmanagement/register/chatclient_temp', request @@ -87,10 +87,10 @@ export const RegisterChatAppClient_temp = async ( }; export const RegisterApp = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: AppRegistrationRequest ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post('appmanagement/register/app', { ...request, drives: request.drives?.map((driveGrant) => ({ @@ -110,10 +110,10 @@ export const RegisterApp = async ( }; export const GetAppRegistration = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: GetAppRequest ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const appreg = await client .post('appmanagement/app', request) .then((response) => response.data); @@ -147,9 +147,9 @@ export const GetAppRegistration = async ( }; export const GetAppRegistrations = async ( - dotYouClient: DotYouClient + odinClient: OdinClient ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.get('appmanagement/list'); return response.data.map((appreg) => { @@ -182,38 +182,38 @@ export const GetAppRegistrations = async ( }; export const RevokeApp = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: GetAppRequest ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); await client.post('appmanagement/revoke', request); }; export const AllowApp = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: GetAppRequest ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return await client.post('appmanagement/allow', request).then((response) => response.data); }; export const RemoveApp = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: GetAppRequest ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return await client.post('appmanagement/deleteApp', request).then((response) => response.data); }; export const UpdateAuthorizedCircles = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: { appId: string; authorizedCircles: string[]; circleMemberPermissionGrant: PermissionSetGrantRequest; } ) => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post('appmanagement/register/updateauthorizedcircles', { ...request, circleMemberPermissionGrant: { @@ -228,7 +228,7 @@ export const UpdateAuthorizedCircles = async ( }; export const UpdatePermissions = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: PermissionUpdateRequest ) => { const cleanedUpRequest: PermissionUpdateRequest = { @@ -250,7 +250,7 @@ export const UpdatePermissions = async ( }, [] as DriveGrant[]), }; - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.post('appmanagement/register/updateapppermissions', { ...cleanedUpRequest, drives: cleanedUpRequest.drives.map((driveGrant) => ({ diff --git a/packages/apps/owner-app/src/provider/auth/AuthenticationProvider.ts b/packages/apps/owner-app/src/provider/auth/AuthenticationProvider.ts index 1d9464817..7c705f3b6 100644 --- a/packages/apps/owner-app/src/provider/auth/AuthenticationProvider.ts +++ b/packages/apps/owner-app/src/provider/auth/AuthenticationProvider.ts @@ -1,7 +1,7 @@ import { base64ToUint8Array } from '@homebase-id/js-lib/helpers'; import { OwnerClient } from '@homebase-id/common-app'; import { NonceData, encryptRecoveryKey, prepareAuthPassword } from './AuthenticationHelper'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; interface AuthenticationResponse { sharedSecret: Uint8Array; @@ -9,14 +9,14 @@ interface AuthenticationResponse { // Authenticate the owner export const authenticate = async (password: string): Promise => { - const dotYouClient = new OwnerClient({ + const odinClient = new OwnerClient({ api: ApiType.Owner, }); - const noncePackage = await getNonce(dotYouClient); + const noncePackage = await getNonce(odinClient); const reply = await prepareAuthPassword(password, noncePackage); - const client = dotYouClient.createAxiosClient({ overrideEncryption: true }); + const client = odinClient.createAxiosClient({ overrideEncryption: true }); const url = '/authentication'; const response = await client.post(url, reply); @@ -35,14 +35,14 @@ export const setFirstPassword = async ( newPassword: string, firstRunToken: string ): Promise => { - const dotYouClient = new OwnerClient({ + const odinClient = new OwnerClient({ api: ApiType.Owner, }); - const salts = await getSalts(dotYouClient); + const salts = await getSalts(odinClient); const reply = await prepareAuthPassword(newPassword, salts); - return dotYouClient + return odinClient .createAxiosClient({ overrideEncryption: true }) .post('/authentication/passwd', { ...reply, firstRunToken }) .then((response) => { @@ -55,17 +55,17 @@ export const setFirstPassword = async ( }; export const resetPassword = async (newPassword: string, recoveryKey: string): Promise => { - const dotYouClient = new OwnerClient({ + const odinClient = new OwnerClient({ api: ApiType.Owner, }); - const salts = await getSalts(dotYouClient); + const salts = await getSalts(odinClient); const passwordReply = await prepareAuthPassword(newPassword, salts); - const publicKey = await getPublicKey(dotYouClient); + const publicKey = await getPublicKey(odinClient); const encryptedRecoveryKey = await encryptRecoveryKey(recoveryKey, passwordReply, publicKey); - return dotYouClient + return odinClient .createAxiosClient({ overrideEncryption: true }) .post('/authentication/resetpasswdrk', { passwordReply, encryptedRecoveryKey }) .then((response) => { @@ -78,17 +78,17 @@ export const resetPassword = async (newPassword: string, recoveryKey: string): P }; export const changePassword = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, oldPassword: string, newPassword: string ): Promise => { - const noncePackage = await getNonce(dotYouClient); + const noncePackage = await getNonce(odinClient); const currentAuthenticationPasswordReply = await prepareAuthPassword(oldPassword, noncePackage); - const salts = await getSalts(dotYouClient); + const salts = await getSalts(odinClient); const newPasswordReply = await prepareAuthPassword(newPassword, salts); - return dotYouClient + return odinClient .createAxiosClient({ overrideEncryption: false }) .post('/security/resetpasswd', { currentAuthenticationPasswordReply, newPasswordReply }) .then((response) => { @@ -101,10 +101,10 @@ export const changePassword = async ( }; export const finalizeRegistration = async (firstRunToken: string) => { - const dotYouClient = new OwnerClient({ + const odinClient = new OwnerClient({ api: ApiType.Owner, }); - const client = dotYouClient.createAxiosClient({ overrideEncryption: true }); + const client = odinClient.createAxiosClient({ overrideEncryption: true }); const url = '/config/registration/finalize?frid=' + firstRunToken; return await client.get(url).then((response) => { @@ -113,11 +113,11 @@ export const finalizeRegistration = async (firstRunToken: string) => { }; export const isPasswordSet = async (): Promise => { - const dotYouClient = new OwnerClient({ + const odinClient = new OwnerClient({ api: ApiType.Owner, }); - return dotYouClient + return odinClient .createAxiosClient({ overrideEncryption: true }) .post('/authentication/ispasswordset') .then((response) => { @@ -126,18 +126,18 @@ export const isPasswordSet = async (): Promise => { }; /// Internal helpers -export const getNonce = async (dotYouClient: DotYouClient): Promise => { - const client = dotYouClient.createAxiosClient({ overrideEncryption: true }); +export const getNonce = async (odinClient: OdinClient): Promise => { + const client = odinClient.createAxiosClient({ overrideEncryption: true }); return client .get('/authentication/nonce') .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; -const getSalts = async (dotYouClient: DotYouClient): Promise => { - const client = dotYouClient.createAxiosClient({ overrideEncryption: true }); +const getSalts = async (odinClient: OdinClient): Promise => { + const client = odinClient.createAxiosClient({ overrideEncryption: true }); return client.get('/authentication/getsalts').then((response) => { return response.data; }); @@ -149,8 +149,8 @@ export interface PublicKeyData { expiration: number; } -const getPublicKey = async (dotYouClient: DotYouClient): Promise => { - const client = dotYouClient.createAxiosClient({ overrideEncryption: true }); +const getPublicKey = async (odinClient: OdinClient): Promise => { + const client = odinClient.createAxiosClient({ overrideEncryption: true }); return client .get('/authentication/publickey_ecc?keyType=offlineKey') .then((response) => { diff --git a/packages/apps/owner-app/src/provider/auth/RecoveryProvider.ts b/packages/apps/owner-app/src/provider/auth/RecoveryProvider.ts index e245f166c..a04de160d 100644 --- a/packages/apps/owner-app/src/provider/auth/RecoveryProvider.ts +++ b/packages/apps/owner-app/src/provider/auth/RecoveryProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '@homebase-id/js-lib/core'; +import { OdinClient } from '@homebase-id/js-lib/core'; export interface RecoveryKeyResponse { key: string; @@ -8,8 +8,8 @@ export interface RecoveryKeyResponse { }; } -export const getRecoveryKey = async (dotYouClient: DotYouClient) => { - const axiosClient = dotYouClient.createAxiosClient(); +export const getRecoveryKey = async (odinClient: OdinClient) => { + const axiosClient = odinClient.createAxiosClient(); return await axiosClient .get(`/security/recovery-key`) diff --git a/packages/apps/owner-app/src/provider/network/domainNetwork/DomainManager.ts b/packages/apps/owner-app/src/provider/network/domainNetwork/DomainManager.ts index bacf5ff5b..e3c21b509 100644 --- a/packages/apps/owner-app/src/provider/network/domainNetwork/DomainManager.ts +++ b/packages/apps/owner-app/src/provider/network/domainNetwork/DomainManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '@homebase-id/js-lib/core'; +import { OdinClient } from '@homebase-id/js-lib/core'; const root = '/youauthdomain'; @@ -11,8 +11,8 @@ export interface DomainClient { isRevoked: boolean; } -export const getDomainClients = async (dotYouClient: DotYouClient, domain: string) => { - const client = dotYouClient.createAxiosClient(); +export const getDomainClients = async (odinClient: OdinClient, domain: string) => { + const client = odinClient.createAxiosClient(); const url = `${root}/clients?domain=${domain}`; return client.get(url).then((response) => { @@ -21,11 +21,11 @@ export const getDomainClients = async (dotYouClient: DotYouClient, domain: strin }; export const removeDomainClient = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, domain: string, accessRegistrationId: string ) => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/deleteClient'; return client.post(url, { accessRegistrationId }).then((response) => { @@ -33,8 +33,8 @@ export const removeDomainClient = async ( }); }; -export const revokeDomainAccess = async (dotYouClient: DotYouClient, domain: string) => { - const client = dotYouClient.createAxiosClient(); +export const revokeDomainAccess = async (odinClient: OdinClient, domain: string) => { + const client = odinClient.createAxiosClient(); const url = root + '/revoke'; return client.post(url, { domain }).then((response) => { @@ -42,8 +42,8 @@ export const revokeDomainAccess = async (dotYouClient: DotYouClient, domain: str }); }; -export const restoreDomainAccess = async (dotYouClient: DotYouClient, domain: string) => { - const client = dotYouClient.createAxiosClient(); +export const restoreDomainAccess = async (odinClient: OdinClient, domain: string) => { + const client = odinClient.createAxiosClient(); const url = root + '/allow'; return client.post(url, { domain }).then((response) => { @@ -51,8 +51,8 @@ export const restoreDomainAccess = async (dotYouClient: DotYouClient, domain: st }); }; -export const disconnectFromDomain = async (dotYouClient: DotYouClient, domain: string) => { - const client = dotYouClient.createAxiosClient(); +export const disconnectFromDomain = async (odinClient: OdinClient, domain: string) => { + const client = odinClient.createAxiosClient(); const url = root + '/deleteDomain'; return client.post(url, { domain }).then((response) => { diff --git a/packages/apps/owner-app/src/provider/network/troubleshooting/DataConversionProvider.ts b/packages/apps/owner-app/src/provider/network/troubleshooting/DataConversionProvider.ts index 8e63996b2..ed588335f 100644 --- a/packages/apps/owner-app/src/provider/network/troubleshooting/DataConversionProvider.ts +++ b/packages/apps/owner-app/src/provider/network/troubleshooting/DataConversionProvider.ts @@ -1,11 +1,11 @@ -import { DotYouClient } from '@homebase-id/js-lib/core'; +import { OdinClient } from '@homebase-id/js-lib/core'; import { assertIfDefined } from '@homebase-id/js-lib/helpers'; const dataConverionRoot = '/data-conversion'; -export const autoFixConnections = async (dotYouClient: DotYouClient) => { - assertIfDefined('DotYouClient is required', dotYouClient); +export const autoFixConnections = async (odinClient: OdinClient) => { + assertIfDefined('OdinClient is required', odinClient); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return await client .post(`${dataConverionRoot}/autofix-connections`, {}) .then((response) => { @@ -13,5 +13,5 @@ export const autoFixConnections = async (dotYouClient: DotYouClient) => { throw new Error('Auto fix connections failed with status ' + response.status); } }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; diff --git a/packages/apps/owner-app/src/provider/notifications/PushClientProvider.ts b/packages/apps/owner-app/src/provider/notifications/PushClientProvider.ts index 3ba51b94e..23e48b183 100644 --- a/packages/apps/owner-app/src/provider/notifications/PushClientProvider.ts +++ b/packages/apps/owner-app/src/provider/notifications/PushClientProvider.ts @@ -1,13 +1,13 @@ import { getBrowser, getOperatingSystem } from '@homebase-id/js-lib/auth'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { assertIfDefined } from '@homebase-id/js-lib/helpers'; export const getApplicationServerKey = async () => { - const dotYouClient = new DotYouClient({ + const odinClient = new OdinClient({ hostIdentity: window.location.hostname, api: ApiType.Guest, }); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return await client .get('/public/keys/notifications_pk', { validateStatus: () => true, @@ -21,14 +21,14 @@ export const getApplicationServerKey = async () => { }; export const registerNewDevice = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, subscription: PushSubscription, clientFriendlyName?: string ) => { const jsonObject = subscription.toJSON(); if (!subscription || !jsonObject.keys) throw new Error('Invalid subscription'); - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.post('/notify/push/subscribe', { friendlyName: clientFriendlyName || `${getBrowser()} ${getOperatingSystem().name}`, @@ -46,8 +46,8 @@ export interface PushNotificationSubscription { subscriptionStartedDate: number; } -export const getCurrentDeviceDetails = async (dotYouClient: DotYouClient) => { - const axiosClient = dotYouClient.createAxiosClient(); +export const getCurrentDeviceDetails = async (odinClient: OdinClient) => { + const axiosClient = odinClient.createAxiosClient(); return await axiosClient .get('/notify/push/subscription') @@ -55,29 +55,29 @@ export const getCurrentDeviceDetails = async (dotYouClient: DotYouClient) => { .catch(() => null); }; -export const getRegisteredDevices = async (dotYouClient: DotYouClient) => { - const axiosClient = dotYouClient.createAxiosClient(); +export const getRegisteredDevices = async (odinClient: OdinClient) => { + const axiosClient = odinClient.createAxiosClient(); return await axiosClient .get('/notify/push/list') .then((response) => response.data); }; -export const removeCurrentRegisteredDevice = async (dotYouClient: DotYouClient) => { - const axiosClient = dotYouClient.createAxiosClient(); +export const removeCurrentRegisteredDevice = async (odinClient: OdinClient) => { + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.post(`/notify/push/unsubscribe/`); }; -export const removeRegisteredDevice = async (dotYouClient: DotYouClient, key: string) => { - const axiosClient = dotYouClient.createAxiosClient(); +export const removeRegisteredDevice = async (odinClient: OdinClient, key: string) => { + const axiosClient = odinClient.createAxiosClient(); assertIfDefined('key', key); return await axiosClient.delete(`/notify/push/subscription?key=${key}`); }; -export const removeAllRegisteredDevice = async (dotYouClient: DotYouClient) => { - const axiosClient = dotYouClient.createAxiosClient(); +export const removeAllRegisteredDevice = async (odinClient: OdinClient) => { + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.post(`/notify/push/unsubscribeAll/`); }; diff --git a/packages/apps/owner-app/src/provider/profile/AttributeData/ManageAttributeProvider.ts b/packages/apps/owner-app/src/provider/profile/AttributeData/ManageAttributeProvider.ts index 753388f39..75cf78853 100644 --- a/packages/apps/owner-app/src/provider/profile/AttributeData/ManageAttributeProvider.ts +++ b/packages/apps/owner-app/src/provider/profile/AttributeData/ManageAttributeProvider.ts @@ -3,7 +3,7 @@ const OdinBlob: typeof Blob = Blob; import { - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, SecurityGroupType, @@ -43,7 +43,7 @@ import { } from '@homebase-id/js-lib/profile'; export const saveProfileAttribute = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, toSaveAttribute: HomebaseFile | NewHomebaseFile, onVersionConflict?: () => void ): Promise | NewHomebaseFile | undefined> => { @@ -63,14 +63,14 @@ export const saveProfileAttribute = async ( if (!attrContent.id) attrContent.id = getNewId(); else if (!toSaveAttribute.fileId) toSaveAttribute.fileId = - (await getProfileAttribute(dotYouClient, attrContent.profileId, attrContent.id))?.fileId ?? + (await getProfileAttribute(odinClient, attrContent.profileId, attrContent.id))?.fileId ?? undefined; const encrypt = !( toSaveAttribute.serverMetadata?.accessControlList.requiredSecurityGroup === - SecurityGroupType.Anonymous || + SecurityGroupType.Anonymous || toSaveAttribute.serverMetadata?.accessControlList.requiredSecurityGroup === - SecurityGroupType.Authenticated + SecurityGroupType.Authenticated ); if (!attrContent.id || !attrContent.profileId || !attrContent.type || !attrContent.sectionId) @@ -116,7 +116,7 @@ export const saveProfileAttribute = async ( // When switching between encrypted and unencrypted, we need to re-upload the full file if (wasEncrypted !== encrypt) { - const result = await reUploadFile(dotYouClient, instructionSet, metadata, encrypt); + const result = await reUploadFile(odinClient, instructionSet, metadata, encrypt); if (result) return { ...toSaveAttribute, @@ -132,7 +132,7 @@ export const saveProfileAttribute = async ( } const existingAttribute = await getAttributeByFileId( - dotYouClient, + odinClient, attrContent.profileId, toSaveAttribute.fileId ); @@ -182,7 +182,7 @@ export const saveProfileAttribute = async ( }; const result = await patchFile( - dotYouClient, + odinClient, keyHeader, patchInstructions, metadata, @@ -203,7 +203,7 @@ export const saveProfileAttribute = async ( } const result = await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, payloads, @@ -225,12 +225,12 @@ export const saveProfileAttribute = async ( }; export const removeProfileAttribute = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string, attributeFileId: string ): Promise => { const targetDrive = GetTargetDriveFromProfileId(profileId); - deleteFile(dotYouClient, targetDrive, attributeFileId); + deleteFile(odinClient, targetDrive, attributeFileId); }; // Attribute Processors: @@ -384,12 +384,12 @@ const processAttribute = async (attribute: Attribute) => { }; const getAttributeByFileId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string, fileId: string ): Promise | null> => { const targetDrive = GetTargetDriveFromProfileId(profileId); - const header = await getFileHeader(dotYouClient, targetDrive, fileId); + const header = await getFileHeader(odinClient, targetDrive, fileId); if (!header) return null; - return homebaseFileToProfileAttribute(dotYouClient, header, targetDrive, true); + return homebaseFileToProfileAttribute(odinClient, header, targetDrive, true); }; diff --git a/packages/apps/owner-app/src/provider/setup/SetupProvider.ts b/packages/apps/owner-app/src/provider/setup/SetupProvider.ts index 471e2de38..0fc506330 100644 --- a/packages/apps/owner-app/src/provider/setup/SetupProvider.ts +++ b/packages/apps/owner-app/src/provider/setup/SetupProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient, NewHomebaseFile, SecurityGroupType } from '@homebase-id/js-lib/core'; +import { OdinClient, NewHomebaseFile, SecurityGroupType } from '@homebase-id/js-lib/core'; import { HomePageConfig, HomePageAttributes, @@ -28,7 +28,7 @@ import { saveProfileAttribute } from '../profile/AttributeData/ManageAttributePr import { fallbackHeaderImage, invalidateSiteData } from '@homebase-id/common-app'; import { QueryClient } from '@tanstack/react-query'; -export const SetupProfileDefinition = async (dotYouClient: DotYouClient) => { +export const SetupProfileDefinition = async (odinClient: OdinClient) => { const initialStandardProfile: ProfileDefinition = { profileId: BuiltInProfiles.StandardProfileId, name: 'Standard Info', @@ -71,21 +71,21 @@ export const SetupProfileDefinition = async (dotYouClient: DotYouClient) => { isSystemSection: true, }; - if (!(await getProfileDefinition(dotYouClient, initialStandardProfile.profileId))) { - await saveProfileDefinition(dotYouClient, initialStandardProfile); + if (!(await getProfileDefinition(odinClient, initialStandardProfile.profileId))) { + await saveProfileDefinition(odinClient, initialStandardProfile); await saveProfileSection( - dotYouClient, + odinClient, initialStandardProfile.profileId, initialPersonalInfoSection ); - await saveProfileSection(dotYouClient, initialStandardProfile.profileId, initialLinksSection); - await saveProfileSection(dotYouClient, initialStandardProfile.profileId, initialAboutSection); + await saveProfileSection(odinClient, initialStandardProfile.profileId, initialLinksSection); + await saveProfileSection(odinClient, initialStandardProfile.profileId, initialAboutSection); } - if (!(await getProfileDefinition(dotYouClient, initialWallet.profileId))) { - await saveProfileDefinition(dotYouClient, initialWallet); + if (!(await getProfileDefinition(odinClient, initialWallet.profileId))) { + await saveProfileDefinition(odinClient, initialWallet); - await saveProfileSection(dotYouClient, initialWallet.profileId, initialCreditCardSection); + await saveProfileSection(odinClient, initialWallet.profileId, initialCreditCardSection); } const defaultShortBioAttribute: NewHomebaseFile = { @@ -110,14 +110,14 @@ export const SetupProfileDefinition = async (dotYouClient: DotYouClient) => { }; const shortBioAttr = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.FullBio], 1 ); - if (!shortBioAttr?.length) await saveProfileAttribute(dotYouClient, defaultShortBioAttribute); + if (!shortBioAttr?.length) await saveProfileAttribute(odinClient, defaultShortBioAttribute); const defaultStatusAttribute: NewHomebaseFile = { fileMetadata: { @@ -138,17 +138,17 @@ export const SetupProfileDefinition = async (dotYouClient: DotYouClient) => { }; const statusAttr = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.Status], 1 ); - if (!statusAttr?.length) await saveProfileAttribute(dotYouClient, defaultStatusAttribute); + if (!statusAttr?.length) await saveProfileAttribute(odinClient, defaultStatusAttribute); }; -export const SetupHome = async (dotYouClient: DotYouClient) => { +export const SetupHome = async (odinClient: OdinClient) => { const defaultThemeAttribute: NewHomebaseFile = { fileMetadata: { appData: { @@ -172,21 +172,21 @@ export const SetupHome = async (dotYouClient: DotYouClient) => { }; const themeDef = await getProfileAttributes( - dotYouClient, + odinClient, HomePageConfig.DefaultDriveId, undefined, [HomePageAttributes.Theme], 1 ); - if (!themeDef?.length) await saveProfileAttribute(dotYouClient, defaultThemeAttribute); + if (!themeDef?.length) await saveProfileAttribute(odinClient, defaultThemeAttribute); }; -export const SetupBlog = async (dotYouClient: DotYouClient) => { +export const SetupBlog = async (odinClient: OdinClient) => { // Create Public Channel oon the (Default) Public Posts Drive - const publicDef = await getChannelDefinition(dotYouClient, BlogConfig.PublicChannelId); + const publicDef = await getChannelDefinition(odinClient, BlogConfig.PublicChannelId); if (!publicDef) { - await saveChannelDefinition(dotYouClient, BlogConfig.PublicChannelNewDsr); + await saveChannelDefinition(odinClient, BlogConfig.PublicChannelNewDsr); } }; @@ -212,13 +212,13 @@ const ANONYMOUS_ACL = { requiredSecurityGroup: SecurityGroupType.Anonymous }; const SetupProfileData = async ( queryClient: QueryClient, - dotYouClient: DotYouClient, + odinClient: OdinClient, profileData: ProfileSetupData ) => { // Default Photo Attribute const defaultPhotoAttrId = toGuidId('default_photo_attribute'); const existingPhotoAttr = await getProfileAttribute( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, defaultPhotoAttrId ); @@ -245,13 +245,13 @@ const SetupProfileData = async ( newPhotoAttr.fileMetadata.appData.content.data[MinimalProfileFields.ProfileImageKey] = profileData.imageData; - await saveProfileAttribute(dotYouClient, newPhotoAttr); + await saveProfileAttribute(odinClient, newPhotoAttr); } // Default Name Attribute const defaultNameAttrId = toGuidId('default_name_attribute'); const existingNameAttr = await getProfileAttribute( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, defaultNameAttrId ); @@ -282,14 +282,14 @@ const SetupProfileData = async ( newNameAttr.fileMetadata.appData.content.data[MinimalProfileFields.DisplayName] = `${profileData.givenName} ${profileData.surname}`; - await saveProfileAttribute(dotYouClient, newNameAttr); + await saveProfileAttribute(odinClient, newNameAttr); } // Default Location Attribute (Optional) if (profileData.city || profileData.country) { const defaultLocationAttrId = toGuidId('default_location_attribute'); const existingLocationAttr = await getProfileAttribute( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, defaultLocationAttrId ); @@ -318,7 +318,7 @@ const SetupProfileData = async ( newLocationAttr.fileMetadata.appData.content.data[LocationFields.Country] = profileData.country ?? ''; - await saveProfileAttribute(dotYouClient, newLocationAttr); + await saveProfileAttribute(odinClient, newLocationAttr); } } @@ -327,13 +327,13 @@ const SetupProfileData = async ( const SetupSocialData = async ( queryClient: QueryClient, - dotYouClient: DotYouClient, + odinClient: OdinClient, socialData: SocialSetupData ) => { const saveSocial = async (type: string, dataField: string, value: string, priority: number) => { // Search attribute: const foundAttributesOfType = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [type] @@ -361,7 +361,7 @@ const SetupSocialData = async ( socialAttribute.fileMetadata.appData.content.data = {}; socialAttribute.fileMetadata.appData.content.data[dataField] = value; - await saveProfileAttribute(dotYouClient, socialAttribute); + await saveProfileAttribute(odinClient, socialAttribute); } return true; @@ -439,7 +439,7 @@ const SetupSocialData = async ( linkAttribute.fileMetadata.appData.content.data[LinkFields.LinkText] = link.text; linkAttribute.fileMetadata.appData.content.data[LinkFields.LinkTarget] = link.target; - return await saveProfileAttribute(dotYouClient, linkAttribute); + return await saveProfileAttribute(odinClient, linkAttribute); }) ); @@ -448,17 +448,17 @@ const SetupSocialData = async ( export const SetupDefaultIdentity = async ( queryClient: QueryClient, - dotYouClient: DotYouClient, + odinClient: OdinClient, data: { profile: ProfileSetupData; social: SocialSetupData } ) => { - await SetupProfileData(queryClient, dotYouClient, data.profile); - await SetupSocialData(queryClient, dotYouClient, data.social); + await SetupProfileData(queryClient, odinClient, data.profile); + await SetupSocialData(queryClient, odinClient, data.social); }; const DEFAULT_FOLLOW_REQUEST: FollowRequest = { notificationType: 'allNotifications', odinId: 'id.homebase.id', }; -export const SetupAutoFollow = async (dotYouClient: DotYouClient) => { - await createOrUpdateFollow(dotYouClient, DEFAULT_FOLLOW_REQUEST, false); +export const SetupAutoFollow = async (odinClient: OdinClient) => { + await createOrUpdateFollow(odinClient, DEFAULT_FOLLOW_REQUEST, false); }; diff --git a/packages/apps/owner-app/src/provider/system/RemoveProvider.ts b/packages/apps/owner-app/src/provider/system/RemoveProvider.ts index 5df2fb644..aa16727bd 100644 --- a/packages/apps/owner-app/src/provider/system/RemoveProvider.ts +++ b/packages/apps/owner-app/src/provider/system/RemoveProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient, DriveDefinition, TargetDrive } from '@homebase-id/js-lib/core'; +import { OdinClient, DriveDefinition, TargetDrive } from '@homebase-id/js-lib/core'; import { getNonce } from '../auth/AuthenticationProvider'; import { prepareAuthPassword } from '../auth/AuthenticationHelper'; @@ -10,14 +10,14 @@ export interface DriveDefinitionParam extends Omit { - const noncePackage = await getNonce(dotYouClient); +export const markAccountDeletion = async (odinClient: OdinClient, currentPassword: string) => { + const noncePackage = await getNonce(odinClient); const currentAuthenticationPasswordReply = await prepareAuthPassword( currentPassword, noncePackage ); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/delete-account'; return client.post(url, { currentAuthenticationPasswordReply }).then((response) => { @@ -27,16 +27,16 @@ export const markAccountDeletion = async (dotYouClient: DotYouClient, currentPas //api/owner/v1/security/undelete-account export const unmarkAccountDeletion = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, currentPassword: string ) => { - const noncePackage = await getNonce(dotYouClient); + const noncePackage = await getNonce(odinClient); const currentAuthenticationPasswordReply = await prepareAuthPassword( currentPassword, noncePackage ); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/undelete-account'; return client.post(url, { currentAuthenticationPasswordReply }).then((response) => { @@ -45,8 +45,8 @@ export const unmarkAccountDeletion = async ( }; //api/owner/v1/security/account-status -export const accountDeletionStatus = async (dotYouClient: DotYouClient) => { - const client = dotYouClient.createAxiosClient(); +export const accountDeletionStatus = async (odinClient: OdinClient) => { + const client = odinClient.createAxiosClient(); const url = root + '/account-status'; return client.get(url).then((response) => { diff --git a/packages/apps/owner-app/src/provider/system/SettingsProvider.ts b/packages/apps/owner-app/src/provider/system/SettingsProvider.ts index 153b85fa7..1877fafa8 100644 --- a/packages/apps/owner-app/src/provider/system/SettingsProvider.ts +++ b/packages/apps/owner-app/src/provider/system/SettingsProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '@homebase-id/js-lib/core'; +import { OdinClient } from '@homebase-id/js-lib/core'; import { tryJsonParse } from '@homebase-id/js-lib/helpers'; export interface uiSettings extends Record { @@ -9,8 +9,8 @@ const root = '/config'; //Handles management of Contacts -export const getFlags = async (dotYouClient: DotYouClient) => { - const client = dotYouClient.createAxiosClient(); +export const getFlags = async (odinClient: OdinClient) => { + const client = odinClient.createAxiosClient(); const url = root + '/system/flags'; return await client.post>(url).then((response) => { @@ -18,8 +18,8 @@ export const getFlags = async (dotYouClient: DotYouClient) => { }); }; -export const updateFlag = async (dotYouClient: DotYouClient, name: string, value: boolean) => { - const client = dotYouClient.createAxiosClient(); +export const updateFlag = async (odinClient: OdinClient, name: string, value: boolean) => { + const client = odinClient.createAxiosClient(); const url = root + '/system/updateflag'; return await client @@ -29,8 +29,8 @@ export const updateFlag = async (dotYouClient: DotYouClient, name: string, value }); }; -export const getSettings = async (dotYouClient: DotYouClient) => { - const client = dotYouClient.createAxiosClient(); +export const getSettings = async (odinClient: OdinClient) => { + const client = odinClient.createAxiosClient(); const url = root + '/ownerapp/settings/list'; return await client.post<{ settings: uiSettings }>(url).then((response) => { @@ -45,8 +45,8 @@ export const getSettings = async (dotYouClient: DotYouClient) => { }); }; -export const updateSettings = async (dotYouClient: DotYouClient, settings: uiSettings) => { - const client = dotYouClient.createAxiosClient(); +export const updateSettings = async (odinClient: OdinClient, settings: uiSettings) => { + const client = odinClient.createAxiosClient(); const url = root + '/ownerapp/settings/update'; const requestObj: uiSettings = {}; diff --git a/packages/apps/owner-app/src/provider/system/SystemProvider.ts b/packages/apps/owner-app/src/provider/system/SystemProvider.ts index 62c4d52e5..23073f6f6 100644 --- a/packages/apps/owner-app/src/provider/system/SystemProvider.ts +++ b/packages/apps/owner-app/src/provider/system/SystemProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient, DriveDefinition, TargetDrive } from '@homebase-id/js-lib/core'; +import { OdinClient, DriveDefinition, TargetDrive } from '@homebase-id/js-lib/core'; import { CircleDefinition } from '@homebase-id/js-lib/network'; export interface DriveDefinitionParam extends Omit { @@ -9,12 +9,12 @@ export interface DriveDefinitionParam extends Omit { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/initialize?'; const data = { firstRunToken: firstRunToken, drives: drives ?? [], circles: circles ?? [] }; @@ -27,8 +27,8 @@ export const initialize = async ( }); }; -export const isConfigured = async (dotYouClient: DotYouClient) => { - const client = dotYouClient.createAxiosClient(); +export const isConfigured = async (odinClient: OdinClient) => { + const client = odinClient.createAxiosClient(); const url = root + '/isconfigured'; return client.post(url, {}).then((response) => { return response.data; diff --git a/packages/apps/owner-app/src/templates/Connections/Details/ConnectionDetailsAbout.tsx b/packages/apps/owner-app/src/templates/Connections/Details/ConnectionDetailsAbout.tsx index 84faba411..2ed1e8262 100644 --- a/packages/apps/owner-app/src/templates/Connections/Details/ConnectionDetailsAbout.tsx +++ b/packages/apps/owner-app/src/templates/Connections/Details/ConnectionDetailsAbout.tsx @@ -3,7 +3,7 @@ import { RichTextRenderer, t, useBiography, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { OdinImage } from '@homebase-id/ui-lib'; import { BuiltInProfiles, GetTargetDriveFromProfileId } from '@homebase-id/js-lib/profile'; @@ -60,7 +60,7 @@ const ExperienceBlock = ({ lastModified: number | undefined; className?: string; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const domain = link ? new URL(link).hostname : undefined; return ( @@ -69,7 +69,7 @@ const ExperienceBlock = ({ > {imageFileId ? ( { const isSentConnectionOpen = action === 'connect'; const isBlockConfirmationOpen = action === 'block'; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); useEffect(() => { if (action === 'connect' && !isSentConnectionOpen) { @@ -129,7 +129,7 @@ export const IdentityPageMetaAndActions = ({ odinId }: { odinId: string }) => { label: t('Open homepage'), onClick: () => { window.open( - `${new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot()}${isConnected && loggedOnIdentity ? '?youauth-logon=' + loggedOnIdentity : ''}`, + `${new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot()}${isConnected && loggedOnIdentity ? '?youauth-logon=' + loggedOnIdentity : ''}`, '_blank' ); }, diff --git a/packages/apps/owner-app/src/templates/Dashboard/FeedTeaser.tsx b/packages/apps/owner-app/src/templates/Dashboard/FeedTeaser.tsx index 9fba65f9f..097ac3c26 100644 --- a/packages/apps/owner-app/src/templates/Dashboard/FeedTeaser.tsx +++ b/packages/apps/owner-app/src/templates/Dashboard/FeedTeaser.tsx @@ -10,7 +10,7 @@ import { PostMeta, useChannel, useCheckIdentity, - useDotYouClientContext, + useOdinClientContext, LoadingBlock, } from '@homebase-id/common-app'; import { UnreachableIdentity } from '@homebase-id/feed-app/src/components/SocialFeed/UnreachableIdentity'; @@ -66,7 +66,7 @@ const PostTeaser = ({ className?: string; }) => { const post = postFile.fileMetadata.appData.content; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const isExternal = odinId && odinId !== loggedOnIdentity; const { data: identityAccessible } = useCheckIdentity(isExternal ? odinId : undefined); diff --git a/packages/apps/owner-app/src/templates/Debug/Debug.tsx b/packages/apps/owner-app/src/templates/Debug/Debug.tsx index f54f584e0..a0e257c24 100644 --- a/packages/apps/owner-app/src/templates/Debug/Debug.tsx +++ b/packages/apps/owner-app/src/templates/Debug/Debug.tsx @@ -5,7 +5,7 @@ import { ActionButton, t, Textarea, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { Times } from '@homebase-id/common-app/icons'; import { useEffect, useState } from 'react'; @@ -26,7 +26,7 @@ interface DefaulValue { } const Debug = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const defaultValues = tryJsonParse(window.localStorage.getItem(STORAGE_KEY) || ''); @@ -52,7 +52,7 @@ const Debug = () => { }, [url, isPost, headers, params]); const doRequest = async () => { - const client = dotYouClient.createAxiosClient({ headers }); + const client = odinClient.createAxiosClient({ headers }); addToOutput(`Requesting ${isPost ? 'POST' : 'GET'} ${url}\n`); const result = isPost ? await client.post(url, params).catch((data) => data.response) diff --git a/packages/apps/owner-app/src/templates/Follow/Follow.tsx b/packages/apps/owner-app/src/templates/Follow/Follow.tsx index 22337bb41..5e0c6c666 100644 --- a/packages/apps/owner-app/src/templates/Follow/Follow.tsx +++ b/packages/apps/owner-app/src/templates/Follow/Follow.tsx @@ -6,7 +6,7 @@ import Submenu from '../../components/SubMenu/SubMenu'; import { useConnectionActions } from '../../hooks/connections/useConnectionActions'; import IdentityIFollowEditDialog from '../../components/Followers/IdentityIFollowEditDialog/IdentityIFollowEditDialog'; import IdentityThatFollowsDialog from '../../components/Followers/IdentityIFollowEditDialog/IdentityThatFollowsDialog'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { useRemoveNotifications, OWNER_APP_ID, @@ -19,7 +19,7 @@ import { IdentityTeaser, ActionGroup, useIdentityIFollow, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { Persons, AddressBook, House, Block, Times } from '@homebase-id/common-app/icons'; import { useFocusedEditing } from '../../hooks/focusedEditing/useFocusedEditing'; @@ -170,7 +170,7 @@ const Followers = () => { const FollowIdentity = ({ odinId, onEdit }: { odinId: string; onEdit: () => void }) => { const { mutate: block } = useConnectionActions().block; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { data: isConnected } = useIsConnected(odinId); return ( @@ -199,7 +199,7 @@ const FollowIdentity = ({ odinId, onEdit }: { odinId: string; onEdit: () => void label: t('Open homepage'), onClick: () => { window.open( - `${new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot()}${isConnected && loggedOnIdentity ? '?youauth-logon=' + loggedOnIdentity : ''}`, + `${new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot()}${isConnected && loggedOnIdentity ? '?youauth-logon=' + loggedOnIdentity : ''}`, '_blank' ); }, @@ -231,7 +231,7 @@ const FollowIdentity = ({ odinId, onEdit }: { odinId: string; onEdit: () => void const FollowingIdentity = ({ odinId, onEdit }: { odinId: string; onEdit: () => void }) => { const { mutate: unfollow } = useIdentityIFollow({ odinId }).unfollow; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { data: isConnected } = useIsConnected(odinId); return ( @@ -260,7 +260,7 @@ const FollowingIdentity = ({ odinId, onEdit }: { odinId: string; onEdit: () => v label: t('Open homepage'), onClick: () => { window.open( - `${new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot()}${isConnected && loggedOnIdentity ? '?youauth-logon=' + loggedOnIdentity : ''}`, + `${new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot()}${isConnected && loggedOnIdentity ? '?youauth-logon=' + loggedOnIdentity : ''}`, '_blank' ); }, diff --git a/packages/apps/owner-app/src/templates/Login/Login.tsx b/packages/apps/owner-app/src/templates/Login/Login.tsx index 64ac567d2..109130269 100644 --- a/packages/apps/owner-app/src/templates/Login/Login.tsx +++ b/packages/apps/owner-app/src/templates/Login/Login.tsx @@ -11,7 +11,7 @@ import { Label, ActionButton, ErrorNotification, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { Loader, Arrow } from '@homebase-id/common-app/icons'; @@ -20,7 +20,7 @@ const Login = () => { const [passwordState, setPasswordState] = useState<'unknown' | 'pending' | 'ready'>('unknown'); const [state, setState] = useState<'loading' | 'error' | 'success' | undefined>(); const [error, setError] = useState(); - const isAuthenticated = useDotYouClientContext().isAuthenticated(); + const isAuthenticated = useOdinClientContext().isAuthenticated(); const { authenticate, setFirstPassword, isPasswordSet, checkRedirectToReturn } = useAuth(); useValidateAuthorization(); diff --git a/packages/apps/owner-app/src/templates/Notifications/Notifications.tsx b/packages/apps/owner-app/src/templates/Notifications/Notifications.tsx index e7060e8fa..0f4920554 100644 --- a/packages/apps/owner-app/src/templates/Notifications/Notifications.tsx +++ b/packages/apps/owner-app/src/templates/Notifications/Notifications.tsx @@ -12,7 +12,7 @@ import { buildNotificationTargetLink, buildNotificationBody, buildNotificationTitle, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { Cog, Times, Bell } from '@homebase-id/common-app/icons'; import { PageMeta } from '@homebase-id/common-app'; @@ -21,7 +21,7 @@ import { useApp } from '../../hooks/apps/useApp'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { useSearchParams } from 'react-router-dom'; import { useContact } from '@homebase-id/common-app'; -import { ApiType, DotYouClient, PushNotification } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, PushNotification } from '@homebase-id/js-lib/core'; import PushNotificationsDialog from '../../components/Notifications/PushNotificationsDialog/PushNotificationsDialog'; interface NotificationClickData { @@ -332,7 +332,7 @@ const NotificationItem = ({ groupCount: number; appName?: string; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const isLocalNotification = notification.senderId === loggedOnIdentity; const { data: contactFile } = useContact({ @@ -355,7 +355,7 @@ const NotificationItem = ({ title={title} imgSrc={ notification.senderId - ? `${new DotYouClient({ hostIdentity: notification.senderId, api: ApiType.Guest }).getRoot()}/pub/image` + ? `${new OdinClient({ hostIdentity: notification.senderId, api: ApiType.Guest }).getRoot()}/pub/image` : undefined } // Keeping the hidden ones short diff --git a/packages/apps/owner-app/src/templates/Settings/SecuritySettings.tsx b/packages/apps/owner-app/src/templates/Settings/SecuritySettings.tsx index 7554986d4..dc85b5ad3 100644 --- a/packages/apps/owner-app/src/templates/Settings/SecuritySettings.tsx +++ b/packages/apps/owner-app/src/templates/Settings/SecuritySettings.tsx @@ -4,7 +4,7 @@ import { ActionButton, Label, logoutOwnerAndAllApps, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { useState } from 'react'; import Section from '../../components/ui/Sections/Section'; @@ -20,14 +20,14 @@ export const SecuritySettings = () => { const [retypePassword, setRetypePassword] = useState(''); const { changePassword } = useAuth(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const passwordIsValid = password === retypePassword && password !== ''; const doSetNewPassword = async () => { setState('loading'); - if (await changePassword(dotYouClient, oldPassword, password)) setState('success'); + if (await changePassword(odinClient, oldPassword, password)) setState('success'); else setState('error'); }; diff --git a/packages/apps/public-app/src/app/App.tsx b/packages/apps/public-app/src/app/App.tsx index a293bd95f..fc5e5c013 100644 --- a/packages/apps/public-app/src/app/App.tsx +++ b/packages/apps/public-app/src/app/App.tsx @@ -12,13 +12,13 @@ import { Layout, NoLayout } from '../components/ui/Layout/Layout'; import './App.css'; import { - DotYouClientProvider, + OdinClientProvider, ErrorBoundary, HOME_ROOT_PATH, NotFound, OdinQueryClient, PREVIEW_ROOT, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import Header from '../components/ui/Layout/Header/Header'; import Footer from '../components/ui/Layout/Footer/Footer'; @@ -104,7 +104,7 @@ function App() { - + } @@ -112,18 +112,18 @@ function App() { v7_startTransition: true, }} /> - + ); } const PublicRoute = ({ children }: { children: ReactNode }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); useValidateAuthorization(); - const isAuthenticated = dotYouClient.isAuthenticated(); - const isOwner = dotYouClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); + const isOwner = odinClient.isOwner(); const [searchParams] = useSearchParams(); const { data: siteData, isFetched: siteDataFetched } = useSiteData(); @@ -188,12 +188,12 @@ const PublicRoute = ({ children }: { children: ReactNode }) => { }; const ActionRedirect = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const isAuthenticated = odinClient.isAuthenticated(); const [searchParams] = useSearchParams(); - const host = dotYouClient.getRoot(); + const host = odinClient.getRoot(); if (isAuthenticated && host) { console.debug('[AUTHENTICATED]: Redirect to action after login'); window.location.href = `${host}${searchParams.get('targetPath')}`; diff --git a/packages/apps/public-app/src/components/Auth/ProfileNav/ProfileNav.tsx b/packages/apps/public-app/src/components/Auth/ProfileNav/ProfileNav.tsx index f5d8699b1..e1aa74197 100644 --- a/packages/apps/public-app/src/components/Auth/ProfileNav/ProfileNav.tsx +++ b/packages/apps/public-app/src/components/Auth/ProfileNav/ProfileNav.tsx @@ -1,20 +1,20 @@ import { useRef } from 'react'; import { MouseEventHandler } from 'react'; import { useState } from 'react'; -import { ConnectionImage, OwnerImage, t, useDotYouClientContext } from '@homebase-id/common-app'; +import { ConnectionImage, OwnerImage, t, useOdinClientContext } from '@homebase-id/common-app'; import { useAuth } from '../../../hooks/auth/useAuth'; import { useOutsideTrigger } from '@homebase-id/common-app'; import { AUTO_LOGON_PARAM, LoginBox } from '../LoginBox/LoginBox'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { Person, Times } from '@homebase-id/common-app/icons'; import { useSearchParams } from 'react-router-dom'; const ProfileNav = () => { const { logout } = useAuth(); - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); - const loggedOnIdentity = dotYouClient.getLoggedInIdentity(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); + const loggedOnIdentity = odinClient.getLoggedInIdentity(); const [isOpen, setIsOpen] = useState(false); @@ -78,7 +78,7 @@ const ProfileNav = () => { ; className?: string; }) => { - const dotYouClient = useDotYouClientContext(); - const loggedInIdentity = dotYouClient.getLoggedInIdentity(); - const ownerIdentity = dotYouClient.getHostIdentity(); - const isOwner = dotYouClient.isOwner(); + const odinClient = useOdinClientContext(); + const loggedInIdentity = odinClient.getLoggedInIdentity(); + const ownerIdentity = odinClient.getHostIdentity(); + const isOwner = odinClient.isOwner(); const hasWriteAccess = useCheckWriteAccessOnChannel({ activeChannel: channel }); if ( @@ -45,7 +45,7 @@ export const SaveCollaborativeChannelLink = ({ return ( diff --git a/packages/apps/public-app/src/components/CollaborativeChannels/useCheckWriteAccessOnChannel.ts b/packages/apps/public-app/src/components/CollaborativeChannels/useCheckWriteAccessOnChannel.ts index 3e1864c1e..31a29a790 100644 --- a/packages/apps/public-app/src/components/CollaborativeChannels/useCheckWriteAccessOnChannel.ts +++ b/packages/apps/public-app/src/components/CollaborativeChannels/useCheckWriteAccessOnChannel.ts @@ -1,4 +1,4 @@ -import { useDotYouClientContext, useSecurityContext } from '@homebase-id/common-app'; +import { useOdinClientContext, useSecurityContext } from '@homebase-id/common-app'; import { HomebaseFile, ApiType, DrivePermissionType } from '@homebase-id/js-lib/core'; import { drivesEqual } from '@homebase-id/js-lib/helpers'; import { ChannelDefinition, GetTargetDriveFromChannelId } from '@homebase-id/js-lib/public'; @@ -8,7 +8,7 @@ export const useCheckWriteAccessOnChannel = ({ }: { activeChannel: HomebaseFile; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const { data: securityContext } = useSecurityContext().fetch; const channelDrive = @@ -16,7 +16,7 @@ export const useCheckWriteAccessOnChannel = ({ ? GetTargetDriveFromChannelId(activeChannel.fileMetadata.appData.uniqueId) : undefined; - const isOwner = dotYouClient.getType() === ApiType.Owner; + const isOwner = odinClient.getType() === ApiType.Owner; const hasWriteAccess = channelDrive && diff --git a/packages/apps/public-app/src/components/ConnectionActions/ConnectLink/ConnectLink.tsx b/packages/apps/public-app/src/components/ConnectionActions/ConnectLink/ConnectLink.tsx index 1ac49768e..60d45b171 100644 --- a/packages/apps/public-app/src/components/ConnectionActions/ConnectLink/ConnectLink.tsx +++ b/packages/apps/public-app/src/components/ConnectionActions/ConnectLink/ConnectLink.tsx @@ -1,15 +1,15 @@ -import { ActionLink, t, useDotYouClientContext, useSecurityContext } from '@homebase-id/common-app'; +import { ActionLink, t, useOdinClientContext, useSecurityContext } from '@homebase-id/common-app'; import { Check, Persons } from '@homebase-id/common-app/icons'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; const ConnectLink = ({ className }: { className: string }) => { - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); - const isOwner = dotYouClient.isOwner(); + const odinClient = useOdinClientContext(); + const isAuthenticated = odinClient.isAuthenticated(); + const isOwner = odinClient.isOwner(); - const loggedOnIdentity = dotYouClient.getLoggedInIdentity(); + const loggedOnIdentity = odinClient.getLoggedInIdentity(); const host = loggedOnIdentity - ? new DotYouClient({ + ? new OdinClient({ hostIdentity: loggedOnIdentity, api: ApiType.Guest, }).getRoot() diff --git a/packages/apps/public-app/src/components/ConnectionActions/FollowLink/FollowLink.tsx b/packages/apps/public-app/src/components/ConnectionActions/FollowLink/FollowLink.tsx index 7491a97a6..99683757d 100644 --- a/packages/apps/public-app/src/components/ConnectionActions/FollowLink/FollowLink.tsx +++ b/packages/apps/public-app/src/components/ConnectionActions/FollowLink/FollowLink.tsx @@ -1,9 +1,9 @@ -import { ActionLink, ellipsisAtMaxChar, useDotYouClientContext } from '@homebase-id/common-app'; +import { ActionLink, ellipsisAtMaxChar, useOdinClientContext } from '@homebase-id/common-app'; import { t } from '@homebase-id/common-app'; import { Feed, Check } from '@homebase-id/common-app/icons'; import { useFollowDetail } from '../../../hooks/follow/useFollowDetail'; -import { ApiType, DotYouClient, HomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile } from '@homebase-id/js-lib/core'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { ChannelDefinition } from '@homebase-id/js-lib/public'; @@ -14,9 +14,9 @@ const FollowLink = ({ className?: string; channel?: HomebaseFile; }) => { - const dotYouClient = useDotYouClientContext(); - const loggedInIdentity = dotYouClient.getLoggedInIdentity(); - const isOwner = dotYouClient.isOwner(); + const odinClient = useOdinClientContext(); + const loggedInIdentity = odinClient.getLoggedInIdentity(); + const isOwner = odinClient.isOwner(); const { data } = useFollowDetail().fetch; if (isOwner) return null; @@ -34,8 +34,8 @@ const FollowLink = ({ { - const isOwner = useDotYouClientContext().isOwner(); + const isOwner = useOdinClientContext().isOwner(); const { owner } = useSiteData().data ?? {}; return ( diff --git a/packages/apps/public-app/src/components/ui/Layout/Layout.tsx b/packages/apps/public-app/src/components/ui/Layout/Layout.tsx index 81b2ff374..6ea419c41 100644 --- a/packages/apps/public-app/src/components/ui/Layout/Layout.tsx +++ b/packages/apps/public-app/src/components/ui/Layout/Layout.tsx @@ -2,7 +2,7 @@ import { FC, ReactNode, Suspense, lazy } from 'react'; import { useTheme } from '../../../hooks/theme/useTheme'; import { ScrollRestoration } from 'react-router-dom'; import { Helmet } from 'react-helmet-async'; -import { Toaster, useDotYouClientContext, useRawImage } from '@homebase-id/common-app'; +import { Toaster, useOdinClientContext, useRawImage } from '@homebase-id/common-app'; import { GetTargetDriveFromProfileId } from '@homebase-id/js-lib/profile'; import { HomePageConfig } from '@homebase-id/js-lib/public'; @@ -18,7 +18,7 @@ interface LayoutProps { } export const Layout: FC = ({ children }) => { - const isOwner = useDotYouClientContext().isOwner(); + const isOwner = useOdinClientContext().isOwner(); return ( @@ -40,7 +40,7 @@ export const Layout: FC = ({ children }) => { }; export const NoLayout: FC = ({ children }) => { - const isOwner = useDotYouClientContext().isOwner(); + const isOwner = useOdinClientContext().isOwner(); const { colors, favicon, imageFileId } = useTheme(); const { data: imageData } = useRawImage({ diff --git a/packages/apps/public-app/src/hooks/auth/useAuth.ts b/packages/apps/public-app/src/hooks/auth/useAuth.ts index 797f7328d..4671e2c80 100644 --- a/packages/apps/public-app/src/hooks/auth/useAuth.ts +++ b/packages/apps/public-app/src/hooks/auth/useAuth.ts @@ -1,7 +1,7 @@ import { useEffect } from 'react'; import { invalidateVerifyToken, useVerifyToken } from './useVerifyToken'; import { getEccPublicKey, logoutOwnerAndAllApps, logoutPublic } from '@homebase-id/common-app'; -import { HOME_SHARED_SECRET, STORAGE_IDENTITY_KEY, useDotYouClient } from '@homebase-id/common-app'; +import { HOME_SHARED_SECRET, STORAGE_IDENTITY_KEY, useOdinClient } from '@homebase-id/common-app'; import { YouAuthorizationParams, createEccPair, @@ -22,7 +22,7 @@ import { import { useQueryClient } from '@tanstack/react-query'; export const useValidateAuthorization = () => { - const { hasSharedSecret, isOwner } = useDotYouClient(); + const { hasSharedSecret, isOwner } = useOdinClient(); const { data: hasValidToken, isFetchedAfterMount } = useVerifyToken(isOwner); const { logout } = useAuth(); @@ -46,7 +46,7 @@ export const useValidateAuthorization = () => { }; export const useAuth = () => { - const { isOwner } = useDotYouClient(); + const { isOwner } = useOdinClient(); const logout = async (): Promise => { try { diff --git a/packages/apps/public-app/src/hooks/follow/useFollowDetail.ts b/packages/apps/public-app/src/hooks/follow/useFollowDetail.ts index a5262610a..d17dd2744 100644 --- a/packages/apps/public-app/src/hooks/follow/useFollowDetail.ts +++ b/packages/apps/public-app/src/hooks/follow/useFollowDetail.ts @@ -1,19 +1,19 @@ import { useQuery } from '@tanstack/react-query'; import { fetchFollowDetail } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; export const useFollowDetail = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const fetchDetail = async () => { if (!isAuthenticated || isOwner) { return null; } - return await fetchFollowDetail(dotYouClient); + return await fetchFollowDetail(odinClient); }; return { fetch: useQuery({ queryKey: ['followDetail'], queryFn: fetchDetail }) }; diff --git a/packages/apps/public-app/src/templates/Home/Common/Posts/Channels.tsx b/packages/apps/public-app/src/templates/Home/Common/Posts/Channels.tsx index d3fadd616..12cc936d4 100644 --- a/packages/apps/public-app/src/templates/Home/Common/Posts/Channels.tsx +++ b/packages/apps/public-app/src/templates/Home/Common/Posts/Channels.tsx @@ -1,10 +1,10 @@ -import { useChannels, useDotYouClientContext } from '@homebase-id/common-app'; +import { useChannels, useOdinClientContext } from '@homebase-id/common-app'; import ChannelTeaser from '../ChannelTeaser/ChannelTeaser'; const Channels = ({ className }: { className?: string }) => { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const { data: channels } = useChannels({ isAuthenticated, isOwner }); diff --git a/packages/apps/public-app/src/templates/Home/Common/Posts/HorizontalPosts.tsx b/packages/apps/public-app/src/templates/Home/Common/Posts/HorizontalPosts.tsx index 584e4e790..016c544f7 100644 --- a/packages/apps/public-app/src/templates/Home/Common/Posts/HorizontalPosts.tsx +++ b/packages/apps/public-app/src/templates/Home/Common/Posts/HorizontalPosts.tsx @@ -1,11 +1,11 @@ -import { SubtleMessage, t, useDotYouClientContext } from '@homebase-id/common-app'; +import { SubtleMessage, t, useOdinClientContext } from '@homebase-id/common-app'; import { useChannels } from '@homebase-id/common-app'; import { PostChannelTeaser } from '../PostChannelTeaser/PostChannelTeaser'; const HorizontalPosts = () => { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const { data: channels } = useChannels({ isAuthenticated, isOwner }); diff --git a/packages/apps/public-app/src/templates/Home/Common/Posts/VerticalPosts.tsx b/packages/apps/public-app/src/templates/Home/Common/Posts/VerticalPosts.tsx index 066840e60..3bb46f806 100644 --- a/packages/apps/public-app/src/templates/Home/Common/Posts/VerticalPosts.tsx +++ b/packages/apps/public-app/src/templates/Home/Common/Posts/VerticalPosts.tsx @@ -7,7 +7,7 @@ import { Label, SubtleMessage, usePostsInfinite, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import { Select } from '@homebase-id/common-app'; import { flattenInfinteData } from '@homebase-id/common-app'; @@ -33,9 +33,9 @@ const VerticalPosts = ({ className }: { className?: string }) => { }; const ChannelSidebar = ({ className }: { className: string }) => { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const navigate = useNavigate(); const { data: channels } = useChannels({ isAuthenticated, isOwner }); @@ -87,9 +87,9 @@ const ChannelSidebar = ({ className }: { className: string }) => { // Docs for combination of Virtual and infinite: // https://tanstack.com/virtual/v3/docs/examples/react/infinite-scroll const MainVerticalPosts = ({ className, channelId }: { className: string; channelId?: string }) => { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const { data: channels } = useChannels({ isAuthenticated, isOwner }); const showAuthor = !!channels?.find( diff --git a/packages/apps/public-app/src/templates/Home/Cover/HomeCover.tsx b/packages/apps/public-app/src/templates/Home/Cover/HomeCover.tsx index e0db88ee6..c1a91eeab 100644 --- a/packages/apps/public-app/src/templates/Home/Cover/HomeCover.tsx +++ b/packages/apps/public-app/src/templates/Home/Cover/HomeCover.tsx @@ -7,7 +7,7 @@ import { useSiteData, ThemeCoverSettings, RichTextRenderer, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import Links from '../../../components/ui/Layout/Links/Links'; import FollowLink from '../../../components/ConnectionActions/FollowLink/FollowLink'; @@ -15,9 +15,9 @@ import ConnectLink from '../../../components/ConnectionActions/ConnectLink/Conne const HomeCover = ({ templateSettings }: { templateSettings?: ThemeCoverSettings }) => { const { owner } = useSiteData().data ?? {}; - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const { data: channels } = useChannels({ isAuthenticated, isOwner }); if (!owner) return null; diff --git a/packages/apps/public-app/src/templates/Posts/Detail/PostDetail.tsx b/packages/apps/public-app/src/templates/Posts/Detail/PostDetail.tsx index ec7db174b..bffe2a8a2 100644 --- a/packages/apps/public-app/src/templates/Posts/Detail/PostDetail.tsx +++ b/packages/apps/public-app/src/templates/Posts/Detail/PostDetail.tsx @@ -6,7 +6,7 @@ import { RelatedArticles, t, useChannel, - useDotYouClientContext, + useOdinClientContext, usePost, } from '@homebase-id/common-app'; import Breadcrumbs from '../../../components/ui/Layout/Breadcrumbs/Breadcrumbs'; @@ -23,9 +23,9 @@ const PostDetail = () => { postKey, }); - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const [isLogin, setIsLogin] = useState(false); if (!postData && !postDataLoading) { diff --git a/packages/apps/public-app/src/templates/Posts/Detail/PostImageDetail.tsx b/packages/apps/public-app/src/templates/Posts/Detail/PostImageDetail.tsx index 5d98960d0..7703a6b27 100644 --- a/packages/apps/public-app/src/templates/Posts/Detail/PostImageDetail.tsx +++ b/packages/apps/public-app/src/templates/Posts/Detail/PostImageDetail.tsx @@ -2,7 +2,7 @@ import { PostImageDetailCard, t, useChannel, - useDotYouClientContext, + useOdinClientContext, usePost, } from '@homebase-id/common-app'; import { useLocation, useNavigate, useParams } from 'react-router-dom'; @@ -18,9 +18,9 @@ const PostImageDetail = () => { postKey, }); - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const [isLogin, setIsLogin] = useState(false); const location = useLocation(); const state = location.state as Record | undefined; diff --git a/packages/apps/public-app/src/templates/Posts/Overview/PostOverview.tsx b/packages/apps/public-app/src/templates/Posts/Overview/PostOverview.tsx index bad521cb1..098c12fef 100644 --- a/packages/apps/public-app/src/templates/Posts/Overview/PostOverview.tsx +++ b/packages/apps/public-app/src/templates/Posts/Overview/PostOverview.tsx @@ -20,7 +20,7 @@ import { LoadingBlock, NotFound, BLOG_POST_INFIITE_PAGE_SIZE, - useDotYouClientContext, + useOdinClientContext, } from '@homebase-id/common-app'; import CardPostOverview from '../../../components/Post/Overview/CardPostOverview/CardPostOverview'; @@ -34,7 +34,7 @@ import { SaveCollaborativeChannelLink } from '../../../components/CollaborativeC import { PublicPostComposer } from '../../../components/CollaborativeChannels/PublicPostComposer'; const PostOverview = () => { - const isOwner = useDotYouClientContext().isOwner(); + const isOwner = useOdinClientContext().isOwner(); const { channelKey } = useParams(); const { data: activeChannel, isFetched: channelFetched } = useChannel({ channelKey: channelKey || BlogConfig.PublicChannelId, diff --git a/packages/common/common-app/src/auth/DotYouClientProvider.tsx b/packages/common/common-app/src/auth/DotYouClientProvider.tsx deleted file mode 100644 index 192a9df0a..000000000 --- a/packages/common/common-app/src/auth/DotYouClientProvider.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { ReactNode, useMemo } from 'react'; - -import { DotYouClientContext, useDotYouClient } from '@homebase-id/common-app'; - -export const DotYouClientProvider = ({ children }: { children: ReactNode }) => { - const { getDotYouClient } = useDotYouClient(); - const dotYouClient = useMemo(getDotYouClient, [getDotYouClient]); - - return ( - {children} - ); -}; diff --git a/packages/common/common-app/src/auth/OdinClientProvider.tsx b/packages/common/common-app/src/auth/OdinClientProvider.tsx new file mode 100644 index 000000000..b5611f8e6 --- /dev/null +++ b/packages/common/common-app/src/auth/OdinClientProvider.tsx @@ -0,0 +1,10 @@ +import { ReactNode, useMemo } from 'react'; + +import { OdinClientContext, useOdinClient } from '@homebase-id/common-app'; + +export const OdinClientProvider = ({ children }: { children: ReactNode }) => { + const { getOdinClient } = useOdinClient(); + const odinClient = useMemo(getOdinClient, [getOdinClient]); + + return {children}; +}; diff --git a/packages/common/common-app/src/auth/index.ts b/packages/common/common-app/src/auth/index.ts index 5599a4a6d..455b6520a 100644 --- a/packages/common/common-app/src/auth/index.ts +++ b/packages/common/common-app/src/auth/index.ts @@ -1 +1 @@ -export * from './DotYouClientProvider'; +export * from './OdinClientProvider'; diff --git a/packages/common/common-app/src/channels/ChannelItem.tsx b/packages/common/common-app/src/channels/ChannelItem.tsx index 945684c93..7d81206e3 100644 --- a/packages/common/common-app/src/channels/ChannelItem.tsx +++ b/packages/common/common-app/src/channels/ChannelItem.tsx @@ -1,6 +1,6 @@ import { ApiType, - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, SecurityGroupType, @@ -26,7 +26,7 @@ import { ActionLink, Alert } from '../ui'; import { useCollaborativeChannel } from '../hooks/socialFeed/channels/useCollaborativeChannel'; import { ChannelDefinitionVm } from '../hooks/socialFeed/channels/useChannels'; import { useManageChannel } from '../hooks/socialFeed/channels/useManageChannel'; -import { useDotYouClientContext } from '../hooks'; +import { useOdinClientContext } from '../hooks'; export const ChannelItem = ({ chnl: chnlDsr, @@ -39,7 +39,7 @@ export const ChannelItem = ({ className?: string; isDefaultEdit?: boolean; }) => { - const identity = useDotYouClientContext().getHostIdentity(); + const identity = useOdinClientContext().getHostIdentity(); const isNew = !chnlDsr; const [isEdit, setIsEdit] = useState(isDefaultEdit); @@ -323,7 +323,7 @@ export const ChannelItem = ({ icon={ExternalLink} size="square" type="mute" - href={`${new DotYouClient({ hostIdentity: identity, api: ApiType.Guest }).getRoot()}/posts/${chnl?.slug}`} + href={`${new OdinClient({ hostIdentity: identity, api: ApiType.Guest }).getRoot()}/posts/${chnl?.slug}`} >
)} diff --git a/packages/common/common-app/src/channels/CollaborativeChannelitem.tsx b/packages/common/common-app/src/channels/CollaborativeChannelitem.tsx index 7aa1682a3..12b7a2d77 100644 --- a/packages/common/common-app/src/channels/CollaborativeChannelitem.tsx +++ b/packages/common/common-app/src/channels/CollaborativeChannelitem.tsx @@ -1,4 +1,4 @@ -import { ApiType, DotYouClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { CollaborativeChannelDefinition, @@ -53,7 +53,7 @@ export const CollaborativeChannelItem = ({ icon={ExternalLink} size="square" type="mute" - href={`${new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot()}/posts/${chnl?.slug}`} + href={`${new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot()}/posts/${chnl?.slug}`} >
diff --git a/packages/common/common-app/src/core/OwnerClient.ts b/packages/common/common-app/src/core/OwnerClient.ts index 7f038eaa5..bcbca5e55 100644 --- a/packages/common/common-app/src/core/OwnerClient.ts +++ b/packages/common/common-app/src/core/OwnerClient.ts @@ -1,11 +1,11 @@ -import { BaseProviderOptions, ApiType, BaseDotYouClient } from '@homebase-id/js-lib/core'; +import { BaseProviderOptions, ApiType, BaseOdinClient } from '@homebase-id/js-lib/core'; export interface OwnerProviderOptions extends Omit, 'hostIdentity'> { api?: ApiType; } -export class OwnerClient extends BaseDotYouClient { +export class OwnerClient extends BaseOdinClient { constructor(options: OwnerProviderOptions) { super({ ...options, diff --git a/packages/common/common-app/src/dialogs/ImageLightbox/ImageLightbox.tsx b/packages/common/common-app/src/dialogs/ImageLightbox/ImageLightbox.tsx index 51bd57f19..468ca7044 100644 --- a/packages/common/common-app/src/dialogs/ImageLightbox/ImageLightbox.tsx +++ b/packages/common/common-app/src/dialogs/ImageLightbox/ImageLightbox.tsx @@ -7,7 +7,7 @@ import { ButtonColors } from '../../ui/Buttons/ColorConfig'; import { usePortal } from '../../hooks/portal/usePortal'; import { Times } from '../../ui/Icons/Times'; import { OdinImage } from '@homebase-id/ui-lib'; -import { useDotYouClientContext } from '../../hooks'; +import { useOdinClientContext } from '../../hooks'; export const ImageLightbox = ({ targetDrive, @@ -26,7 +26,7 @@ export const ImageLightbox = ({ systemFileType?: SystemFileType; onClose: () => void; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const target = usePortal('modal-container'); useEffect(() => { @@ -63,7 +63,7 @@ export const ImageLightbox = ({ ) : null} { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); useEffect(() => { if (!files) return; @@ -103,7 +103,7 @@ export const FileOverview = ({ fileKey={currFile.key} targetDrive={targetDrive} className="aspect-square h-auto w-full object-cover" - dotYouClient={dotYouClient} + odinClient={odinClient} loadSize={{ pixelWidth: 400, pixelHeight: 400 }} /> ) : currFile.contentType.startsWith('video/') ? ( @@ -113,7 +113,7 @@ export const FileOverview = ({ fileKey={currFile.key} targetDrive={targetDrive} className="aspect-square h-auto w-full object-cover" - dotYouClient={dotYouClient} + odinClient={odinClient} loadSize={{ pixelWidth: 400, pixelHeight: 400 }} />
diff --git a/packages/common/common-app/src/hooks/attributes/biography/useBiography.ts b/packages/common/common-app/src/hooks/attributes/biography/useBiography.ts index ce4cbf22b..f7dc1569a 100644 --- a/packages/common/common-app/src/hooks/attributes/biography/useBiography.ts +++ b/packages/common/common-app/src/hooks/attributes/biography/useBiography.ts @@ -10,7 +10,7 @@ import { import { GetFile } from '@homebase-id/js-lib/public'; import { PayloadDescriptor } from '@homebase-id/js-lib/core'; import { getProfileAttributesOverPeer } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; type BioData = { id: string; @@ -38,15 +38,15 @@ export type BiographyData = { export const useBiography = (props?: { odinId: string } | undefined) => { const { odinId } = props || {}; - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = !!dotYouClient.getHostIdentity(); + const odinClient = useOdinClientContext(); + const isAuthenticated = !!odinClient.getHostIdentity(); const queryClient = useQueryClient(); const fetchData: (odinId?: string) => Promise = async () => { const fetchStaticData = async (): Promise => { if (odinId) return undefined; - const fileData = await GetFile(dotYouClient, 'sitedata.json'); + const fileData = await GetFile(odinClient, 'sitedata.json'); if (!fileData.has('short-bio') && !fileData.has('long-bio') && !fileData.has('short-bio-summary')) return; const bioAttributes = await (async () => { @@ -66,7 +66,7 @@ export const useBiography = (props?: { odinId: string } | undefined) => { // Fetch attribute if it is not included in the static data attr = ( await getProfileAttribute( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, entry.header.fileMetadata.appData.uniqueId ) @@ -124,7 +124,7 @@ export const useBiography = (props?: { odinId: string } | undefined) => { // Fetch attribute if it is not included in the static data attr = ( await getProfileAttribute( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, entry.header.fileMetadata.appData.uniqueId ) @@ -156,9 +156,9 @@ export const useBiography = (props?: { odinId: string } | undefined) => { try { const biographyAttributes = ( odinId - ? await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.FullBio) + ? await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.FullBio) : await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.FullBio] @@ -174,9 +174,9 @@ export const useBiography = (props?: { odinId: string } | undefined) => { const longBiographyAttributes = ( odinId - ? await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.Experience) + ? await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.Experience) : await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.Experience] @@ -199,9 +199,9 @@ export const useBiography = (props?: { odinId: string } | undefined) => { const bioSummaryAttributes = ( odinId - ? await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.BioSummary) + ? await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.BioSummary) : await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.BioSummary] diff --git a/packages/common/common-app/src/hooks/attributes/links/useLinks.ts b/packages/common/common-app/src/hooks/attributes/links/useLinks.ts index a59361ca9..ed1d7352f 100644 --- a/packages/common/common-app/src/hooks/attributes/links/useLinks.ts +++ b/packages/common/common-app/src/hooks/attributes/links/useLinks.ts @@ -8,7 +8,7 @@ import { } from '@homebase-id/js-lib/profile'; import { GetFile } from '@homebase-id/js-lib/public'; import { getProfileAttributesOverPeer } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; interface LinkData { text: string; @@ -20,15 +20,15 @@ interface LinkData { export const useLinks = (props?: { odinId: string } | undefined) => { const { odinId } = props || {}; - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = !!dotYouClient.getHostIdentity(); + const odinClient = useOdinClientContext(); + const isAuthenticated = !!odinClient.getHostIdentity(); const queryClient = useQueryClient(); const fetchData: (odinId?: string) => Promise = async () => { const fetchStaticData = async () => { if (odinId) return null; - const fileData = await GetFile(dotYouClient, 'sitedata.json'); + const fileData = await GetFile(odinClient, 'sitedata.json'); if (fileData.has('link')) { const linkAttributes = ( fileData @@ -54,10 +54,10 @@ export const useLinks = (props?: { odinId: string } | undefined) => { const fetchDynamicData = async () => { try { const linkAttributes = odinId - ? await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.Link) - : await getProfileAttributes(dotYouClient, BuiltInProfiles.StandardProfileId, undefined, [ - BuiltInAttributes.Link, - ]); + ? await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.Link) + : await getProfileAttributes(odinClient, BuiltInProfiles.StandardProfileId, undefined, [ + BuiltInAttributes.Link, + ]); return linkAttributes ?.map((dsr) => { diff --git a/packages/common/common-app/src/hooks/attributes/links/useSocials.tsx b/packages/common/common-app/src/hooks/attributes/links/useSocials.tsx index 8392d7e01..39c255359 100644 --- a/packages/common/common-app/src/hooks/attributes/links/useSocials.tsx +++ b/packages/common/common-app/src/hooks/attributes/links/useSocials.tsx @@ -7,7 +7,7 @@ import { SocialFields, } from '@homebase-id/js-lib/profile'; import { getProfileAttributesOverPeer } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; import { FC, ReactNode } from 'react'; import { IconProps, @@ -41,8 +41,8 @@ export type LinkType = { export const useSocials = (props?: { odinId: string } | undefined) => { const { odinId } = props || {}; - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = !!dotYouClient.getHostIdentity(); + const odinClient = useOdinClientContext(); + const isAuthenticated = !!odinClient.getHostIdentity(); const queryClient = useQueryClient(); const fetchData: (odinId?: string) => Promise = async () => { @@ -69,7 +69,7 @@ export const useSocials = (props?: { odinId: string } | undefined) => { const fetchStaticData = async () => { if (odinId) return null; - const fileData = await GetFile(dotYouClient, 'sitedata.json'); + const fileData = await GetFile(odinClient, 'sitedata.json'); if (fileData.has('socials')) { const fileBasedResponse = ( fileData @@ -96,11 +96,11 @@ export const useSocials = (props?: { odinId: string } | undefined) => { const fetchDynamicData = async () => { try { const socialAttributes = odinId - ? await getProfileAttributesOverPeer(dotYouClient, odinId, [ + ? await getProfileAttributesOverPeer(odinClient, odinId, [ ...BuiltInAttributes.AllSocial, ...BuiltInAttributes.AllGames, ]) - : await getProfileAttributes(dotYouClient, BuiltInProfiles.StandardProfileId, undefined, [ + : await getProfileAttributes(odinClient, BuiltInProfiles.StandardProfileId, undefined, [ ...BuiltInAttributes.AllSocial, ...BuiltInAttributes.AllGames, ]); diff --git a/packages/common/common-app/src/hooks/auth/useDotYouClientContext.ts b/packages/common/common-app/src/hooks/auth/useDotYouClientContext.ts deleted file mode 100644 index b6403932b..000000000 --- a/packages/common/common-app/src/hooks/auth/useDotYouClientContext.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DotYouClient } from '@homebase-id/js-lib/core'; -import { useContext, createContext } from 'react'; - -type DotYouClientContextValue = DotYouClient; -export const DotYouClientContext = createContext(null); - -export const useDotYouClientContext = () => { - const dotYouClient = useContext(DotYouClientContext); - if (!dotYouClient) throw new Error('DotYouClientContext not found'); - - return dotYouClient; -}; diff --git a/packages/common/common-app/src/hooks/auth/useMissingPermissions.ts b/packages/common/common-app/src/hooks/auth/useMissingPermissions.ts index dd5fedb1f..bfa8395f0 100644 --- a/packages/common/common-app/src/hooks/auth/useMissingPermissions.ts +++ b/packages/common/common-app/src/hooks/auth/useMissingPermissions.ts @@ -6,7 +6,7 @@ import { import { AppPermissionType } from '@homebase-id/js-lib/network'; import { useSecurityContext } from '../securityContext/useSecurityContext'; import { getExtendAppRegistrationParams, TargetDriveAccessRequest } from '@homebase-id/js-lib/auth'; -import { useDotYouClientContext } from './useDotYouClientContext'; +import { useOdinClientContext } from './useOdinClientContext'; const getExtendAppRegistrationUrl = ( host: string, @@ -43,7 +43,7 @@ export const useMissingPermissions = ({ needsAllConnected?: boolean; }) => { const { data: context } = useSecurityContext().fetch; - const host = useDotYouClientContext().getRoot(); + const host = useOdinClientContext().getRoot(); if (!context || !host) return; diff --git a/packages/common/common-app/src/hooks/auth/useDotYouClient.ts b/packages/common/common-app/src/hooks/auth/useOdinClient.ts similarity index 88% rename from packages/common/common-app/src/hooks/auth/useDotYouClient.ts rename to packages/common/common-app/src/hooks/auth/useOdinClient.ts index 171af6e83..5f92aaa77 100644 --- a/packages/common/common-app/src/hooks/auth/useDotYouClient.ts +++ b/packages/common/common-app/src/hooks/auth/useOdinClient.ts @@ -1,4 +1,4 @@ -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { base64ToUint8Array, isLocalStorageAvailable } from '@homebase-id/js-lib/helpers'; import { OwnerClient } from '../../core'; import { retrieveIdentity } from '@homebase-id/js-lib/auth'; @@ -16,11 +16,11 @@ export const APP_SHARED_SECRET = window.location.pathname.startsWith(OWNER_APPS_ ? `APPS_${window.location.pathname.split('/')?.[2]}` : 'APSS'; -export const useDotYouClient = () => { +export const useOdinClient = () => { const _app = window.location.pathname.startsWith(OWNER_ROOT) ? 'owner' : window.location.hostname === 'dev.dotyou.cloud' || - window.location.pathname.startsWith(OWNER_APPS_ROOT) + window.location.pathname.startsWith(OWNER_APPS_ROOT) ? 'apps' : 'home'; @@ -58,10 +58,10 @@ export const useDotYouClient = () => { : localStorage.getItem(STORAGE_IDENTITY_KEY) || undefined; }; - const getDotYouClient = () => { + const getOdinClient = () => { // When running in an iframe, use the public YouAuth Api; if (window.self !== window.top) - return new DotYouClient({ hostIdentity: window.location.hostname, api: ApiType.Guest }); + return new OdinClient({ hostIdentity: window.location.hostname, api: ApiType.Guest }); const apiType = getApiType(); if (apiType === ApiType.Owner) @@ -70,7 +70,7 @@ export const useDotYouClient = () => { sharedSecret: getSharedSecret(), }); else if (apiType === ApiType.Guest) - return new DotYouClient({ + return new OdinClient({ hostIdentity: window.location.hostname, api: apiType, sharedSecret: getSharedSecret(), @@ -83,7 +83,7 @@ export const useDotYouClient = () => { headers['bx0900'] = authToken; } - return new DotYouClient({ + return new OdinClient({ sharedSecret: getSharedSecret(), api: ApiType.App, hostIdentity: retrieveIdentity() || window.location.hostname, @@ -96,7 +96,7 @@ export const useDotYouClient = () => { return { hasSharedSecret, getSharedSecret, - getDotYouClient, + getOdinClient, isOwner: _isOwner, }; }; diff --git a/packages/common/common-app/src/hooks/auth/useOdinClientContext.ts b/packages/common/common-app/src/hooks/auth/useOdinClientContext.ts new file mode 100644 index 000000000..9ad891d1b --- /dev/null +++ b/packages/common/common-app/src/hooks/auth/useOdinClientContext.ts @@ -0,0 +1,12 @@ +import { OdinClient } from '@homebase-id/js-lib/core'; +import { useContext, createContext } from 'react'; + +type OdinClientContextValue = OdinClient; +export const OdinClientContext = createContext(null); + +export const useOdinClientContext = () => { + const odinClient = useContext(OdinClientContext); + if (!odinClient) throw new Error('OdinClientContext not found'); + + return odinClient; +}; diff --git a/packages/common/common-app/src/hooks/checkIdentity/useCheckIdentity.ts b/packages/common/common-app/src/hooks/checkIdentity/useCheckIdentity.ts index 13550a0f3..eacd10d69 100644 --- a/packages/common/common-app/src/hooks/checkIdentity/useCheckIdentity.ts +++ b/packages/common/common-app/src/hooks/checkIdentity/useCheckIdentity.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { getDomainFromUrl } from '@homebase-id/js-lib/helpers'; export const useCheckIdentity = (odinId?: string) => { @@ -11,8 +11,8 @@ export const useCheckIdentity = (odinId?: string) => { const isValid = domainRegex.test(strippedIdentity || ''); if (!isValid || !strippedIdentity) return false; - const dotYouClient = new DotYouClient({ api: ApiType.Guest, hostIdentity: strippedIdentity }); - return await fetch(`${dotYouClient.getEndpoint()}/auth/ident`) + const odinClient = new OdinClient({ api: ApiType.Guest, hostIdentity: strippedIdentity }); + return await fetch(`${odinClient.getEndpoint()}/auth/ident`) .then((response) => { if (response.status !== 200) return; return response.json(); diff --git a/packages/common/common-app/src/hooks/circles/useCircle.ts b/packages/common/common-app/src/hooks/circles/useCircle.ts index 8b05dd687..651ccf63b 100644 --- a/packages/common/common-app/src/hooks/circles/useCircle.ts +++ b/packages/common/common-app/src/hooks/circles/useCircle.ts @@ -18,48 +18,48 @@ import { formatGuidId } from '@homebase-id/js-lib/helpers'; import { invalidateDomainInfo } from '../connections/useDomain'; import { invalidateConnectionInfo } from '../connections/useConnectionInfo'; import { invalidateConnectionGrantStatus } from '../connections/useConnectionGrantStatus'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useCircle = (props?: { circleId?: string }) => { const { circleId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetch = async ({ circleId }: { circleId: string }) => { if (!circleId) { return; } - return await getCircle(dotYouClient, circleId); + return await getCircle(odinClient, circleId); }; const fetchMembers = async ({ circleId }: { circleId: string }) => { if (!circleId) { return; } - return await fetchMembersOfCircle(dotYouClient, circleId); + return await fetchMembersOfCircle(odinClient, circleId); }; const createOrUpdate = async (circleDefinition: CircleDefinition) => { if (circleDefinition.id) { - return await updateCircleDefinition(dotYouClient, circleDefinition); + return await updateCircleDefinition(odinClient, circleDefinition); } else { - return await createCircleDefinition(dotYouClient, circleDefinition); + return await createCircleDefinition(odinClient, circleDefinition); } }; const disableCircleInternal = async ({ circleId }: { circleId: string }) => { - return await disableCircle(dotYouClient, circleId); + return await disableCircle(odinClient, circleId); }; const enableCircleInternal = async ({ circleId }: { circleId: string }) => { - return await enableCircle(dotYouClient, circleId); + return await enableCircle(odinClient, circleId); }; const provideGrants = async ({ circleId, odinIds }: { circleId: string; odinIds: string[] }) => { return await Promise.all( odinIds.map( async (odinId) => - await addMemberToCircle(dotYouClient, { circleId: circleId, odinId: odinId }) + await addMemberToCircle(odinClient, { circleId: circleId, odinId: odinId }) ) ); }; @@ -73,7 +73,7 @@ export const useCircle = (props?: { circleId?: string }) => { }) => { return await Promise.all( domains.map( - async (domain) => await removeDomainFromCircle(dotYouClient, { circleId: circleId, domain }) + async (domain) => await removeDomainFromCircle(odinClient, { circleId: circleId, domain }) ) ); }; @@ -88,25 +88,25 @@ export const useCircle = (props?: { circleId?: string }) => { return await Promise.all( odinIds.map( async (odinId) => - await removeMemberFromCircle(dotYouClient, { circleId: circleId, odinId: odinId }) + await removeMemberFromCircle(odinClient, { circleId: circleId, odinId: odinId }) ) ); }; const provideGrant = async ({ circleId, odinId }: { circleId: string; odinId: string }) => - await addMemberToCircle(dotYouClient, { circleId: circleId, odinId: odinId }); + await addMemberToCircle(odinClient, { circleId: circleId, odinId: odinId }); const revokeGrant = async ({ circleId, odinId }: { circleId: string; odinId: string }) => - await removeMemberFromCircle(dotYouClient, { circleId: circleId, odinId: odinId }); + await removeMemberFromCircle(odinClient, { circleId: circleId, odinId: odinId }); const provideDomainGrant = async ({ circleId, domain }: { circleId: string; domain: string }) => - await addDomainToCircle(dotYouClient, { circleId: circleId, domain: domain }); + await addDomainToCircle(odinClient, { circleId: circleId, domain: domain }); const revokeDomainGrant = async ({ circleId, domain }: { circleId: string; domain: string }) => - await removeDomainFromCircle(dotYouClient, { circleId: circleId, domain: domain }); + await removeDomainFromCircle(odinClient, { circleId: circleId, domain: domain }); const removeCircleInternal = async ({ circleId }: { circleId: string }) => - await removeCircle(dotYouClient, circleId); + await removeCircle(odinClient, circleId); return { fetch: useQuery({ diff --git a/packages/common/common-app/src/hooks/circles/useCircles.ts b/packages/common/common-app/src/hooks/circles/useCircles.ts index b92bc9d93..65120d4ce 100644 --- a/packages/common/common-app/src/hooks/circles/useCircles.ts +++ b/packages/common/common-app/src/hooks/circles/useCircles.ts @@ -1,12 +1,12 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; import { getCircles } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useCircles = (excludeSystemCircles = false) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchAll = async () => { - const circles = await getCircles(dotYouClient, excludeSystemCircles); + const circles = await getCircles(odinClient, excludeSystemCircles); return circles?.sort((a, b) => (a.disabled ? 1 : 0) - (b.disabled ? 1 : 0)); }; diff --git a/packages/common/common-app/src/hooks/connections/useAllContacts.ts b/packages/common/common-app/src/hooks/connections/useAllContacts.ts index 9b86ed7a3..c9e1e9eb9 100644 --- a/packages/common/common-app/src/hooks/connections/useAllContacts.ts +++ b/packages/common/common-app/src/hooks/connections/useAllContacts.ts @@ -1,11 +1,11 @@ import { ContactFile, getContacts } from '@homebase-id/js-lib/network'; import { useQuery } from '@tanstack/react-query'; import { HomebaseFile } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; const CHUNKSIZE = 200; export const useAllContacts = (enabled: boolean) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchMentionTargets = async () => { // self invoking function that fetches the contacts in blocks of a CHUNKSIZE untill there are no more contacts to fetch @@ -13,7 +13,7 @@ export const useAllContacts = (enabled: boolean) => { cursor: string | undefined, limit: number ): Promise[]> => { - const contacts = await getContacts(dotYouClient, cursor, limit); + const contacts = await getContacts(odinClient, cursor, limit); if (contacts?.cursorState && contacts.results.length >= limit) { const nextContacts = await internalGetContacts(contacts.cursorState, limit); return contacts.results.concat(nextContacts); diff --git a/packages/common/common-app/src/hooks/connections/useConnectionGrantStatus.ts b/packages/common/common-app/src/hooks/connections/useConnectionGrantStatus.ts index e0b56e94f..fa3f0c6ae 100644 --- a/packages/common/common-app/src/hooks/connections/useConnectionGrantStatus.ts +++ b/packages/common/common-app/src/hooks/connections/useConnectionGrantStatus.ts @@ -1,11 +1,11 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; import { fetchCircleMembershipStatus } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useConnectionGrantStatus = ({ odinId }: { odinId?: string }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); - const fetchStatus = async (odinId: string) => fetchCircleMembershipStatus(dotYouClient, odinId); + const fetchStatus = async (odinId: string) => fetchCircleMembershipStatus(odinClient, odinId); return { fetchStatus: useQuery({ queryKey: ['connection-grant-status', odinId], diff --git a/packages/common/common-app/src/hooks/connections/useConnectionInfo.ts b/packages/common/common-app/src/hooks/connections/useConnectionInfo.ts index 258055100..690b5c2a3 100644 --- a/packages/common/common-app/src/hooks/connections/useConnectionInfo.ts +++ b/packages/common/common-app/src/hooks/connections/useConnectionInfo.ts @@ -5,11 +5,11 @@ import { getPendingRequest, getSentRequest, } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; const domainRegex = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9]{2,25}(?::\d{1,5})?$/i; export const useConnectionInfo = ({ odinId }: { odinId?: string }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const doGetConnectionInfo = async (odinId: string) => { if (!odinId) return null; @@ -18,7 +18,7 @@ export const useConnectionInfo = ({ odinId }: { odinId?: string }) => { return null; } - const connectionInfo = await getConnectionInfo(dotYouClient, odinId); + const connectionInfo = await getConnectionInfo(odinClient, odinId); if (connectionInfo && connectionInfo.status.toLowerCase() !== 'none') return connectionInfo || null; @@ -36,16 +36,16 @@ export const useConnectionInfo = ({ odinId }: { odinId?: string }) => { }; export const useDetailedConnectionInfo = ({ odinId }: { odinId?: string }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const connectionInfoQuery = useConnectionInfo({ odinId }).fetch; const doGetDetailedConnectionInfo = async (odinId: string) => { if (!odinId) return; - const pendingRequest = await getPendingRequest(dotYouClient, odinId); + const pendingRequest = await getPendingRequest(odinClient, odinId); if (pendingRequest) return pendingRequest; - const sentRequest = await getSentRequest(dotYouClient, odinId); + const sentRequest = await getSentRequest(odinClient, odinId); if (sentRequest) return sentRequest; return null; @@ -65,8 +65,8 @@ export const useDetailedConnectionInfo = ({ odinId }: { odinId?: string }) => { return { fetch: connectionInfoQuery.data?.status.toLowerCase() === 'connected' || - connectionInfoQuery.data?.status.toLowerCase() === 'blocked' || - !connectionInfoQuery.isFetched + connectionInfoQuery.data?.status.toLowerCase() === 'blocked' || + !connectionInfoQuery.isFetched ? connectionInfoQuery : detailedConnectionInfoQuery, }; diff --git a/packages/common/common-app/src/hooks/connections/useConnections.ts b/packages/common/common-app/src/hooks/connections/useConnections.ts index 52b6142a9..c297fbd7f 100644 --- a/packages/common/common-app/src/hooks/connections/useConnections.ts +++ b/packages/common/common-app/src/hooks/connections/useConnections.ts @@ -19,15 +19,15 @@ import { ConnectionRequest, ActiveConnection, } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const usePendingConnections = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const pageSize = 6; const fetchPendingConnections = async ({ pageNumber }: { pageNumber: number }) => { return ( - (await getPendingRequests(dotYouClient, { + (await getPendingRequests(odinClient, { pageNumber: pageNumber, pageSize, })) || null @@ -77,11 +77,11 @@ interface useSentConnectionsProps { } export const useSentConnections = (props?: useSentConnectionsProps) => { const { includeIntroductions } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const pageSize = 6; const fetchSentRequests = async ({ pageNumber }: { pageNumber: number }) => - await getSentRequests(dotYouClient, { + await getSentRequests(odinClient, { pageNumber: pageNumber, pageSize: pageSize, }); @@ -102,24 +102,24 @@ export const useSentConnections = (props?: useSentConnectionsProps) => { select: includeIntroductions !== true ? (data) => { - if (includeIntroductions === 'only') { - return { - ...data, - pages: data.pages.map((page) => ({ - ...page, - results: page.results.filter((result) => result.introducerOdinId), - })), - }; - } else { - return { - ...data, - pages: data.pages.map((page) => ({ - ...page, - results: page.results.filter((result) => !result.introducerOdinId), - })), - }; - } + if (includeIntroductions === 'only') { + return { + ...data, + pages: data.pages.map((page) => ({ + ...page, + results: page.results.filter((result) => result.introducerOdinId), + })), + }; + } else { + return { + ...data, + pages: data.pages.map((page) => ({ + ...page, + results: page.results.filter((result) => !result.introducerOdinId), + })), + }; } + } : undefined, }), }; @@ -149,10 +149,10 @@ export const updateCacheSentConnections = ( export const useReceivedIntroductions = () => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchIncomingIntroductions = async () => { - return await getReceivedIntroductions(dotYouClient); + return await getReceivedIntroductions(odinClient); }; return { @@ -162,7 +162,7 @@ export const useReceivedIntroductions = () => { refetchOnWindowFocus: false, }), deleteAll: useMutation({ - mutationFn: () => removeAllReceivedIntroductions(dotYouClient), + mutationFn: () => removeAllReceivedIntroductions(odinClient), onSettled: () => { queryClient.invalidateQueries({ queryKey: ['received-introductions'] }); }, @@ -179,7 +179,7 @@ export const useActiveConnections = ( pageSize: 10, } ) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchConnections = async ( { pageSize, cursor }: { pageSize: number; cursor?: unknown } = { @@ -187,7 +187,7 @@ export const useActiveConnections = ( } ) => { try { - return await getConnections(dotYouClient, { + return await getConnections(odinClient, { cursor: cursor ?? undefined, count: pageSize, }); diff --git a/packages/common/common-app/src/hooks/connections/useDomain.ts b/packages/common/common-app/src/hooks/connections/useDomain.ts index 2ffe173a7..523f71a9d 100644 --- a/packages/common/common-app/src/hooks/connections/useDomain.ts +++ b/packages/common/common-app/src/hooks/connections/useDomain.ts @@ -1,14 +1,14 @@ import { QueryClient, useQuery } from '@tanstack/react-query'; import { getDomainInfo } from '../../provider/network/domainNetwork/DomainProvider'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useDomain = ({ domain }: { domain?: string }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchSingle = async ({ domain }: { domain: string }) => { if (!domain) return; - return await getDomainInfo(dotYouClient, domain); + return await getDomainInfo(odinClient, domain); }; return { fetch: useQuery({ diff --git a/packages/common/common-app/src/hooks/connections/useDomains.ts b/packages/common/common-app/src/hooks/connections/useDomains.ts index a40114e90..6238a75c9 100644 --- a/packages/common/common-app/src/hooks/connections/useDomains.ts +++ b/packages/common/common-app/src/hooks/connections/useDomains.ts @@ -1,5 +1,5 @@ import { QueryClient, useInfiniteQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '@homebase-id/common-app'; +import { useOdinClientContext } from '@homebase-id/common-app'; import { getDomains } from '../../provider/network/domainNetwork/DomainProvider'; interface useActiveDomainsProps { @@ -12,7 +12,7 @@ export const useDomains = ( pageSize: 10, } ) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchDomains = async ( { pageSize, cursor }: { pageSize: number; cursor?: unknown } = { @@ -20,7 +20,7 @@ export const useDomains = ( } ) => { try { - return await getDomains(dotYouClient, { + return await getDomains(odinClient, { cursor: cursor ?? 0, count: pageSize, }); diff --git a/packages/common/common-app/src/hooks/contacts/useContact.ts b/packages/common/common-app/src/hooks/contacts/useContact.ts index 50fd6b205..d0003aba3 100644 --- a/packages/common/common-app/src/hooks/contacts/useContact.ts +++ b/packages/common/common-app/src/hooks/contacts/useContact.ts @@ -10,12 +10,12 @@ import { } from '@homebase-id/js-lib/network'; import { ApiType, - DotYouClient, + OdinClient, HomebaseFile, NewHomebaseFile, SecurityGroupType, } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; import { fetchConnectionInfo, fetchDataFromPublic, @@ -33,7 +33,7 @@ export const useContact = ({ id?: string; canSave: boolean; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const hasContactDriveWriteAccess = useHasWriteAccess(ContactConfig.ContactTargetDrive); const hasContactDriveReadAccess = useHasReadAccess(ContactConfig.ContactTargetDrive); @@ -53,7 +53,7 @@ export const useContact = ({ if (!id) return null; //Direct fetch with id: - return (await getContactByUniqueId(dotYouClient, id)) || null; + return (await getContactByUniqueId(odinClient, id)) || null; } const hasCache = @@ -66,7 +66,7 @@ export const useContact = ({ // Direct fetch with odinId: // Use the data from the contact book, if it exists and if it's a contact level source or we are not allowed to save anyway - const contactBookContact = (await getContactByOdinId(dotYouClient, odinId)) ?? null; + const contactBookContact = (await getContactByOdinId(odinClient, odinId)) ?? null; if ( !hasCache && // If we have a contact on drive, and we don't have cache, we need a fast return; Otherwise we trigger a refresh contactBookContact && @@ -80,7 +80,7 @@ export const useContact = ({ ); const returnContact = - (await fetchConnectionInfo(dotYouClient, odinId)) || (await fetchDataFromPublic(odinId)); + (await fetchConnectionInfo(odinClient, odinId)) || (await fetchDataFromPublic(odinId)); if (!returnContact) return null; @@ -96,7 +96,7 @@ export const useContact = ({ }; if (canSave && hasContactDriveWriteAccess) { - const uploadResult = await saveContact(dotYouClient, contactFile); + const uploadResult = await saveContact(odinClient, contactFile); const savedContactFile = { ...contactFile, fileId: uploadResult?.file.fileId, @@ -116,14 +116,14 @@ export const useContact = ({ } const connectionInfo = - (await fetchConnectionInfo(dotYouClient, contact.fileMetadata.appData.content.odinId)) ?? + (await fetchConnectionInfo(odinClient, contact.fileMetadata.appData.content.odinId)) ?? undefined; const newContact = connectionInfo ? { ...contact.fileMetadata.appData.content, ...connectionInfo } : undefined; if (newContact) { - await saveContact(dotYouClient, { + await saveContact(odinClient, { ...contact, fileMetadata: { ...contact.fileMetadata, @@ -135,7 +135,7 @@ export const useContact = ({ } else { const publicContact = await fetchDataFromPublic(contact.fileMetadata.appData.content.odinId); if (!publicContact) return; - await saveContact(dotYouClient, { + await saveContact(odinClient, { ...contact, fileMetadata: { ...contact.fileMetadata, @@ -212,7 +212,7 @@ export const parseContact = ( const imageUrl = pureContent.image ? `data:${pureContent.image.contentType};base64,${pureContent.image.content}` : pureContent.odinId - ? `${new DotYouClient({ hostIdentity: pureContent.odinId, api: ApiType.Guest }).getRoot()}/pub/image` + ? `${new OdinClient({ hostIdentity: pureContent.odinId, api: ApiType.Guest }).getRoot()}/pub/image` : undefined; const { name, location, phone, birthday, odinId, source } = pureContent; diff --git a/packages/common/common-app/src/hooks/file/useContentFromPayload.ts b/packages/common/common-app/src/hooks/file/useContentFromPayload.ts index 396f170b6..33c8c41d7 100644 --- a/packages/common/common-app/src/hooks/file/useContentFromPayload.ts +++ b/packages/common/common-app/src/hooks/file/useContentFromPayload.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; import { getPayloadAsJson, SystemFileType, TargetDrive } from '@homebase-id/js-lib/core'; import { getPayloadAsJsonOverPeer } from '@homebase-id/js-lib/peer'; @@ -12,7 +12,7 @@ export const useContentFromPayload = (props?: { systemFileType?: SystemFileType; }) => { const { odinId, targetDrive, fileId, payloadKey, lastModified, systemFileType } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchContentFromPayload = async ( odinId: string | undefined, @@ -22,14 +22,14 @@ export const useContentFromPayload = (props?: { lastModified: number | undefined, systemFileType: SystemFileType | undefined ) => { - if (!odinId || odinId === dotYouClient.getHostIdentity()) { - return await getPayloadAsJson(dotYouClient, targetDrive, fileId, payloadKey, { + if (!odinId || odinId === odinClient.getHostIdentity()) { + return await getPayloadAsJson(odinClient, targetDrive, fileId, payloadKey, { lastModified, systemFileType, }); } return await getPayloadAsJsonOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, fileId, diff --git a/packages/common/common-app/src/hooks/file/useFile.ts b/packages/common/common-app/src/hooks/file/useFile.ts index 2cd6fae7c..81e4e2336 100644 --- a/packages/common/common-app/src/hooks/file/useFile.ts +++ b/packages/common/common-app/src/hooks/file/useFile.ts @@ -1,12 +1,12 @@ import { SystemFileType, TargetDrive, getPayloadBytes } from '@homebase-id/js-lib/core'; import { getPayloadBytesOverPeerByGlobalTransitId } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useFile = (props?: { targetDrive: TargetDrive; systemFileType?: SystemFileType }) => { const { targetDrive, systemFileType } = props || {}; - const dotYouClient = useDotYouClientContext(); - const identity = dotYouClient.getHostIdentity(); + const odinClient = useOdinClientContext(); + const identity = odinClient.getHostIdentity(); const fetchFile = async ( odinId: string | undefined, @@ -21,31 +21,31 @@ export const useFile = (props?: { targetDrive: TargetDrive; systemFileType?: Sys const payload = !isLocal ? globalTransitId ? await getPayloadBytesOverPeerByGlobalTransitId( - dotYouClient, - odinId, - targetDrive, - globalTransitId, - payloadKey, - { - systemFileType, - decrypt: true, - } - ) + odinClient, + odinId, + targetDrive, + globalTransitId, + payloadKey, + { + systemFileType, + decrypt: true, + } + ) : await getPayloadBytesOverPeerByGlobalTransitId( - dotYouClient, - odinId, - targetDrive, - fileId, - payloadKey, - { - systemFileType, - decrypt: true, - } - ) - : await getPayloadBytes(dotYouClient, targetDrive, fileId, payloadKey, { - systemFileType, - decrypt: true, - }); + odinClient, + odinId, + targetDrive, + fileId, + payloadKey, + { + systemFileType, + decrypt: true, + } + ) + : await getPayloadBytes(odinClient, targetDrive, fileId, payloadKey, { + systemFileType, + decrypt: true, + }); if (!payload) return null; return window.URL.createObjectURL( diff --git a/packages/common/common-app/src/hooks/file/useTransferHistory.ts b/packages/common/common-app/src/hooks/file/useTransferHistory.ts index 4a6caf3fd..66a82291e 100644 --- a/packages/common/common-app/src/hooks/file/useTransferHistory.ts +++ b/packages/common/common-app/src/hooks/file/useTransferHistory.ts @@ -1,6 +1,6 @@ import { getTransferHistory, SystemFileType, TargetDrive } from '@homebase-id/js-lib/core'; import { useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useTransferHistory = ({ fileId, @@ -11,10 +11,10 @@ export const useTransferHistory = ({ targetDrive: TargetDrive; systemFileType?: SystemFileType; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchTransferHistory = async () => { - return getTransferHistory(dotYouClient, targetDrive, fileId, { + return getTransferHistory(odinClient, targetDrive, fileId, { systemFileType, }); }; diff --git a/packages/common/common-app/src/hooks/follow/useFollowers.ts b/packages/common/common-app/src/hooks/follow/useFollowers.ts index 911baaf10..a6835f45e 100644 --- a/packages/common/common-app/src/hooks/follow/useFollowers.ts +++ b/packages/common/common-app/src/hooks/follow/useFollowers.ts @@ -1,13 +1,13 @@ import { useInfiniteQuery } from '@tanstack/react-query'; import { fetchFollowers } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; const PAGE_SIZE = 30; export const useFollowerInfinite = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetch = async ({ pageParam }: { pageParam?: string }) => { - const response = await fetchFollowers(dotYouClient, pageParam, PAGE_SIZE); + const response = await fetchFollowers(odinClient, pageParam, PAGE_SIZE); return response; }; diff --git a/packages/common/common-app/src/hooks/follow/useFollowing.ts b/packages/common/common-app/src/hooks/follow/useFollowing.ts index 418151058..0ab738563 100644 --- a/packages/common/common-app/src/hooks/follow/useFollowing.ts +++ b/packages/common/common-app/src/hooks/follow/useFollowing.ts @@ -1,15 +1,15 @@ import { QueryClient, useInfiniteQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { createOrUpdateFollow, fetchFollowing, FollowRequest } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; const PAGE_SIZE = 30; export const useFollowingInfinite = () => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchFollowingInternal = async ({ pageParam }: { pageParam?: string }) => { try { - const response = await fetchFollowing(dotYouClient, pageParam, PAGE_SIZE); + const response = await fetchFollowing(odinClient, pageParam, PAGE_SIZE); if (response) return response; } catch (ex) { console.error('Failed to fetch following', ex); @@ -27,7 +27,7 @@ export const useFollowingInfinite = () => { }: { request: FollowRequest; includeHistory?: boolean; - }) => await createOrUpdateFollow(dotYouClient, request, includeHistory); + }) => await createOrUpdateFollow(odinClient, request, includeHistory); return { fetch: useInfiniteQuery({ diff --git a/packages/common/common-app/src/hooks/follow/useIdentityIFollow.ts b/packages/common/common-app/src/hooks/follow/useIdentityIFollow.ts index 917d5d26d..54fa46afe 100644 --- a/packages/common/common-app/src/hooks/follow/useIdentityIFollow.ts +++ b/packages/common/common-app/src/hooks/follow/useIdentityIFollow.ts @@ -1,23 +1,23 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { fetchIdentityIFollow, Unfollow, UnfollowRequest } from '@homebase-id/js-lib/network'; import { invalidateFollowing } from './useFollowing'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; type useIdentityIFollowProps = { odinId?: string; }; export const useIdentityIFollow = ({ odinId }: useIdentityIFollowProps) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetch = async ({ odinId }: { odinId: string }) => { - const response = await fetchIdentityIFollow(dotYouClient, odinId); + const response = await fetchIdentityIFollow(odinClient, odinId); return response; }; const unfollow = async (request: UnfollowRequest) => { - const response = await Unfollow(dotYouClient, request); + const response = await Unfollow(odinClient, request); return response; }; diff --git a/packages/common/common-app/src/hooks/image/useRawImage.ts b/packages/common/common-app/src/hooks/image/useRawImage.ts index 855d5757b..d62311875 100644 --- a/packages/common/common-app/src/hooks/image/useRawImage.ts +++ b/packages/common/common-app/src/hooks/image/useRawImage.ts @@ -2,7 +2,7 @@ import { useQuery } from '@tanstack/react-query'; import { ImageSize, TargetDrive } from '@homebase-id/js-lib/core'; import { getDecryptedImageUrl } from '@homebase-id/js-lib/media'; import { getDecryptedImageUrlOverPeer } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export interface ImageData { url: string; @@ -29,7 +29,7 @@ export const useRawImage = ({ lastModified?: number; }) => { const localHost = window.location.hostname; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchImageData = async ( odinId: string, @@ -54,24 +54,24 @@ export const useRawImage = ({ url: odinId !== localHost ? await getDecryptedImageUrlOverPeer( - dotYouClient, - odinId, - imageDrive, - imageFileId, - imageFileKey, - probablyEncrypted, - lastModified, - { size } - ) + odinClient, + odinId, + imageDrive, + imageFileId, + imageFileKey, + probablyEncrypted, + lastModified, + { size } + ) : await getDecryptedImageUrl( - dotYouClient, - imageDrive, - imageFileId, - imageFileKey, - probablyEncrypted, - lastModified, - { size } - ), + odinClient, + imageDrive, + imageFileId, + imageFileKey, + probablyEncrypted, + lastModified, + { size } + ), naturalSize: naturalSize, }; }; diff --git a/packages/common/common-app/src/hooks/index.ts b/packages/common/common-app/src/hooks/index.ts index 51dbb9685..e6fe5acfc 100644 --- a/packages/common/common-app/src/hooks/index.ts +++ b/packages/common/common-app/src/hooks/index.ts @@ -1,5 +1,5 @@ -export * from './auth/useDotYouClient'; -export * from './auth/useDotYouClientContext'; +export * from './auth/useOdinClient'; +export * from './auth/useOdinClientContext'; export * from './checkIdentity/useCheckIdentity'; export * from './circles/useCircle'; export * from './circles/useCircles'; diff --git a/packages/common/common-app/src/hooks/introductions/useIntroductions.ts b/packages/common/common-app/src/hooks/introductions/useIntroductions.ts index 3f4aef490..0cda1b563 100644 --- a/packages/common/common-app/src/hooks/introductions/useIntroductions.ts +++ b/packages/common/common-app/src/hooks/introductions/useIntroductions.ts @@ -1,12 +1,12 @@ import { useMutation } from '@tanstack/react-query'; import { IntroductionGroup, sendIntroduction } from '@homebase-id/js-lib/network'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useIntroductions = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const introduce = async (introduction: IntroductionGroup) => - sendIntroduction(dotYouClient, introduction); + sendIntroduction(odinClient, introduction); return { introduceIdentities: useMutation({ diff --git a/packages/common/common-app/src/hooks/links/useLinkMetadata.ts b/packages/common/common-app/src/hooks/links/useLinkMetadata.ts index 7653fd285..b9817f1aa 100644 --- a/packages/common/common-app/src/hooks/links/useLinkMetadata.ts +++ b/packages/common/common-app/src/hooks/links/useLinkMetadata.ts @@ -5,7 +5,7 @@ import { getPayloadAsJsonOverPeerByGlobalTransitId, } from '@homebase-id/js-lib/peer'; import { useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useLinkMetadata = ({ odinId, @@ -22,15 +22,15 @@ export const useLinkMetadata = ({ payloadKey: string; systemFileType?: SystemFileType; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); return useQuery({ queryKey: ['link-metadata', targetDrive.alias, fileId, payloadKey], queryFn: async () => { - if (odinId && dotYouClient.getHostIdentity() !== odinId) { + if (odinId && odinClient.getHostIdentity() !== odinId) { if (globalTransitId) { return getPayloadAsJsonOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -41,7 +41,7 @@ export const useLinkMetadata = ({ ); } else if (fileId) { return getPayloadAsJsonOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -52,7 +52,7 @@ export const useLinkMetadata = ({ } if (!fileId) return []; - return getPayloadAsJson(dotYouClient, targetDrive, fileId, payloadKey, { + return getPayloadAsJson(odinClient, targetDrive, fileId, payloadKey, { systemFileType, }); }, diff --git a/packages/common/common-app/src/hooks/links/useLinkPreviewBuilder.ts b/packages/common/common-app/src/hooks/links/useLinkPreviewBuilder.ts index 249820a60..81f87f6d8 100644 --- a/packages/common/common-app/src/hooks/links/useLinkPreviewBuilder.ts +++ b/packages/common/common-app/src/hooks/links/useLinkPreviewBuilder.ts @@ -1,9 +1,9 @@ import { useEffect, useMemo, useState } from 'react'; import { LinkPreview, getLinkPreview } from '@homebase-id/js-lib/media'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useLinkPreviewBuilder = (textToSearchIn: string) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const foundLinks = useMemo( () => @@ -31,7 +31,7 @@ export const useLinkPreviewBuilder = (textToSearchIn: string) => { (async () => { const LinkPreviews = ( - await Promise.all(newLinks.map(async (link) => await getLinkPreview(dotYouClient, link))) + await Promise.all(newLinks.map(async (link) => await getLinkPreview(odinClient, link))) ).filter(Boolean) as LinkPreview[]; setLinkPreviews((old) => ({ diff --git a/packages/common/common-app/src/hooks/notifications/useLiveNotifications.tsx b/packages/common/common-app/src/hooks/notifications/useLiveNotifications.tsx index 4651126e9..a9e15aa61 100644 --- a/packages/common/common-app/src/hooks/notifications/useLiveNotifications.tsx +++ b/packages/common/common-app/src/hooks/notifications/useLiveNotifications.tsx @@ -2,7 +2,7 @@ import { ApiType, AppNotification, ClientConnectionNotification, - DotYouClient, + OdinClient, PushNotification, TargetDrive, TypedConnectionNotification, @@ -43,7 +43,7 @@ export const useLiveNotifications = (props: { drives?: TargetDrive[] } | undefin const [liveNotifications, setLiveNotifications] = useState([]); const queryClient = useQueryClient(); - const handler = useCallback((_: DotYouClient, wsNotification: TypedConnectionNotification) => { + const handler = useCallback((_: OdinClient, wsNotification: TypedConnectionNotification) => { const clientNotification = wsNotification as ClientConnectionNotification; if ( @@ -57,7 +57,7 @@ export const useLiveNotifications = (props: { drives?: TargetDrive[] } | undefin ? clientNotification.sender : clientNotification.recipient; - const host = new DotYouClient({ api: ApiType.Guest, hostIdentity: otherId }).getRoot(); + const host = new OdinClient({ api: ApiType.Guest, hostIdentity: otherId }).getRoot(); const liveNotification: LiveNotification = { key: `incoming-${otherId}`, @@ -89,7 +89,7 @@ export const useLiveNotifications = (props: { drives?: TargetDrive[] } | undefin incrementAppIdNotificationCount(queryClient, clientNotification.options.appId); // Add as live notification - const host = new DotYouClient({ + const host = new OdinClient({ api: ApiType.Guest, hostIdentity: clientNotification.senderId, }).getRoot(); diff --git a/packages/common/common-app/src/hooks/notifications/usePushNotifications.ts b/packages/common/common-app/src/hooks/notifications/usePushNotifications.ts index 09fcf6a28..129a7eeaf 100644 --- a/packages/common/common-app/src/hooks/notifications/usePushNotifications.ts +++ b/packages/common/common-app/src/hooks/notifications/usePushNotifications.ts @@ -17,22 +17,22 @@ import { markAllNotificationsOfAppAsRead, } from '@homebase-id/js-lib/core'; import { useEffect } from 'react'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; import { useRef } from 'react'; const PAGE_SIZE = 500; export const usePushNotifications = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const getNotifications = async (cursor: unknown | undefined) => - await GetNotifications(dotYouClient, undefined, PAGE_SIZE, cursor); + await GetNotifications(odinClient, undefined, PAGE_SIZE, cursor); const markAsRead = async (notificationIds: string[]) => - await MarkNotificationsAsRead(dotYouClient, notificationIds); + await MarkNotificationsAsRead(odinClient, notificationIds); const removeNotifications = async (notificationIds: string[]) => - await DeleteNotifications(dotYouClient, notificationIds); + await DeleteNotifications(odinClient, notificationIds); return { fetch: useInfiniteQuery({ @@ -139,9 +139,9 @@ export const insertNewNotification = ( results: index === 0 ? [ - appNotification, - ...page.results.filter((notification) => notification.id !== appNotification.id), - ] + appNotification, + ...page.results.filter((notification) => notification.id !== appNotification.id), + ] : page.results.filter((notification) => notification.id !== appNotification.id), })), }; @@ -155,8 +155,8 @@ export const insertNewNotification = ( }; export const useUnreadPushNotificationsCount = (props?: { appId?: string }) => { - const dotYouClient = useDotYouClientContext(); - const getCounts = async () => (await getNotificationCountsByAppId(dotYouClient)).unreadCounts; + const odinClient = useOdinClientContext(); + const getCounts = async () => (await getNotificationCountsByAppId(odinClient)).unreadCounts; return useQuery({ queryKey: ['push-notifications-count'], @@ -176,7 +176,7 @@ export const useRemoveNotifications = (props: { appId: string; typeId?: string; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const { data: unreadCount } = useUnreadPushNotificationsCount({ appId: props.appId, @@ -184,8 +184,8 @@ export const useRemoveNotifications = (props: { const markAsRead = async ({ appId, typeId }: { appId: string; typeId?: string }) => { const response = typeId - ? await markAllNotificationsOfAppAndTypeIdAsRead(dotYouClient, appId, typeId) - : await markAllNotificationsOfAppAsRead(dotYouClient, appId); + ? await markAllNotificationsOfAppAndTypeIdAsRead(odinClient, appId, typeId) + : await markAllNotificationsOfAppAsRead(odinClient, appId); return response; }; diff --git a/packages/common/common-app/src/hooks/profiles/useProfiles.ts b/packages/common/common-app/src/hooks/profiles/useProfiles.ts index 106f6a464..41d7dbc56 100644 --- a/packages/common/common-app/src/hooks/profiles/useProfiles.ts +++ b/packages/common/common-app/src/hooks/profiles/useProfiles.ts @@ -6,7 +6,7 @@ import { saveProfileDefinition, } from '@homebase-id/js-lib/profile'; import { slugify } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export interface ProfileDefinitionVm extends ProfileDefinition { slug: string; @@ -14,10 +14,10 @@ export interface ProfileDefinitionVm extends ProfileDefinition { export const useProfiles = (disabled?: boolean) => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchAll = async () => { - const definitions = (await getProfileDefinitions(dotYouClient)) + const definitions = (await getProfileDefinitions(odinClient)) const mappedDefinitions = definitions .map((def) => { return { @@ -34,11 +34,11 @@ export const useProfiles = (disabled?: boolean) => { }; const saveProfile = async (profileDef: ProfileDefinition) => { - return await saveProfileDefinition(dotYouClient, profileDef); + return await saveProfileDefinition(odinClient, profileDef); }; const removeProfile = async (profileId: string) => { - return await removeProfileDefinition(dotYouClient, profileId); + return await removeProfileDefinition(odinClient, profileId); }; return { diff --git a/packages/common/common-app/src/hooks/reactions/comments/useComments.tsx b/packages/common/common-app/src/hooks/reactions/comments/useComments.tsx index 5a771d4f6..fac53d684 100644 --- a/packages/common/common-app/src/hooks/reactions/comments/useComments.tsx +++ b/packages/common/common-app/src/hooks/reactions/comments/useComments.tsx @@ -1,7 +1,7 @@ import { QueryClient, useInfiniteQuery, useQueryClient } from '@tanstack/react-query'; import { getComments, ReactionContext } from '@homebase-id/js-lib/public'; import { HomebaseFile, CommentReaction } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; import { formatGuidId } from '@homebase-id/js-lib/helpers'; import { invalidateCommentSummary } from './useCommentSummary'; @@ -13,7 +13,7 @@ export interface UseCommentsVal { } export const useComments = ({ context }: { context: ReactionContext }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); @@ -27,7 +27,7 @@ export const useComments = ({ context }: { context: ReactionContext }) => { if (!context.odinId || !context.channelId || !context.target.globalTransitId) return { comments: [] as HomebaseFile[], cursorState: undefined }; - const response = await getComments(dotYouClient, context, PAGE_SIZE, pageParam); + const response = await getComments(odinClient, context, PAGE_SIZE, pageParam); setTimeout(() => { invalidateCommentSummary( queryClient, diff --git a/packages/common/common-app/src/hooks/reactions/emojis/useEmojiReactions.tsx b/packages/common/common-app/src/hooks/reactions/emojis/useEmojiReactions.tsx index e65c241d4..e94969f86 100644 --- a/packages/common/common-app/src/hooks/reactions/emojis/useEmojiReactions.tsx +++ b/packages/common/common-app/src/hooks/reactions/emojis/useEmojiReactions.tsx @@ -2,12 +2,12 @@ import { useInfiniteQuery } from '@tanstack/react-query'; import { GetTargetDriveFromChannelId, ReactionContext } from '@homebase-id/js-lib/public'; import { getReactions, EmojiReaction } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; const PAGE_SIZE = 15; export const useEmojiReactions = (context?: ReactionContext) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetch = async ({ context, @@ -24,7 +24,7 @@ export const useEmojiReactions = (context?: ReactionContext) => { return { reactions: [] as EmojiReaction[], cursor: undefined }; } return await getReactions( - dotYouClient, + odinClient, context.odinId, { fileId: context.target.fileId, diff --git a/packages/common/common-app/src/hooks/reactions/emojis/useEmojiSummary.tsx b/packages/common/common-app/src/hooks/reactions/emojis/useEmojiSummary.tsx index 54d180a2c..d042f4cc0 100644 --- a/packages/common/common-app/src/hooks/reactions/emojis/useEmojiSummary.tsx +++ b/packages/common/common-app/src/hooks/reactions/emojis/useEmojiSummary.tsx @@ -4,7 +4,7 @@ import { getReactionSummary, ReactionContext, } from '@homebase-id/js-lib/public'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; import { formatGuidId } from '@homebase-id/js-lib/helpers'; export const useEmojiSummary = ({ @@ -14,7 +14,7 @@ export const useEmojiSummary = ({ context: ReactionContext; reactionPreview?: EmojiReactionSummary; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetch = async (context: ReactionContext): Promise => { if ( @@ -25,7 +25,7 @@ export const useEmojiSummary = ({ return { reactions: [], totalCount: 0 }; } - return await getReactionSummary(dotYouClient, context); + return await getReactionSummary(odinClient, context); }; return { diff --git a/packages/common/common-app/src/hooks/reactions/emojis/useMyEmojiReactions.tsx b/packages/common/common-app/src/hooks/reactions/emojis/useMyEmojiReactions.tsx index 295447b4f..937553f7d 100644 --- a/packages/common/common-app/src/hooks/reactions/emojis/useMyEmojiReactions.tsx +++ b/packages/common/common-app/src/hooks/reactions/emojis/useMyEmojiReactions.tsx @@ -1,12 +1,12 @@ import { useQuery } from '@tanstack/react-query'; import { getMyReactions, ReactionContext } from '@homebase-id/js-lib/public'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; const PAGE_SIZE = 10; export const useMyEmojiReactions = (context?: ReactionContext) => { - const dotYouClient = useDotYouClientContext(); - const loggedInIdentity = dotYouClient.getLoggedInIdentity(); + const odinClient = useOdinClientContext(); + const loggedInIdentity = odinClient.getLoggedInIdentity(); const fetch = async ({ context, @@ -23,7 +23,7 @@ export const useMyEmojiReactions = (context?: ReactionContext) => { return []; } return ( - (await getMyReactions(dotYouClient, loggedInIdentity, context, PAGE_SIZE, pageParam)) || [] + (await getMyReactions(odinClient, loggedInIdentity, context, PAGE_SIZE, pageParam)) || [] ); }; diff --git a/packages/common/common-app/src/hooks/reactions/useCanReact.tsx b/packages/common/common-app/src/hooks/reactions/useCanReact.tsx index 96fafa492..f883a1425 100644 --- a/packages/common/common-app/src/hooks/reactions/useCanReact.tsx +++ b/packages/common/common-app/src/hooks/reactions/useCanReact.tsx @@ -4,7 +4,7 @@ import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { useQuery } from '@tanstack/react-query'; import { useSecurityContext } from '../securityContext/useSecurityContext'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; interface UseCanReactProps { odinId: string; @@ -42,7 +42,7 @@ export const useCanReact = ({ isOwner, isAuthenticated, }: UseCanReactProps) => { - const loggedInIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedInIdentity = useOdinClientContext().getLoggedInIdentity(); const isAuthor = odinId === loggedInIdentity; const { data: securityContext, isFetched: securityFetched } = useSecurityContext( odinId, diff --git a/packages/common/common-app/src/hooks/reactions/useReaction.tsx b/packages/common/common-app/src/hooks/reactions/useReaction.tsx index d1d83f889..3c9836087 100644 --- a/packages/common/common-app/src/hooks/reactions/useReaction.tsx +++ b/packages/common/common-app/src/hooks/reactions/useReaction.tsx @@ -13,11 +13,11 @@ import { getRichTextFromString } from '../../helpers/richTextHelper'; import { UseCommentsVal } from './comments/useComments'; import { CommentReaction, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useReaction = () => { const queryClient = useQueryClient(); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const saveCommentData = async ({ context, @@ -28,7 +28,7 @@ export const useReaction = () => { | Omit, 'serverMetadata'> | Omit, 'serverMetadata'>; }) => { - return await saveComment(dotYouClient, context, { + return await saveComment(odinClient, context, { ...commentData, fileMetadata: { ...commentData.fileMetadata, @@ -52,7 +52,7 @@ export const useReaction = () => { context: ReactionContext; commentFile: HomebaseFile; }) => { - return await removeComment(dotYouClient, context, commentFile); + return await removeComment(odinClient, context, commentFile); }; const saveEmojiReactionData = async ({ @@ -62,7 +62,7 @@ export const useReaction = () => { emojiData: RawReactionContent; context: ReactionContext; }) => { - return await saveEmojiReaction(dotYouClient, emojiData, context); + return await saveEmojiReaction(odinClient, emojiData, context); }; const removeEmojiReactionData = async ({ @@ -72,7 +72,7 @@ export const useReaction = () => { emojiData: RawReactionContent; context: ReactionContext; }) => { - return await removeEmojiReaction(dotYouClient, emojiData, context); + return await removeEmojiReaction(odinClient, emojiData, context); }; return { diff --git a/packages/common/common-app/src/hooks/securityContext/useSecurityContext.ts b/packages/common/common-app/src/hooks/securityContext/useSecurityContext.ts index d3da0f0bc..0a8786a2c 100644 --- a/packages/common/common-app/src/hooks/securityContext/useSecurityContext.ts +++ b/packages/common/common-app/src/hooks/securityContext/useSecurityContext.ts @@ -1,18 +1,18 @@ import { useQuery } from '@tanstack/react-query'; import { ApiType, getSecurityContext, getSecurityContextOverPeer } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useSecurityContext = (odinId?: string, isEnabled?: boolean) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetch = async (odinId?: string) => { if ( !odinId || odinId === window.location.hostname || - (dotYouClient.getType() === ApiType.App && odinId === dotYouClient.getHostIdentity()) + (odinClient.getType() === ApiType.App && odinId === odinClient.getHostIdentity()) ) - return await getSecurityContext(dotYouClient); - else return await getSecurityContextOverPeer(dotYouClient, odinId); + return await getSecurityContext(odinClient); + else return await getSecurityContextOverPeer(odinClient, odinId); }; return { diff --git a/packages/common/common-app/src/hooks/siteData/useSiteData.ts b/packages/common/common-app/src/hooks/siteData/useSiteData.ts index 41d9a0e0f..73c89ca39 100644 --- a/packages/common/common-app/src/hooks/siteData/useSiteData.ts +++ b/packages/common/common-app/src/hooks/siteData/useSiteData.ts @@ -15,7 +15,7 @@ import { } from '@homebase-id/js-lib/public'; import { HomebaseFile, EmbeddedThumb, queryBatchCollection } from '@homebase-id/js-lib/core'; import { getHighestPrioAttributesFromMultiTypes } from '../../helpers/common'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; interface DefaultTemplateSettings { imageFileId: string; @@ -79,11 +79,11 @@ type SiteData = { }; export const useSiteData = () => { - const dotYouClient = useDotYouClientContext(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isAuthenticated = odinClient.isAuthenticated(); const fetchData: () => Promise = async () => { - const fileData = await GetFile(dotYouClient, 'sitedata.json'); + const fileData = await GetFile(odinClient, 'sitedata.json'); const parseOwnerData = async ( nameAndPhotoAndStatusAttr?: HomebaseFile[] @@ -138,7 +138,7 @@ export const useSiteData = () => { const homeDrive = HomePageConfig.HomepageTargetDrive; /// Query batch collection to improve performance instead of higher level `AttributeDataProvider.getProfileAttributes` - const collectionResult = await queryBatchCollection(dotYouClient, [ + const collectionResult = await queryBatchCollection(odinClient, [ { name: 'owner', queryParams: { @@ -182,7 +182,7 @@ export const useSiteData = () => { ?.map( async (dsr) => await homebaseFileToProfileAttribute( - dotYouClient, + odinClient, dsr, ownerDrive, INCLUDE_METADATA_HEADER @@ -195,7 +195,7 @@ export const useSiteData = () => { ?.map( async (dsr) => await homebaseFileToProfileAttribute( - dotYouClient, + odinClient, dsr, homeDrive, INCLUDE_METADATA_HEADER diff --git a/packages/common/common-app/src/hooks/socialFeed/channels/useChannel.ts b/packages/common/common-app/src/hooks/socialFeed/channels/useChannel.ts index c8655f5e3..e9180fc27 100644 --- a/packages/common/common-app/src/hooks/socialFeed/channels/useChannel.ts +++ b/packages/common/common-app/src/hooks/socialFeed/channels/useChannel.ts @@ -7,7 +7,7 @@ import { } from '@homebase-id/js-lib/public'; import { ChannelDefinitionVm, parseChannelTemplate } from './useChannels'; -import { useDotYouClientContext } from '../../../..'; +import { useOdinClientContext } from '../../../..'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { fetchCachedPublicChannels } from '../post/cachedDataHelpers'; @@ -19,14 +19,14 @@ type useChannelsProps = { }; export const useChannel = ({ odinId, channelKey }: useChannelsProps) => { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner; + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner; const queryClient = useQueryClient(); const fetchChannelData = async ({ channelKey }: useChannelsProps) => { if (!channelKey) return null; - if (!odinId || odinId === dotYouClient.getHostIdentity()) { + if (!odinId || odinId === odinClient.getHostIdentity()) { const cachedChannels = queryClient.getQueryData[]>([ 'channels', ]); @@ -39,7 +39,7 @@ export const useChannel = ({ odinId, channelKey }: useChannelsProps) => { if (foundChannel) return foundChannel; } - const channel = (await fetchCachedPublicChannels(dotYouClient))?.find( + const channel = (await fetchCachedPublicChannels(odinClient))?.find( (chnl) => stringGuidsEqual(chnl.fileMetadata.appData.uniqueId, channelKey) || chnl.fileMetadata.appData.content.slug === channelKey @@ -47,8 +47,8 @@ export const useChannel = ({ odinId, channelKey }: useChannelsProps) => { if (channel && !isOwner) return channel; const directFetchOfChannel = - (await getChannelDefinitionBySlug(dotYouClient, channelKey)) || - (await getChannelDefinition(dotYouClient, channelKey)); + (await getChannelDefinitionBySlug(odinClient, channelKey)) || + (await getChannelDefinition(odinClient, channelKey)); if (directFetchOfChannel) { return { @@ -73,8 +73,8 @@ export const useChannel = ({ odinId, channelKey }: useChannelsProps) => { if (channelKey === BlogConfig.PublicChannelId) return BlogConfig.PublicChannelNewDsr; return ( - (await getChannelBySlugOverPeer(dotYouClient, odinId, channelKey)) || - (await getChannelOverPeer(dotYouClient, odinId, channelKey)) || + (await getChannelBySlugOverPeer(odinClient, odinId, channelKey)) || + (await getChannelOverPeer(odinClient, odinId, channelKey)) || null ); } @@ -82,7 +82,7 @@ export const useChannel = ({ odinId, channelKey }: useChannelsProps) => { return { fetch: useQuery({ - queryKey: ['channel', odinId || dotYouClient.getHostIdentity(), channelKey], + queryKey: ['channel', odinId || odinClient.getHostIdentity(), channelKey], queryFn: () => fetchChannelData({ channelKey }), staleTime: 1000 * 60 * 60, // 1 hour enabled: !!channelKey, diff --git a/packages/common/common-app/src/hooks/socialFeed/channels/useChannelDrives.ts b/packages/common/common-app/src/hooks/socialFeed/channels/useChannelDrives.ts index 6a497efdb..7c862a51e 100644 --- a/packages/common/common-app/src/hooks/socialFeed/channels/useChannelDrives.ts +++ b/packages/common/common-app/src/hooks/socialFeed/channels/useChannelDrives.ts @@ -1,14 +1,14 @@ import { useQuery } from '@tanstack/react-query'; import { BlogConfig } from '@homebase-id/js-lib/public'; import { getDrivesByType } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; export const useChannelDrives = (isEnabled: boolean) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetchChannelData = async () => { return await ( - await getDrivesByType(dotYouClient, BlogConfig.DriveType, 1, 25) + await getDrivesByType(odinClient, BlogConfig.DriveType, 1, 25) ).results; }; diff --git a/packages/common/common-app/src/hooks/socialFeed/channels/useChannels.ts b/packages/common/common-app/src/hooks/socialFeed/channels/useChannels.ts index 44f828084..73f4eb02e 100644 --- a/packages/common/common-app/src/hooks/socialFeed/channels/useChannels.ts +++ b/packages/common/common-app/src/hooks/socialFeed/channels/useChannels.ts @@ -7,7 +7,7 @@ import { import { HomebaseFile } from '@homebase-id/js-lib/core'; import { fetchCachedPublicChannels } from '../post/cachedDataHelpers'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; export interface ChannelDefinitionVm extends ChannelDefinition { template: ChannelTemplate; } @@ -27,13 +27,13 @@ export const useChannels = ({ isAuthenticated: boolean; isOwner: boolean; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const fetchChannelData = async () => { const fetchDynamicData = async () => { try { - return (await getChannelDefinitions(dotYouClient))?.map((channel) => { + return (await getChannelDefinitions(odinClient))?.map((channel) => { return { ...channel, fileMetadata: { @@ -57,7 +57,7 @@ export const useChannels = ({ const returnData = isOwner ? await fetchDynamicData() - : ((await fetchCachedPublicChannels(dotYouClient)) ?? (await fetchDynamicData())); + : ((await fetchCachedPublicChannels(odinClient)) ?? (await fetchDynamicData())); if (isAuthenticated && !isOwner) { // We are authenticated, so we might have more data when fetching non-static data; Let's do so async with timeout to allow other static info to load and render diff --git a/packages/common/common-app/src/hooks/socialFeed/channels/useCollaborativeChannel.ts b/packages/common/common-app/src/hooks/socialFeed/channels/useCollaborativeChannel.ts index 3827202d8..c9ec257ce 100644 --- a/packages/common/common-app/src/hooks/socialFeed/channels/useCollaborativeChannel.ts +++ b/packages/common/common-app/src/hooks/socialFeed/channels/useCollaborativeChannel.ts @@ -15,12 +15,12 @@ import { t, useChannelDrives, useCircles, - useDotYouClientContext, + useOdinClientContext, } from '../../../..'; import { drivesEqual, stringGuidsEqual, stringifyToQueryParams } from '@homebase-id/js-lib/helpers'; import { ApiType, - DotYouClient, + OdinClient, DrivePermissionType, HomebaseFile, NewHomebaseFile, @@ -56,7 +56,7 @@ const getExtendDriveDetailsUrl = ( d: JSON.stringify(drives), }; - const host = new DotYouClient({ + const host = new OdinClient({ hostIdentity: identity, api: ApiType.App, }).getRoot(); @@ -93,7 +93,7 @@ const getExtendCirclePermissionUrl = ( c: circleIds.join(','), }; - const host = new DotYouClient({ + const host = new OdinClient({ hostIdentity: identity, api: ApiType.App, }).getRoot(); @@ -104,7 +104,7 @@ const getExtendCirclePermissionUrl = ( export const useCollaborativeChannel = (props?: { channelId: string }) => { const { channelId } = props || {}; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const { data: channelDef, isFetched: isChannelFetched } = useChannel({ @@ -116,13 +116,13 @@ export const useCollaborativeChannel = (props?: { channelId: string }) => { const saveCollaborativeChannel = async ( chnlLink: NewHomebaseFile ) => { - return await saveChannelLink(dotYouClient, chnlLink); + return await saveChannelLink(odinClient, chnlLink); }; const removeCollaborativeChannel = async ( chnlLink: HomebaseFile ) => { - return await removeChannelLink(dotYouClient, chnlLink); + return await removeChannelLink(odinClient, chnlLink); }; const validateCollaborativeChannel = () => { @@ -176,7 +176,7 @@ export const useCollaborativeChannel = (props?: { channelId: string }) => { if (!collaborativeCircleIds.length) throw new Error('No circles found for channel'); - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const returnUrl = `${FEED_ROOT_PATH}/channels`; const targetDrive = GetTargetDriveFromChannelId(channelDef.fileMetadata.appData.uniqueId); @@ -185,7 +185,7 @@ export const useCollaborativeChannel = (props?: { channelId: string }) => { collaborativeChannelDef.fileMetadata.appData.content.isCollaborative = true; (collaborativeChannelDef.fileMetadata.appData.content as CollaborativeChannelDefinition).acl = channelDef.serverMetadata.accessControlList; - await saveChannelDefinition(dotYouClient, collaborativeChannelDef); + await saveChannelDefinition(odinClient, collaborativeChannelDef); const intermediateReturnUrl = getExtendDriveDetailsUrl( identity, @@ -212,9 +212,9 @@ export const useCollaborativeChannel = (props?: { channelId: string }) => { collaborativeChannelDef.fileMetadata.appData.content.isCollaborative = false; // eslint-disable-next-line @typescript-eslint/no-explicit-any delete (collaborativeChannelDef.fileMetadata.appData.content as any).acl; - await saveChannelDefinition(dotYouClient, collaborativeChannelDef); + await saveChannelDefinition(odinClient, collaborativeChannelDef); - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const returnUrl = `${FEED_ROOT_PATH}/channels`; const targetDrive = GetTargetDriveFromChannelId(channelDef.fileMetadata.appData.uniqueId); diff --git a/packages/common/common-app/src/hooks/socialFeed/channels/useCollaborativeChannels.ts b/packages/common/common-app/src/hooks/socialFeed/channels/useCollaborativeChannels.ts index 624f15ee1..2fb630d15 100644 --- a/packages/common/common-app/src/hooks/socialFeed/channels/useCollaborativeChannels.ts +++ b/packages/common/common-app/src/hooks/socialFeed/channels/useCollaborativeChannels.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; import { getChannelsOverPeer } from '@homebase-id/js-lib/peer'; import { useAllContacts } from '../../connections/useAllContacts'; import { @@ -18,7 +18,7 @@ export const useCollaborativeChannels = (enableDiscovery?: boolean) => { const { data: alllContacts, isFetched: fetchedAllContacts } = useAllContacts( enableDiscovery || false ); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const discoverByOdinId = async () => { const discoveredByOdinId = await Promise.all( @@ -26,8 +26,8 @@ export const useCollaborativeChannels = (enableDiscovery?: boolean) => { const odinId = contact.fileMetadata.appData.content.odinId; if (!odinId) return undefined; - const securityContext = await getSecurityContextOverPeer(dotYouClient, odinId); - const allChannels = await getChannelsOverPeer(dotYouClient, odinId); + const securityContext = await getSecurityContextOverPeer(odinClient, odinId); + const allChannels = await getChannelsOverPeer(odinClient, odinId); return { odinId, @@ -78,7 +78,7 @@ export const useCollaborativeChannels = (enableDiscovery?: boolean) => { }; const getLinksByOdinId = async () => { - const channelLinks = await getChannelLinkDefinitions(dotYouClient); + const channelLinks = await getChannelLinkDefinitions(odinClient); return ( channelLinks?.reduce( diff --git a/packages/common/common-app/src/hooks/socialFeed/channels/useManageChannel.ts b/packages/common/common-app/src/hooks/socialFeed/channels/useManageChannel.ts index 4f4b3ffbe..cbb26e746 100644 --- a/packages/common/common-app/src/hooks/socialFeed/channels/useManageChannel.ts +++ b/packages/common/common-app/src/hooks/socialFeed/channels/useManageChannel.ts @@ -18,13 +18,13 @@ import { invalidateChannel, t, updateCacheChannel, - useDotYouClientContext, + useOdinClientContext, useStaticFiles, } from '../../../..'; import { stringGuidsEqual, stringifyToQueryParams, toGuidId } from '@homebase-id/js-lib/helpers'; import { ApiType, - DotYouClient, + OdinClient, DrivePermissionType, HomebaseFile, NewHomebaseFile, @@ -61,7 +61,7 @@ const getExtendAuthorizationUrl = ( d: JSON.stringify(drives), }; - const host = new DotYouClient({ + const host = new OdinClient({ hostIdentity: identity, api: ApiType.App, }).getRoot(); @@ -71,7 +71,7 @@ const getExtendAuthorizationUrl = ( }; export const useManageChannel = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const { mutate: publishStaticFiles } = useStaticFiles().publish; @@ -89,7 +89,7 @@ export const useManageChannel = () => { if (!channelDef.fileMetadata.appData.uniqueId) throw new Error('Channel unique id is not set'); - const host = dotYouClient.getHostIdentity(); + const host = odinClient.getHostIdentity(); const returnUrl = `${FEED_ROOT_PATH}/channels?new=${JSON.stringify(channelDef)}`; const targetDrive = GetTargetDriveFromChannelId(channelDef.fileMetadata.appData.uniqueId); @@ -105,11 +105,11 @@ export const useManageChannel = () => { ); }; - return await saveChannelDefinition(dotYouClient, { ...channelDef }, onMissingDrive); + return await saveChannelDefinition(odinClient, { ...channelDef }, onMissingDrive); }; const removeChannel = async (channelDef: HomebaseFile) => { - await removeChannelDefinition(dotYouClient, channelDef.fileMetadata.appData.uniqueId as string); + await removeChannelDefinition(odinClient, channelDef.fileMetadata.appData.uniqueId as string); }; return { @@ -145,13 +145,13 @@ export const useManageChannel = () => { // Update channel updateCacheChannel( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), toSaveChannelAsVm.fileMetadata.appData.content.slug, () => toSaveChannelAsVm ); updateCacheChannel( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), toSaveChannelAsVm.fileMetadata.appData.uniqueId as string, () => toSaveChannelAsVm ); @@ -171,12 +171,12 @@ export const useManageChannel = () => { ) { invalidateChannel( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), variables.fileMetadata.appData.uniqueId ); invalidateChannel( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), variables.fileMetadata.appData.content.slug ); } diff --git a/packages/common/common-app/src/hooks/socialFeed/drafts/useDrafts.ts b/packages/common/common-app/src/hooks/socialFeed/drafts/useDrafts.ts index 14c5d5285..fb5088344 100644 --- a/packages/common/common-app/src/hooks/socialFeed/drafts/useDrafts.ts +++ b/packages/common/common-app/src/hooks/socialFeed/drafts/useDrafts.ts @@ -2,13 +2,13 @@ import { QueryClient, useMutation, useQuery, useQueryClient } from '@tanstack/re import { Article, PostContent, getPosts, removePost } from '@homebase-id/js-lib/public'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { useChannels } from '../channels/useChannels'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; export const useDrafts = () => { const queryClient = useQueryClient(); const { data: channels } = useChannels({ isAuthenticated: true, isOwner: true }); - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetch = async () => { if (!channels) return; @@ -16,7 +16,7 @@ export const useDrafts = () => { const drafts = await Promise.all( channels.map(async (channel) => { return await getPosts
( - dotYouClient, + odinClient, channel.fileMetadata.appData.uniqueId as string, undefined, 'only', @@ -36,7 +36,7 @@ export const useDrafts = () => { channelId: string; postFile: HomebaseFile; }) => { - return await removePost(dotYouClient, postFile, channelId); + return await removePost(odinClient, postFile, channelId); }; return { diff --git a/packages/common/common-app/src/hooks/socialFeed/post/cachedDataHelpers.ts b/packages/common/common-app/src/hooks/socialFeed/post/cachedDataHelpers.ts index 4ca0746b8..fda3f88d2 100644 --- a/packages/common/common-app/src/hooks/socialFeed/post/cachedDataHelpers.ts +++ b/packages/common/common-app/src/hooks/socialFeed/post/cachedDataHelpers.ts @@ -1,5 +1,5 @@ import { - DotYouClient, + OdinClient, FileQueryParams, GetBatchQueryResultOptions, SystemFileType, @@ -24,11 +24,11 @@ import { import { parseChannelTemplate, ChannelDefinitionVm } from '../channels/useChannels'; export const getCachedPosts = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelId: string, postType?: PostType ) => { - const cachedData = await cachedQuery(dotYouClient); + const cachedData = await cachedQuery(odinClient); const posts = cachedData.postsPerChannel .find((data) => stringGuidsEqual(data.channelId, channelId)) @@ -40,8 +40,8 @@ export const getCachedPosts = async ( return { results: posts, cursorState: cachedData.allCursors[channelId] }; }; -export const getCachedRecentPosts = async (dotYouClient: DotYouClient, postType?: PostType) => { - const cachedData = await cachedQuery(dotYouClient); +export const getCachedRecentPosts = async (odinClient: OdinClient, postType?: PostType) => { + const cachedData = await cachedQuery(odinClient); if ( !cachedData || !cachedData.postsPerChannel?.length || @@ -64,8 +64,8 @@ export const getCachedRecentPosts = async (dotYouClient: DotYouClient, postType? return { results: sortedPosts, cursorState: allCursors }; }; -export const fetchCachedPublicChannels = async (dotYouClient: DotYouClient) => { - const fileData = await GetFile(dotYouClient, 'sitedata.json'); +export const fetchCachedPublicChannels = async (odinClient: OdinClient) => { + const fileData = await GetFile(odinClient, 'sitedata.json'); if (fileData) { let channels: HomebaseFile[] = []; @@ -103,9 +103,9 @@ export const fetchCachedPublicChannels = async (dotYouClient: DotYouClient) => { } }; -const cachedQuery = async (dotYouClient: DotYouClient) => { +const cachedQuery = async (odinClient: OdinClient) => { const pageSize = 30; - const channels = (await fetchCachedPublicChannels(dotYouClient)) || []; + const channels = (await fetchCachedPublicChannels(odinClient)) || []; const allCursors: Record = {}; const queries: { name: string; @@ -136,7 +136,7 @@ const cachedQuery = async (dotYouClient: DotYouClient) => { }; }); - const response = await queryBatchCachedCollection(dotYouClient, queries); + const response = await queryBatchCachedCollection(odinClient, queries); const postsPerChannel = await Promise.all( response.results.map(async (result) => { const targetDrive = GetTargetDriveFromChannelId(result.name); @@ -145,7 +145,7 @@ const cachedQuery = async (dotYouClient: DotYouClient) => { await Promise.all( result.searchResults.map( async (dsr) => - await dsrToPostFile(dotYouClient, dsr, targetDrive, result.includeMetadataHeader) + await dsrToPostFile(odinClient, dsr, targetDrive, result.includeMetadataHeader) ) ) ).filter((post) => !!post) as HomebaseFile[]; @@ -160,7 +160,7 @@ const cachedQuery = async (dotYouClient: DotYouClient) => { }; const queryBatchCachedCollection = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queries: { name: string; queryParams: FileQueryParams; @@ -168,7 +168,7 @@ const queryBatchCachedCollection = async ( }[], systemFileType?: SystemFileType ): Promise => { - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType, }); diff --git a/packages/common/common-app/src/hooks/socialFeed/post/useManagePost.ts b/packages/common/common-app/src/hooks/socialFeed/post/useManagePost.ts index 0d86ee502..8d56f0e08 100644 --- a/packages/common/common-app/src/hooks/socialFeed/post/useManagePost.ts +++ b/packages/common/common-app/src/hooks/socialFeed/post/useManagePost.ts @@ -24,12 +24,12 @@ import { invalidatePosts } from './usePostsInfinite'; import { invalidateSocialFeeds, updateCacheSocialFeeds } from '../useSocialFeed'; import { invalidatePost } from './usePost'; import { formatGuidId, stringGuidsEqual } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; export const useManagePost = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); - const loggedInIdentity = dotYouClient.getLoggedInIdentity(); + const loggedInIdentity = odinClient.getLoggedInIdentity(); const savePost = async ({ postFile, @@ -50,45 +50,45 @@ export const useManagePost = () => { const onVersionConflict = odinId ? undefined : async () => { - const serverPost = await getPost( - dotYouClient, - channelId, - postFile.fileMetadata.appData.content.id - ); - if (!serverPost) return; + const serverPost = await getPost( + odinClient, + channelId, + postFile.fileMetadata.appData.content.id + ); + if (!serverPost) return; - const newPost: HomebaseFile = { - ...serverPost, - fileMetadata: { - ...serverPost.fileMetadata, - appData: { - ...serverPost.fileMetadata.appData, - content: { - ...serverPost.fileMetadata.appData.content, - ...postFile.fileMetadata.appData.content, - }, + const newPost: HomebaseFile = { + ...serverPost, + fileMetadata: { + ...serverPost.fileMetadata, + appData: { + ...serverPost.fileMetadata.appData, + content: { + ...serverPost.fileMetadata.appData.content, + ...postFile.fileMetadata.appData.content, }, }, - }; - savePostFile( - dotYouClient, - newPost, - odinId, - channelId, - mediaFiles, - linkPreviews, - onVersionConflict - ).then((result) => { - if (result) resolve(result); - }); + }, }; + savePostFile( + odinClient, + newPost, + odinId, + channelId, + mediaFiles, + linkPreviews, + onVersionConflict + ).then((result) => { + if (result) resolve(result); + }); + }; postFile.fileMetadata.appData.content.captionAsRichText = getRichTextFromString( postFile.fileMetadata.appData.content.caption.trim() ); savePostFile( - dotYouClient, + odinClient, postFile, odinId, channelId, @@ -124,7 +124,7 @@ export const useManagePost = () => { await Promise.all( (toDuplicatePostFile.fileMetadata.payloads || []).map(async (payload) => { const bytes = await getPayloadBytes( - dotYouClient, + odinClient, currentTargetDrive, toDuplicatePostFile.fileId, payload.key @@ -162,7 +162,7 @@ export const useManagePost = () => { }; return savePostFile( - dotYouClient, + odinClient, postFile, odinId, targetChannel.fileMetadata.appData.uniqueId as string, @@ -178,7 +178,7 @@ export const useManagePost = () => { postFile: HomebaseFile; channelId: string; }) => { - if (postFile) return await removePost(dotYouClient, postFile, channelId); + if (postFile) return await removePost(odinClient, postFile, channelId); }; return { @@ -188,7 +188,7 @@ export const useManagePost = () => { if (variables.postFile.fileMetadata.appData.content.slug) { invalidatePost( queryClient, - variables.odinId || dotYouClient.getHostIdentity(), + variables.odinId || odinClient.getHostIdentity(), variables.channelId, variables.postFile.fileMetadata.appData.content.slug ); @@ -198,19 +198,19 @@ export const useManagePost = () => { invalidatePost( queryClient, - variables.odinId || dotYouClient.getHostIdentity(), + variables.odinId || odinClient.getHostIdentity(), variables.channelId, variables.postFile.fileId ); invalidatePost( queryClient, - variables.odinId || dotYouClient.getHostIdentity(), + variables.odinId || odinClient.getHostIdentity(), variables.channelId, variables.postFile.fileMetadata.appData.content.id ); invalidatePost( queryClient, - variables.odinId || dotYouClient.getHostIdentity(), + variables.odinId || odinClient.getHostIdentity(), variables.channelId, formatGuidId(variables.postFile.fileMetadata.appData.content.id) ); @@ -225,15 +225,15 @@ export const useManagePost = () => { ...page, results: page.results.map((post) => post.fileMetadata.appData.content.id === - variables.postFile.fileMetadata.appData.content.id + variables.postFile.fileMetadata.appData.content.id ? { - ...post, - fileMetadata: { - ...post.fileMetadata, - versionTag: - (_data as UploadResult).newVersionTag || post.fileMetadata.versionTag, - }, - } + ...post, + fileMetadata: { + ...post.fileMetadata, + versionTag: + (_data as UploadResult).newVersionTag || post.fileMetadata.versionTag, + }, + } : post ), })), @@ -253,10 +253,10 @@ export const useManagePost = () => { primaryMediaFile: newPost.mediaFiles?.[0] && newPost.mediaFiles?.[0].key ? { - fileId: undefined, - fileKey: newPost.mediaFiles?.[0].key, - type: (newPost.mediaFiles?.[0] as MediaFile)?.contentType, - } + fileId: undefined, + fileKey: newPost.mediaFiles?.[0].key, + type: (newPost.mediaFiles?.[0] as MediaFile)?.contentType, + } : undefined, }, }, @@ -266,21 +266,21 @@ export const useManagePost = () => { const previousFeed = newPostFile.fileMetadata.appData.fileType !== BlogConfig.DraftPostFileType ? updateCacheSocialFeeds(queryClient, (data) => ({ - ...data, - pages: data.pages.map((page, index) => ({ - ...page, - results: [ - ...(index === 0 ? [newPostFile as HomebaseFile] : []), - ...page.results.filter( - (post) => - !stringGuidsEqual( - post.fileMetadata.appData.uniqueId, - newPostFile.fileMetadata.appData.uniqueId - ) - ), - ], - })), - })) + ...data, + pages: data.pages.map((page, index) => ({ + ...page, + results: [ + ...(index === 0 ? [newPostFile as HomebaseFile] : []), + ...page.results.filter( + (post) => + !stringGuidsEqual( + post.fileMetadata.appData.uniqueId, + newPostFile.fileMetadata.appData.uniqueId + ) + ), + ], + })), + })) : undefined; return { newPost, previousFeed }; @@ -305,30 +305,30 @@ export const useManagePost = () => { if (variables.postFile.fileMetadata.appData.content.slug) { invalidatePost( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), variables.channelId, variables.postFile.fileMetadata.appData.content.slug ); } else { - invalidatePost(queryClient, dotYouClient.getHostIdentity(), variables.channelId); + invalidatePost(queryClient, odinClient.getHostIdentity(), variables.channelId); } // Too many invalidates, but during article creation, the slug is not known invalidatePost( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), variables.channelId, variables.postFile.fileId ); invalidatePost( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), variables.channelId, variables.postFile.fileMetadata.appData.content.slug ); invalidatePost( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), variables.channelId, formatGuidId(variables.postFile.fileMetadata.appData.content.id) ); @@ -342,15 +342,15 @@ export const useManagePost = () => { ...page, results: page.results.map((post) => post.fileMetadata.appData.content.id === - variables.postFile.fileMetadata.appData.content.id + variables.postFile.fileMetadata.appData.content.id ? { - ...post, - fileMetadata: { - ...post.fileMetadata, - versionTag: - (_data as UploadResult).newVersionTag || post.fileMetadata.versionTag, - }, - } + ...post, + fileMetadata: { + ...post.fileMetadata, + versionTag: + (_data as UploadResult).newVersionTag || post.fileMetadata.versionTag, + }, + } : post ), })), @@ -372,12 +372,12 @@ export const useManagePost = () => { if (variables && variables.postFile.fileMetadata.appData.content.slug) { invalidatePost( queryClient, - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), variables.channelId, variables.postFile.fileMetadata.appData.content.slug ); } else { - invalidatePost(queryClient, dotYouClient.getHostIdentity(), variables.channelId); + invalidatePost(queryClient, odinClient.getHostIdentity(), variables.channelId); } invalidatePosts(queryClient, variables.postFile.fileMetadata.appData.content.channelId); diff --git a/packages/common/common-app/src/hooks/socialFeed/post/usePost.ts b/packages/common/common-app/src/hooks/socialFeed/post/usePost.ts index bbe0eb897..e6947cfb3 100644 --- a/packages/common/common-app/src/hooks/socialFeed/post/usePost.ts +++ b/packages/common/common-app/src/hooks/socialFeed/post/usePost.ts @@ -15,7 +15,7 @@ import { } from '@homebase-id/js-lib/public'; import { usePostsInfiniteReturn } from './usePostsInfinite'; -import { DotYouClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; +import { OdinClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { useChannel } from '../channels/useChannel'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; import { @@ -23,7 +23,7 @@ import { getPostOverPeer, RecentsFromConnectionsReturn, } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; type usePostProps = { odinId?: string; @@ -37,12 +37,12 @@ export const usePost = ({ odinId, channelKey, postKey }: usePostProps = {}) => { channelKey, }).fetch; - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); const queryClient = useQueryClient(); return useQuery( - getPostQueryOptions(dotYouClient, queryClient, isOwner, odinId, channel || undefined, postKey) + getPostQueryOptions(odinClient, queryClient, isOwner, odinId, channel || undefined, postKey) ); }; @@ -59,13 +59,13 @@ const getLocalCachedBlogs = (queryClient: QueryClient, channelId?: string) => { }; const fetchBlog = async ({ - dotYouClient, + odinClient, queryClient, odinId, channel, postKey, }: { - dotYouClient: DotYouClient; + odinClient: OdinClient; queryClient: QueryClient; odinId?: string; @@ -74,7 +74,7 @@ const fetchBlog = async ({ }) => { if (!channel || !postKey) return null; - if (!odinId || odinId === dotYouClient.getHostIdentity()) { + if (!odinId || odinId === odinClient.getHostIdentity()) { // Search in cache const localBlogs = getLocalCachedBlogs(queryClient, channel.fileMetadata.appData.uniqueId); if (localBlogs) { @@ -90,18 +90,18 @@ const fetchBlog = async ({ const postFile = (await getPostBySlug( - dotYouClient, + odinClient, channel.fileMetadata.appData.uniqueId as string, postKey )) || - (await getPost(dotYouClient, channel.fileMetadata.appData.uniqueId as string, postKey)) || + (await getPost(odinClient, channel.fileMetadata.appData.uniqueId as string, postKey)) || (await getPostByFileId( - dotYouClient, + odinClient, channel.fileMetadata.appData.uniqueId as string, postKey )) || (await getPostByGlobalTransitId( - dotYouClient, + odinClient, channel.fileMetadata.appData.uniqueId as string, postKey )); @@ -125,13 +125,13 @@ const fetchBlog = async ({ } return ( (await getPostBySlugOverPeer( - dotYouClient, + odinClient, odinId, channel.fileMetadata.appData.uniqueId as string, postKey )) || (await getPostOverPeer( - dotYouClient, + odinClient, odinId, channel.fileMetadata.appData.uniqueId as string, postKey @@ -141,14 +141,14 @@ const fetchBlog = async ({ }; export const getPostQueryOptions: ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queryClient: QueryClient, isOwner: boolean, odinId: string | undefined, channel: HomebaseFile | NewHomebaseFile | undefined, postKey: string | undefined ) => UndefinedInitialDataOptions | null> = ( - dotYouClient, + odinClient, queryClient, isOwner, odinId, @@ -157,12 +157,12 @@ export const getPostQueryOptions: ( ) => ({ queryKey: [ 'post', - odinId || dotYouClient.getHostIdentity(), + odinId || odinClient.getHostIdentity(), channel?.fileMetadata.appData.uniqueId, postKey, ], queryFn: () => - fetchBlog({ dotYouClient, queryClient, odinId, channel, postKey: postKey as string }), + fetchBlog({ odinClient, queryClient, odinId, channel, postKey: postKey as string }), enabled: !!channel && !!postKey, staleTime: isOwner ? 0 : 1000 * 60 * 10, // 10 minutes }); diff --git a/packages/common/common-app/src/hooks/socialFeed/post/usePostsInfinite.ts b/packages/common/common-app/src/hooks/socialFeed/post/usePostsInfinite.ts index 4dedc4260..0dc007254 100644 --- a/packages/common/common-app/src/hooks/socialFeed/post/usePostsInfinite.ts +++ b/packages/common/common-app/src/hooks/socialFeed/post/usePostsInfinite.ts @@ -9,7 +9,7 @@ import { import { getCachedPosts, getCachedRecentPosts } from './cachedDataHelpers'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { useChannels } from '../channels/useChannels'; -import { useDotYouClientContext } from '../../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../auth/useOdinClientContext'; type usePostsInfiniteProps = { channelId?: string; @@ -30,9 +30,9 @@ export const usePostsInfinite = ({ enabled = true, includeHidden = false, }: usePostsInfiniteProps) => { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const { data: channels } = useChannels({ isAuthenticated, isOwner }); const fetchBlogData = async ({ @@ -45,30 +45,30 @@ export const usePostsInfinite = ({ const canRunCached = !pageParam && !isAuthenticated; const cachedData = canRunCached ? channelId - ? await getCachedPosts(dotYouClient, channelId, postType) - : await getCachedRecentPosts(dotYouClient, postType) + ? await getCachedPosts(odinClient, channelId, postType) + : await getCachedRecentPosts(odinClient, postType) : undefined; const response = cachedData || (channelId ? await getPosts( - dotYouClient, - channelId, - postType, - false, - typeof pageParam === 'string' ? pageParam : undefined, - BLOG_POST_INFIITE_PAGE_SIZE - ) + odinClient, + channelId, + postType, + false, + typeof pageParam === 'string' ? pageParam : undefined, + BLOG_POST_INFIITE_PAGE_SIZE + ) : await getRecentPosts( - dotYouClient, - postType, - false, - typeof pageParam === 'object' ? pageParam : undefined, - BLOG_POST_INFIITE_PAGE_SIZE, - channels, - includeHidden - )); + odinClient, + postType, + false, + typeof pageParam === 'object' ? pageParam : undefined, + BLOG_POST_INFIITE_PAGE_SIZE, + channels, + includeHidden + )); return { results: response.results.filter( diff --git a/packages/common/common-app/src/hooks/socialFeed/useManageSocialFeed.ts b/packages/common/common-app/src/hooks/socialFeed/useManageSocialFeed.ts index a29a67876..3b0dabdd4 100644 --- a/packages/common/common-app/src/hooks/socialFeed/useManageSocialFeed.ts +++ b/packages/common/common-app/src/hooks/socialFeed/useManageSocialFeed.ts @@ -1,19 +1,19 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { BlogConfig, PostContent } from '@homebase-id/js-lib/public'; -import { ApiType, DotYouClient, HomebaseFile, deleteFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile, deleteFile } from '@homebase-id/js-lib/core'; import { invalidateSocialFeeds } from './useSocialFeed'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useManageSocialFeed = (props?: { odinId: string }) => { const odinId = props?.odinId || window.location.hostname; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const queryClient = useQueryClient(); const removeFromFeed = async ({ postFile }: { postFile: HomebaseFile }) => { return await deleteFile( - dotYouClient, + odinClient, BlogConfig.FeedDrive, postFile.fileId, undefined, @@ -24,7 +24,7 @@ export const useManageSocialFeed = (props?: { odinId: string }) => { }; const getContentReportUrl = () => { - const host = new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot(); + const host = new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot(); // Fetch the reporting url from the other identities config return fetch(`${host}/config/reporting`) diff --git a/packages/common/common-app/src/hooks/socialFeed/useSocialChannels.ts b/packages/common/common-app/src/hooks/socialFeed/useSocialChannels.ts index da0ad4a5d..50761269c 100644 --- a/packages/common/common-app/src/hooks/socialFeed/useSocialChannels.ts +++ b/packages/common/common-app/src/hooks/socialFeed/useSocialChannels.ts @@ -1,19 +1,19 @@ import { useQuery } from '@tanstack/react-query'; import { getChannelsOverPeer } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; interface useSocialChannelsProps { odinId?: string; } export const useSocialChannels = ({ odinId }: useSocialChannelsProps) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const fetch = async ({ odinId }: useSocialChannelsProps) => { if (!odinId) { return; } - return await getChannelsOverPeer(dotYouClient, odinId); + return await getChannelsOverPeer(odinClient, odinId); }; return { diff --git a/packages/common/common-app/src/hooks/socialFeed/useSocialFeed.ts b/packages/common/common-app/src/hooks/socialFeed/useSocialFeed.ts index fec421e57..f1f394c38 100644 --- a/packages/common/common-app/src/hooks/socialFeed/useSocialFeed.ts +++ b/packages/common/common-app/src/hooks/socialFeed/useSocialFeed.ts @@ -1,13 +1,13 @@ import { InfiniteData, QueryClient, useInfiniteQuery } from '@tanstack/react-query'; import { getSocialFeed, RecentsFromConnectionsReturn } from '@homebase-id/js-lib/peer'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; import { useChannels } from './channels/useChannels'; import { HomebaseFile } from '@homebase-id/js-lib/core'; import { PostContent } from '@homebase-id/js-lib/public'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; export const useSocialFeed = ({ pageSize = 10 }: { pageSize: number }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const { data: ownChannels, isFetched: channelsFetched } = useChannels({ isAuthenticated: true, isOwner: true, @@ -18,7 +18,7 @@ export const useSocialFeed = ({ pageSize = 10 }: { pageSize: number }) => { }: { pageParam?: { cursorState?: string; ownerCursorState?: Record }; }) => { - return await getSocialFeed(dotYouClient, pageSize, pageParam?.cursorState, { + return await getSocialFeed(odinClient, pageSize, pageParam?.cursorState, { ownCursorState: pageParam?.ownerCursorState, ownChannels, }); @@ -33,8 +33,8 @@ export const useSocialFeed = ({ pageSize = 10 }: { pageSize: number }) => { queryFn: ({ pageParam }) => fetchAll({ pageParam }), getNextPageParam: (lastPage) => lastPage && - lastPage?.results?.length >= 1 && - (lastPage?.cursorState || lastPage?.ownerCursorState) + lastPage?.results?.length >= 1 && + (lastPage?.cursorState || lastPage?.ownerCursorState) ? { cursorState: lastPage.cursorState, ownerCursorState: lastPage.ownerCursorState } : undefined, staleTime: 1000 * 60 * 2, // 2 minutes @@ -116,10 +116,10 @@ export const insertNewPostIntoFeed = ( results: index === 0 ? [newPost, ...filteredResults].sort( - (a, b) => - (b.fileMetadata.appData.userDate || b.fileMetadata.created) - - (a.fileMetadata.appData.userDate || a.fileMetadata.created) - ) // Re-sort the first page, as the new message might be older than the first message in the page; + (a, b) => + (b.fileMetadata.appData.userDate || b.fileMetadata.created) - + (a.fileMetadata.appData.userDate || a.fileMetadata.created) + ) // Re-sort the first page, as the new message might be older than the first message in the page; : filteredResults, }; } diff --git a/packages/common/common-app/src/hooks/staticFiles/useStaticFiles.ts b/packages/common/common-app/src/hooks/staticFiles/useStaticFiles.ts index 913d64b00..e574915d9 100644 --- a/packages/common/common-app/src/hooks/staticFiles/useStaticFiles.ts +++ b/packages/common/common-app/src/hooks/staticFiles/useStaticFiles.ts @@ -9,22 +9,22 @@ import { import { ApiType } from '@homebase-id/js-lib/core'; import { BuiltInAttributes } from '@homebase-id/js-lib/profile'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; export const useStaticFiles = () => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const publishData = async (dataType?: 'channel' | typeof BuiltInAttributes.Name) => { console.debug('[STARTED] Static file publish', dataType); - const publishActions: Promise[] = [publishProfile(dotYouClient, dataType)]; + const publishActions: Promise[] = [publishProfile(odinClient, dataType)]; - if (dotYouClient.getType() === ApiType.Owner) { + if (odinClient.getType() === ApiType.Owner) { if (!dataType || stringGuidsEqual(dataType, BuiltInAttributes.Photo)) - publishActions.push(publishProfileImage(dotYouClient)); + publishActions.push(publishProfileImage(odinClient)); if (!dataType || ProfileCardAttributeTypes.some((type) => stringGuidsEqual(dataType, type))) - publishActions.push(publishProfileCard(dotYouClient)); + publishActions.push(publishProfileCard(odinClient)); } await Promise.all(publishActions); diff --git a/packages/common/common-app/src/hooks/transitProcessor/useWebsocketSubscriber.ts b/packages/common/common-app/src/hooks/transitProcessor/useWebsocketSubscriber.ts index c83bd7e5c..6b02644fa 100644 --- a/packages/common/common-app/src/hooks/transitProcessor/useWebsocketSubscriber.ts +++ b/packages/common/common-app/src/hooks/transitProcessor/useWebsocketSubscriber.ts @@ -6,10 +6,10 @@ import { TargetDrive, TypedConnectionNotification, Notify, - DotYouClient, + OdinClient, } from '@homebase-id/js-lib/core'; import { useEffect, useState, useCallback, useMemo, useRef } from 'react'; -import { useDotYouClientContext } from '../auth/useDotYouClientContext'; +import { useOdinClientContext } from '../auth/useOdinClientContext'; import { hasDebugFlag } from '@homebase-id/js-lib/helpers'; import { NotifyOverPeer, SubscribeOverPeer, UnsubscribeOverPeer } from '@homebase-id/js-lib/peer'; @@ -18,7 +18,7 @@ const isDebug = hasDebugFlag(); // Wrapper for the notification subscriber within DotYouCore-js to add client side filtering of the notifications export const useWebsocketSubscriber = ( handler: - | ((dotYouClient: DotYouClient, notification: TypedConnectionNotification) => void) + | ((odinClient: OdinClient, notification: TypedConnectionNotification) => void) | undefined, odinId: string | undefined, types: NotificationType[], @@ -27,14 +27,14 @@ export const useWebsocketSubscriber = ( onReconnect?: () => void, refId?: string ) => { - const dotYouClient = useDotYouClientContext(); - const isPeer = useMemo(() => !!odinId && odinId !== dotYouClient.getHostIdentity(), [odinId]); + const odinClient = useOdinClientContext(); + const isPeer = useMemo(() => !!odinId && odinId !== odinClient.getHostIdentity(), [odinId]); const [isConnected, setIsConected] = useState(false); const connectedHandler = - useRef<(dotYouClient: DotYouClient, data: TypedConnectionNotification) => void | null>(); + useRef<(odinClient: OdinClient, data: TypedConnectionNotification) => void | null>(); const wrappedHandler = useCallback( - (dotYouClient: DotYouClient, notification: TypedConnectionNotification) => { + (odinClient: OdinClient, notification: TypedConnectionNotification) => { if (notification.notificationType === 'inboxItemReceived') { isDebug && console.debug( @@ -60,7 +60,7 @@ export const useWebsocketSubscriber = ( } if (types?.length >= 1 && !types.includes(notification.notificationType)) return; - handler && handler(dotYouClient, notification); + handler && handler(odinClient, notification); }, [handler] ); @@ -68,12 +68,12 @@ export const useWebsocketSubscriber = ( const localHandler = handler ? wrappedHandler : undefined; const subscribe = useCallback( - async (handler: (dotYouClient: DotYouClient, data: TypedConnectionNotification) => void) => { + async (handler: (odinClient: OdinClient, data: TypedConnectionNotification) => void) => { connectedHandler.current = handler; if (isPeer) await SubscribeOverPeer( - dotYouClient, + odinClient, odinId as string, drives, handler, @@ -90,7 +90,7 @@ export const useWebsocketSubscriber = ( ); else await Subscribe( - dotYouClient, + odinClient, drives, handler, () => { @@ -109,7 +109,7 @@ export const useWebsocketSubscriber = ( ); const unsubscribe = useCallback( - (handler: (dotYouClient: DotYouClient, data: TypedConnectionNotification) => void) => { + (handler: (odinClient: OdinClient, data: TypedConnectionNotification) => void) => { try { if (isPeer) UnsubscribeOverPeer(handler); else Unsubscribe(handler); @@ -122,8 +122,8 @@ export const useWebsocketSubscriber = ( useEffect(() => { if ( - (dotYouClient.getType() !== ApiType.Owner && dotYouClient.getType() !== ApiType.App) || - !dotYouClient.getSharedSecret() || + (odinClient.getType() !== ApiType.Owner && odinClient.getType() !== ApiType.App) || + !odinClient.getSharedSecret() || !localHandler ) return; diff --git a/packages/common/common-app/src/identity/Contact/ContactImage.tsx b/packages/common/common-app/src/identity/Contact/ContactImage.tsx index 857c9c927..d2472d6f3 100644 --- a/packages/common/common-app/src/identity/Contact/ContactImage.tsx +++ b/packages/common/common-app/src/identity/Contact/ContactImage.tsx @@ -2,7 +2,7 @@ import { useState } from 'react'; import { useContact } from '@homebase-id/common-app'; import { FallbackImg, Image, LoadingBlock } from '@homebase-id/common-app'; import { CONTACT_PROFILE_IMAGE_KEY, ContactConfig } from '@homebase-id/js-lib/network'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; export const ContactImage = ({ odinId, @@ -51,7 +51,7 @@ export const ContactImage = ({ /> ) : ( setFullError(true)} /> diff --git a/packages/common/common-app/src/identity/IdentityTeaser.tsx b/packages/common/common-app/src/identity/IdentityTeaser.tsx index b1b4feec9..267f0c3e8 100644 --- a/packages/common/common-app/src/identity/IdentityTeaser.tsx +++ b/packages/common/common-app/src/identity/IdentityTeaser.tsx @@ -2,11 +2,11 @@ import { MouseEventHandler, ReactNode, useRef, useState } from 'react'; import { ContactImage, ContactName, - useDotYouClientContext, + useOdinClientContext, useIntersection, useIsConnected, } from '../..'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; export const IdentityTeaser = ({ odinId, @@ -23,18 +23,18 @@ export const IdentityTeaser = ({ isBorderLess?: boolean; children?: ReactNode; }) => { - const dotYouClient = useDotYouClientContext(); - const identity = dotYouClient.getLoggedInIdentity(); + const odinClient = useOdinClientContext(); + const identity = odinClient.getLoggedInIdentity(); const [isInView, setIsInView] = useState(false); const wrapperRef = useRef(null); // isLocal when both the logged in user and the api host is the same - const isLocal = identity === dotYouClient.getHostIdentity(); + const isLocal = identity === odinClient.getHostIdentity(); const { data: isConnected } = useIsConnected(isInView && isLocal ? odinId : undefined); useIntersection(wrapperRef, () => setIsInView(true)); const imageSizeClass = size === 'sm' ? 'h-10 w-10 mr-2' : 'h-16 w-16 mr-4'; - const link = `${new DotYouClient({ hostIdentity: odinId, api: ApiType.App }).getRoot()}${isConnected && identity ? '?youauth-logon=' + identity : ''}`; + const link = `${new OdinClient({ hostIdentity: odinId, api: ApiType.App }).getRoot()}${isConnected && identity ? '?youauth-logon=' + identity : ''}`; return ( ; +export type ImageProps = Omit; export const Image = (props: ImageProps) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); - return ; + return ; }; diff --git a/packages/common/common-app/src/media/Video.tsx b/packages/common/common-app/src/media/Video.tsx index 5930ddc77..37a31857f 100644 --- a/packages/common/common-app/src/media/Video.tsx +++ b/packages/common/common-app/src/media/Video.tsx @@ -7,15 +7,15 @@ import { } from '@homebase-id/ui-lib'; import { EmbeddedThumb, SystemFileType } from '@homebase-id/js-lib/core'; import { useMemo, useState } from 'react'; -import { useDotYouClientContext } from '../hooks/auth/useDotYouClientContext'; +import { useOdinClientContext } from '../hooks/auth/useOdinClientContext'; import { Triangle } from '../ui/Icons'; -export interface VideoProps extends Omit { +export interface VideoProps extends Omit { previewThumbnail?: EmbeddedThumb; } export const Video = ({ previewThumbnail, ...props }: VideoProps) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const poster = useMemo(() => { if (!previewThumbnail || !!props.poster) return undefined; @@ -24,7 +24,7 @@ export const Video = ({ previewThumbnail, ...props }: VideoProps) => { return ( { ); }; -export interface VideoClickToLoadProps extends Omit { +export interface VideoClickToLoadProps extends Omit { fit?: 'cover' | 'contain'; preload?: boolean; previewThumbnail?: EmbeddedThumb; @@ -45,7 +45,7 @@ export const VideoClickToLoad = ({ probablyEncrypted, ...props }: VideoClickToLoadProps) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const [loadVideo, setLoadVideo] = useState(false); const [imageHasError, setImageHasError] = useState(false); @@ -64,7 +64,7 @@ export const VideoClickToLoad = ({ {/* OdinPreviewImage provides the aspect ratio spacing; If it had an error, we let the video decide on the necessary size */} {!imageHasError ? (
) : ( ; +type OdinVideoWrapperProps = Omit; export const OdinVideoWrapper = ({ ...props }: OdinVideoWrapperProps) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const { data: image } = useImage({ - dotYouClient, + odinClient, probablyEncrypted: props.probablyEncrypted, imageDrive: props.targetDrive, imageFileId: props.fileId, @@ -129,7 +129,5 @@ export const OdinVideoWrapper = ({ ...props }: OdinVideoWrapperProps) => { size: { pixelWidth: 100, pixelHeight: 100 }, }).fetch; - return ( - - ); + return ; }; diff --git a/packages/common/common-app/src/permissions/CirclePermissionView/CirclePermissionView.tsx b/packages/common/common-app/src/permissions/CirclePermissionView/CirclePermissionView.tsx index 4b2e73ee2..aaa644771 100644 --- a/packages/common/common-app/src/permissions/CirclePermissionView/CirclePermissionView.tsx +++ b/packages/common/common-app/src/permissions/CirclePermissionView/CirclePermissionView.tsx @@ -10,8 +10,8 @@ import { Circles } from '../../ui/Icons/Circles'; import { LoadingBlock } from '../../ui/LoadingBlock/LoadingBlock'; import { Arrow } from '../../ui/Icons/Arrow'; import { t } from '../../helpers/i18n/dictionary'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; -import { useDotYouClientContext } from '../../hooks'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; +import { useOdinClientContext } from '../../hooks'; import { stringGuidsEqual } from '@homebase-id/js-lib/helpers'; export const CirclePermissionView = ({ @@ -32,7 +32,7 @@ export const CirclePermissionView = ({ const { data: members, isLoading: membersLoading } = useCircle({ circleId: !hideMembers ? circleDef?.id : undefined, }).fetchMembers; - const loggedInIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedInIdentity = useOdinClientContext().getLoggedInIdentity(); const isSystemCircle = stringGuidsEqual(circleDef.id, CONFIRMED_CONNECTIONS_CIRCLE_ID) || stringGuidsEqual(circleDef.id, AUTO_CONNECTIONS_CIRCLE_ID); @@ -47,7 +47,7 @@ export const CirclePermissionView = ({ ) : ( => { - const dotYouClient = new OwnerClient({ + const odinClient = new OwnerClient({ api: ApiType.Owner, }); //Note: the token is in a cookie marked http-only so making // the call to the endpoint will automatically include the // cookie. we just need to check the success code - const client = dotYouClient.createAxiosClient({ overrideEncryption: true }); + const client = odinClient.createAxiosClient({ overrideEncryption: true }); return client.get('/authentication/verifyToken').then((response) => { return response.data; }); }; const logoutOwner = async (): Promise => { - const dotYouClient = new OwnerClient({ + const odinClient = new OwnerClient({ api: ApiType.Owner, }); - const client = dotYouClient.createAxiosClient({ overrideEncryption: true }); + const client = odinClient.createAxiosClient({ overrideEncryption: true }); //withCredentials lets us set the cookies return from the /admin/authentication endpoint return client.get('/authentication/logout', { withCredentials: true }).then((response) => { @@ -36,10 +36,10 @@ const logoutOwner = async (): Promise => { export const logoutOwnerAndAllApps = async (): Promise => { try { // Unsubscribe from notifications - const dotYouClient = new OwnerClient({ + const odinClient = new OwnerClient({ api: ApiType.Owner, }); - await removeCurrentRegisteredDevice(dotYouClient); + await removeCurrentRegisteredDevice(odinClient); } catch (ex) { console.warn('Failed unregister push notifiations', ex); } @@ -57,7 +57,7 @@ export const logoutOwnerAndAllApps = async (): Promise => { }; const apss = base64ToUint8Array(rawApps); - const dotYouClient = new DotYouClient({ + const odinClient = new OdinClient({ api: ApiType.App, sharedSecret: apss, hostIdentity: window.location ? window.location.host : '', @@ -65,7 +65,7 @@ export const logoutOwnerAndAllApps = async (): Promise => { }); // Remove app sessions from server - await logout(dotYouClient); + await logout(odinClient); }) ); @@ -103,7 +103,7 @@ export const logoutOwnerAndAllApps = async (): Promise => { window.location.href = '/owner/login'; }; -const removeCurrentRegisteredDevice = async (dotYouClient: DotYouClient) => { - const axiosClient = dotYouClient.createAxiosClient(); +const removeCurrentRegisteredDevice = async (odinClient: OdinClient) => { + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.post(`/notify/push/unsubscribe/`); }; diff --git a/packages/common/common-app/src/provider/auth/PublicAuthenticationProvider.ts b/packages/common/common-app/src/provider/auth/PublicAuthenticationProvider.ts index cbab65883..9d54af718 100644 --- a/packages/common/common-app/src/provider/auth/PublicAuthenticationProvider.ts +++ b/packages/common/common-app/src/provider/auth/PublicAuthenticationProvider.ts @@ -1,13 +1,13 @@ -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { STORAGE_IDENTITY_KEY, HOME_SHARED_SECRET, OWNER_SHARED_SECRET } from '../../hooks'; //checks if the authentication token (stored in a cookie) is valid export const hasValidPublicToken = async (): Promise => { - const dotYouClient = new DotYouClient({ + const odinClient = new OdinClient({ hostIdentity: window.location.hostname, api: ApiType.Guest, }); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const response = await client.get('/builtin/home/auth/is-authenticated', { validateStatus: () => true, }); @@ -15,11 +15,11 @@ export const hasValidPublicToken = async (): Promise => { }; export const getEccPublicKey = async (): Promise => { - const dotYouClient = new DotYouClient({ + const odinClient = new OdinClient({ hostIdentity: window.location.hostname, api: ApiType.Guest, }); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return await client .get('/public/keys/offline_ecc', { validateStatus: () => true }) .then((response) => response.data); @@ -27,11 +27,11 @@ export const getEccPublicKey = async (): Promise => { export const logoutPublicSession = async (): Promise => { try { - const dotYouClient = new DotYouClient({ + const odinClient = new OdinClient({ hostIdentity: window.location.hostname, api: ApiType.Guest, }); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); await client.get('/builtin/home/auth/delete-token'); } catch (ex) { console.warn('Failed to logout on the server', ex); diff --git a/packages/common/common-app/src/provider/contact/ContactProvider.ts b/packages/common/common-app/src/provider/contact/ContactProvider.ts index 15e152a54..1e483b1fc 100644 --- a/packages/common/common-app/src/provider/contact/ContactProvider.ts +++ b/packages/common/common-app/src/provider/contact/ContactProvider.ts @@ -1,7 +1,7 @@ import { UploadFileMetadata, UploadInstructionSet, - DotYouClient, + OdinClient, uploadFile, DEFAULT_PAYLOAD_KEY, ThumbnailFile, @@ -32,19 +32,19 @@ import { //Handles management of Contacts export const saveContact = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, contact: NewHomebaseFile ): Promise => { console.debug('Saving contact', { ...contact }); if (contact.fileMetadata.appData.uniqueId) contact.fileId = ( - await getContactByUniqueId(dotYouClient, contact.fileMetadata.appData.uniqueId) + await getContactByUniqueId(odinClient, contact.fileMetadata.appData.uniqueId) )?.fileId; if (!contact.fileId && contact.fileMetadata.appData.content.odinId) { const existingContact = await getContactByOdinId( - dotYouClient, + odinClient, contact.fileMetadata.appData.content.odinId ); @@ -127,7 +127,7 @@ export const saveContact = async ( } return await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, payloads, @@ -136,13 +136,13 @@ export const saveContact = async ( async () => { if (!contact.fileId) return; const existingContactFile = await getFileHeader( - dotYouClient, + odinClient, ContactConfig.ContactTargetDrive, contact.fileId ); if (!existingContactFile) return; contact.fileMetadata.versionTag = existingContactFile.fileMetadata.versionTag; - return saveContact(dotYouClient, contact); + return saveContact(odinClient, contact); } ); // if (!result) throw new Error('Failed to upload contact'); diff --git a/packages/common/common-app/src/provider/contact/ContactSourceProvider.ts b/packages/common/common-app/src/provider/contact/ContactSourceProvider.ts index a86da007b..8b84909d8 100644 --- a/packages/common/common-app/src/provider/contact/ContactSourceProvider.ts +++ b/packages/common/common-app/src/provider/contact/ContactSourceProvider.ts @@ -9,7 +9,7 @@ import { EmailFields, } from '@homebase-id/js-lib/profile'; -import { DotYouClient, ImageContentType } from '@homebase-id/js-lib/core'; +import { OdinClient, ImageContentType } from '@homebase-id/js-lib/core'; import { getProfileAttributesOverPeer, getDecryptedImageDataOverPeer, @@ -21,12 +21,12 @@ import { RawContact, getConnectionInfo } from '@homebase-id/js-lib/network'; //Handles fetching and parsing of Contact Source data export const fetchConnectionInfo = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { const [connectionContactData, contactFromTransit] = await Promise.all([ - getConnectionInfo(dotYouClient, odinId), - queryRemoteAttributes(dotYouClient, odinId), + getConnectionInfo(odinClient, odinId), + queryRemoteAttributes(odinClient, odinId), ]); return { @@ -39,19 +39,19 @@ export const fetchConnectionInfo = async ( }; const queryRemoteAttributes = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { try { const [name, phone, email, location, birthday, photo] = await Promise.all([ - (await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.Name))?.[0], + (await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.Name))?.[0], ( - await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.PhoneNumber) + await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.PhoneNumber) )?.[0], - (await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.Email))?.[0], - (await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.Address))?.[0], - (await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.Birthday))?.[0], - (await getProfileAttributesOverPeer(dotYouClient, odinId, BuiltInAttributes.Photo))?.[0], + (await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.Email))?.[0], + (await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.Address))?.[0], + (await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.Birthday))?.[0], + (await getProfileAttributesOverPeer(odinClient, odinId, BuiltInAttributes.Photo))?.[0], ]); const nameAttr = name?.fileMetadata.appData.content; @@ -79,11 +79,11 @@ const queryRemoteAttributes = async ( birthday: { date: birthdayAttr?.data?.[BirthdayFields.Date] }, image: photo ? (await queryConnectionPhotoData( - dotYouClient, - odinId, - photo.fileId as string, - photoAttr.data?.[MinimalProfileFields.ProfileImageKey] - )) || undefined + odinClient, + odinId, + photo.fileId as string, + photoAttr.data?.[MinimalProfileFields.ProfileImageKey] + )) || undefined : undefined, }; } catch (ex) { @@ -93,13 +93,13 @@ const queryRemoteAttributes = async ( }; const queryConnectionPhotoData = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, profileImageFileId: string, profileImageKey: string ) => { const imageData = await getDecryptedImageDataOverPeer( - dotYouClient, + odinClient, odinId, GetTargetDriveFromProfileId(BuiltInProfiles.StandardProfileId), profileImageFileId, @@ -123,16 +123,16 @@ export const fetchDataFromPublic = async (odinId: string): Promise> => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); // const url = root + '/list?' + stringifyToQueryParams(data); // TODO: Add pagination whent the server supports it const url = root + '/list'; @@ -31,8 +31,8 @@ export const getDomains = async ( }); }; -export const getDomainInfo = async (dotYouClient: DotYouClient, domain: string) => { - const client = dotYouClient.createAxiosClient(); +export const getDomainInfo = async (odinClient: OdinClient, domain: string) => { + const client = odinClient.createAxiosClient(); const url = root + '/domain'; return client.post(url, { domain }).then((response) => { diff --git a/packages/common/common-app/src/socialFeed/Blocks/Author/AuthorImage.tsx b/packages/common/common-app/src/socialFeed/Blocks/Author/AuthorImage.tsx index 999e08d02..009f132cd 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Author/AuthorImage.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Author/AuthorImage.tsx @@ -2,7 +2,7 @@ import { GetTargetDriveFromProfileId, BuiltInProfiles } from '@homebase-id/js-li import { Image } from '../../../media/Image'; import { t } from '../../../helpers/i18n/dictionary'; import { useSiteData } from '../../../hooks/siteData/useSiteData'; -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { ContactImage } from '../../../identity'; import { useIsConnected } from '../../../hooks'; import { FallbackImg } from '../../../ui'; @@ -39,7 +39,7 @@ export const AuthorImage = ({ odinId, ...props }: ConnectionImageProps) => { return ; } - const host = new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot(); + const host = new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot(); return ( diff --git a/packages/common/common-app/src/socialFeed/Blocks/Author/AuthorName.tsx b/packages/common/common-app/src/socialFeed/Blocks/Author/AuthorName.tsx index 59068d9e0..e31761683 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Author/AuthorName.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Author/AuthorName.tsx @@ -1,19 +1,19 @@ -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { useSiteData, useExternalOdinId, useIsConnected, - useDotYouClientContext, + useOdinClientContext, ContactName, } from '../../../..'; export const AuthorName = ({ odinId, excludeLink }: { odinId?: string; excludeLink?: boolean }) => { if (!odinId || odinId === window.location.hostname) return ; - const loggedInIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedInIdentity = useOdinClientContext().getLoggedInIdentity(); const isConnected = useIsConnected(odinId).data; - const host = new DotYouClient({ + const host = new OdinClient({ hostIdentity: odinId, api: ApiType.Guest, }).getRoot(); diff --git a/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/CommentComposer.tsx b/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/CommentComposer.tsx index fb3c7ccca..b3a4fdfa2 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/CommentComposer.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/CommentComposer.tsx @@ -8,7 +8,7 @@ import { AllContactMentionDropdown, } from '../../../../form'; import { t, getImagesFromPasteEvent } from '../../../../helpers'; -import { CanReactInfo, useDotYouClientContext, useReaction } from '../../../../hooks'; +import { CanReactInfo, useOdinClientContext, useReaction } from '../../../../hooks'; import { ErrorNotification, ActionButtonState, ActionButton } from '../../../../ui'; import { AuthorImage } from '../../Author/AuthorImage'; import { CantReactInfo } from '../CantReactInfo'; @@ -32,7 +32,7 @@ export const CommentComposer = ({ }) => { const [stateIndex, setStateIndex] = useState(0); // Used to force a re-render of the component, to reset the input - const loggedInIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedInIdentity = useOdinClientContext().getLoggedInIdentity(); const { mutateAsync: postComment, error: postCommentError, diff --git a/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentHead.tsx b/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentHead.tsx index a90e33a30..edcf78c32 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentHead.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentHead.tsx @@ -1,6 +1,6 @@ -import { ApiType, DotYouClient } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient } from '@homebase-id/js-lib/core'; import { t } from '../../../../../helpers'; -import { useDotYouClientContext } from '../../../../../hooks'; +import { useOdinClientContext } from '../../../../../hooks'; import { AuthorName } from '../../../Author/AuthorName'; import { Block, Pencil, Times } from '../../../../../ui/Icons'; import { ActionGroup } from '../../../../../ui'; @@ -16,7 +16,7 @@ export const CommentHead = ({ commentBody: string; onRemove?: () => void; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const isAuthor = authorOdinId === loggedOnIdentity; const actionOptions = []; @@ -31,7 +31,7 @@ export const CommentHead = ({ actionOptions.push({ icon: Block, label: `${t('Block this user')}`, - href: `${new DotYouClient({ hostIdentity: loggedOnIdentity, api: ApiType.Guest }).getRoot()}/owner/connections/${authorOdinId}/block`, + href: `${new OdinClient({ hostIdentity: loggedOnIdentity, api: ApiType.Guest }).getRoot()}/owner/connections/${authorOdinId}/block`, }); } diff --git a/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentLikeButton.tsx b/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentLikeButton.tsx index e5ba9b238..93931e1b6 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentLikeButton.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentLikeButton.tsx @@ -6,14 +6,14 @@ import { useOutsideTrigger } from '../../../../../hooks/clickedOutsideTrigger/us import { ReactionsBarHandle, SocialReactionsBar } from '../../Reactions/ReactionsBar'; import { ErrorNotification } from '../../../../../ui/Alert/ErrorNotification'; import { t } from '../../../../../helpers/i18n/dictionary'; -import { useDotYouClientContext, useMyEmojiReactions } from '../../../../../hooks'; +import { useOdinClientContext, useMyEmojiReactions } from '../../../../../hooks'; export const CommentLikeButton = ({ threadContext }: { threadContext: ReactionContext }) => { const wrapperRef = useRef(null); const [isReact, setIsReact] = useState(false); const [isCustomReactOpen, setIsCustomReactOpen] = useState(false); - const loggedInIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedInIdentity = useOdinClientContext().getLoggedInIdentity(); const { saveEmoji: { mutate: postEmoji, error: postEmojiError }, removeEmoji: { mutate: removeEmoji, error: removeEmojiError }, diff --git a/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentMedia.tsx b/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentMedia.tsx index 99eb1625f..72e981734 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentMedia.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Interacts/Comments/Parts/CommentMedia.tsx @@ -2,7 +2,7 @@ import { EmbeddedThumb, TargetDrive } from '@homebase-id/js-lib/core'; import { useMemo, useState } from 'react'; import { OdinImage } from '@homebase-id/ui-lib'; import { ImageLightbox } from '../../../../../dialogs/ImageLightbox/ImageLightbox'; -import { useDotYouClientContext } from '../../../../../hooks/auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../../../../hooks/auth/useOdinClientContext'; export const CommentMedia = ({ postAuthorOdinId, @@ -19,7 +19,7 @@ export const CommentMedia = ({ lastModified?: number; previewThumbnail?: EmbeddedThumb; }) => { - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const [isImageLightboxOpen, setIsImageLightboxOpen] = useState(false); if (!targetDrive) return null; @@ -29,7 +29,7 @@ export const CommentMedia = ({ setIsImageLightboxOpen(true)} className="cursor-pointer"> { const wrapperRef = useRef(null); const { mutateAsync: postEmoji, error: postEmojiError } = useReaction().saveEmoji; - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const postContent = postFile.fileMetadata.appData.content; const reactionContext: ReactionContext = { diff --git a/packages/common/common-app/src/socialFeed/Blocks/Media/MediaGallery.tsx b/packages/common/common-app/src/socialFeed/Blocks/Media/MediaGallery.tsx index d5a23cc66..cbf2297eb 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Media/MediaGallery.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Media/MediaGallery.tsx @@ -3,7 +3,7 @@ import { useState, useRef, useMemo } from 'react'; import { Image } from '../../../media/Image'; import { getChannelDrive } from '@homebase-id/js-lib/public'; import { useImageCache } from '@homebase-id/ui-lib'; -import { useIntersection, useDarkMode, useDotYouClientContext } from '../../../hooks'; +import { useIntersection, useDarkMode, useOdinClientContext } from '../../../hooks'; import { Triangle } from '../../../ui/Icons'; import { BoringFile } from './PrimaryMedia'; @@ -48,8 +48,8 @@ export const MediaGallery = ({ const slicedFiles = files.length > maxVisible ? files.slice(0, maxVisible) : files; const countExcludedFromView = files.length - slicedFiles.length; - const dotYouClient = useDotYouClientContext(); - const { getFromCache } = useImageCache(dotYouClient); + const odinClient = useOdinClientContext(); + const { getFromCache } = useImageCache(odinClient); const targetDrive = getChannelDrive(channelId); const hasFirstInCache = useMemo( diff --git a/packages/common/common-app/src/socialFeed/Blocks/Meta/Meta.tsx b/packages/common/common-app/src/socialFeed/Blocks/Meta/Meta.tsx index 36d51e241..8c38cccff 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Meta/Meta.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Meta/Meta.tsx @@ -2,7 +2,7 @@ import { Suspense, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { ChannelDefinition, EmbeddedPost, PostContent } from '@homebase-id/js-lib/public'; import { OwnerActions } from './OwnerActions'; -import { ApiType, DotYouClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { aclEqual } from '@homebase-id/js-lib/helpers'; import { AclSummary } from '../../../acl'; import { t } from '../../../helpers'; @@ -12,7 +12,7 @@ import { useIsConnected } from '../../../hooks/connections/useIsConnected'; import { EditPostDialog } from '../../EditPostDialog/EditPostDialog'; import { Persons, UserX, Times, Flag, Block, Link, Trash, Lock, Pencil } from '../../../ui/Icons'; import { FEED_ROOT_PATH, HOME_ROOT_PATH } from '../../../constants'; -import { useDotYouClientContext } from '../../../hooks/auth/useDotYouClientContext'; +import { useOdinClientContext } from '../../../hooks/auth/useOdinClientContext'; interface PostMetaWithPostFileProps { odinId?: string; @@ -50,9 +50,9 @@ export const PostMeta = ({ size = 'text-xs', excludeContextMenu, }: PostMetaWithPostFileProps | PostMetaWithEmbeddedPostContentProps) => { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const loggedInIdentity = dotYouClient.getLoggedInIdentity(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const loggedInIdentity = odinClient.getLoggedInIdentity(); const now = new Date(); const date = new Date(postFile?.fileMetadata.appData.userDate || embeddedPost?.userDate || now); @@ -71,7 +71,7 @@ export const PostMeta = ({ const isConnected = useIsConnected(odinId).data; const channelLink = channel - ? `${odinId ? new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot() : ''}${HOME_ROOT_PATH}posts/${ + ? `${odinId ? new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot() : ''}${HOME_ROOT_PATH}posts/${ channel.fileMetadata.appData.content.slug }${isConnected && loggedInIdentity ? '?youauth-logon=' + loggedInIdentity : ''}` : undefined; @@ -139,7 +139,7 @@ export const ToGroupBlock = ({ | NewHomebaseFile; className?: string; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const groupPost = channel?.fileMetadata.appData.content.isCollaborative || (authorOdinId !== (odinId || loggedOnIdentity) && (odinId || loggedOnIdentity) && authorOdinId); @@ -148,7 +148,7 @@ export const ToGroupBlock = ({ if (!groupPost) return null; const channelLink = channel - ? `${odinId ? new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot() : ''}${HOME_ROOT_PATH}posts/${ + ? `${odinId ? new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot() : ''}${HOME_ROOT_PATH}posts/${ channel.fileMetadata.appData.content.slug }${isConnected && loggedOnIdentity ? '?youauth-logon=' + loggedOnIdentity : ''}` : undefined; @@ -181,7 +181,7 @@ const ExternalActions = ({ | NewHomebaseFile; postFile: HomebaseFile; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const navigate = useNavigate(); const [isEditOpen, setIsEditOpen] = useState(false); @@ -191,7 +191,7 @@ const ExternalActions = ({ } = useManageSocialFeed({ odinId }); if (!loggedOnIdentity) return null; - const host = new DotYouClient({ api: ApiType.Guest, hostIdentity: loggedOnIdentity }).getRoot(); + const host = new OdinClient({ api: ApiType.Guest, hostIdentity: loggedOnIdentity }).getRoot(); const options: ActionGroupOptionProps[] = [ { icon: UserX, @@ -283,12 +283,12 @@ const GroupChannelActions = ({ const navigate = useNavigate(); const [isEditOpen, setIsEditOpen] = useState(false); - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); - const hostIdentity = useDotYouClientContext().getHostIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); + const hostIdentity = useOdinClientContext().getHostIdentity(); const isAuthor = postFile.fileMetadata.originalAuthor === loggedOnIdentity; const host = loggedOnIdentity - ? new DotYouClient({ + ? new OdinClient({ api: ApiType.Guest, hostIdentity: loggedOnIdentity, }).getRoot() diff --git a/packages/common/common-app/src/socialFeed/Blocks/Meta/OwnerActions.tsx b/packages/common/common-app/src/socialFeed/Blocks/Meta/OwnerActions.tsx index 4b17e9c13..ab6f954bc 100644 --- a/packages/common/common-app/src/socialFeed/Blocks/Meta/OwnerActions.tsx +++ b/packages/common/common-app/src/socialFeed/Blocks/Meta/OwnerActions.tsx @@ -2,14 +2,14 @@ import { ChannelDefinition, PostContent } from '@homebase-id/js-lib/public'; import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useManagePost } from '../../../hooks/socialFeed/post/useManagePost'; -import { ApiType, DotYouClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; +import { ApiType, OdinClient, HomebaseFile, NewHomebaseFile } from '@homebase-id/js-lib/core'; import { ErrorNotification } from '../../../ui/Alert/ErrorNotification'; import { ActionGroup, ActionGroupOptionProps } from '../../../ui/Buttons/ActionGroup'; import { Pencil } from '../../../ui/Icons/Pencil'; import { t } from '../../../helpers/i18n/dictionary'; import { Clipboard, Globe, Trash } from '../../../ui/Icons'; import { EditPostDialog } from '../../EditPostDialog/EditPostDialog'; -import { useDotYouClientContext } from '../../../hooks'; +import { useOdinClientContext } from '../../../hooks'; import { FEED_ROOT_PATH } from '../../../constants'; export const OwnerActions = ({ @@ -22,7 +22,7 @@ export const OwnerActions = ({ postFile: HomebaseFile; channel: HomebaseFile | NewHomebaseFile | undefined; }) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const postContent = postFile.fileMetadata.appData.content; const [isEditOpen, setIsEditOpen] = useState(false); @@ -32,7 +32,7 @@ export const OwnerActions = ({ const navigate = useNavigate(); if (!loggedOnIdentity) return null; - const host = new DotYouClient({ api: ApiType.Guest, hostIdentity: loggedOnIdentity }).getRoot(); + const host = new OdinClient({ api: ApiType.Guest, hostIdentity: loggedOnIdentity }).getRoot(); return (
e.stopPropagation()}> diff --git a/packages/common/common-app/src/socialFeed/Composer/PostComposer.tsx b/packages/common/common-app/src/socialFeed/Composer/PostComposer.tsx index ad9a59cfa..a7662a536 100644 --- a/packages/common/common-app/src/socialFeed/Composer/PostComposer.tsx +++ b/packages/common/common-app/src/socialFeed/Composer/PostComposer.tsx @@ -31,7 +31,7 @@ import { useCollaborativeChannels, useChannel, useLinkPreviewBuilder, - useDotYouClientContext, + useOdinClientContext, } from '../../hooks'; import { EmbeddedPostContent } from '../Blocks/Body/EmbeddedPostContent'; @@ -57,9 +57,9 @@ export const PostComposer = ({ className?: string; excludeCustom?: boolean; }) => { - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const loggedOnIdentity = dotYouClient.getLoggedInIdentity(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const loggedOnIdentity = odinClient.getLoggedInIdentity(); const [stateIndex, setStateIndex] = useState(0); // Used to force a re-render of the component, to reset the input const { savePost, postState, processingProgress, error } = usePostComposer(); @@ -370,7 +370,7 @@ export const ChannelOrAclSelector = React.forwardRef( }, ref: Ref ) => { - const loggedOnIdentity = useDotYouClientContext().getLoggedInIdentity(); + const loggedOnIdentity = useOdinClientContext().getLoggedInIdentity(); const { data: channels, isLoading } = useChannels({ isAuthenticated: true, isOwner: true }); const { data: collaborativeChannels } = useCollaborativeChannels().fetch; const [isChnlMgmtOpen, setIsChnlMgmtOpen] = useState(false); diff --git a/packages/common/common-app/src/socialFeed/PostListItem/PostTeaser.tsx b/packages/common/common-app/src/socialFeed/PostListItem/PostTeaser.tsx index 5779db743..1fcd4f29b 100644 --- a/packages/common/common-app/src/socialFeed/PostListItem/PostTeaser.tsx +++ b/packages/common/common-app/src/socialFeed/PostListItem/PostTeaser.tsx @@ -11,7 +11,7 @@ import { PostInteracts } from '../Blocks/Interacts/PostInteracts'; import { DoubleClickHeartForMedia } from '../Blocks/Media/DoubleClickHeartForMedia'; import { useChannel } from '../../hooks/socialFeed/channels/useChannel'; import { HOME_ROOT_PATH } from '../../constants'; -import { useDotYouClientContext } from '../../hooks'; +import { useOdinClientContext } from '../../hooks'; import { PostSource } from '../Blocks/Meta/PostSource'; interface PostTeaserProps { @@ -39,9 +39,9 @@ export const PostTeaser: FC = ({ }) => { const post = postFile.fileMetadata.appData.content; const { data: channel } = useChannel({ channelKey: post.channelId }).fetch; - const dotYouClient = useDotYouClientContext(); - const isOwner = dotYouClient.isOwner(); - const isAuthenticated = dotYouClient.isAuthenticated(); + const odinClient = useOdinClientContext(); + const isOwner = odinClient.isOwner(); + const isAuthenticated = odinClient.isAuthenticated(); const navigate = useNavigate(); // Compared to PostTeaserCard, this one is always clickable as comments can't be loaded within; // If there is any media linked and not an article, we load the blogImageDetailPage diff --git a/packages/common/rich-text-editor/src/editor/ImagePlugin/ImagePlugin.tsx b/packages/common/rich-text-editor/src/editor/ImagePlugin/ImagePlugin.tsx index a3bdbdc6a..b1dd19d44 100644 --- a/packages/common/rich-text-editor/src/editor/ImagePlugin/ImagePlugin.tsx +++ b/packages/common/rich-text-editor/src/editor/ImagePlugin/ImagePlugin.tsx @@ -1,7 +1,7 @@ import { ReactEditor } from 'slate-react'; import { TargetDrive, NewMediaFile } from '@homebase-id/js-lib/core'; import { useMemo, useState } from 'react'; -import { ImageDialog, t, useDotYouClientContext } from '@homebase-id/common-app'; +import { ImageDialog, t, useOdinClientContext } from '@homebase-id/common-app'; import { ImageIcon, Trash } from '@homebase-id/common-app/icons'; import { ToolbarButton, ToolbarButtonProps } from '../../components/plate-ui/toolbar'; import { OdinThumbnailImage } from '@homebase-id/ui-lib'; @@ -65,7 +65,7 @@ export const ImageElementBlock = ( const isBlockSelected = useBlockSelected(); const [isActive, setIsActive] = useState(false); const { attributes, children, nodeProps, element } = props; - const dotYouClient = useDotYouClientContext(); + const odinClient = useOdinClientContext(); const editor = useEditorRef(useEventPlateId()); // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -106,7 +106,7 @@ export const ImageElementBlock = ( ) : ( => { - const client = dotYouClient.createAxiosClient(); +export const hasValidToken = async (odinClient: OdinClient): Promise => { + const client = odinClient.createAxiosClient(); const response = await client.get('/auth/verifytoken').catch((_error) => { return { status: _error?.response?.status || 404 }; @@ -165,7 +165,7 @@ export const getExtendAppRegistrationParams = ( }; export const exchangeDigestForToken = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, base64ExchangedSecretDigest: string ): Promise<{ base64ClientAuthTokenCipher: string; @@ -173,7 +173,7 @@ export const exchangeDigestForToken = async ( base64SharedSecretCipher: string; base64SharedSecretIv: string; }> => { - const axiosClient = dotYouClient.createAxiosClient({ overrideEncryption: true }); + const axiosClient = odinClient.createAxiosClient({ overrideEncryption: true }); const tokenResponse = await axiosClient .post( '/youauth/token', @@ -204,12 +204,12 @@ export const finalizeAuthentication = async ( const exchangedSecretDigest = await crypto.subtle.digest('SHA-256', exchangedSecret); const base64ExchangedSecretDigest = uint8ArrayToBase64(new Uint8Array(exchangedSecretDigest)); - const dotYouClient = new DotYouClient({ + const odinClient = new OdinClient({ api: ApiType.App, hostIdentity: identity, }); - const token = await exchangeDigestForToken(dotYouClient, base64ExchangedSecretDigest); + const token = await exchangeDigestForToken(odinClient, base64ExchangedSecretDigest); const sharedSecretCipher = base64ToUint8Array(token.base64SharedSecretCipher); const sharedSecretIv = base64ToUint8Array(token.base64SharedSecretIv); @@ -229,8 +229,8 @@ export const finalizeAuthentication = async ( }; }; -export const logout = async (dotYouClient: DotYouClient) => { - const client = dotYouClient.createAxiosClient(); +export const logout = async (odinClient: OdinClient) => { + const client = odinClient.createAxiosClient(); await client .post('/auth/logout', undefined, { @@ -242,8 +242,8 @@ export const logout = async (dotYouClient: DotYouClient) => { }); }; -export const preAuth = async (dotYouClient: DotYouClient) => { - const client = dotYouClient.createAxiosClient(); +export const preAuth = async (odinClient: OdinClient) => { + const client = odinClient.createAxiosClient(); await client .post('/notify/preauth', undefined, { diff --git a/packages/libs/js-lib/src/core/DriveData/Drive/DriveProvider.ts b/packages/libs/js-lib/src/core/DriveData/Drive/DriveProvider.ts index ea26d6fb6..f0e0e9821 100644 --- a/packages/libs/js-lib/src/core/DriveData/Drive/DriveProvider.ts +++ b/packages/libs/js-lib/src/core/DriveData/Drive/DriveProvider.ts @@ -1,5 +1,5 @@ import { DriveDefinition } from './DriveTypes'; -import { ApiType, DotYouClient } from '../../DotYouClient'; +import { ApiType, OdinClient } from '../../OdinClient'; import { assertIfDefined, drivesEqual, @@ -13,10 +13,10 @@ export const TRANSIENT_TEMP_DRIVE_ALIAS = '90f5e74ab7f9efda0ac298373a32ad8c'; const isDebug = hasDebugFlag(); export const getDrives = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, params: PagingOptions ): Promise> => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client.post>('drive/mgmt', params).then((response) => { return { @@ -24,15 +24,15 @@ export const getDrives = async ( results: isDebug ? response?.data?.results : response?.data?.results?.filter( - (drive) => !stringGuidsEqual(drive.targetDriveInfo.alias, TRANSIENT_TEMP_DRIVE_ALIAS) - ), + (drive) => !stringGuidsEqual(drive.targetDriveInfo.alias, TRANSIENT_TEMP_DRIVE_ALIAS) + ), }; }); }; //returns all drives for a given type export const getDrivesByType = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, type: string, pageNumber: number, pageSize: number @@ -43,8 +43,8 @@ export const getDrivesByType = async ( pageSize: pageSize, }; - if (dotYouClient.getType() === ApiType.Owner) { - const client = dotYouClient.createAxiosClient(); + if (odinClient.getType() === ApiType.Owner) { + const client = odinClient.createAxiosClient(); return client .get>('drive/mgmt/type?' + stringifyToQueryParams(params)) .then((response) => { @@ -53,13 +53,13 @@ export const getDrivesByType = async ( results: isDebug ? response?.data?.results : response?.data?.results?.filter( - (drive) => - !stringGuidsEqual(drive.targetDriveInfo.alias, TRANSIENT_TEMP_DRIVE_ALIAS) - ), + (drive) => + !stringGuidsEqual(drive.targetDriveInfo.alias, TRANSIENT_TEMP_DRIVE_ALIAS) + ), }; }); } else { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client.get('drive/metadata/type?' + stringifyToQueryParams(params)).then((response) => { return { ...response.data, @@ -72,7 +72,7 @@ export const getDrivesByType = async ( }; export const ensureDrive = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, name: string, metadata: string | undefined, @@ -83,8 +83,8 @@ export const ensureDrive = async ( assertIfDefined('name', name); //create the drive if it does not exist - const client = dotYouClient.createAxiosClient(); - const allDrives = await getDrives(dotYouClient, { pageNumber: 1, pageSize: 1000 }); + const client = odinClient.createAxiosClient(); + const allDrives = await getDrives(odinClient, { pageNumber: 1, pageSize: 1000 }); const foundDrive = allDrives.results.find((d) => drivesEqual(d.targetDriveInfo, targetDrive)); @@ -108,14 +108,14 @@ export const ensureDrive = async ( }; export const editDriveMetadata = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, newMetadata: string ) => { assertIfDefined('targetDrive', targetDrive); assertIfDefined('newMetadata', newMetadata); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const data = { targetDrive: targetDrive, metadata: newMetadata, @@ -131,14 +131,14 @@ export const editDriveMetadata = async ( }; export const editDriveAllowAnonymousRead = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, newAllowAnonymousRead: boolean ) => { assertIfDefined('targetDrive', targetDrive); assertIfDefined('newAllowAnonymousRead', newAllowAnonymousRead); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const data = { targetDrive: targetDrive, allowAnonymousReads: newAllowAnonymousRead, @@ -154,14 +154,14 @@ export const editDriveAllowAnonymousRead = async ( }; export const editDriveAllowSubscriptions = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, newAllowSubscriptions: boolean ) => { assertIfDefined('targetDrive', targetDrive); assertIfDefined('newAllowSubscriptions', newAllowSubscriptions); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const data = { targetDrive: targetDrive, allowSubscriptions: newAllowSubscriptions, @@ -177,14 +177,14 @@ export const editDriveAllowSubscriptions = async ( }; export const editDriveAttributes = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, newAttributes: { [key: string]: string } ) => { assertIfDefined('targetDrive', targetDrive); assertIfDefined('newAttributes', newAttributes); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const data = { targetDrive: targetDrive, attributes: newAttributes, @@ -217,12 +217,12 @@ export interface DriveStatus { } export const getDriveStatus = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive ): Promise => { assertIfDefined('targetDrive', targetDrive); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client .get('/drive/status?' + stringifyToQueryParams(targetDrive)) diff --git a/packages/libs/js-lib/src/core/DriveData/File/DriveFileByGlobalTransitIdProvider.ts b/packages/libs/js-lib/src/core/DriveData/File/DriveFileByGlobalTransitIdProvider.ts index 41985c703..b95c1e1b7 100644 --- a/packages/libs/js-lib/src/core/DriveData/File/DriveFileByGlobalTransitIdProvider.ts +++ b/packages/libs/js-lib/src/core/DriveData/File/DriveFileByGlobalTransitIdProvider.ts @@ -1,5 +1,5 @@ import { assertIfDefined, stringifyToQueryParams, tryJsonParse } from '../../../helpers/DataUtil'; -import { DotYouClient } from '../../DotYouClient'; +import { OdinClient } from '../../OdinClient'; import { decryptKeyHeader, decryptJsonContent } from '../SecurityHelpers'; import { getCacheKey, getAxiosClient } from './DriveFileHelper'; import { TargetDrive, SystemFileType, HomebaseFile } from './DriveFileTypes'; @@ -14,7 +14,7 @@ const _internalMetadataPromiseCache = new Map( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, uniqueId: string, options?: { systemFileType?: SystemFileType; decrypt?: boolean } @@ -23,7 +23,7 @@ export const getFileHeaderByGlobalTransitId = async ( const systemFileType = options?.systemFileType ?? 'Standard'; const fileHeader = await getFileHeaderBytesByGlobalTransitId( - dotYouClient, + odinClient, targetDrive, uniqueId, { @@ -48,12 +48,12 @@ export const getFileHeaderByGlobalTransitId = async ( }; export const getFileHeaderBytesByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, uniqueId: string, options?: { decrypt?: boolean; systemFileType?: SystemFileType } ): Promise => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('UniqueId', uniqueId); @@ -66,7 +66,7 @@ export const getFileHeaderBytesByGlobalTransitId = async ( (await _internalMetadataPromiseCache.get(cacheKey)); if (cacheEntry) return cacheEntry; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileByGlobalTransitIdRequest = { ...targetDrive, @@ -79,7 +79,7 @@ export const getFileHeaderBytesByGlobalTransitId = async ( .then(async (fileHeader) => { if (decrypt) { const keyheader = fileHeader.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, fileHeader.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, fileHeader.sharedSecretEncryptedKeyHeader) : undefined; fileHeader.fileMetadata.appData.content = await decryptJsonContent( diff --git a/packages/libs/js-lib/src/core/DriveData/File/DriveFileByUniqueIdProvider.ts b/packages/libs/js-lib/src/core/DriveData/File/DriveFileByUniqueIdProvider.ts index 50221d28d..cd7f3631e 100644 --- a/packages/libs/js-lib/src/core/DriveData/File/DriveFileByUniqueIdProvider.ts +++ b/packages/libs/js-lib/src/core/DriveData/File/DriveFileByUniqueIdProvider.ts @@ -1,6 +1,6 @@ import { AxiosRequestConfig } from 'axios'; -import { DotYouClient } from '../../DotYouClient'; +import { OdinClient } from '../../OdinClient'; import { decryptKeyHeader, decryptJsonContent, @@ -34,7 +34,7 @@ const _internalMetadataPromiseCache = new Map( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, uniqueId: string, options?: { systemFileType?: SystemFileType; decrypt?: boolean } @@ -42,7 +42,7 @@ export const getFileHeaderByUniqueId = async ( const decrypt = options?.decrypt ?? true; const systemFileType = options?.systemFileType ?? 'Standard'; - const fileHeader = await getFileHeaderBytesByUniqueId(dotYouClient, targetDrive, uniqueId, { + const fileHeader = await getFileHeaderBytesByUniqueId(odinClient, targetDrive, uniqueId, { decrypt, systemFileType, }); @@ -65,12 +65,12 @@ export const getFileHeaderByUniqueId = async ( }; export const getFileHeaderBytesByUniqueId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, uniqueId: string, options?: { decrypt?: boolean; systemFileType?: SystemFileType } ): Promise => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('UniqueId', uniqueId); @@ -83,7 +83,7 @@ export const getFileHeaderBytesByUniqueId = async ( (await _internalMetadataPromiseCache.get(cacheKey)); if (cacheEntry) return cacheEntry; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileByUniqueIdRequest = { ...targetDrive, @@ -96,7 +96,7 @@ export const getFileHeaderBytesByUniqueId = async ( .then(async (fileHeader) => { if (decrypt) { const keyheader = fileHeader.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, fileHeader.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, fileHeader.sharedSecretEncryptedKeyHeader) : undefined; fileHeader.fileMetadata.appData.content = await decryptJsonContent( @@ -120,7 +120,7 @@ export const getFileHeaderBytesByUniqueId = async ( }; export const getPayloadAsJsonByUniqueId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, uniqueId: string, key: string, @@ -130,14 +130,14 @@ export const getPayloadAsJsonByUniqueId = async ( ): Promise => { const systemFileType = options?.systemFileType ?? 'Standard'; - return getPayloadBytesByUniqueId(dotYouClient, targetDrive, uniqueId, key, { + return getPayloadBytesByUniqueId(odinClient, targetDrive, uniqueId, key, { systemFileType, decrypt: true, }).then((bytes) => parseBytesToObject(bytes)); }; export const getPayloadBytesByUniqueId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, uniqueId: string, key: string, @@ -149,7 +149,7 @@ export const getPayloadBytesByUniqueId = async ( lastModified?: number; } ): Promise<{ bytes: Uint8Array; contentType: ContentType } | null> => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('UniqueId', uniqueId); assertIfDefined('Key', key); @@ -159,7 +159,7 @@ export const getPayloadBytesByUniqueId = async ( systemFileType: 'Standard', }; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileByUniqueIdPayloadRequest = { ...targetDrive, clientUniqueId: uniqueId, @@ -179,7 +179,7 @@ export const getPayloadBytesByUniqueId = async ( return client .get( '/drive/query/specialized/cuid/payload?' + - stringifyToQueryParams({ ...request, lastModified }), + stringifyToQueryParams({ ...request, lastModified }), config ) .then(async (response) => { @@ -189,19 +189,19 @@ export const getPayloadBytesByUniqueId = async ( ? new Uint8Array(response.data) : updatedChunkStart !== undefined ? ( - await decryptChunkedBytesResponse( - dotYouClient, - response, - startOffset, - updatedChunkStart - ) - ).slice( - 0, - chunkEnd !== undefined && chunkStart !== undefined - ? chunkEnd - chunkStart + 1 - : undefined + await decryptChunkedBytesResponse( + odinClient, + response, + startOffset, + updatedChunkStart ) - : await decryptBytesResponse(dotYouClient, response), + ).slice( + 0, + chunkEnd !== undefined && chunkStart !== undefined + ? chunkEnd - chunkStart + 1 + : undefined + ) + : await decryptBytesResponse(odinClient, response), contentType: `${response.headers.decryptedcontenttype}` as ContentType, }; @@ -214,7 +214,7 @@ export const getPayloadBytesByUniqueId = async ( }; export const getThumbBytesByUniqueId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, uniqueId: string, payloadKey: string, @@ -225,7 +225,7 @@ export const getThumbBytesByUniqueId = async ( lastModified?: number; } ): Promise<{ bytes: Uint8Array; contentType: ImageContentType } | null> => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('UniqueId', uniqueId); assertIfDefined('PayloadKey', payloadKey); @@ -235,7 +235,7 @@ export const getThumbBytesByUniqueId = async ( const lastModified = options?.lastModified ?? true; const systemFileType = options?.systemFileType ?? 'Standard'; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileThumbByUniqueIdRequest = { ...targetDrive, clientUniqueId: uniqueId, @@ -248,13 +248,13 @@ export const getThumbBytesByUniqueId = async ( return client .get( '/drive/query/specialized/cuid/thumb?' + - stringifyToQueryParams({ ...request, width, height, lastModified }), + stringifyToQueryParams({ ...request, width, height, lastModified }), config ) .then(async (response) => { if (!response.data) return null; return { - bytes: await decryptBytesResponse(dotYouClient, response), + bytes: await decryptBytesResponse(odinClient, response), contentType: `${response.headers.decryptedcontenttype}` as ImageContentType, }; }) diff --git a/packages/libs/js-lib/src/core/DriveData/File/DriveFileHelper.ts b/packages/libs/js-lib/src/core/DriveData/File/DriveFileHelper.ts index 6acddf5f3..28f36b235 100644 --- a/packages/libs/js-lib/src/core/DriveData/File/DriveFileHelper.ts +++ b/packages/libs/js-lib/src/core/DriveData/File/DriveFileHelper.ts @@ -4,15 +4,15 @@ import { roundToSmallerMultipleOf16, tryJsonParse, } from '../../../helpers/DataUtil'; -import { DotYouClient } from '../../DotYouClient'; +import { OdinClient } from '../../OdinClient'; import { TargetDrive, SystemFileType, ContentType } from './DriveFileTypes'; /// Helper methods: export const getCacheKey = (targetDrive: TargetDrive, id: string, decrypt: boolean) => `${targetDrive.alias}-${targetDrive.type}+${id}+${decrypt}`; -export const getAxiosClient = (dotYouClient: DotYouClient, systemFileType?: SystemFileType) => - dotYouClient.createAxiosClient({ +export const getAxiosClient = (odinClient: OdinClient, systemFileType?: SystemFileType) => + odinClient.createAxiosClient({ systemFileType, }); diff --git a/packages/libs/js-lib/src/core/DriveData/File/DriveFileManager.ts b/packages/libs/js-lib/src/core/DriveData/File/DriveFileManager.ts index ee7b876dc..0b2f0b5f8 100644 --- a/packages/libs/js-lib/src/core/DriveData/File/DriveFileManager.ts +++ b/packages/libs/js-lib/src/core/DriveData/File/DriveFileManager.ts @@ -1,12 +1,12 @@ import { AxiosRequestConfig } from 'axios'; import { assertIfDefined } from '../../../helpers/DataUtil'; -import { DotYouClient } from '../../DotYouClient'; +import { OdinClient } from '../../OdinClient'; import { SystemFileType } from './DriveFileTypes'; import { TargetDrive } from './DriveFileTypes'; /// Delete methods: export const deleteFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, recipients?: string[], @@ -17,7 +17,7 @@ export const deleteFile = async ( assertIfDefined('TargetDrive', targetDrive); assertIfDefined('FileId', fileId); - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType, }); @@ -45,7 +45,7 @@ export const deleteFile = async ( }; export const deleteFiles = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileIds: string[], recipients?: string[], @@ -55,7 +55,7 @@ export const deleteFiles = async ( assertIfDefined('TargetDrive', targetDrive); assertIfDefined('FileIds', fileIds); - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType, }); @@ -83,7 +83,7 @@ export const deleteFiles = async ( }; export const deleteFilesByGroupId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, groupIds: string[], recipients?: string[], @@ -93,7 +93,7 @@ export const deleteFilesByGroupId = async ( assertIfDefined('TargetDrive', targetDrive); assertIfDefined('GroupIds', groupIds); - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType, }); diff --git a/packages/libs/js-lib/src/core/DriveData/File/DriveFileProvider.ts b/packages/libs/js-lib/src/core/DriveData/File/DriveFileProvider.ts index d4752725b..9c018db01 100644 --- a/packages/libs/js-lib/src/core/DriveData/File/DriveFileProvider.ts +++ b/packages/libs/js-lib/src/core/DriveData/File/DriveFileProvider.ts @@ -8,7 +8,7 @@ import { } from './DriveFileTypes'; import { TargetDrive, ImageContentType, FileMetadata } from './DriveFileTypes'; -import { DotYouClient } from '../../DotYouClient'; +import { OdinClient } from '../../OdinClient'; import { decryptKeyHeader, decryptJsonContent, @@ -38,12 +38,12 @@ const _internalMetadataPromiseCache = new Map( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, options?: { systemFileType?: SystemFileType; decrypt?: boolean; axiosConfig?: AxiosRequestConfig } ): Promise | null> => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('FileId', fileId); @@ -51,7 +51,7 @@ export const getFileHeader = async ( const systemFileType = options?.systemFileType ?? 'Standard'; const axiosConfig = options?.axiosConfig; - const fileHeader = await getFileHeaderBytes(dotYouClient, targetDrive, fileId, { + const fileHeader = await getFileHeaderBytes(odinClient, targetDrive, fileId, { decrypt, systemFileType, axiosConfig, @@ -75,14 +75,14 @@ export const getFileHeader = async ( }; export const getFileHeaderBytes = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, options: | { decrypt?: boolean; systemFileType?: SystemFileType; axiosConfig?: AxiosRequestConfig } | undefined ) => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('FileId', fileId); @@ -95,7 +95,7 @@ export const getFileHeaderBytes = async ( (await _internalMetadataPromiseCache.get(cacheKey)); if (cacheEntry) return cacheEntry; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileRequest = { ...targetDrive, @@ -111,7 +111,7 @@ export const getFileHeaderBytes = async ( .then(async (fileHeader) => { if (decrypt) { const keyheader = fileHeader.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, fileHeader.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, fileHeader.sharedSecretEncryptedKeyHeader) : undefined; fileHeader.fileMetadata.appData.content = await decryptJsonContent( @@ -134,7 +134,7 @@ export const getFileHeaderBytes = async ( }; export const getPayloadAsJson = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, key: string, @@ -146,7 +146,7 @@ export const getPayloadAsJson = async ( ): Promise => { const { systemFileType, lastModified } = options ?? { systemFileType: 'Standard' }; - return getPayloadBytes(dotYouClient, targetDrive, fileId, key, { + return getPayloadBytes(odinClient, targetDrive, fileId, key, { systemFileType, decrypt: true, axiosConfig: options?.axiosConfig, @@ -155,7 +155,7 @@ export const getPayloadAsJson = async ( }; export const getPayloadBytes = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, key: string, @@ -168,7 +168,7 @@ export const getPayloadBytes = async ( axiosConfig?: AxiosRequestConfig; } ): Promise<{ bytes: Uint8Array; contentType: ContentType } | null> => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('FileId', fileId); assertIfDefined('Key', key); @@ -177,7 +177,7 @@ export const getPayloadBytes = async ( const decrypt = options?.decrypt ?? true; const systemFileType = options?.systemFileType ?? 'Standard'; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFilePayloadRequest = { ...targetDrive, fileId, @@ -207,19 +207,19 @@ export const getPayloadBytes = async ( ? new Uint8Array(response.data) : updatedChunkStart !== undefined ? ( - await decryptChunkedBytesResponse( - dotYouClient, - response, - startOffset, - updatedChunkStart - ) - ).slice( - 0, - chunkEnd !== undefined && chunkStart !== undefined - ? chunkEnd - chunkStart - : undefined + await decryptChunkedBytesResponse( + odinClient, + response, + startOffset, + updatedChunkStart ) - : await decryptBytesResponse(dotYouClient, response), + ).slice( + 0, + chunkEnd !== undefined && chunkStart !== undefined + ? chunkEnd - chunkStart + : undefined + ) + : await decryptBytesResponse(odinClient, response), contentType: `${response.headers.decryptedcontenttype}` as ContentType, }; @@ -232,7 +232,7 @@ export const getPayloadBytes = async ( }; export const getThumbBytes = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, payloadKey: string, @@ -244,7 +244,7 @@ export const getThumbBytes = async ( axiosConfig?: AxiosRequestConfig; } ): Promise<{ bytes: Uint8Array; contentType: ImageContentType } | null> => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('FileId', fileId); assertIfDefined('PayloadKey', payloadKey); @@ -253,7 +253,7 @@ export const getThumbBytes = async ( const { systemFileType, lastModified } = options ?? { systemFileType: 'Standard' }; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileThumbRequest = { ...targetDrive, fileId, @@ -272,7 +272,7 @@ export const getThumbBytes = async ( .then(async (response) => { if (!response.data) return null; return { - bytes: await decryptBytesResponse(dotYouClient, response), + bytes: await decryptBytesResponse(odinClient, response), contentType: `${response.headers.decryptedcontenttype}` as ImageContentType, }; }) @@ -284,7 +284,7 @@ export const getThumbBytes = async ( }; export const getTransferHistory = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, options?: { @@ -292,13 +292,13 @@ export const getTransferHistory = async ( axiosConfig?: AxiosRequestConfig; } ) => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('FileId', fileId); const { systemFileType } = options ?? { systemFileType: 'Standard' }; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileRequest = { ...targetDrive, fileId, @@ -318,7 +318,7 @@ export const getTransferHistory = async ( }; export const getContentFromHeader = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, dsr: { fileId: string; @@ -332,7 +332,7 @@ export const getContentFromHeader = async ( const { fileId, fileMetadata, sharedSecretEncryptedKeyHeader } = dsr; const keyHeader = fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, sharedSecretEncryptedKeyHeader as EncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, sharedSecretEncryptedKeyHeader as EncryptedKeyHeader) : undefined; let decryptedJsonContent; @@ -340,7 +340,7 @@ export const getContentFromHeader = async ( decryptedJsonContent = await decryptJsonContent(fileMetadata, keyHeader); } else { // When contentIsComplete but includesJsonContent == false the query before was done without including the content; So we just get and parse - const fileHeader = await getFileHeader(dotYouClient, targetDrive, fileId, { + const fileHeader = await getFileHeader(odinClient, targetDrive, fileId, { systemFileType: dsr.fileSystemType || systemFileType, }); if (!fileHeader) return null; @@ -357,7 +357,7 @@ export const getContentFromHeader = async ( }; export const getContentFromHeaderOrPayload = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, dsr: { fileId: string; @@ -379,7 +379,7 @@ export const getContentFromHeaderOrPayload = async ( if (contentIsComplete) { return getContentFromHeader( - dotYouClient, + odinClient, targetDrive, dsr, includesJsonContent, @@ -389,7 +389,7 @@ export const getContentFromHeaderOrPayload = async ( const payloadDescriptor = dsr.fileMetadata.payloads?.find( (payload) => payload.key === DEFAULT_PAYLOAD_KEY ); - return await getPayloadAsJson(dotYouClient, targetDrive, fileId, DEFAULT_PAYLOAD_KEY, { + return await getPayloadAsJson(odinClient, targetDrive, fileId, DEFAULT_PAYLOAD_KEY, { systemFileType: dsr.fileSystemType || systemFileType, lastModified: payloadDescriptor?.lastModified, }); @@ -397,7 +397,7 @@ export const getContentFromHeaderOrPayload = async ( }; export const getLocalContentFromHeader = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, dsr: { fileId: string; @@ -414,7 +414,7 @@ export const getLocalContentFromHeader = async ( } const keyHeader = fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, sharedSecretEncryptedKeyHeader as EncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, sharedSecretEncryptedKeyHeader as EncryptedKeyHeader) : undefined; let decryptedLocalContent; @@ -422,7 +422,7 @@ export const getLocalContentFromHeader = async ( decryptedLocalContent = await decryptLocalContent(fileMetadata, keyHeader); } else { // When contentIsComplete but includesJsonContent == false the query before was done without including the content; So we just get and parse - const fileHeader = await getFileHeader(dotYouClient, targetDrive, fileId, { + const fileHeader = await getFileHeader(odinClient, targetDrive, fileId, { systemFileType: dsr.fileSystemType || systemFileType, }); if (!fileHeader) return null; diff --git a/packages/libs/js-lib/src/core/DriveData/Query/DriveQueryService.ts b/packages/libs/js-lib/src/core/DriveData/Query/DriveQueryService.ts index e6e40e12c..3261633a0 100644 --- a/packages/libs/js-lib/src/core/DriveData/Query/DriveQueryService.ts +++ b/packages/libs/js-lib/src/core/DriveData/Query/DriveQueryService.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../DotYouClient'; +import { OdinClient } from '../../OdinClient'; import { FileQueryParams, GetModifiedResultOptions, @@ -38,7 +38,7 @@ export const DEFAULT_QUERY_BATCH_RESULT_OPTION = { /// Query methods: export const queryModified = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, params: FileQueryParams, ro?: GetModifiedResultOptions, options?: { @@ -51,7 +51,7 @@ export const queryModified = async ( const strippedQueryParams = { ...params }; delete strippedQueryParams.systemFileType; - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType: params.systemFileType, }); @@ -85,7 +85,7 @@ export const queryModified = async ( searchResults: await Promise.all( response.data.searchResults.map(async (dsr) => { const keyheader = dsr.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, dsr.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, dsr.sharedSecretEncryptedKeyHeader) : undefined; dsr.fileMetadata.appData.content = await decryptJsonContent( @@ -110,10 +110,10 @@ interface QueryBatchParamsWithFileState extends Omit( - dotYouClient: DotYouClient, + odinClient: OdinClient, params: T, ro?: GetBatchQueryResultOptions, options?: { @@ -129,7 +129,7 @@ export const queryBatch = async < }; delete strippedQueryParams.systemFileType; - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType: params.systemFileType, }); @@ -164,7 +164,7 @@ export const queryBatch = async < response.data as QueryBatchResponseWithDeletedResults | QueryBatchResponse ).searchResults.map(async (dsr) => { const keyheader = dsr.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, dsr.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, dsr.sharedSecretEncryptedKeyHeader) : undefined; dsr.fileMetadata.appData.content = await decryptJsonContent( @@ -183,7 +183,7 @@ export const queryBatch = async < }; export const queryBatchCollection = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, queries: { name: string; queryParams: FileQueryParams; @@ -197,7 +197,7 @@ export const queryBatchCollection = async ( ): Promise => { const { decrypt, axiosConfig } = config ?? {}; - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType, }); @@ -242,7 +242,7 @@ export const queryBatchCollection = async ( searchResults: await Promise.all( result.searchResults.map(async (dsr) => { const keyheader = dsr.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, dsr.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, dsr.sharedSecretEncryptedKeyHeader) : undefined; dsr.fileMetadata.appData.content = await decryptJsonContent( diff --git a/packages/libs/js-lib/src/core/DriveData/SecurityHelpers.ts b/packages/libs/js-lib/src/core/DriveData/SecurityHelpers.ts index 227ad39d5..0c2cebd6f 100644 --- a/packages/libs/js-lib/src/core/DriveData/SecurityHelpers.ts +++ b/packages/libs/js-lib/src/core/DriveData/SecurityHelpers.ts @@ -1,5 +1,5 @@ import { AxiosResponse } from 'axios'; -import { DotYouClient } from '../DotYouClient'; +import { OdinClient } from '../OdinClient'; import { cbcEncrypt, streamEncryptWithCbc, cbcDecrypt } from '../../helpers/AesEncrypt'; import { @@ -17,11 +17,11 @@ const OdinBlob: typeof Blob = /// Encryption export const encryptKeyHeader = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, keyHeader: KeyHeader, transferIv: Uint8Array ): Promise => { - const ss = dotYouClient.getSharedSecret(); + const ss = odinClient.getSharedSecret(); if (!ss) throw new Error('attempting to encrypt but missing the shared secret'); const combined = [...Array.from(keyHeader.iv), ...Array.from(keyHeader.aesKey)]; @@ -84,12 +84,12 @@ export const encryptWithKeyheader = async < }; export const encryptWithSharedSecret = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, o: unknown, iv: Uint8Array ): Promise => { //encrypt metadata with shared secret - const ss = dotYouClient.getSharedSecret(); + const ss = odinClient.getSharedSecret(); const json = jsonStringify64(o); if (!ss) { @@ -157,7 +157,7 @@ export const decryptUsingKeyHeader = async ( ): Promise => await cbcDecrypt(cipher, keyHeader.iv, keyHeader.aesKey); export const decryptBytesResponse = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, response: AxiosResponse // keyHeader: KeyHeader | EncryptedKeyHeader | undefined ): Promise => { @@ -166,7 +166,7 @@ export const decryptBytesResponse = async ( // if (keyHeader) { // const decryptedKeyHeader = // 'encryptionVersion' in keyHeader - // ? await decryptKeyHeader(dotYouClient, keyHeader) + // ? await decryptKeyHeader(odinClient, keyHeader) // : keyHeader; // return decryptUsingKeyHeader(responseBa, decryptedKeyHeader); @@ -178,7 +178,7 @@ export const decryptBytesResponse = async ( const encryptedKeyHeader = splitSharedSecretEncryptedKeyHeader( response.headers.sharedsecretencryptedheader64 ); - const keyHeader = await decryptKeyHeader(dotYouClient, encryptedKeyHeader); + const keyHeader = await decryptKeyHeader(odinClient, encryptedKeyHeader); return await decryptUsingKeyHeader(responseBa, keyHeader); } else if (response.headers.payloadencrypted === 'True') { @@ -189,7 +189,7 @@ export const decryptBytesResponse = async ( }; export const decryptChunkedBytesResponse = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, response: AxiosResponse, startOffset: number, chunkStart: number @@ -203,7 +203,7 @@ export const decryptChunkedBytesResponse = async ( const encryptedKeyHeader = splitSharedSecretEncryptedKeyHeader( response.headers.sharedsecretencryptedheader64 ); - const keyHeader = await decryptKeyHeader(dotYouClient, encryptedKeyHeader); + const keyHeader = await decryptKeyHeader(odinClient, encryptedKeyHeader); const key = keyHeader.aesKey; const { iv, cipher } = await (async () => { const padding = new Uint8Array(16).fill(16); @@ -234,7 +234,7 @@ export const decryptChunkedBytesResponse = async ( }; export const decryptKeyHeader = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, encryptedKeyHeader: EncryptedKeyHeader | KeyHeader ): Promise => { const encryptedKeyHeaderIsAlreadyDecrypted = @@ -243,7 +243,7 @@ export const decryptKeyHeader = async ( return encryptedKeyHeader as KeyHeader; } - const ss = dotYouClient.getSharedSecret(); + const ss = odinClient.getSharedSecret(); if (!ss) throw new Error('attempting to decrypt but missing the shared secret'); // Check if used params aren't still base64 encoded if so parse to bytearrays diff --git a/packages/libs/js-lib/src/core/DriveData/Upload/DriveFileUploader.ts b/packages/libs/js-lib/src/core/DriveData/Upload/DriveFileUploader.ts index 1ff05a600..18dc03c51 100644 --- a/packages/libs/js-lib/src/core/DriveData/Upload/DriveFileUploader.ts +++ b/packages/libs/js-lib/src/core/DriveData/Upload/DriveFileUploader.ts @@ -1,5 +1,5 @@ import { hasDebugFlag } from '../../../helpers/BrowserUtil'; -import { assertIfDotYouClientIsOwnerOrApp, DotYouClient } from '../../DotYouClient'; +import { assertIfOdinClientIsOwnerOrApp, OdinClient } from '../../OdinClient'; import { PayloadFile, ThumbnailFile, @@ -44,7 +44,7 @@ const isDebug = hasDebugFlag(); /// Upload methods: export const uploadFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, instructions: UploadInstructionSet, metadata: UploadFileMetadata, payloads?: PayloadFile[], @@ -57,7 +57,7 @@ export const uploadFile = async ( } ): Promise => { isDebug && - console.debug('request', new URL(`${dotYouClient.getEndpoint()}/drive/files/upload`).pathname, { + console.debug('request', new URL(`${odinClient.getEndpoint()}/drive/files/upload`).pathname, { instructions, metadata, payloads, @@ -80,7 +80,7 @@ export const uploadFile = async ( // Build package const encryptedDescriptor = await buildDescriptor( - dotYouClient, + odinClient, keyHeader, instructionsWithManifest, metadata @@ -97,7 +97,7 @@ export const uploadFile = async ( // Upload const uploadResult = await pureUpload( - dotYouClient, + odinClient, data, systemFileType, onVersionConflict, @@ -110,7 +110,7 @@ export const uploadFile = async ( }; export const patchFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, keyHeader: EncryptedKeyHeader | KeyHeader | undefined, instructions: UpdateInstructionSet, metadata: UploadFileMetadata, @@ -123,7 +123,7 @@ export const patchFile = async ( } ): Promise => { isDebug && - console.debug('request', new URL(`${dotYouClient.getEndpoint()}/drive/files/update`).pathname, { + console.debug('request', new URL(`${odinClient.getEndpoint()}/drive/files/update`).pathname, { instructions, metadata, payloads, @@ -133,7 +133,7 @@ export const patchFile = async ( const decryptedKeyHeader = keyHeader && 'encryptionVersion' in keyHeader - ? await decryptKeyHeader(dotYouClient, keyHeader) + ? await decryptKeyHeader(odinClient, keyHeader) : keyHeader; if (decryptedKeyHeader) { @@ -157,7 +157,7 @@ export const patchFile = async ( // Build package const encryptedDescriptor = await buildDescriptor( - dotYouClient, + odinClient, decryptedKeyHeader, instructionsWithManifest, metadata @@ -174,7 +174,7 @@ export const patchFile = async ( // Upload const updateResult = await pureUpdate( - dotYouClient, + odinClient, data, systemFileType, onVersionConflict, @@ -186,7 +186,7 @@ export const patchFile = async ( }; export const reUploadFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, instructions: UploadInstructionSet, metadata: UploadFileMetadata, encrypt: boolean, @@ -197,7 +197,7 @@ export const reUploadFile = async ( if (!targetDrive) throw new Error('storageOptions.drive is required'); if (!fileId) throw new Error('storageOptions.overwriteFileId is required'); - const header = await getFileHeader(dotYouClient, targetDrive, fileId); + const header = await getFileHeader(odinClient, targetDrive, fileId); const payloads: PayloadFile[] = []; const thumbnails: ThumbnailFile[] = []; @@ -206,7 +206,7 @@ export const reUploadFile = async ( for (let i = 0; existingPayloads && i < existingPayloads.length; i++) { const existingPayload = existingPayloads[i]; const payloadData = await getPayloadBytes( - dotYouClient, + odinClient, targetDrive, fileId, existingPayload.key, @@ -223,7 +223,7 @@ export const reUploadFile = async ( for (let j = 0; j < existingThumbnails.length; j++) { const existingThumbnail = existingThumbnails[j]; const thumbnailData = await getThumbBytes( - dotYouClient, + odinClient, targetDrive, fileId, existingPayload.key, @@ -244,7 +244,7 @@ export const reUploadFile = async ( } return await uploadFile( - dotYouClient, + odinClient, instructions, metadata, payloads, @@ -262,13 +262,13 @@ export interface LocalMetadataUploadResult { } export const uploadLocalMetadataTags = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, file: FileIdFileIdentifier, localAppData: LocalAppData, onVersionConflict?: () => Promise | void ) => { - assertIfDotYouClientIsOwnerOrApp(dotYouClient); - const axiosClient = dotYouClient.createAxiosClient(); + assertIfOdinClientIsOwnerOrApp(odinClient); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient .patch('/drive/files/update-local-metadata-tags', { @@ -294,14 +294,14 @@ export const uploadLocalMetadataTags = async ( }; export const uploadLocalMetadataContent = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, file: HomebaseFile, localAppData: LocalAppData, onVersionConflict?: () => Promise | void ) => { - assertIfDotYouClientIsOwnerOrApp(dotYouClient); - const axiosClient = dotYouClient.createAxiosClient(); + assertIfOdinClientIsOwnerOrApp(odinClient); + const axiosClient = odinClient.createAxiosClient(); const fileIdentifier: FileIdFileIdentifier = { fileId: file.fileId, @@ -309,7 +309,7 @@ export const uploadLocalMetadataContent = async ( }; const decryptedKeyHeader = file.sharedSecretEncryptedKeyHeader - ? await decryptKeyHeader(dotYouClient, file.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, file.sharedSecretEncryptedKeyHeader) : undefined; if (file.fileMetadata.isEncrypted && !decryptedKeyHeader) { @@ -319,24 +319,24 @@ export const uploadLocalMetadataContent = async ( const keyHeader: KeyHeader | undefined = file.fileMetadata.isEncrypted && decryptedKeyHeader ? { - aesKey: decryptedKeyHeader.aesKey, - iv: (localAppData.iv && base64ToUint8Array(localAppData.iv)) || getRandom16ByteArray(), - } + aesKey: decryptedKeyHeader.aesKey, + iv: (localAppData.iv && base64ToUint8Array(localAppData.iv)) || getRandom16ByteArray(), + } : undefined; const ivToSend = (keyHeader?.iv && uint8ArrayToBase64(keyHeader.iv)) || undefined; const encryptedContent = keyHeader && localAppData.content ? uint8ArrayToBase64( - await encryptWithKeyheader( - stringToUint8Array( - typeof localAppData.content === 'string' - ? localAppData.content - : jsonStringify64(localAppData.content) - ), - keyHeader - ) + await encryptWithKeyheader( + stringToUint8Array( + typeof localAppData.content === 'string' + ? localAppData.content + : jsonStringify64(localAppData.content) + ), + keyHeader ) + ) : localAppData.content; return await axiosClient diff --git a/packages/libs/js-lib/src/core/DriveData/Upload/UploadHelpers.ts b/packages/libs/js-lib/src/core/DriveData/Upload/UploadHelpers.ts index c3f15d61f..554c2bf86 100644 --- a/packages/libs/js-lib/src/core/DriveData/Upload/UploadHelpers.ts +++ b/packages/libs/js-lib/src/core/DriveData/Upload/UploadHelpers.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../DotYouClient'; +import { OdinClient } from '../../OdinClient'; import { TransitInstructionSet } from '../../../peer/peerData/PeerTypes'; import { @@ -48,16 +48,16 @@ export const encryptMetaData = async ( ) => { return keyHeader && metadata.appData.content ? { - ...metadata, - appData: { - ...metadata.appData, - content: metadata.appData.content - ? uint8ArrayToBase64( - await encryptWithKeyheader(stringToUint8Array(metadata.appData.content), keyHeader) - ) - : undefined, - }, - } + ...metadata, + appData: { + ...metadata.appData, + content: metadata.appData.content + ? uint8ArrayToBase64( + await encryptWithKeyheader(stringToUint8Array(metadata.appData.content), keyHeader) + ) + : undefined, + }, + } : metadata; }; @@ -122,7 +122,7 @@ export const buildUpdateManifest = ( }; export const buildDescriptor = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, keyHeader: KeyHeader | undefined, instructions: UploadInstructionSet | TransitInstructionSet | UpdateInstructionSet, metadata: UploadFileMetadata @@ -130,10 +130,10 @@ export const buildDescriptor = async ( if (!instructions.transferIv) throw new Error('Transfer IV is required'); return await encryptWithSharedSecret( - dotYouClient, + odinClient, { encryptedKeyHeader: await encryptKeyHeader( - dotYouClient, + odinClient, keyHeader ?? EMPTY_KEY_HEADER, instructions.transferIv ), @@ -161,11 +161,11 @@ export const buildFormData = async ( const encryptedPayload = keyHeader && !payload.skipEncryption ? await encryptWithKeyheader(payload.payload, { - ...keyHeader, - iv: - manifest?.PayloadDescriptors?.find((p) => p.payloadKey === payload.key)?.iv || - keyHeader.iv, - }) + ...keyHeader, + iv: + manifest?.PayloadDescriptors?.find((p) => p.payloadKey === payload.key)?.iv || + keyHeader.iv, + }) : payload.payload; data.append('payload', encryptedPayload, payload.key); @@ -178,11 +178,11 @@ export const buildFormData = async ( const encryptedThumb = keyHeader && !thumb.skipEncryption ? await encryptWithKeyheader(thumb.payload, { - ...keyHeader, - iv: - manifest?.PayloadDescriptors?.find((p) => p.payloadKey === thumb.key)?.iv || - keyHeader.iv, - }) + ...keyHeader, + iv: + manifest?.PayloadDescriptors?.find((p) => p.payloadKey === thumb.key)?.iv || + keyHeader.iv, + }) : thumb.payload; data.append('thumbnail', encryptedThumb, thumb.key + thumb.pixelWidth); @@ -193,13 +193,13 @@ export const buildFormData = async ( }; export const pureUpload = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, data: FormData, systemFileType?: SystemFileType, onVersionConflict?: () => Promise | void, axiosConfig?: AxiosRequestConfig ): Promise => { - const client = dotYouClient.createAxiosClient({ overrideEncryption: true, systemFileType }); + const client = odinClient.createAxiosClient({ overrideEncryption: true, systemFileType }); const url = '/drive/files/upload'; const config: AxiosRequestConfig = { @@ -232,13 +232,13 @@ export const pureUpload = async ( }; export const pureUpdate = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, data: FormData, systemFileType?: SystemFileType, onVersionConflict?: () => Promise | void, axiosConfig?: AxiosRequestConfig ): Promise => { - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ overrideEncryption: true, systemFileType, }); diff --git a/packages/libs/js-lib/src/core/NotificationData/PushNotificationsService.ts b/packages/libs/js-lib/src/core/NotificationData/PushNotificationsService.ts index e86cb2845..6150109c6 100644 --- a/packages/libs/js-lib/src/core/NotificationData/PushNotificationsService.ts +++ b/packages/libs/js-lib/src/core/NotificationData/PushNotificationsService.ts @@ -1,5 +1,5 @@ import { AxiosRequestConfig } from 'axios'; -import { DotYouClient, NumberCursoredResult, PushNotificationOptions } from '../core'; +import { OdinClient, NumberCursoredResult, PushNotificationOptions } from '../core'; import { stringifyToQueryParams } from '../../helpers/helpers'; export interface PushNotification { @@ -11,22 +11,22 @@ export interface PushNotification { } export const AddNotification = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, notification: NotificationOptions ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.post(`/notify/list`, { appNotificationOptions: notification, }); }; export const GetNotifications = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, appId: string | undefined, count: number | undefined = 50, cursor: unknown | undefined ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient .get>( `/notify/list?${stringifyToQueryParams({ @@ -42,18 +42,18 @@ export interface NotificationCountsByAppId { unreadCounts: Record; } -export const getNotificationCountsByAppId = async (dotYouClient: DotYouClient) => { - const axiosClient = dotYouClient.createAxiosClient(); +export const getNotificationCountsByAppId = async (odinClient: OdinClient) => { + const axiosClient = odinClient.createAxiosClient(); return await axiosClient .get(`/notify/list/counts-by-appid`) .then((res) => res.data); }; export const MarkNotificationsAsRead = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, notificationIds: string[] ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.put(`/notify/list`, { updates: notificationIds.map((id) => ({ id, @@ -63,29 +63,29 @@ export const MarkNotificationsAsRead = async ( }; export const markAllNotificationsOfAppAsRead = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, appId: string ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.post(`/notify/list/mark-read-by-appid`, appId).then((res) => res.data); }; export const markAllNotificationsOfAppAndTypeIdAsRead = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, appId: string, typeId: string ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient .post(`/notify/list/mark-read-by-appid-and-typeid`, { appId, typeId }) .then((res) => res.data); }; export const DeleteNotifications = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, notificationIds: string[] ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.delete(`/notify/list`, { data: { idList: notificationIds, @@ -94,10 +94,10 @@ export const DeleteNotifications = async ( }; export const SendNotification = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, notification: PushNotificationOptions, axiosConfig?: AxiosRequestConfig ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.post(`/notify/push/push`, notification, axiosConfig); }; diff --git a/packages/libs/js-lib/src/core/DotYouClient.test.ts b/packages/libs/js-lib/src/core/OdinClient.test.ts similarity index 73% rename from packages/libs/js-lib/src/core/DotYouClient.test.ts rename to packages/libs/js-lib/src/core/OdinClient.test.ts index 3daa28ed8..43a3dbc70 100644 --- a/packages/libs/js-lib/src/core/DotYouClient.test.ts +++ b/packages/libs/js-lib/src/core/OdinClient.test.ts @@ -1,41 +1,41 @@ import { expect, test } from 'vitest'; -import { DotYouClient, ApiType } from './DotYouClient'; +import { OdinClient, ApiType } from './OdinClient'; import { AxiosHeaders, InternalAxiosRequestConfig } from 'axios'; import { base64ToUint8Array, byteArrayToString, cbcDecrypt } from '../helpers/helpers'; -test('App DotYouClient', () => { - const dotYouClient = new DotYouClient({ +test('App OdinClient', () => { + const odinClient = new OdinClient({ api: ApiType.App, hostIdentity: 'example.com', }); - expect(dotYouClient).toBeInstanceOf(DotYouClient); - expect(dotYouClient.getEndpoint()).toEqual('https://example.com/api/apps/v1'); - expect(dotYouClient.getRoot()).toEqual('https://example.com'); - expect(dotYouClient.getType()).toEqual(ApiType.App); + expect(odinClient).toBeInstanceOf(OdinClient); + expect(odinClient.getEndpoint()).toEqual('https://example.com/api/apps/v1'); + expect(odinClient.getRoot()).toEqual('https://example.com'); + expect(odinClient.getType()).toEqual(ApiType.App); }); -test('Guest DotYouClient', () => { - const dotYouClient = new DotYouClient({ +test('Guest OdinClient', () => { + const odinClient = new OdinClient({ api: ApiType.Guest, hostIdentity: 'example.com', }); - expect(dotYouClient).toBeInstanceOf(DotYouClient); - expect(dotYouClient.getRoot()).toEqual('https://example.com'); - expect(dotYouClient.getType()).toEqual(ApiType.Guest); - expect(dotYouClient.getEndpoint()).toEqual('https://example.com/api/guest/v1'); + expect(odinClient).toBeInstanceOf(OdinClient); + expect(odinClient.getRoot()).toEqual('https://example.com'); + expect(odinClient.getType()).toEqual(ApiType.Guest); + expect(odinClient.getEndpoint()).toEqual('https://example.com/api/guest/v1'); }); -test('DotYouClient GET request interceptor', async () => { +test('OdinClient GET request interceptor', async () => { const fixedSharedSecret = new Uint8Array(16).fill(1); - const dotYouClient = new DotYouClient({ + const odinClient = new OdinClient({ api: ApiType.App, hostIdentity: 'example.com', sharedSecret: fixedSharedSecret, }); - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); // eslint-disable-next-line @typescript-eslint/no-explicit-any const internalAxiosHandlers = (axiosClient.interceptors.request as any)?.handlers; @@ -53,15 +53,15 @@ test('DotYouClient GET request interceptor', async () => { ); }); -test('DotYouClient POST request interceptor', async () => { +test('OdinClient POST request interceptor', async () => { const fixedSharedSecret = new Uint8Array(16).fill(1); - const dotYouClient = new DotYouClient({ + const odinClient = new OdinClient({ api: ApiType.App, hostIdentity: 'example.com', sharedSecret: fixedSharedSecret, }); - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); // eslint-disable-next-line @typescript-eslint/no-explicit-any const internalAxiosHandlers = (axiosClient.interceptors.request as any)?.handlers; diff --git a/packages/libs/js-lib/src/core/DotYouClient.ts b/packages/libs/js-lib/src/core/OdinClient.ts similarity index 90% rename from packages/libs/js-lib/src/core/DotYouClient.ts rename to packages/libs/js-lib/src/core/OdinClient.ts index 352a89c15..489275b4b 100644 --- a/packages/libs/js-lib/src/core/DotYouClient.ts +++ b/packages/libs/js-lib/src/core/OdinClient.ts @@ -26,7 +26,7 @@ interface createAxiosClientOptions { systemFileType?: SystemFileType; } -export class BaseDotYouClient { +export class BaseOdinClient { private _options: BaseProviderOptions; constructor(options: BaseProviderOptions) { @@ -181,24 +181,23 @@ export interface ProviderOptions extends BaseProviderOptions { api: ApiType.App | ApiType.Guest; } -export class DotYouClient extends BaseDotYouClient { +export class OdinClient extends BaseOdinClient { constructor(options: ProviderOptions) { super({ ...options }); } } -export const assertIfDotYouClientIsOwner = (dotYouClient: DotYouClient) => { - if (dotYouClient.getType() !== ApiType.Owner) { +export const assertIfOdinClientIsOwner = (odinClient: OdinClient) => { + if (odinClient.getType() !== ApiType.Owner) { throw new Error( - `This method is not available for ${ - dotYouClient.getType() === ApiType.App ? 'app' : 'youauth' + `This method is not available for ${odinClient.getType() === ApiType.App ? 'app' : 'youauth' } clients` ); } }; -export const assertIfDotYouClientIsOwnerOrApp = (dotYouClient: DotYouClient) => { - if (dotYouClient.getType() !== ApiType.Owner && dotYouClient.getType() !== ApiType.App) { +export const assertIfOdinClientIsOwnerOrApp = (odinClient: OdinClient) => { + if (odinClient.getType() !== ApiType.Owner && odinClient.getType() !== ApiType.App) { throw new Error(`This method is not available for youauth clients`); } }; diff --git a/packages/libs/js-lib/src/core/ReactionData/GroupReactionService.ts b/packages/libs/js-lib/src/core/ReactionData/GroupReactionService.ts index 99caab0cc..82bebcd7d 100644 --- a/packages/libs/js-lib/src/core/ReactionData/GroupReactionService.ts +++ b/packages/libs/js-lib/src/core/ReactionData/GroupReactionService.ts @@ -1,5 +1,5 @@ import { stringifyToQueryParams, tryJsonParse } from '../../helpers/DataUtil'; -import { DotYouClient } from '../DotYouClient'; +import { OdinClient } from '../OdinClient'; import { EmojiReaction, TargetDrive } from '../DriveData/File/DriveFileTypes'; export interface GroupEmojiReaction { @@ -19,7 +19,7 @@ interface ServerReactionsListWithCursor { const emojiRoot = '/drive/files/group/reactions'; export const getGroupReactions = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, context: { target: { globalTransitId: string; @@ -29,7 +29,7 @@ export const getGroupReactions = async ( pageSize = 15, cursor?: string ): Promise<{ reactions: EmojiReaction[]; cursor: string } | undefined> => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const data = { 'file.targetDrive.alias.value': context.target.targetDrive.alias, @@ -52,17 +52,17 @@ export const getGroupReactions = async ( cursor: response.data.cursor, }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const uploadGroupReaction = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, messageGlobalTransitId: string, reaction: string, recipients: string[] ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.post(emojiRoot, { transitOptions: { @@ -77,7 +77,7 @@ export const uploadGroupReaction = async ( }; export const deleteGroupReaction = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, recipients: string[], emoji: EmojiReaction, @@ -87,7 +87,7 @@ export const deleteGroupReaction = async ( targetDrive: TargetDrive; } ) => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); return await axiosClient.delete(emojiRoot, { data: { diff --git a/packages/libs/js-lib/src/core/ReactionData/ReactionService.ts b/packages/libs/js-lib/src/core/ReactionData/ReactionService.ts index 36a074f39..14063d491 100644 --- a/packages/libs/js-lib/src/core/ReactionData/ReactionService.ts +++ b/packages/libs/js-lib/src/core/ReactionData/ReactionService.ts @@ -1,6 +1,6 @@ import { tryJsonParse } from '../../helpers/DataUtil'; -import { DotYouClient } from '../DotYouClient'; +import { OdinClient } from '../OdinClient'; import { EmojiReaction, FileIdFileIdentifier, @@ -19,13 +19,13 @@ export interface ServerReactionsListWithCursor { } export const uploadReaction = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, emoji: string, odinId: string | undefined, file: FileIdFileIdentifier | GlobalTransitIdFileIdentifier ): Promise => { - const isLocal = odinId === dotYouClient.getHostIdentity(); - const client = dotYouClient.createAxiosClient(); + const isLocal = odinId === odinClient.getHostIdentity(); + const client = odinClient.createAxiosClient(); const data = { reaction: JSON.stringify({ emoji: emoji }), @@ -39,24 +39,24 @@ export const uploadReaction = async ( .then((response) => { return { ...response.data, status: response.data?.status?.toLowerCase() }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); } else { const url = emojiRootTransit + '/add'; return client .post(url, { odinId: odinId, request: data }) .then((response) => ({ ...response.data, status: response.data?.status?.toLowerCase() })) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); } }; export const deleteReaction = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, emoji: EmojiReaction, odinId: string | undefined, file: FileIdFileIdentifier | GlobalTransitIdFileIdentifier ): Promise => { - const isLocal = odinId === dotYouClient.getHostIdentity(); - const client = dotYouClient.createAxiosClient(); + const isLocal = odinId === odinClient.getHostIdentity(); + const client = odinClient.createAxiosClient(); const data = { odinId: emoji.authorOdinId, @@ -71,7 +71,7 @@ export const deleteReaction = async ( .then((response) => { return { ...response.data, status: response.data?.status?.toLowerCase() }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); } else { const url = emojiRootTransit + '/delete'; return client @@ -79,19 +79,19 @@ export const deleteReaction = async ( .then((response) => { return { ...response.data, status: response.data?.status?.toLowerCase() }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); } }; export const getReactions = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string | undefined, file: FileIdFileIdentifier | GlobalTransitIdFileIdentifier, pageSize = 15, cursor?: string ): Promise<{ reactions: EmojiReaction[]; cursor: string } | undefined> => { - const isLocal = odinId === dotYouClient.getHostIdentity(); - const client = dotYouClient.createAxiosClient(); + const isLocal = odinId === odinClient.getHostIdentity(); + const client = odinClient.createAxiosClient(); const data = { file: file, @@ -114,7 +114,7 @@ export const getReactions = async ( cursor: response.data.cursor, }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); } else { const url = emojiRootTransit + '/list'; return client @@ -130,6 +130,6 @@ export const getReactions = async ( cursor: response.data.cursor, }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); } }; diff --git a/packages/libs/js-lib/src/core/SecurityData/SecurityProvider.ts b/packages/libs/js-lib/src/core/SecurityData/SecurityProvider.ts index d1b2d463b..30b4e5ca6 100644 --- a/packages/libs/js-lib/src/core/SecurityData/SecurityProvider.ts +++ b/packages/libs/js-lib/src/core/SecurityData/SecurityProvider.ts @@ -1,9 +1,9 @@ import { getDrivePermissionFromString } from '../../helpers/PermissionHelpers'; -import { ApiType, DotYouClient } from '../DotYouClient'; +import { ApiType, OdinClient } from '../OdinClient'; import { SecurityContex } from './SecurityTypes'; -export const getSecurityContext = async (dotYouClient: DotYouClient): Promise => { - if (dotYouClient.getType() === ApiType.Owner) { +export const getSecurityContext = async (odinClient: OdinClient): Promise => { + if (odinClient.getType() === ApiType.Owner) { return { caller: { odinId: undefined, @@ -13,7 +13,7 @@ export const getSecurityContext = async (dotYouClient: DotYouClient): Promise('/security/context') @@ -43,10 +43,10 @@ export const getSecurityContext = async (dotYouClient: DotYouClient): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client .post(`/transit/query/security/context`, { odinId }) diff --git a/packages/libs/js-lib/src/core/WebsocketData/WebsocketProvider.ts b/packages/libs/js-lib/src/core/WebsocketData/WebsocketProvider.ts index 6ece7184e..7705a2fbc 100644 --- a/packages/libs/js-lib/src/core/WebsocketData/WebsocketProvider.ts +++ b/packages/libs/js-lib/src/core/WebsocketData/WebsocketProvider.ts @@ -1,5 +1,5 @@ import { hasDebugFlag, jsonStringify64, drivesEqual } from '../../helpers/helpers'; -import { ApiType, DotYouClient } from '../DotYouClient'; +import { ApiType, OdinClient } from '../OdinClient'; import { encryptData, getRandomIv } from '../InterceptionEncryptionUtil'; import { TargetDrive } from '../core'; import { @@ -29,7 +29,7 @@ let reconnectCounter = 0; let reconnectPromise: Promise | undefined = undefined; const subscribers: { - handler: (dotYouClient: DotYouClient, data: TypedConnectionNotification) => void; + handler: (odinClient: OdinClient, data: TypedConnectionNotification) => void; onDisconnect?: () => void; onReconnect?: () => void; }[] = []; @@ -37,13 +37,13 @@ const subscribers: { const isDebug = hasDebugFlag(); const ConnectSocket = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, drives: TargetDrive[], args?: unknown // Extra parameters to pass to WebSocket constructor; Only applicable for React Native...; ) => { if (webSocketClient) throw new Error('Socket already connected'); - const apiType = dotYouClient.getType(); + const apiType = odinClient.getType(); // We're already connecting, return the existing promise if (connectPromise) return connectPromise; @@ -53,7 +53,7 @@ const ConnectSocket = async ( if (apiType === ApiType.App) { // we need to preauth before we can connect - await dotYouClient + await odinClient .createAxiosClient() .post('/notify/preauth', undefined, { validateStatus: () => true, @@ -64,9 +64,8 @@ const ConnectSocket = async ( }); } - const url = `wss://${dotYouClient.getRoot().split('//')[1]}/api/${ - apiType === ApiType.Owner ? 'owner' : 'apps' - }/v1/notify/ws`; + const url = `wss://${odinClient.getRoot().split('//')[1]}/api/${apiType === ApiType.Owner ? 'owner' : 'apps' + }/v1/notify/ws`; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -94,7 +93,7 @@ const ConnectSocket = async ( if (lastPong && Date.now() - lastPong > PING_INTERVAL * 2) { // 2 ping intervals have passed without a pong, reconnect if (isDebug) console.debug(`[WebsocketProvider] Ping timeout`); - ReconnectSocket(dotYouClient, drives, args); + ReconnectSocket(odinClient, drives, args); return; } Notify({ @@ -127,7 +126,7 @@ const ConnectSocket = async ( const parsedNotification = ParseRawClientNotification(notification); subscribers.map( - async (subscriber) => await subscriber.handler(dotYouClient, parsedNotification) + async (subscriber) => await subscriber.handler(odinClient, parsedNotification) ); }; @@ -144,7 +143,7 @@ const ConnectSocket = async ( } } - ReconnectSocket(dotYouClient, drives, args); + ReconnectSocket(odinClient, drives, args); }; }); @@ -152,7 +151,7 @@ const ConnectSocket = async ( }; const ReconnectSocket = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, drives: TargetDrive[], args?: unknown // Extra parameters to pass to WebSocket constructor; Only applicable for React Native...; TODO: Remove this ) => { @@ -174,12 +173,12 @@ const ReconnectSocket = async ( if (isDebug) console.debug('[WebsocketProvider] Reconnecting - Delayed reconnect'); try { - await ConnectSocket(dotYouClient, drives, args); + await ConnectSocket(odinClient, drives, args); } catch (e) { console.error('[WebsocketProvider] Reconnect failed', e); reject(); - ReconnectSocket(dotYouClient, drives, args); + ReconnectSocket(odinClient, drives, args); return; } subscribers.map((subscriber) => subscriber.onReconnect && subscriber.onReconnect()); @@ -208,16 +207,16 @@ const DisconnectSocket = async () => { }; export const Subscribe = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, drives: TargetDrive[], - handler: (dotYouClient: DotYouClient, data: TypedConnectionNotification) => void, + handler: (odinClient: OdinClient, data: TypedConnectionNotification) => void, onDisconnect?: () => void, onReconnect?: () => void, args?: unknown, // Extra parameters to pass to WebSocket constructor; Only applicable for React Native...; TODO: Remove this, refId?: string ): Promise => { - const apiType = dotYouClient.getType(); - const sharedSecret = dotYouClient.getSharedSecret(); + const apiType = odinClient.getType(); + const sharedSecret = odinClient.getSharedSecret(); if ((apiType !== ApiType.Owner && apiType !== ApiType.App) || !sharedSecret) { throw new Error(`[WebsocketProviderOverPeer] is not supported for ApiType: ${apiType}`); } @@ -238,11 +237,11 @@ export const Subscribe = async ( // Already connected, no need to initiate a new connection if (webSocketClient) return Promise.resolve(); - return ConnectSocket(dotYouClient, drives, args); + return ConnectSocket(odinClient, drives, args); }; export const Unsubscribe = ( - handler: (dotYouClient: DotYouClient, data: TypedConnectionNotification) => void + handler: (odinClient: OdinClient, data: TypedConnectionNotification) => void ) => { const index = subscribers.findIndex((subscriber) => subscriber.handler === handler); if (index !== -1) { diff --git a/packages/libs/js-lib/src/core/core.ts b/packages/libs/js-lib/src/core/core.ts index dd6700de6..e7dcfa2d7 100644 --- a/packages/libs/js-lib/src/core/core.ts +++ b/packages/libs/js-lib/src/core/core.ts @@ -1,6 +1,6 @@ -// DotYouClient +// OdinClient export * from './constants'; -export * from './DotYouClient'; +export * from './OdinClient'; import { encryptUrl, encryptData, buildIvFromQueryString } from './InterceptionEncryptionUtil'; export type { SharedSecretEncryptedPayload } from './InterceptionEncryptionUtil'; diff --git a/packages/libs/js-lib/src/media/ImageProvider.ts b/packages/libs/js-lib/src/media/ImageProvider.ts index 673909cdd..1df8a620f 100644 --- a/packages/libs/js-lib/src/media/ImageProvider.ts +++ b/packages/libs/js-lib/src/media/ImageProvider.ts @@ -1,6 +1,6 @@ import { tinyThumbSize } from './Thumbs/ThumbnailProvider'; import { getLargestThumbOfPayload } from '../helpers/DataUtil'; -import { DotYouClient } from '../core/DotYouClient'; +import { OdinClient } from '../core/OdinClient'; import { TargetDrive, getFileHeader, @@ -14,13 +14,13 @@ import { ImageMetadata, ThumbnailMeta } from './MediaTypes'; import { getDecryptedMediaUrl } from './MediaProvider'; export const getDecryptedThumbnailMeta = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, fileKey: string, systemFileType: SystemFileType | undefined ): Promise => { - return getFileHeader(dotYouClient, targetDrive, fileId, { systemFileType }).then( + return getFileHeader(odinClient, targetDrive, fileId, { systemFileType }).then( async (header) => { if (!header) return; @@ -40,7 +40,7 @@ export const getDecryptedThumbnailMeta = ( !previewThumbnail ) { url = await getDecryptedImageUrl( - dotYouClient, + odinClient, targetDrive, fileId, fileKey, @@ -78,7 +78,7 @@ export const getDecryptedThumbnailMeta = ( // Retrieves an image/thumb, decrypts, then returns a url to be passed to an image control export const getDecryptedImageUrl = getDecryptedMediaUrl; export const getDecryptedImageData = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, key: string, @@ -94,7 +94,7 @@ export const getDecryptedImageData = async ( if (size) { try { const thumbBytes = await getThumbBytes( - dotYouClient, + odinClient, targetDrive, fileId, key, @@ -108,7 +108,7 @@ export const getDecryptedImageData = async ( } } - const payload = await getPayloadBytes(dotYouClient, targetDrive, fileId, key, { + const payload = await getPayloadBytes(odinClient, targetDrive, fileId, key, { systemFileType, lastModified, }); @@ -120,12 +120,12 @@ export const getDecryptedImageData = async ( }; export const getDecryptedImageMetadata = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, systemFileType?: SystemFileType ): Promise => { - const fileHeader = await getFileHeader(dotYouClient, targetDrive, fileId, { + const fileHeader = await getFileHeader(odinClient, targetDrive, fileId, { systemFileType, }); if (!fileHeader) return null; diff --git a/packages/libs/js-lib/src/media/Link/LinkPreviewProvider.ts b/packages/libs/js-lib/src/media/Link/LinkPreviewProvider.ts index 7550543bc..204a93e67 100644 --- a/packages/libs/js-lib/src/media/Link/LinkPreviewProvider.ts +++ b/packages/libs/js-lib/src/media/Link/LinkPreviewProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; interface LinkPreviewFromServer { title: string; @@ -28,10 +28,10 @@ export interface LinkPreviewDescriptor { const _internalPreviewPromiseCache = new Map>(); export const getLinkPreview = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, url: string ): Promise => { - const axiosClient = dotYouClient.createAxiosClient(); + const axiosClient = odinClient.createAxiosClient(); const standardizedUrl = url.startsWith('http') ? url : `https://${url}`; const cacheKey = standardizedUrl; diff --git a/packages/libs/js-lib/src/media/MediaProvider.ts b/packages/libs/js-lib/src/media/MediaProvider.ts index 771e67c6d..877877ce4 100644 --- a/packages/libs/js-lib/src/media/MediaProvider.ts +++ b/packages/libs/js-lib/src/media/MediaProvider.ts @@ -1,5 +1,5 @@ import { stringifyToQueryParams, uint8ArrayToBase64 } from '../helpers/DataUtil'; -import { ApiType, DotYouClient } from '../core/DotYouClient'; +import { ApiType, OdinClient } from '../core/OdinClient'; import { TargetDrive, SystemFileType, @@ -13,7 +13,7 @@ import { * @param isProbablyEncrypted {boolean} Hints wether or not we can expect the image to be encrypted, when true no direct url is returned instead the contents are fetched and decrypted depending on their metadata; This allows to skip a probably unneeded header call */ export const getDecryptedMediaUrl = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, fileKey: string, @@ -29,7 +29,7 @@ export const getDecryptedMediaUrl = async ( const { size, systemFileType, fileSizeLimit } = options || {}; const getDirectImageUrl = () => getAnonymousDirectImageUrl( - dotYouClient.getHostIdentity(), + odinClient.getHostIdentity(), targetDrive, fileId, fileKey, @@ -38,7 +38,7 @@ export const getDecryptedMediaUrl = async ( lastModified ); - const ss = dotYouClient.getSharedSecret(); + const ss = odinClient.getSharedSecret(); // If there is no shared secret, we wouldn't even be able to decrypt if (!ss) return await getDirectImageUrl(); @@ -46,7 +46,7 @@ export const getDecryptedMediaUrl = async ( // We try and avoid the payload call as much as possible, so if the payload is probabaly not encrypted, // we first get confirmation from the header and return a direct url if possible if (!isProbablyEncrypted) { - const meta = await getFileHeader(dotYouClient, targetDrive, fileId, { systemFileType }); + const meta = await getFileHeader(odinClient, targetDrive, fileId, { systemFileType }); if (!meta?.fileMetadata.isEncrypted) return await getDirectImageUrl(); } @@ -56,7 +56,7 @@ export const getDecryptedMediaUrl = async ( if (size) { try { const thumbBytes = await getThumbBytes( - dotYouClient, + odinClient, targetDrive, fileId, fileKey, @@ -70,7 +70,7 @@ export const getDecryptedMediaUrl = async ( } } - return await getPayloadBytes(dotYouClient, targetDrive, fileId, fileKey, { + return await getPayloadBytes(odinClient, targetDrive, fileId, fileKey, { systemFileType, chunkStart: fileSizeLimit ? 0 : undefined, chunkEnd: fileSizeLimit, @@ -98,18 +98,17 @@ export const getAnonymousDirectImageUrl = ( systemFileType?: SystemFileType, lastModified?: number ) => { - const dotYouClient = new DotYouClient({ hostIdentity: identity, api: ApiType.Guest }); - return `${dotYouClient.getEndpoint()}/drive/files/${ - size ? 'thumb' : 'payload' - }?${stringifyToQueryParams({ - alias: targetDrive.alias, - type: targetDrive.type, - fileId: fileId, - ...(size - ? { payloadKey: fileKey, width: size.pixelWidth, height: size.pixelHeight } - : { key: fileKey }), - lastModified: lastModified, - xfst: systemFileType || 'Standard', - iac: true, // iac is a flag that tells the identity to ignore any auth cookies - })}`; + const odinClient = new OdinClient({ hostIdentity: identity, api: ApiType.Guest }); + return `${odinClient.getEndpoint()}/drive/files/${size ? 'thumb' : 'payload' + }?${stringifyToQueryParams({ + alias: targetDrive.alias, + type: targetDrive.type, + fileId: fileId, + ...(size + ? { payloadKey: fileKey, width: size.pixelWidth, height: size.pixelHeight } + : { key: fileKey }), + lastModified: lastModified, + xfst: systemFileType || 'Standard', + iac: true, // iac is a flag that tells the identity to ignore any auth cookies + })}`; }; diff --git a/packages/libs/js-lib/src/media/VideoProvider.ts b/packages/libs/js-lib/src/media/VideoProvider.ts index 44b043968..6067c878b 100644 --- a/packages/libs/js-lib/src/media/VideoProvider.ts +++ b/packages/libs/js-lib/src/media/VideoProvider.ts @@ -1,11 +1,11 @@ -import { DotYouClient } from '../core/DotYouClient'; +import { OdinClient } from '../core/OdinClient'; import { TargetDrive, SystemFileType, getPayloadBytes } from '../core/core'; import { getDecryptedMediaUrl } from './MediaProvider'; export type VideoContentType = 'video/mp4'; export const getDecryptedVideoChunk = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileId: string, _globalTransitId: string | undefined, // Kept for compatibility with ...OverPeer signature @@ -14,7 +14,7 @@ export const getDecryptedVideoChunk = async ( chunkEnd?: number, systemFileType?: SystemFileType ): Promise => { - const payload = await getPayloadBytes(dotYouClient, targetDrive, fileId, key, { + const payload = await getPayloadBytes(odinClient, targetDrive, fileId, key, { systemFileType, chunkStart, chunkEnd, diff --git a/packages/libs/js-lib/src/network/circle/CircleDomainMembershipManager.ts b/packages/libs/js-lib/src/network/circle/CircleDomainMembershipManager.ts index 84a232227..8ee1f359a 100644 --- a/packages/libs/js-lib/src/network/circle/CircleDomainMembershipManager.ts +++ b/packages/libs/js-lib/src/network/circle/CircleDomainMembershipManager.ts @@ -1,16 +1,16 @@ -import { ApiType, DotYouClient } from '../../core/DotYouClient'; +import { ApiType, OdinClient } from '../../core/OdinClient'; const root = '/youauthdomain'; export const removeDomainFromCircle = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, membershipGrant: { domain: string; circleId: string } ) => { - if (dotYouClient.getType() !== ApiType.Owner) { + if (odinClient.getType() !== ApiType.Owner) { throw new Error('Only owner can get domains'); } - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/circles/revoke'; return client @@ -18,18 +18,18 @@ export const removeDomainFromCircle = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const addDomainToCircle = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, membershipGrant: { domain: string; circleId: string } ) => { - if (dotYouClient.getType() !== ApiType.Owner) { + if (odinClient.getType() !== ApiType.Owner) { throw new Error('Only owner can get domains'); } - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/circles/add'; return client @@ -37,5 +37,5 @@ export const addDomainToCircle = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; diff --git a/packages/libs/js-lib/src/network/circle/CircleMembershipManager.ts b/packages/libs/js-lib/src/network/circle/CircleMembershipManager.ts index eb8438b4a..2045d0e0e 100644 --- a/packages/libs/js-lib/src/network/circle/CircleMembershipManager.ts +++ b/packages/libs/js-lib/src/network/circle/CircleMembershipManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { CircleGrant } from './CircleDataTypes'; const connectionsRoot = '/circles/connections/circles'; @@ -6,10 +6,10 @@ const membershipRoot = '/circles/membership'; //Handles management of Circles export const addMemberToCircle = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, membershipGrant: { odinId: string; circleId: string } ) => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = connectionsRoot + '/add'; return client @@ -17,14 +17,14 @@ export const addMemberToCircle = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const removeMemberFromCircle = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, membershipGrant: { odinId: string; circleId: string } ) => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = connectionsRoot + '/revoke'; return client @@ -32,7 +32,7 @@ export const removeMemberFromCircle = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export interface Membership { @@ -42,17 +42,17 @@ export interface Membership { } export const fetchMembersOfCircle = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, circleId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = membershipRoot + '/list'; return client .post(url, { circleId: circleId }) .then((response) => response.data) .catch((err) => { - dotYouClient.handleErrorResponse(err); + odinClient.handleErrorResponse(err); return []; }); }; diff --git a/packages/libs/js-lib/src/network/circle/CircleProvider.ts b/packages/libs/js-lib/src/network/circle/CircleProvider.ts index 0d8bd0afa..c086e42d9 100644 --- a/packages/libs/js-lib/src/network/circle/CircleProvider.ts +++ b/packages/libs/js-lib/src/network/circle/CircleProvider.ts @@ -1,5 +1,5 @@ import { TargetDrive } from '../../core/core'; -import { ApiType, DotYouClient } from '../../core/DotYouClient'; +import { ApiType, OdinClient } from '../../core/OdinClient'; import { getDrivePermissionFromString, getNewId, @@ -22,10 +22,10 @@ interface ServerCircleUpdateRequest extends Omit { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/update'; const data: ServerCircleUpdateRequest = { @@ -42,14 +42,14 @@ export const updateCircleDefinition = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const createCircleDefinition = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, circleDefinition: CircleDefinition ) => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/create'; const data: ServerCircleUpdateRequest = { @@ -70,19 +70,19 @@ export const createCircleDefinition = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const getCircles = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, excludeSystemCircles: boolean ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/list' + - ((dotYouClient.getType() === ApiType.Owner || dotYouClient.getType() === ApiType.App) && - !excludeSystemCircles + ((odinClient.getType() === ApiType.Owner || odinClient.getType() === ApiType.App) && + !excludeSystemCircles ? '?includeSystemCircle=true' : ''); @@ -104,10 +104,10 @@ export const getCircles = async ( }; export const getCircle = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, circleId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/get'; const circleDef = await client.post(url, circleId).then((response) => { @@ -127,8 +127,8 @@ export const getCircle = async ( } as CircleDefinition; }; -export const disableCircle = async (dotYouClient: DotYouClient, circleId: string) => { - const client = dotYouClient.createAxiosClient(); +export const disableCircle = async (odinClient: OdinClient, circleId: string) => { + const client = odinClient.createAxiosClient(); const url = root + '/disable'; return client @@ -136,11 +136,11 @@ export const disableCircle = async (dotYouClient: DotYouClient, circleId: string .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; -export const enableCircle = async (dotYouClient: DotYouClient, circleId: string) => { - const client = dotYouClient.createAxiosClient(); +export const enableCircle = async (odinClient: OdinClient, circleId: string) => { + const client = odinClient.createAxiosClient(); const url = root + '/enable'; return client @@ -148,11 +148,11 @@ export const enableCircle = async (dotYouClient: DotYouClient, circleId: string) .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; -export const removeCircle = async (dotYouClient: DotYouClient, circleId: string) => { - const client = dotYouClient.createAxiosClient(); +export const removeCircle = async (odinClient: OdinClient, circleId: string) => { + const client = odinClient.createAxiosClient(); const url = root + '/delete'; return client @@ -160,5 +160,5 @@ export const removeCircle = async (dotYouClient: DotYouClient, circleId: string) .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; diff --git a/packages/libs/js-lib/src/network/connection/ConnectionManager.ts b/packages/libs/js-lib/src/network/connection/ConnectionManager.ts index 8e7e1b802..97b789cab 100644 --- a/packages/libs/js-lib/src/network/connection/ConnectionManager.ts +++ b/packages/libs/js-lib/src/network/connection/ConnectionManager.ts @@ -1,9 +1,9 @@ import { ApiType, - DotYouClient, - assertIfDotYouClientIsOwner, - assertIfDotYouClientIsOwnerOrApp, -} from '../../core/DotYouClient'; + OdinClient, + assertIfOdinClientIsOwner, + assertIfOdinClientIsOwnerOrApp, +} from '../../core/OdinClient'; import { NumberCursoredResult, PagedResult, @@ -20,10 +20,10 @@ import { const root = '/circles/connections'; export const disconnectFromContact = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/disconnect'; const data: OdinIdRequest = { odinId: odinId }; return client @@ -31,20 +31,20 @@ export const disconnectFromContact = ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const getConnections = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, data: { count: number; cursor?: unknown; } ): Promise> => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/connected?' + stringifyToQueryParams(data); - if (dotYouClient.getType() === ApiType.Owner) { + if (odinClient.getType() === ApiType.Owner) { // Post needed return client.post(url).then((response) => { return response.data; @@ -57,27 +57,27 @@ export const getConnections = async ( }; export const getBlockedConnections = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, params: PagingOptions ): Promise> => { - assertIfDotYouClientIsOwner(dotYouClient); - const client = dotYouClient.createAxiosClient(); + assertIfOdinClientIsOwner(odinClient); + const client = odinClient.createAxiosClient(); const url = root + '/blocked?' + stringifyToQueryParams(params); return client .get(url) .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const getConnectionInfo = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { - assertIfDotYouClientIsOwnerOrApp(dotYouClient); + assertIfOdinClientIsOwnerOrApp(odinClient); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + '/status'; const data: OdinIdRequest = { odinId: odinId }; @@ -92,5 +92,5 @@ export const getConnectionInfo = ( originalContactData: undefined, }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; diff --git a/packages/libs/js-lib/src/network/connection/ConnectionRequestManager.ts b/packages/libs/js-lib/src/network/connection/ConnectionRequestManager.ts index 26789f9db..b306ffc38 100644 --- a/packages/libs/js-lib/src/network/connection/ConnectionRequestManager.ts +++ b/packages/libs/js-lib/src/network/connection/ConnectionRequestManager.ts @@ -6,7 +6,7 @@ OdinIdRequest, ConnectionRequest, } from '../circle/CircleDataTypes'; -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { PagingOptions, PagedResult } from '../../core/core'; import { stringifyToQueryParams } from '../../helpers/helpers'; import { getConnectionInfo } from './ConnectionManager'; @@ -17,10 +17,10 @@ const SentPathRoot: string = Root + '/sent'; const PendingPathRoot: string = Root + '/pending'; export const getPendingRequests = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, params: PagingOptions ): Promise> => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = PendingPathRoot + '/list?' + stringifyToQueryParams(params); return client @@ -28,14 +28,14 @@ export const getPendingRequests = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const getPendingRequest = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = PendingPathRoot + '/single'; const data: OdinIdRequest = { odinId: odinId }; return client @@ -47,10 +47,10 @@ export const getPendingRequest = async ( }; export const getSentRequests = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, params: PagingOptions ): Promise> => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = SentPathRoot + '/list?' + stringifyToQueryParams(params); return client @@ -58,14 +58,14 @@ export const getSentRequests = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const getSentRequest = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = SentPathRoot + '/single'; const data: OdinIdRequest = { odinId: odinId }; @@ -79,11 +79,11 @@ export const getSentRequest = async ( }; export const acceptConnectionRequest = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, circleIds?: string[] ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = PendingPathRoot + '/accept/'; const header: AcceptRequestHeader = { @@ -97,14 +97,14 @@ export const acceptConnectionRequest = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const deletePendingRequest = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = PendingPathRoot + '/delete'; const data: OdinIdRequest = { odinId: odinId }; @@ -113,14 +113,14 @@ export const deletePendingRequest = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const deleteSentRequest = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = SentPathRoot + '/delete'; const data: OdinIdRequest = { odinId: odinId }; @@ -129,11 +129,11 @@ export const deleteSentRequest = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const sendRequest = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, message: string, circleIds: string[] @@ -145,17 +145,17 @@ export const sendRequest = async ( circleIds: circleIds, }; - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client .post(url, data) .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; -export const blockOdinId = async (dotYouClient: DotYouClient, odinId: string) => { - const client = dotYouClient.createAxiosClient(); +export const blockOdinId = async (odinClient: OdinClient, odinId: string) => { + const client = odinClient.createAxiosClient(); const url = '/circles/connections/block'; const data: OdinIdRequest = { odinId: odinId }; @@ -165,13 +165,13 @@ export const blockOdinId = async (dotYouClient: DotYouClient, odinId: string) => return response.data; }) .catch((err) => { - dotYouClient.handleErrorResponse(err); + odinClient.handleErrorResponse(err); return false; }); }; -export const unblockOdinId = async (dotYouClient: DotYouClient, odinId: string) => { - const client = dotYouClient.createAxiosClient(); +export const unblockOdinId = async (odinClient: OdinClient, odinId: string) => { + const client = odinClient.createAxiosClient(); const url = '/circles/connections/unblock'; const data: OdinIdRequest = { odinId: odinId }; @@ -181,24 +181,24 @@ export const unblockOdinId = async (dotYouClient: DotYouClient, odinId: string) return response.data; }) .catch((err) => { - dotYouClient.handleErrorResponse(err); + odinClient.handleErrorResponse(err); return false; }); }; export const getDetailedConnectionInfo = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { if (!odinId) return; - const connectionInfo = await getConnectionInfo(dotYouClient, odinId); + const connectionInfo = await getConnectionInfo(odinClient, odinId); if (connectionInfo && connectionInfo.status.toLowerCase() !== 'none') return connectionInfo; - const pendingRequest = await getPendingRequest(dotYouClient, odinId); + const pendingRequest = await getPendingRequest(odinClient, odinId); if (pendingRequest) return { ...pendingRequest }; - const sentRequest = await getSentRequest(dotYouClient, odinId); + const sentRequest = await getSentRequest(odinClient, odinId); if (sentRequest) return { ...sentRequest }; return undefined; diff --git a/packages/libs/js-lib/src/network/connection/IntroductionManager.ts b/packages/libs/js-lib/src/network/connection/IntroductionManager.ts index de7d96a37..742f3de76 100644 --- a/packages/libs/js-lib/src/network/connection/IntroductionManager.ts +++ b/packages/libs/js-lib/src/network/connection/IntroductionManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; export interface IntroductionGroup { message: string; @@ -10,10 +10,10 @@ export interface IntroductionResult { } export const sendIntroduction = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, introduction: IntroductionGroup ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); if (introduction.recipients.length < 2) { return null; @@ -39,10 +39,10 @@ export const sendIntroduction = async ( }; export const confirmIntroduction = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, recipient: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client .post('/circles/connections/confirm-connection', { odinId: recipient }) @@ -63,9 +63,9 @@ export interface Introduction { } export const getReceivedIntroductions = async ( - dotYouClient: DotYouClient + odinClient: OdinClient ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client .get('/circles/requests/introductions/received') @@ -77,9 +77,9 @@ export const getReceivedIntroductions = async ( }; export const removeAllReceivedIntroductions = async ( - dotYouClient: DotYouClient + odinClient: OdinClient ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client .delete('/circles/requests/introductions') diff --git a/packages/libs/js-lib/src/network/contact/ContactManager.ts b/packages/libs/js-lib/src/network/contact/ContactManager.ts index 9c423292e..1a45a832b 100644 --- a/packages/libs/js-lib/src/network/contact/ContactManager.ts +++ b/packages/libs/js-lib/src/network/contact/ContactManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { getContentFromHeaderOrPayload } from '../../core/DriveData/File/DriveFileProvider'; import { queryBatch } from '../../core/DriveData/Query/DriveQueryService'; import { CursoredResult } from '../../core/DriveData/Query/DriveQueryTypes'; @@ -10,18 +10,18 @@ import { getFileHeaderByUniqueId } from '../../core/core'; export const CONTACT_PROFILE_IMAGE_KEY = 'prfl_pic'; export const getContactByOdinId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise | null> => - getContactByUniqueId(dotYouClient, toGuidId(odinId)); + getContactByUniqueId(odinClient, toGuidId(odinId)); export const getContactByUniqueId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, uniqueId: string ): Promise | null> => { try { return await getFileHeaderByUniqueId( - dotYouClient, + odinClient, ContactConfig.ContactTargetDrive, uniqueId ); @@ -31,12 +31,12 @@ export const getContactByUniqueId = async ( }; export const getContacts = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, cursorState: string | undefined = undefined, pageSize = 10 ): Promise[]>> => { const response = await queryBatch( - dotYouClient, + odinClient, { targetDrive: ContactConfig.ContactTargetDrive, fileType: [ContactConfig.ContactFileType], @@ -55,7 +55,7 @@ export const getContacts = async ( const dsr: HomebaseFile = result; if (!dsr) return; - return dsrToContact(dotYouClient, dsr, response.includeMetadataHeader); + return dsrToContact(odinClient, dsr, response.includeMetadataHeader); }) ) ).filter(Boolean) as HomebaseFile[], @@ -64,12 +64,12 @@ export const getContacts = async ( }; const dsrToContact = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, includeMetadataHeader: boolean ): Promise | undefined> => { const contactContent: ContactFile | null = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, ContactConfig.ContactTargetDrive, dsr, includeMetadataHeader diff --git a/packages/libs/js-lib/src/network/follow/FollowManager.ts b/packages/libs/js-lib/src/network/follow/FollowManager.ts index 9bdfd9d1a..bec6d6521 100644 --- a/packages/libs/js-lib/src/network/follow/FollowManager.ts +++ b/packages/libs/js-lib/src/network/follow/FollowManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { CursoredResult } from '../../core/DriveData/Query/DriveQueryTypes'; import { TargetDrive } from '../../core/core'; import { stringifyToQueryParams } from '../../helpers/DataUtil'; @@ -16,11 +16,11 @@ export interface UnfollowRequest { const root = '/followers'; export const fetchFollowing = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, cursorState?: string, pageSize?: number ): Promise | undefined> => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const params = { cursor: cursorState, @@ -33,14 +33,14 @@ export const fetchFollowing = async ( .then((response) => { return { results: response.data.results, cursorState: response.data.cursor }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const fetchIdentityIFollow = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + `/IdentityIFollow?odinId=${odinId}`; return client @@ -48,15 +48,15 @@ export const fetchIdentityIFollow = ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const createOrUpdateFollow = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: FollowRequest, synchronizeFeedHistoryNow?: boolean ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + `/follow`; return client @@ -66,15 +66,15 @@ export const createOrUpdateFollow = async ( }) .catch((err) => { if (err?.response?.data?.errorCode === 'identityAlreadyFollowed') return true; - return dotYouClient.handleErrorResponse(err); + return odinClient.handleErrorResponse(err); }); }; export const syncFeedHistoryForFollowing = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: { odinId: string } ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + `/sync-feed-history`; return client @@ -82,14 +82,14 @@ export const syncFeedHistoryForFollowing = async ( .then(() => { return true; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const Unfollow = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, request: UnfollowRequest ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + `/unfollow`; return client @@ -97,15 +97,15 @@ export const Unfollow = async ( .then(() => { return true; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const fetchFollowers = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, cursorState?: string, pageSize?: number ): Promise | undefined> => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const params = { cursor: cursorState, @@ -118,14 +118,14 @@ export const fetchFollowers = async ( .then((response) => { return { results: response.data.results, cursorState: response.data.cursor }; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const fetchFollower = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + `/follower?odinId=${odinId}`; return client @@ -133,13 +133,13 @@ export const fetchFollower = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export const fetchFollowDetail = async ( - dotYouClient: DotYouClient + odinClient: OdinClient ): Promise => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const url = root + `/followerconfiguration`; @@ -148,5 +148,5 @@ export const fetchFollowDetail = async ( .then((response) => { return response.data; }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; diff --git a/packages/libs/js-lib/src/network/troubleshooting/ConnectionGrantProvider.ts b/packages/libs/js-lib/src/network/troubleshooting/ConnectionGrantProvider.ts index ad2908333..28c126283 100644 --- a/packages/libs/js-lib/src/network/troubleshooting/ConnectionGrantProvider.ts +++ b/packages/libs/js-lib/src/network/troubleshooting/ConnectionGrantProvider.ts @@ -1,16 +1,16 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { assertIfDefined } from '../../helpers/DataUtil'; const statusPath = '/circles/connections/troubleshooting-info'; -export const fetchCircleMembershipStatus = async (dotYouClient: DotYouClient, odinId: string) => { - assertIfDefined('DotYouClient is required', dotYouClient); +export const fetchCircleMembershipStatus = async (odinClient: OdinClient, odinId: string) => { + assertIfDefined('OdinClient is required', odinClient); assertIfDefined('OdinId is required', odinId); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return await client .post(statusPath, { odinId: odinId }) .then((res) => res.data) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; export interface CircleMembershipStatus { @@ -36,13 +36,13 @@ export interface CircleMembershipStatusDriveGrantAnalysis { } const verifyPath = '/circles/connections/verify-connection'; -export const verifyConnection = async (dotYouClient: DotYouClient, odinId: string) => { - assertIfDefined('DotYouClient is required', dotYouClient); +export const verifyConnection = async (odinClient: OdinClient, odinId: string) => { + assertIfDefined('OdinClient is required', odinClient); assertIfDefined('OdinId is required', odinId); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return await client .post<{ isValid: boolean }>(verifyPath, { odinId: odinId }) .then((res) => res.data.isValid) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); }; diff --git a/packages/libs/js-lib/src/peer/WebsocketData/WebsocketProviderOverPeer.ts b/packages/libs/js-lib/src/peer/WebsocketData/WebsocketProviderOverPeer.ts index 2382e177a..141af92f0 100644 --- a/packages/libs/js-lib/src/peer/WebsocketData/WebsocketProviderOverPeer.ts +++ b/packages/libs/js-lib/src/peer/WebsocketData/WebsocketProviderOverPeer.ts @@ -1,4 +1,4 @@ -import { ApiType, DotYouClient } from '../../core/DotYouClient'; +import { ApiType, OdinClient } from '../../core/OdinClient'; import { TargetDrive } from '../../core/DriveData/File/DriveFileTypes'; import { encryptData, getRandomIv } from '../../core/InterceptionEncryptionUtil'; import { @@ -34,7 +34,7 @@ let reconnectCounter = 0; let reconnectPromise: Promise | undefined = undefined; const subscribers: { - handler: (dotYouClient: DotYouClient, data: TypedConnectionNotification) => void; + handler: (odinClient: OdinClient, data: TypedConnectionNotification) => void; onDisconnect?: () => void; onReconnect?: () => void; }[] = []; @@ -42,7 +42,7 @@ const subscribers: { const isDebug = hasDebugFlag(); const ConnectSocket = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, drives: TargetDrive[], args?: unknown // Extra parameters to pass to WebSocket constructor; Only applicable for React Native...; @@ -56,7 +56,7 @@ const ConnectSocket = async ( subscribedDrives = drives; // we need to preauth before we can connect - const tokenToConnectOverPeer = await dotYouClient + const tokenToConnectOverPeer = await odinClient .createAxiosClient() .post<{ authenticationToken64: string; @@ -85,7 +85,7 @@ const ConnectSocket = async ( } activeSs = base64ToUint8Array(tokenToConnectOverPeer.sharedSecret); - const directGuestClient = new DotYouClient({ + const directGuestClient = new OdinClient({ api: ApiType.Guest, hostIdentity: odinId, headers: { @@ -126,7 +126,7 @@ const ConnectSocket = async ( // 2 ping intervals have passed without a pong, reconnect if (isDebug) console.debug(`[WebsocketProviderOverPeer] Ping timeout`); - ReconnectSocket(dotYouClient, odinId, drives, args); + ReconnectSocket(odinClient, odinId, drives, args); return; } NotifyOverPeer({ @@ -176,7 +176,7 @@ const ConnectSocket = async ( } } - ReconnectSocket(dotYouClient, odinId, drives, args); + ReconnectSocket(odinClient, odinId, drives, args); }; }); @@ -184,7 +184,7 @@ const ConnectSocket = async ( }; const ReconnectSocket = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, drives: TargetDrive[], args?: unknown // Extra parameters to pass to WebSocket constructor; Only applicable for React Native...; TODO: Remove this @@ -206,12 +206,12 @@ const ReconnectSocket = async ( setTimeout(async () => { if (isDebug) console.debug('[WebsocketProviderOverPeer] Reconnecting - Delayed reconnect'); try { - await ConnectSocket(dotYouClient, odinId, drives, args); + await ConnectSocket(odinClient, odinId, drives, args); } catch (e) { console.error('[WebsocketProviderOverPeer] Reconnect failed', e); reject(); - ReconnectSocket(dotYouClient, odinId, drives, args); + ReconnectSocket(odinClient, odinId, drives, args); return; } subscribers.map((subscriber) => subscriber.onReconnect && subscriber.onReconnect()); @@ -241,17 +241,17 @@ const DisconnectSocket = async () => { }; export const SubscribeOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, drives: TargetDrive[], - handler: (dotYouClient: DotYouClient, data: TypedConnectionNotification) => void, + handler: (odinClient: OdinClient, data: TypedConnectionNotification) => void, onDisconnect?: () => void, onReconnect?: () => void, args?: unknown, // Extra parameters to pass to WebSocket constructor; Only applicable for React Native...; TODO: Remove this, refId?: string ): Promise => { - const apiType = dotYouClient.getType(); - const sharedSecret = dotYouClient.getSharedSecret(); + const apiType = odinClient.getType(); + const sharedSecret = odinClient.getSharedSecret(); if ((apiType !== ApiType.Owner && apiType !== ApiType.App) || !sharedSecret) { throw new Error(`NotificationProvider is not supported for ApiType: ${apiType}`); } @@ -273,11 +273,11 @@ export const SubscribeOverPeer = async ( // Already connected, no need to initiate a new connection if (webSocketClient) return Promise.resolve(); - return ConnectSocket(dotYouClient, odinId, drives, args); + return ConnectSocket(odinClient, odinId, drives, args); }; export const UnsubscribeOverPeer = ( - handler: (dotYouClient: DotYouClient, data: TypedConnectionNotification) => void + handler: (odinClient: OdinClient, data: TypedConnectionNotification) => void ) => { const index = subscribers.findIndex((subscriber) => subscriber.handler === handler); if (index !== -1) { diff --git a/packages/libs/js-lib/src/peer/peerData/Drive/PeerDriveProvider.ts b/packages/libs/js-lib/src/peer/peerData/Drive/PeerDriveProvider.ts index b9b7580ad..f8ef8367c 100644 --- a/packages/libs/js-lib/src/peer/peerData/Drive/PeerDriveProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/Drive/PeerDriveProvider.ts @@ -1,17 +1,17 @@ -import { DotYouClient, assertIfDotYouClientIsOwnerOrApp } from '../../../core/DotYouClient'; +import { OdinClient, assertIfOdinClientIsOwnerOrApp } from '../../../core/OdinClient'; import { TargetDrive, SystemFileType, PagedResult, DriveDefinition } from '../../../core/core'; /// Drive methods: //returns all drives for a given type export const getDrivesByTypeOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, type: string, pageNumber: number, pageSize: number, odinId: string, systemFileType?: SystemFileType ): Promise> => { - assertIfDotYouClientIsOwnerOrApp(dotYouClient); + assertIfOdinClientIsOwnerOrApp(odinClient); const params = { driveType: type, pageNumber: pageNumber, @@ -19,7 +19,7 @@ export const getDrivesByTypeOverPeer = async ( odinId: odinId, }; - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType, }); diff --git a/packages/libs/js-lib/src/peer/peerData/ExternalPostsDataProvider.ts b/packages/libs/js-lib/src/peer/peerData/ExternalPostsDataProvider.ts index e790d5387..f4bd64a92 100644 --- a/packages/libs/js-lib/src/peer/peerData/ExternalPostsDataProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/ExternalPostsDataProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { CursoredResult, FileQueryParams, @@ -28,7 +28,7 @@ export interface RecentsFromConnectionsReturn extends CursoredResult[]; if (ownOption) { - // const ownerDotYou = dotYouClient.getHostIdentity() || window.location.hostname; + // const ownerDotYou = odinClient.getHostIdentity() || window.location.hostname; const resultOfOwn = await getRecentPosts( - dotYouClient, + odinClient, undefined, false, ownOption.ownCursorState, @@ -104,7 +104,7 @@ export const getSocialFeed = async ( }; }; -export const getChannelsOverPeer = async (dotYouClient: DotYouClient, odinId: string) => { +export const getChannelsOverPeer = async (odinClient: OdinClient, odinId: string) => { const cacheKey = `${odinId}`; if (_internalChannelCache.has(cacheKey)) { const cacheData = await _internalChannelCache.get(cacheKey); @@ -113,7 +113,7 @@ export const getChannelsOverPeer = async (dotYouClient: DotYouClient, odinId: st } } - const drives = await getDrivesByTypeOverPeer(dotYouClient, BlogConfig.DriveType, 1, 1000, odinId); + const drives = await getDrivesByTypeOverPeer(odinClient, BlogConfig.DriveType, 1, 1000, odinId); const channelHeaders = drives.results.map((drive) => { return { id: drive.targetDriveInfo.alias, @@ -125,7 +125,7 @@ export const getChannelsOverPeer = async (dotYouClient: DotYouClient, odinId: st return ( await Promise.all( channelHeaders.map(async (header) => { - const definition = await getChannelOverPeer(dotYouClient, odinId, header.id); + const definition = await getChannelOverPeer(odinClient, odinId, header.id); return definition; }) ) @@ -138,7 +138,7 @@ export const getChannelsOverPeer = async (dotYouClient: DotYouClient, odinId: st }; export const getChannelOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, channelId: string ): Promise | null> => { @@ -155,13 +155,13 @@ export const getChannelOverPeer = async ( includeMetadataHeader: true, }; - const response = await queryBatchOverPeer(dotYouClient, odinId, queryParams, ro); + const response = await queryBatchOverPeer(odinClient, odinId, queryParams, ro); try { if (response.searchResults.length == 1) { const dsr = response.searchResults[0]; const definitionContent = await getContentFromHeaderOrPayloadOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, dsr, @@ -189,16 +189,16 @@ export const getChannelOverPeer = async ( }; export const getChannelBySlugOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, slug: string ) => { - const channels = await getChannelsOverPeer(dotYouClient, odinId); + const channels = await getChannelsOverPeer(odinClient, odinId); return channels.find((channel) => channel.fileMetadata.appData.content.slug === slug); }; export const getPostOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, channelId: string, postId: string @@ -210,17 +210,17 @@ export const getPostOverPeer = async ( fileType: [BlogConfig.PostFileType, BlogConfig.DraftPostFileType], }; - const response = await queryBatchOverPeer(dotYouClient, odinId, params); + const response = await queryBatchOverPeer(odinClient, odinId, params); if (!response.searchResults || response.searchResults.length === 0) return null; if (response.searchResults.length > 1) console.warn(`Found more than one file with tag [${postId}]. Using first entry.`); - return dsrToPostFile(dotYouClient, odinId, response.searchResults[0], true); + return dsrToPostFile(odinClient, odinId, response.searchResults[0], true); }; export const getPostBySlugOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, channelId: string, postSlug: string @@ -232,7 +232,7 @@ export const getPostBySlugOverPeer = async ( fileType: [BlogConfig.PostFileType, BlogConfig.DraftPostFileType], }; - const response = await queryBatchOverPeer(dotYouClient, odinId, params); + const response = await queryBatchOverPeer(odinClient, odinId, params); if (!response.searchResults || response.searchResults.length === 0) return null; if (response.searchResults.length > 1) @@ -240,11 +240,11 @@ export const getPostBySlugOverPeer = async ( `Found more than one file with uniqueId [${toGuidId(postSlug)}]. Using first entry.` ); - return (await dsrToPostFile(dotYouClient, odinId, response.searchResults[0], true)) || null; + return (await dsrToPostFile(odinClient, odinId, response.searchResults[0], true)) || null; }; const dsrToPostFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, dsr: HomebaseFile, includeMetadataHeader: boolean @@ -253,7 +253,7 @@ const dsrToPostFile = async ( if (!dsr.fileMetadata.globalTransitId) return null; // The header as a mimimum should have the channel id const keyHeader = dsr.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, dsr.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, dsr.sharedSecretEncryptedKeyHeader) : undefined; const decryptedJsonContent = await decryptJsonContent(dsr.fileMetadata, keyHeader); @@ -262,7 +262,7 @@ const dsrToPostFile = async ( getChannelDrive(parsedHeaderContent?.channelId) || BlogConfig.PublicChannelDrive; const postContent = await getContentFromHeaderOrPayloadOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, { diff --git a/packages/libs/js-lib/src/peer/peerData/ExternalProfileDataProvider.ts b/packages/libs/js-lib/src/peer/peerData/ExternalProfileDataProvider.ts index 7c0017bd8..47279433c 100644 --- a/packages/libs/js-lib/src/peer/peerData/ExternalProfileDataProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/ExternalProfileDataProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { BuiltInProfiles } from '../../profile/ProfileData/ProfileConfig'; import { GetTargetDriveFromProfileId } from '../../profile/ProfileData/ProfileDefinitionManager'; import { Attribute, AttributeConfig } from '../../profile/profile'; @@ -9,7 +9,7 @@ import { HomebaseFile, TargetDrive } from '../../core/DriveData/File/DriveFileTy import { compareAcl } from '../../helpers/DataUtil'; export const getProfileAttributesOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, attributeType?: string | string[] ): Promise[]> => { @@ -26,14 +26,14 @@ export const getProfileAttributesOverPeer = async ( : undefined, }; try { - const result = await queryBatchOverPeer(dotYouClient, odinId, queryParams); + const result = await queryBatchOverPeer(odinClient, odinId, queryParams); if (!result) return []; let attributes: HomebaseFile[] = ( await Promise.all( result.searchResults.map(async (dsr) => dsrToAttributeFileOverPeer( - dotYouClient, + odinClient, odinId, dsr, targetDrive, @@ -55,7 +55,7 @@ export const getProfileAttributesOverPeer = async ( }; export const dsrToAttributeFileOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, dsr: HomebaseFile, targetDrive: TargetDrive, @@ -63,7 +63,7 @@ export const dsrToAttributeFileOverPeer = async ( ): Promise | null> => { try { const attrContent = await getContentFromHeaderOrPayloadOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, dsr, diff --git a/packages/libs/js-lib/src/peer/peerData/File/PeerFileByGlobalTransitProvider.ts b/packages/libs/js-lib/src/peer/peerData/File/PeerFileByGlobalTransitProvider.ts index 782013340..b08edc402 100644 --- a/packages/libs/js-lib/src/peer/peerData/File/PeerFileByGlobalTransitProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/File/PeerFileByGlobalTransitProvider.ts @@ -1,5 +1,5 @@ import { AxiosRequestConfig } from 'axios'; -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { decryptKeyHeader, decryptJsonContent, @@ -46,7 +46,7 @@ interface GetThumbRequest extends GetFileRequest { const _internalMetadataPromiseCache = new Map>(); export const getPayloadAsJsonOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, globalTransitId: string, @@ -58,7 +58,7 @@ export const getPayloadAsJsonOverPeerByGlobalTransitId = async ( const { systemFileType } = options ?? { systemFileType: 'Standard' }; return getPayloadBytesOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -71,7 +71,7 @@ export const getPayloadAsJsonOverPeerByGlobalTransitId = async ( }; export const getPayloadBytesOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, globalTransitId: string, @@ -84,7 +84,7 @@ export const getPayloadBytesOverPeerByGlobalTransitId = async ( lastModified?: number; } ): Promise<{ bytes: Uint8Array; contentType: ContentType } | null> => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefinedAndNotDefault('GlobalTransitId', globalTransitId); assertIfDefinedAndNotDefault('Key', key); @@ -94,7 +94,7 @@ export const getPayloadBytesOverPeerByGlobalTransitId = async ( const decrypt = options?.decrypt ?? true; const systemFileType = options?.systemFileType ?? 'Standard'; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetPayloadRequest = { odinId: odinId, ...targetDrive, @@ -115,7 +115,7 @@ export const getPayloadBytesOverPeerByGlobalTransitId = async ( return client .get( '/transit/query/payload_byglobaltransitid?' + - stringifyToQueryParams({ ...request, lastModified }), + stringifyToQueryParams({ ...request, lastModified }), config ) .then(async (response) => { @@ -125,19 +125,19 @@ export const getPayloadBytesOverPeerByGlobalTransitId = async ( ? new Uint8Array(response.data) : updatedChunkStart !== undefined ? ( - await decryptChunkedBytesResponse( - dotYouClient, - response, - startOffset, - updatedChunkStart - ) - ).slice( - 0, - chunkEnd !== undefined && chunkStart !== undefined - ? chunkEnd - chunkStart - : undefined + await decryptChunkedBytesResponse( + odinClient, + response, + startOffset, + updatedChunkStart ) - : await decryptBytesResponse(dotYouClient, response), + ).slice( + 0, + chunkEnd !== undefined && chunkStart !== undefined + ? chunkEnd - chunkStart + : undefined + ) + : await decryptBytesResponse(odinClient, response), contentType: `${response.headers.decryptedcontenttype}` as ContentType, }; @@ -150,7 +150,7 @@ export const getPayloadBytesOverPeerByGlobalTransitId = async ( }; export const getThumbBytesOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, globalTransitId: string, @@ -162,7 +162,7 @@ export const getThumbBytesOverPeerByGlobalTransitId = async ( lastModified?: number; } ): Promise<{ bytes: Uint8Array; contentType: ImageContentType } | null> => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('GlobalTransitId', globalTransitId); assertIfDefined('PayloadKey', payloadKey); @@ -171,7 +171,7 @@ export const getThumbBytesOverPeerByGlobalTransitId = async ( assertIfDefinedAndNotDefault('OdinId', odinId); const { systemFileType, lastModified } = options ?? { systemFileType: 'Standard' }; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetThumbRequest = { odinId: odinId, ...targetDrive, @@ -186,12 +186,12 @@ export const getThumbBytesOverPeerByGlobalTransitId = async ( return client .get( '/transit/query/thumb_byglobaltransitid?' + - stringifyToQueryParams({ ...request, width, height, lastModified }), + stringifyToQueryParams({ ...request, width, height, lastModified }), config ) .then(async (response) => { return { - bytes: await decryptBytesResponse(dotYouClient, response), + bytes: await decryptBytesResponse(odinClient, response), contentType: `${response.headers.decryptedcontenttype}` as ImageContentType, }; }) @@ -203,7 +203,7 @@ export const getThumbBytesOverPeerByGlobalTransitId = async ( }; export const getFileHeaderOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, globalTransitId: string, @@ -213,7 +213,7 @@ export const getFileHeaderOverPeerByGlobalTransitId = async ( const systemFileType = options?.systemFileType ?? 'Standard'; const fileHeader = await getFileHeaderBytesOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -239,13 +239,13 @@ export const getFileHeaderOverPeerByGlobalTransitId = async ( }; export const getFileHeaderBytesOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, globalTransitId: string, options?: { decrypt?: boolean; systemFileType?: SystemFileType } | undefined ): Promise => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('GlobalTransitId', globalTransitId); assertIfDefinedAndNotDefault('OdinId', odinId); @@ -259,7 +259,7 @@ export const getFileHeaderBytesOverPeerByGlobalTransitId = async ( if (cacheData) return cacheData; } - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileRequest = { odinId: odinId, @@ -273,7 +273,7 @@ export const getFileHeaderBytesOverPeerByGlobalTransitId = async ( .then(async (fileHeader) => { if (decrypt) { const keyheader = fileHeader.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, fileHeader.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, fileHeader.sharedSecretEncryptedKeyHeader) : undefined; fileHeader.fileMetadata.appData.content = await decryptJsonContent( @@ -296,7 +296,7 @@ export const getFileHeaderBytesOverPeerByGlobalTransitId = async ( }; export const getContentFromHeaderOrPayloadOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, dsr: { @@ -311,7 +311,7 @@ export const getContentFromHeaderOrPayloadOverPeerByGlobalTransitId = async ( const contentIsComplete = fileMetadata.payloads?.filter((payload) => payload.key === DEFAULT_PAYLOAD_KEY).length === 0; const keyHeader = fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, sharedSecretEncryptedKeyHeader) : undefined; if (contentIsComplete) { @@ -321,7 +321,7 @@ export const getContentFromHeaderOrPayloadOverPeerByGlobalTransitId = async ( } else { // When contentIsComplete but includesJsonContent == false the query before was done without including the content; So we just get and parse const fileHeader = await getFileHeaderOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -335,7 +335,7 @@ export const getContentFromHeaderOrPayloadOverPeerByGlobalTransitId = async ( return tryJsonParse(decryptedJsonContent); } else { return await getPayloadAsJsonOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, diff --git a/packages/libs/js-lib/src/peer/peerData/File/PeerFileByUniqueIdProvider.ts b/packages/libs/js-lib/src/peer/peerData/File/PeerFileByUniqueIdProvider.ts index f3b370d07..f75e9d353 100644 --- a/packages/libs/js-lib/src/peer/peerData/File/PeerFileByUniqueIdProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/File/PeerFileByUniqueIdProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { decryptKeyHeader, decryptJsonContent } from '../../../core/DriveData/SecurityHelpers'; import { TargetDrive, HomebaseFile, SystemFileType } from '../../../core/core'; import { @@ -19,7 +19,7 @@ interface GetFileRequest { const _internalMetadataPromiseCache = new Map>(); export const getFileHeaderOverPeerByUniqueId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, uniqueId: string, @@ -29,7 +29,7 @@ export const getFileHeaderOverPeerByUniqueId = async ( const systemFileType = options?.systemFileType ?? 'Standard'; const fileHeader = await getFileHeaderBytesOverPeerByUniqueId( - dotYouClient, + odinClient, odinId, targetDrive, uniqueId, @@ -55,13 +55,13 @@ export const getFileHeaderOverPeerByUniqueId = async ( }; export const getFileHeaderBytesOverPeerByUniqueId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, uniqueId: string, options?: { decrypt?: boolean; systemFileType?: SystemFileType } | undefined ): Promise => { - assertIfDefined('DotYouClient', dotYouClient); + assertIfDefined('OdinClient', odinClient); assertIfDefined('TargetDrive', targetDrive); assertIfDefined('uniqueId', uniqueId); assertIfDefinedAndNotDefault('OdinId', odinId); @@ -75,7 +75,7 @@ export const getFileHeaderBytesOverPeerByUniqueId = async ( if (cacheData) return cacheData; } - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileRequest = { odinId: odinId, @@ -89,7 +89,7 @@ export const getFileHeaderBytesOverPeerByUniqueId = async ( .then(async (fileHeader) => { if (decrypt) { const keyheader = fileHeader.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, fileHeader.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, fileHeader.sharedSecretEncryptedKeyHeader) : undefined; fileHeader.fileMetadata.appData.content = await decryptJsonContent( diff --git a/packages/libs/js-lib/src/peer/peerData/File/PeerFileManager.ts b/packages/libs/js-lib/src/peer/peerData/File/PeerFileManager.ts index 1399b8fb8..4fb49751b 100644 --- a/packages/libs/js-lib/src/peer/peerData/File/PeerFileManager.ts +++ b/packages/libs/js-lib/src/peer/peerData/File/PeerFileManager.ts @@ -1,10 +1,10 @@ import { AxiosRequestConfig } from 'axios'; -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { TargetDrive, SystemFileType } from '../../../core/core'; import { assertIfDefined } from '../../../helpers/DataUtil'; export const deleteFileOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, globalTransitId: string, recipients?: string[], @@ -14,7 +14,7 @@ export const deleteFileOverPeer = async ( assertIfDefined('TargetDrive', targetDrive); assertIfDefined('GlobalTransitId', globalTransitId); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const request = { fileSystemType: systemFileType || 'Standard', diff --git a/packages/libs/js-lib/src/peer/peerData/File/PeerFileProvider.ts b/packages/libs/js-lib/src/peer/peerData/File/PeerFileProvider.ts index 71479c895..a48e2834d 100644 --- a/packages/libs/js-lib/src/peer/peerData/File/PeerFileProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/File/PeerFileProvider.ts @@ -1,5 +1,5 @@ import { AxiosRequestConfig } from 'axios'; -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { decryptKeyHeader, decryptJsonContent, @@ -46,7 +46,7 @@ interface GetThumbRequest extends GetFileRequest { const _internalMetadataPromiseCache = new Map>(); export const getPayloadAsJsonOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -59,7 +59,7 @@ export const getPayloadAsJsonOverPeer = async ( ): Promise => { const { systemFileType, lastModified } = options ?? { systemFileType: 'Standard' }; - return getPayloadBytesOverPeer(dotYouClient, odinId, targetDrive, fileId, key, { + return getPayloadBytesOverPeer(odinClient, odinId, targetDrive, fileId, key, { systemFileType, decrypt: true, lastModified, @@ -67,7 +67,7 @@ export const getPayloadAsJsonOverPeer = async ( }; export const getPayloadBytesOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -90,7 +90,7 @@ export const getPayloadBytesOverPeer = async ( const decrypt = options?.decrypt ?? true; const systemFileType = options?.systemFileType; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetPayloadRequest = { odinId: odinId, ...targetDrive, @@ -120,19 +120,19 @@ export const getPayloadBytesOverPeer = async ( ? new Uint8Array(response.data) : updatedChunkStart !== undefined ? ( - await decryptChunkedBytesResponse( - dotYouClient, - response, - startOffset, - updatedChunkStart - ) - ).slice( - 0, - chunkEnd !== undefined && chunkStart !== undefined - ? chunkEnd - chunkStart - : undefined + await decryptChunkedBytesResponse( + odinClient, + response, + startOffset, + updatedChunkStart ) - : await decryptBytesResponse(dotYouClient, response), + ).slice( + 0, + chunkEnd !== undefined && chunkStart !== undefined + ? chunkEnd - chunkStart + : undefined + ) + : await decryptBytesResponse(odinClient, response), contentType: `${response.headers.decryptedcontenttype}` as ContentType, }; @@ -145,7 +145,7 @@ export const getPayloadBytesOverPeer = async ( }; export const getThumbBytesOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -167,7 +167,7 @@ export const getThumbBytesOverPeer = async ( const { systemFileType, lastModified } = options ?? { systemFileType: 'Standard' }; - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetThumbRequest = { odinId: odinId, ...targetDrive, @@ -188,7 +188,7 @@ export const getThumbBytesOverPeer = async ( .then(async (response) => { if (!response.data) return null; return { - bytes: await decryptBytesResponse(dotYouClient, response), + bytes: await decryptBytesResponse(odinClient, response), contentType: `${response.headers.decryptedcontenttype}` as ImageContentType, }; }) @@ -200,7 +200,7 @@ export const getThumbBytesOverPeer = async ( }; export const getFileHeaderOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -209,7 +209,7 @@ export const getFileHeaderOverPeer = async ( const decrypt = options?.decrypt ?? true; const systemFileType = options?.systemFileType ?? 'Standard'; - const fileHeader = await getFileHeaderBytesOverPeer(dotYouClient, odinId, targetDrive, fileId, { + const fileHeader = await getFileHeaderBytesOverPeer(odinClient, odinId, targetDrive, fileId, { decrypt, systemFileType, }); @@ -230,7 +230,7 @@ export const getFileHeaderOverPeer = async ( }; export const getFileHeaderBytesOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -250,7 +250,7 @@ export const getFileHeaderBytesOverPeer = async ( if (cacheData) return cacheData; } - const client = getAxiosClient(dotYouClient, systemFileType); + const client = getAxiosClient(odinClient, systemFileType); const request: GetFileRequest = { odinId: odinId, fileId, @@ -263,7 +263,7 @@ export const getFileHeaderBytesOverPeer = async ( .then(async (fileHeader) => { if (decrypt) { const keyheader = fileHeader.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, fileHeader.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, fileHeader.sharedSecretEncryptedKeyHeader) : undefined; fileHeader.fileMetadata.appData.content = await decryptJsonContent( @@ -286,7 +286,7 @@ export const getFileHeaderBytesOverPeer = async ( }; export const getContentFromHeaderOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, dsr: { @@ -301,7 +301,7 @@ export const getContentFromHeaderOverPeer = async ( const { fileId, fileMetadata, sharedSecretEncryptedKeyHeader } = dsr; const keyHeader = fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, sharedSecretEncryptedKeyHeader as EncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, sharedSecretEncryptedKeyHeader as EncryptedKeyHeader) : undefined; let decryptedJsonContent; @@ -309,7 +309,7 @@ export const getContentFromHeaderOverPeer = async ( decryptedJsonContent = await decryptJsonContent(fileMetadata, keyHeader); } else { // When contentIsComplete but includesJsonContent == false the query before was done without including the content; So we just get and parse - const fileHeader = await getFileHeaderOverPeer(dotYouClient, odinId, targetDrive, fileId, { + const fileHeader = await getFileHeaderOverPeer(odinClient, odinId, targetDrive, fileId, { systemFileType: dsr.fileSystemType || systemFileType, }); if (!fileHeader) return null; @@ -326,7 +326,7 @@ export const getContentFromHeaderOverPeer = async ( }; export const getContentFromHeaderOrPayloadOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, dsr: { @@ -345,7 +345,7 @@ export const getContentFromHeaderOrPayloadOverPeer = async ( if (contentIsComplete) { return getContentFromHeaderOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, dsr, @@ -358,7 +358,7 @@ export const getContentFromHeaderOrPayloadOverPeer = async ( ); return await getPayloadAsJsonOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, fileId, diff --git a/packages/libs/js-lib/src/peer/peerData/File/PeerReadReceiptManager.ts b/packages/libs/js-lib/src/peer/peerData/File/PeerReadReceiptManager.ts index bc7aa63df..c2b7934cf 100644 --- a/packages/libs/js-lib/src/peer/peerData/File/PeerReadReceiptManager.ts +++ b/packages/libs/js-lib/src/peer/peerData/File/PeerReadReceiptManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { FileIdFileIdentifier, TargetDrive } from '../../../core/DriveData/File/DriveFileTypes'; import { assertIfDefined } from '../../../helpers/DataUtil'; @@ -18,12 +18,12 @@ export enum SendReadReceiptResponseRecipientStatus { } export const sendReadReceipt = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, fileIds: string[] ): Promise => { assertIfDefined('TargetDrive', targetDrive); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const request = { files: fileIds.map((fileId) => ({ diff --git a/packages/libs/js-lib/src/peer/peerData/InboxProvider.ts b/packages/libs/js-lib/src/peer/peerData/InboxProvider.ts index 376380b91..022fcdf58 100644 --- a/packages/libs/js-lib/src/peer/peerData/InboxProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/InboxProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { TargetDrive } from '../../core/core'; type ProcessInboxResponse = { @@ -8,11 +8,11 @@ type ProcessInboxResponse = { }; export const processInbox = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, targetDrive: TargetDrive, batchSize?: number ) => { - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); return client .post('/transit/inbox/processor/process', { diff --git a/packages/libs/js-lib/src/peer/peerData/Media/ExternalImageProvider.ts b/packages/libs/js-lib/src/peer/peerData/Media/ExternalImageProvider.ts index a0c4b0e4d..186cfb5bc 100644 --- a/packages/libs/js-lib/src/peer/peerData/Media/ExternalImageProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/Media/ExternalImageProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { TargetDrive, SystemFileType, ImageSize, ImageContentType } from '../../../core/core'; import { getLargestThumbOfPayload } from '../../../helpers/DataUtil'; import { ThumbnailMeta } from '../../../media/MediaTypes'; @@ -19,7 +19,7 @@ import { } from './ExternalMediaProvider'; export const getDecryptedThumbnailMetaOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -30,15 +30,15 @@ export const getDecryptedThumbnailMetaOverPeer = async ( return ( globalTransitId ? getFileHeaderBytesOverPeerByGlobalTransitId( - dotYouClient, - odinId, - targetDrive, - globalTransitId, - { - systemFileType, - } - ) - : getFileHeaderOverPeer(dotYouClient, odinId, targetDrive, fileId, { systemFileType }) + odinClient, + odinId, + targetDrive, + globalTransitId, + { + systemFileType, + } + ) + : getFileHeaderOverPeer(odinClient, odinId, targetDrive, fileId, { systemFileType }) ).then(async (header) => { if (!header) return; @@ -58,7 +58,7 @@ export const getDecryptedThumbnailMetaOverPeer = async ( !previewThumbnail ) { url = await getDecryptedImageUrlOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, header.fileId || fileId, @@ -97,7 +97,7 @@ export const getDecryptedImageUrlOverPeerByGlobalTransitId = export const getDecryptedImageUrlOverPeer = getDecryptedMediaUrlOverPeer; export const getDecryptedImageDataOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, globalTransitId: string, @@ -114,7 +114,7 @@ export const getDecryptedImageDataOverPeerByGlobalTransitId = async ( if (size) { try { const thumbData = await getThumbBytesOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -134,7 +134,7 @@ export const getDecryptedImageDataOverPeerByGlobalTransitId = async ( } const payloadData = await getPayloadBytesOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -154,7 +154,7 @@ export const getDecryptedImageDataOverPeerByGlobalTransitId = async ( }; export const getDecryptedImageDataOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -171,7 +171,7 @@ export const getDecryptedImageDataOverPeer = async ( if (size) { try { const thumbData = await getThumbBytesOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -191,7 +191,7 @@ export const getDecryptedImageDataOverPeer = async ( } const payloadData = await getPayloadBytesOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, fileId, diff --git a/packages/libs/js-lib/src/peer/peerData/Media/ExternalMediaProvider.ts b/packages/libs/js-lib/src/peer/peerData/Media/ExternalMediaProvider.ts index efde41be2..07fa8525a 100644 --- a/packages/libs/js-lib/src/peer/peerData/Media/ExternalMediaProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/Media/ExternalMediaProvider.ts @@ -1,4 +1,4 @@ -import { ApiType, DotYouClient } from '../../../core/DotYouClient'; +import { ApiType, OdinClient } from '../../../core/OdinClient'; import { ImageSize, SystemFileType, @@ -19,7 +19,7 @@ import { // Retrieves an image/thumb, decrypts, then returns a url to be passed to an image control export const getDecryptedMediaUrlOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, globalTransitId: string, @@ -52,7 +52,7 @@ export const getDecryptedMediaUrlOverPeerByGlobalTransitId = async ( // and the CAT is passed via a header that we can't set on a direct url if (!isProbablyEncrypted) { const meta = await getFileHeaderOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -71,7 +71,7 @@ export const getDecryptedMediaUrlOverPeerByGlobalTransitId = async ( if (size) { try { const thumbBytes = await getThumbBytesOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -87,7 +87,7 @@ export const getDecryptedMediaUrlOverPeerByGlobalTransitId = async ( } return await getPayloadBytesOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, globalTransitId, @@ -115,7 +115,7 @@ export const getDecryptedMediaUrlOverPeerByGlobalTransitId = async ( // Retrieves an image/thumb, decrypts, then returns a url to be passed to an image control export const getDecryptedMediaUrlOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -142,15 +142,15 @@ export const getDecryptedMediaUrlOverPeer = async ( lastModified ); - const ss = dotYouClient.getSharedSecret(); + const ss = odinClient.getSharedSecret(); // // If there is no shared secret, we wouldn't even be able to decrypt - if (!ss || dotYouClient.getType() === ApiType.Guest) return await getDirectImageUrl(); + if (!ss || odinClient.getType() === ApiType.Guest) return await getDirectImageUrl(); // We try and avoid the payload call as much as possible, so if the payload is probabaly not encrypted, // we first get confirmation from the header and return a direct url if possible if (!isProbablyEncrypted) { - const meta = await getFileHeaderOverPeer(dotYouClient, odinId, targetDrive, fileId, { + const meta = await getFileHeaderOverPeer(odinClient, odinId, targetDrive, fileId, { systemFileType, }); if (!meta?.fileMetadata.isEncrypted) return await getDirectImageUrl(); @@ -162,7 +162,7 @@ export const getDecryptedMediaUrlOverPeer = async ( if (size) { try { const thumbBytes = await getThumbBytesOverPeer( - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -177,7 +177,7 @@ export const getDecryptedMediaUrlOverPeer = async ( } } - return await getPayloadBytesOverPeer(dotYouClient, odinId, targetDrive, fileId, fileKey, { + return await getPayloadBytesOverPeer(odinClient, odinId, targetDrive, fileId, fileKey, { systemFileType, chunkStart: fileSizeLimit ? 0 : undefined, chunkEnd: fileSizeLimit, diff --git a/packages/libs/js-lib/src/peer/peerData/Media/ExternalVideoProvider.ts b/packages/libs/js-lib/src/peer/peerData/Media/ExternalVideoProvider.ts index 53fa4574f..bd1589325 100644 --- a/packages/libs/js-lib/src/peer/peerData/Media/ExternalVideoProvider.ts +++ b/packages/libs/js-lib/src/peer/peerData/Media/ExternalVideoProvider.ts @@ -1,7 +1,7 @@ const OdinBlob: typeof Blob = (typeof window !== 'undefined' && 'CustomBlob' in window && (window.CustomBlob as typeof Blob)) || Blob; -import { ApiType, DotYouClient } from '../../../core/DotYouClient'; +import { ApiType, OdinClient } from '../../../core/OdinClient'; import { SystemFileType, TargetDrive } from '../../../core/core'; import { stringifyToQueryParams } from '../../../helpers/helpers'; import { @@ -11,7 +11,7 @@ import { import { getFileHeaderOverPeer, getPayloadBytesOverPeer } from '../File/PeerFileProvider'; export const getDecryptedVideoChunkOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -23,28 +23,28 @@ export const getDecryptedVideoChunkOverPeer = async ( ): Promise => { const payload = globalTransitId ? await getPayloadBytesOverPeerByGlobalTransitId( - dotYouClient, - odinId, - targetDrive, - globalTransitId, - key, - { - systemFileType, - chunkStart, - chunkEnd, - } - ) - : await getPayloadBytesOverPeer(dotYouClient, odinId, targetDrive, fileId, key, { + odinClient, + odinId, + targetDrive, + globalTransitId, + key, + { systemFileType, chunkStart, chunkEnd, - }); + } + ) + : await getPayloadBytesOverPeer(odinClient, odinId, targetDrive, fileId, key, { + systemFileType, + chunkStart, + chunkEnd, + }); return payload?.bytes || null; }; export const getDecryptedVideoUrlOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, fileId: string, @@ -52,11 +52,11 @@ export const getDecryptedVideoUrlOverPeer = async ( systemFileType?: SystemFileType, fileSizeLimit?: number ): Promise => { - const meta = await getFileHeaderOverPeer(dotYouClient, odinId, targetDrive, fileId, { + const meta = await getFileHeaderOverPeer(odinClient, odinId, targetDrive, fileId, { systemFileType, }); if (!meta?.fileMetadata.isEncrypted) { - const host = new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getEndpoint(); + const host = new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getEndpoint(); return `${host}/drive/files/payload?${stringifyToQueryParams({ ...targetDrive, @@ -68,7 +68,7 @@ export const getDecryptedVideoUrlOverPeer = async ( } // Direct download of the data and potentially decrypt if response headers indicate encrypted - return getPayloadBytesOverPeer(dotYouClient, odinId, targetDrive, fileId, key, { + return getPayloadBytesOverPeer(odinClient, odinId, targetDrive, fileId, key, { systemFileType, chunkStart: fileSizeLimit ? 0 : undefined, chunkEnd: fileSizeLimit, @@ -79,7 +79,7 @@ export const getDecryptedVideoUrlOverPeer = async ( }); }; export const getDecryptedVideoUrlOverPeerByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, targetDrive: TargetDrive, videoGlobalTransitId: string, @@ -88,7 +88,7 @@ export const getDecryptedVideoUrlOverPeerByGlobalTransitId = async ( fileSizeLimit?: number ): Promise => { const meta = await getFileHeaderOverPeerByGlobalTransitId( - dotYouClient, + odinClient, odinId, targetDrive, videoGlobalTransitId, @@ -97,7 +97,7 @@ export const getDecryptedVideoUrlOverPeerByGlobalTransitId = async ( } ); if (!meta?.fileMetadata.isEncrypted) { - const host = new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getEndpoint(); + const host = new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getEndpoint(); return `${host}/drive/files/payload?${stringifyToQueryParams({ ...targetDrive, fileId: meta?.fileId, @@ -108,7 +108,7 @@ export const getDecryptedVideoUrlOverPeerByGlobalTransitId = async ( } // Direct download of the data and potentially decrypt if response headers indicate encrypted - return getPayloadBytesOverPeer(dotYouClient, odinId, targetDrive, meta?.fileId, key, { + return getPayloadBytesOverPeer(odinClient, odinId, targetDrive, meta?.fileId, key, { systemFileType, chunkStart: fileSizeLimit ? 0 : undefined, chunkEnd: fileSizeLimit, diff --git a/packages/libs/js-lib/src/peer/peerData/Query/PeerDriveQueryService.ts b/packages/libs/js-lib/src/peer/peerData/Query/PeerDriveQueryService.ts index 81625fedd..888aeb152 100644 --- a/packages/libs/js-lib/src/peer/peerData/Query/PeerDriveQueryService.ts +++ b/packages/libs/js-lib/src/peer/peerData/Query/PeerDriveQueryService.ts @@ -1,5 +1,5 @@ import { AxiosRequestConfig } from 'axios'; -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { FileQueryParams, GetBatchQueryResultOptions, @@ -26,10 +26,10 @@ interface QueryBatchParamsWithFileState extends Omit( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, params: T, ro?: GetBatchQueryResultOptions, @@ -46,7 +46,7 @@ export const queryBatchOverPeer = async < }; delete strippedQueryParams.systemFileType; - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType: params.systemFileType, }); @@ -67,7 +67,7 @@ export const queryBatchOverPeer = async < response.data as QueryBatchResponseWithDeletedResults | QueryBatchResponse ).searchResults.map(async (dsr) => { const keyheader = dsr.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, dsr.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, dsr.sharedSecretEncryptedKeyHeader) : undefined; dsr.fileMetadata.appData.content = await decryptJsonContent( @@ -93,7 +93,7 @@ interface TransitQueryModifiedRequest { /// Query methods: export const queryModifiedOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, params: FileQueryParams, ro?: GetModifiedResultOptions, @@ -107,7 +107,7 @@ export const queryModifiedOverPeer = async ( const strippedQueryParams = { ...params }; delete strippedQueryParams.systemFileType; - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ systemFileType: params.systemFileType, }); @@ -129,7 +129,7 @@ export const queryModifiedOverPeer = async ( searchResults: await Promise.all( response.data.searchResults.map(async (dsr) => { const keyheader = dsr.fileMetadata.isEncrypted - ? await decryptKeyHeader(dotYouClient, dsr.sharedSecretEncryptedKeyHeader) + ? await decryptKeyHeader(odinClient, dsr.sharedSecretEncryptedKeyHeader) : undefined; dsr.fileMetadata.appData.content = await decryptJsonContent( diff --git a/packages/libs/js-lib/src/peer/peerData/Upload/PeerFileUploader.ts b/packages/libs/js-lib/src/peer/peerData/Upload/PeerFileUploader.ts index dacb63a26..64785e6f0 100644 --- a/packages/libs/js-lib/src/peer/peerData/Upload/PeerFileUploader.ts +++ b/packages/libs/js-lib/src/peer/peerData/Upload/PeerFileUploader.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { GenerateKeyHeader, buildDescriptor, @@ -20,7 +20,7 @@ const isDebug = hasDebugFlag(); /// Upload methods export const uploadFileOverPeer = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, instructions: TransitInstructionSet, metadata: UploadFileMetadata, payloads?: PayloadFile[], @@ -34,7 +34,7 @@ export const uploadFileOverPeer = async ( isDebug && console.debug( 'request', - new URL(`${dotYouClient.getEndpoint()}/transit/sender/files/send'`).pathname, + new URL(`${odinClient.getEndpoint()}/transit/sender/files/send'`).pathname, { instructions, metadata, @@ -54,7 +54,7 @@ export const uploadFileOverPeer = async ( }; const encryptedDescriptor = await buildDescriptor( - dotYouClient, + odinClient, keyHeader, instructionsWithManifest, metadata @@ -69,7 +69,7 @@ export const uploadFileOverPeer = async ( manifest ); - const client = dotYouClient.createAxiosClient({ + const client = odinClient.createAxiosClient({ overrideEncryption: true, systemFileType: systemFileType, }); @@ -103,7 +103,7 @@ export const uploadFileOverPeer = async ( isDebug && console.debug( 'response', - new URL(`${dotYouClient.getEndpoint()}/transit/sender/files/send'`).pathname, + new URL(`${odinClient.getEndpoint()}/transit/sender/files/send'`).pathname, uploadResult ); diff --git a/packages/libs/js-lib/src/profile/AttributeData/AttributeDataProvider.ts b/packages/libs/js-lib/src/profile/AttributeData/AttributeDataProvider.ts index 518bd99b8..0f95300ff 100644 --- a/packages/libs/js-lib/src/profile/AttributeData/AttributeDataProvider.ts +++ b/packages/libs/js-lib/src/profile/AttributeData/AttributeDataProvider.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { FileQueryParams, queryBatch, @@ -21,7 +21,7 @@ const sortAttrs = ( //Gets all attributes available to the caller export const getProfileAttributes = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string, sectionId: string | undefined, types: string[] | undefined, @@ -35,7 +35,7 @@ export const getProfileAttributes = async ( tagsMatchAtLeastOne: types, }; - const result = await queryBatch(dotYouClient, qp, { + const result = await queryBatch(odinClient, qp, { maxRecords: pageSize, includeMetadataHeader: true, }); @@ -43,7 +43,7 @@ export const getProfileAttributes = async ( const attributes: HomebaseFile[] = ( await Promise.all( result.searchResults.map(async (dsr) => - homebaseFileToProfileAttribute(dotYouClient, dsr, targetDrive, result.includeMetadataHeader) + homebaseFileToProfileAttribute(odinClient, dsr, targetDrive, result.includeMetadataHeader) ) ) ).filter((attr) => !!attr) as HomebaseFile[]; @@ -52,7 +52,7 @@ export const getProfileAttributes = async ( }; export const getProfileAttribute = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string, id: string ): Promise | null> => { @@ -68,7 +68,7 @@ export const getProfileAttribute = async ( includeMetadataHeader: true, }; - const result = await queryBatch(dotYouClient, qp, ro); + const result = await queryBatch(odinClient, qp, ro); if (result.searchResults.length == 0) return null; if (result.searchResults.length > 1) { @@ -79,7 +79,7 @@ export const getProfileAttribute = async ( const dsr: HomebaseFile = result.searchResults[0]; return homebaseFileToProfileAttribute( - dotYouClient, + odinClient, dsr, targetDrive, result.includeMetadataHeader @@ -87,14 +87,14 @@ export const getProfileAttribute = async ( }; export const homebaseFileToProfileAttribute = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { try { const attrContent = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader diff --git a/packages/libs/js-lib/src/profile/ProfileData/ProfileDefinitionManager.ts b/packages/libs/js-lib/src/profile/ProfileData/ProfileDefinitionManager.ts index 6f24b8661..59d530c71 100644 --- a/packages/libs/js-lib/src/profile/ProfileData/ProfileDefinitionManager.ts +++ b/packages/libs/js-lib/src/profile/ProfileData/ProfileDefinitionManager.ts @@ -1,7 +1,7 @@ const OdinBlob: typeof Blob = (typeof window !== 'undefined' && 'CustomBlob' in window && (window.CustomBlob as typeof Blob)) || Blob; -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { DEFAULT_PAYLOAD_KEY, MAX_HEADER_CONTENT_BYTES } from '../../core/constants'; import { getDrivesByType, @@ -29,9 +29,9 @@ import { ProfileConfig } from './ProfileConfig'; import { ProfileDefinition, ProfileSection } from './ProfileTypes'; export const getProfileDefinitions = async ( - dotYouClient: DotYouClient + odinClient: OdinClient ): Promise => { - const drives = await getDrivesByType(dotYouClient, ProfileConfig.ProfileDriveType, 1, 1000); + const drives = await getDrivesByType(odinClient, ProfileConfig.ProfileDriveType, 1, 1000); const profileHeaders = drives.results.map((drive) => { return { @@ -57,7 +57,7 @@ export const getProfileDefinitions = async ( }; }); - const response = await queryBatchCollection(dotYouClient, queries); + const response = await queryBatchCollection(odinClient, queries); const definitions = await Promise.all( response.results.map(async (response) => { @@ -66,7 +66,7 @@ export const getProfileDefinitions = async ( const dsr = response.searchResults[0]; const definition = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, profileDrive, dsr, response.includeMetadataHeader @@ -81,11 +81,11 @@ export const getProfileDefinitions = async ( }; export const getProfileDefinition = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string ): Promise => { try { - const { definition } = (await getProfileDefinitionInternal(dotYouClient, profileId)) ?? { + const { definition } = (await getProfileDefinitionInternal(odinClient, profileId)) ?? { definition: undefined, }; return definition; @@ -97,7 +97,7 @@ export const getProfileDefinition = async ( }; export const saveProfileDefinition = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, definition: ProfileDefinition ): Promise => { if (!definition.profileId) { @@ -108,9 +108,9 @@ export const saveProfileDefinition = async ( const driveMetadata = 'Drive that stores: ' + definition.name; const targetDrive = GetTargetDriveFromProfileId(definition.profileId); - await ensureDrive(dotYouClient, targetDrive, definition.name, driveMetadata, true); + await ensureDrive(odinClient, targetDrive, definition.name, driveMetadata, true); const { fileId, versionTag } = (await getProfileDefinitionInternal( - dotYouClient, + odinClient, definition.profileId )) ?? { fileId: undefined, @@ -147,17 +147,17 @@ export const saveProfileDefinition = async ( //reshape the definition to group attributes by their type await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, shouldEmbedContent ? undefined : [ - { - payload: new OdinBlob([payloadBytes], { type: 'application/json' }), - key: DEFAULT_PAYLOAD_KEY, - }, - ], + { + payload: new OdinBlob([payloadBytes], { type: 'application/json' }), + key: DEFAULT_PAYLOAD_KEY, + }, + ], undefined, encrypt ); @@ -165,7 +165,7 @@ export const saveProfileDefinition = async ( }; export const saveProfileSection = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string, profileSection: ProfileSection ) => { @@ -179,7 +179,7 @@ export const saveProfileSection = async ( const targetDrive = GetTargetDriveFromProfileId(profileId); const { fileId, versionTag } = (!isCreate - ? await getProfileSectionInternal(dotYouClient, profileId, profileSection.sectionId) + ? await getProfileSectionInternal(odinClient, profileId, profileSection.sectionId) : { fileId: undefined, versionTag: undefined }) ?? { fileId: undefined, }; @@ -214,53 +214,53 @@ export const saveProfileSection = async ( }; await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, shouldEmbedContent ? undefined : [ - { - payload: new OdinBlob([payloadBytes], { type: 'application/json' }), - key: DEFAULT_PAYLOAD_KEY, - }, - ], + { + payload: new OdinBlob([payloadBytes], { type: 'application/json' }), + key: DEFAULT_PAYLOAD_KEY, + }, + ], undefined, encrypt ); }; export const removeProfileSection = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string, sectionId: string ) => { const targetDrive = GetTargetDriveFromProfileId(profileId); - const profileSection = await getProfileSectionInternal(dotYouClient, profileId, sectionId); + const profileSection = await getProfileSectionInternal(odinClient, profileId, sectionId); if (!profileSection) { console.error('[odin-js]', "Profile not found, can't delete"); return false; } - return deleteFile(dotYouClient, targetDrive, profileSection.fileId); + return deleteFile(odinClient, targetDrive, profileSection.fileId); }; -export const removeProfileDefinition = async (dotYouClient: DotYouClient, profileId: string) => { +export const removeProfileDefinition = async (odinClient: OdinClient, profileId: string) => { const targetDrive = GetTargetDriveFromProfileId(profileId); - const profileDefinition = await getProfileDefinitionInternal(dotYouClient, profileId); + const profileDefinition = await getProfileDefinitionInternal(odinClient, profileId); if (!profileDefinition) { console.error('[odin-js]', "Profile not found, can't delete"); return false; } // TODO: remove drive - return deleteFile(dotYouClient, targetDrive, profileDefinition.fileId); + return deleteFile(odinClient, targetDrive, profileDefinition.fileId); }; export const getProfileSections = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string ): Promise => { const targetDrive = GetTargetDriveFromProfileId(profileId); @@ -271,14 +271,14 @@ export const getProfileSections = async ( groupId: [profileId], }; - const response = await queryBatch(dotYouClient, params); + const response = await queryBatch(odinClient, params); if (response.searchResults.length >= 1) { const sections = ( await Promise.all( response.searchResults.map( async (dsr) => await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, response.includeMetadataHeader @@ -305,7 +305,7 @@ export const GetTargetDriveFromProfileId = (profileId: string): TargetDrive => { /// const getProfileDefinitionInternal = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string ): Promise<{ definition: ProfileDefinition; versionTag: string; fileId: string } | undefined> => { const targetDrive = GetTargetDriveFromProfileId(profileId); @@ -316,7 +316,7 @@ const getProfileDefinitionInternal = async ( fileType: [ProfileConfig.ProfileDefinitionFileType], }; - const response = await queryBatch(dotYouClient, params); + const response = await queryBatch(odinClient, params); if (response.searchResults.length >= 1) { if (response.searchResults.length !== 1) { @@ -326,7 +326,7 @@ const getProfileDefinitionInternal = async ( } const dsr = response.searchResults[0]; const definition = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, response.includeMetadataHeader @@ -345,7 +345,7 @@ const getProfileDefinitionInternal = async ( }; const getProfileSectionInternal = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileId: string, sectionId: string ) => { @@ -357,7 +357,7 @@ const getProfileSectionInternal = async ( fileType: [ProfileConfig.ProfileSectionFileType], }; - const response = await queryBatch(dotYouClient, params); + const response = await queryBatch(odinClient, params); if (response.searchResults.length >= 1) { if (response.searchResults.length !== 1) { @@ -367,7 +367,7 @@ const getProfileSectionInternal = async ( } const dsr = response.searchResults[0]; const definition = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, response.includeMetadataHeader diff --git a/packages/libs/js-lib/src/public/file/FileProvider.ts b/packages/libs/js-lib/src/public/file/FileProvider.ts index e30c40faa..e1e02a3af 100644 --- a/packages/libs/js-lib/src/public/file/FileProvider.ts +++ b/packages/libs/js-lib/src/public/file/FileProvider.ts @@ -1,5 +1,5 @@ import { DEFAULT_PAYLOAD_KEY, EmbeddedThumb, PayloadDescriptor } from '../..'; -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { FileQueryParams } from '../../core/DriveData/Drive/DriveTypes'; import { HomebaseFile } from '../../core/DriveData/File/DriveFileTypes'; import { @@ -51,12 +51,12 @@ type PublishProfileImage = { const _internalFileCache = new Map>>(); export const publishFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, fileName: string, sections: QueryParamsSection[], crossOriginBehavior: 'allowAllOrigins' | 'default' = 'default' ) => { - const httpClient = dotYouClient.createAxiosClient(); + const httpClient = odinClient.createAxiosClient(); const fileRequest: PublishStaticFileRequest = { filename: fileName, @@ -71,7 +71,7 @@ export const publishFile = async ( }; export const publishProfileCardFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, profileCard: { image: `https://${string}/pub/image`; givenName: string | undefined; @@ -84,7 +84,7 @@ export const publishProfileCardFile = async ( sameAs: { type: string; url: string | undefined }[] } ) => { - const httpClient = dotYouClient.createAxiosClient(); + const httpClient = odinClient.createAxiosClient(); return await httpClient.post('/optimization/cdn/profilecard', { profileCardJson: JSON.stringify(profileCard), @@ -92,11 +92,11 @@ export const publishProfileCardFile = async ( }; export const publishProfileImageFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, imageBuffer: Uint8Array, contentType: string ) => { - const httpClient = dotYouClient.createAxiosClient(); + const httpClient = odinClient.createAxiosClient(); const fileRequest: PublishProfileImage = { image64: uint8ArrayToBase64(imageBuffer), @@ -107,20 +107,20 @@ export const publishProfileImageFile = async ( }; export const GetFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, fileName: string ): Promise> => { try { - if (_internalFileCache.has(`${dotYouClient.getRoot()}+${fileName}`)) { - return (await _internalFileCache.get(`${dotYouClient.getRoot()}+${fileName}`)) ?? new Map(); + if (_internalFileCache.has(`${odinClient.getRoot()}+${fileName}`)) { + return (await _internalFileCache.get(`${odinClient.getRoot()}+${fileName}`)) ?? new Map(); } - const httpClient = dotYouClient.createAxiosClient({ overrideEncryption: true }); + const httpClient = odinClient.createAxiosClient({ overrideEncryption: true }); const fetchResponseMap = async (fileName: string) => { const response = await httpClient({ url: `/cdn/${fileName}`, - baseURL: dotYouClient.getRoot(), + baseURL: odinClient.getRoot(), withCredentials: false, // Force headers to have the same as the preload manual fetch, and to allow a cached resource //headers: { accept: '*/*', 'cache-control': 'max-age=20' }, @@ -143,7 +143,7 @@ export const GetFile = async ( }; const promise = fetchResponseMap(fileName); - _internalFileCache.set(`${dotYouClient.getRoot()}+${fileName}`, promise); + _internalFileCache.set(`${odinClient.getRoot()}+${fileName}`, promise); return await promise; } catch { diff --git a/packages/libs/js-lib/src/public/file/FilePublishManager.ts b/packages/libs/js-lib/src/public/file/FilePublishManager.ts index 03d2ec950..61e8290ab 100644 --- a/packages/libs/js-lib/src/public/file/FilePublishManager.ts +++ b/packages/libs/js-lib/src/public/file/FilePublishManager.ts @@ -1,5 +1,5 @@ import { BuiltInAttributes } from '../../profile/profile'; -import { DotYouClient } from '../../core/DotYouClient'; +import { OdinClient } from '../../core/OdinClient'; import { FileQueryParams } from '../../core/DriveData/Drive/DriveTypes'; import { SecurityGroupType } from '../../core/core'; import { stringGuidsEqual } from '../../helpers/DataUtil'; @@ -9,17 +9,17 @@ import { DEFAULT_SECTIONS, BASE_RESULT_OPTIONS } from './FileBase'; import { publishFile } from './FileProvider'; export const publishProfile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dataType?: 'channel' | typeof BuiltInAttributes.Name ) => { - const channels = await getChannelDefinitions(dotYouClient); + const channels = await getChannelDefinitions(odinClient); const channelSections = channels ?.filter( (chnl) => chnl.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Anonymous || + SecurityGroupType.Anonymous || chnl.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Authenticated + SecurityGroupType.Authenticated ) .map((channel) => { const channelDrive = getChannelDrive(channel.fileMetadata.appData.uniqueId as string); @@ -44,7 +44,7 @@ export const publishProfile = async ( ) ) publishActions.push( - publishFile(dotYouClient, 'sitedata.json', [...DEFAULT_SECTIONS, ...channelSections]) + publishFile(odinClient, 'sitedata.json', [...DEFAULT_SECTIONS, ...channelSections]) ); return await Promise.all(publishActions); diff --git a/packages/libs/js-lib/src/public/file/ProfileCardManager.ts b/packages/libs/js-lib/src/public/file/ProfileCardManager.ts index d58fe9264..7c02aa3ae 100644 --- a/packages/libs/js-lib/src/public/file/ProfileCardManager.ts +++ b/packages/libs/js-lib/src/public/file/ProfileCardManager.ts @@ -2,7 +2,7 @@ const OdinBlob: typeof Blob = (typeof window !== 'undefined' && 'CustomBlob' in window && (window.CustomBlob as typeof Blob)) || Blob; import axios from 'axios'; -import { ApiType, DotYouClient } from '../../core/DotYouClient'; +import { ApiType, OdinClient } from '../../core/OdinClient'; import { HomebaseFile, SecurityGroupType } from '../../core/DriveData/File/DriveFileTypes'; import { getDecryptedImageData } from '../../media/ImageProvider'; import { @@ -34,9 +34,9 @@ export const ProfileCardAttributeTypes = [ ...BuiltInAttributes.AllGames, ]; -export const publishProfileCard = async (dotYouClient: DotYouClient) => { +export const publishProfileCard = async (odinClient: OdinClient) => { const profileNameAttributes = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.Name] @@ -59,7 +59,7 @@ export const publishProfileCard = async (dotYouClient: DotYouClient) => { ] as string | undefined; const bioAttributes = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.FullBio] @@ -83,7 +83,7 @@ export const publishProfileCard = async (dotYouClient: DotYouClient) => { .filter((data) => data !== undefined); const bioSummaryAttributes = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.BioSummary] @@ -107,7 +107,7 @@ export const publishProfileCard = async (dotYouClient: DotYouClient) => { .filter((data) => data !== undefined); const emailAttributes = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.Email] @@ -126,7 +126,7 @@ export const publishProfileCard = async (dotYouClient: DotYouClient) => { .filter((email) => email.type && email.email); const socialAttributes = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [...BuiltInAttributes.AllSocial, ...BuiltInAttributes.AllGames] @@ -149,7 +149,7 @@ export const publishProfileCard = async (dotYouClient: DotYouClient) => { .filter((link) => link.type && link.url); const linkAttributes = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, undefined, [BuiltInAttributes.Link] @@ -167,13 +167,13 @@ export const publishProfileCard = async (dotYouClient: DotYouClient) => { })) .filter((link) => link.type && link.url); - await publishProfileCardFile(dotYouClient, { - name: displayName || dotYouClient.getHostIdentity(), + await publishProfileCardFile(odinClient, { + name: displayName || odinClient.getHostIdentity(), givenName: (givenName?.length && givenName) || undefined, familyName: (familyName?.length && familyName) || undefined, bio: bios?.[0] || '', bioSummary: bioSummaries?.[0] || '', - image: `https://${dotYouClient.getHostIdentity()}/pub/image`, + image: `https://${odinClient.getHostIdentity()}/pub/image`, email: emails, links: [...socials, ...links], sameAs: [...socials] @@ -186,7 +186,7 @@ export const GetProfileCard = async (odinId: string): Promise { @@ -212,9 +212,9 @@ export const GetProfileCard = async (odinId: string): Promise { +export const publishProfileImage = async (odinClient: OdinClient) => { const profilePhotoAttributes = await getProfileAttributes( - dotYouClient, + odinClient, BuiltInProfiles.StandardProfileId, BuiltInProfiles.PersonalInfoSectionId, [BuiltInAttributes.Photo] @@ -238,7 +238,7 @@ export const publishProfileImage = async (dotYouClient: DotYouClient) => { ?.contentType === 'image/svg+xml'; const imageData = await getDecryptedImageData( - dotYouClient, + odinClient, GetTargetDriveFromProfileId(BuiltInProfiles.StandardProfileId), publicProfilePhotoAttr.fileId as string, fileKey, @@ -258,14 +258,14 @@ export const publishProfileImage = async (dotYouClient: DotYouClient) => { ); await publishProfileImageFile( - dotYouClient, + odinClient, new Uint8Array(await resizedJpgData.blob.arrayBuffer()), resizedJpgData.blob.type ); } catch { // Fallback to unresized image await publishProfileImageFile( - dotYouClient, + odinClient, new Uint8Array(imageData.bytes), imageData.contentType ); @@ -278,7 +278,7 @@ export const GetProfileImage = async (odinId: string): Promise try { const httpClient = axios.create(); const fetchProfileCard = async () => { - const host = new DotYouClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot(); + const host = new OdinClient({ hostIdentity: odinId, api: ApiType.Guest }).getRoot(); return await httpClient .get(`${host}/pub/image`, { diff --git a/packages/libs/js-lib/src/public/posts/Channel/PostChannelManager.ts b/packages/libs/js-lib/src/public/posts/Channel/PostChannelManager.ts index 13bd65d6b..b5b4677a5 100644 --- a/packages/libs/js-lib/src/public/posts/Channel/PostChannelManager.ts +++ b/packages/libs/js-lib/src/public/posts/Channel/PostChannelManager.ts @@ -1,7 +1,7 @@ const OdinBlob: typeof Blob = (typeof window !== 'undefined' && 'CustomBlob' in window && (window.CustomBlob as typeof Blob)) || Blob; -import { ApiType, DotYouClient } from '../../../core/DotYouClient'; +import { ApiType, OdinClient } from '../../../core/OdinClient'; import { DEFAULT_PAYLOAD_KEY, MAX_HEADER_CONTENT_BYTES } from '../../../core/constants'; import { getDrivesByType, @@ -34,9 +34,9 @@ import { import { ChannelDefinition, BlogConfig, CollaborativeChannelDefinition } from '../PostTypes'; export const getChannelDefinitions = async ( - dotYouClient: DotYouClient + odinClient: OdinClient ): Promise[]> => { - const drives = await getDrivesByType(dotYouClient, BlogConfig.DriveType, 1, 1000); + const drives = await getDrivesByType(odinClient, BlogConfig.DriveType, 1, 1000); const channelHeaders = drives.results.map((drive) => { return { id: drive.targetDriveInfo.alias, @@ -67,14 +67,14 @@ export const getChannelDefinitions = async ( }; }); - const response = await queryBatchCollection(dotYouClient, queries); + const response = await queryBatchCollection(odinClient, queries); const definitions = await Promise.all( response.results.map(async (response) => { if (response.searchResults.length == 1) { const channelDrive = getChannelDrive(response.name); const dsr = response.searchResults[0]; - return dsrToChannelFile(dotYouClient, dsr, channelDrive, response.includeMetadataHeader); + return dsrToChannelFile(odinClient, dsr, channelDrive, response.includeMetadataHeader); } }) ); @@ -85,18 +85,18 @@ export const getChannelDefinitions = async ( }; export const getChannelDefinition = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelId: string ): Promise | undefined> => - await getChannelDefinitionInternal(dotYouClient, channelId); + await getChannelDefinitionInternal(odinClient, channelId); -export const getChannelDefinitionBySlug = async (dotYouClient: DotYouClient, slug: string) => { - const channels = await getChannelDefinitions(dotYouClient); +export const getChannelDefinitionBySlug = async (odinClient: OdinClient, slug: string) => { + const channels = await getChannelDefinitions(odinClient); return channels.find((channel) => channel.fileMetadata.appData.content.slug === slug); }; export const saveChannelDefinition = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, definition: NewHomebaseFile, onMissingDrive?: () => void ): Promise => { @@ -113,14 +113,14 @@ export const saveChannelDefinition = async ( const encrypt = !( definition.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Anonymous || + SecurityGroupType.Anonymous || definition.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Authenticated + SecurityGroupType.Authenticated ); const targetDrive = GetTargetDriveFromChannelId(definition.fileMetadata.appData.uniqueId); const existingChannelDef = await getChannelDefinitionInternal( - dotYouClient, + odinClient, definition.fileMetadata.appData.uniqueId ); const fileId = existingChannelDef?.fileId; @@ -128,7 +128,7 @@ export const saveChannelDefinition = async ( if (!fileId) { // Channel doesn't exist yet, we need to check if the drive does exist and if there is access: - const securityContext = await getSecurityContext(dotYouClient); + const securityContext = await getSecurityContext(odinClient); if ( !securityContext?.permissionContext.permissionGroups.some((x) => x.driveGrants.some((driveGrant) => @@ -136,9 +136,9 @@ export const saveChannelDefinition = async ( ) ) ) { - if (dotYouClient.getType() === ApiType.Owner) { + if (odinClient.getType() === ApiType.Owner) { await ensureDrive( - dotYouClient, + odinClient, targetDrive, channelContent.name, channelContent.description, @@ -184,17 +184,17 @@ export const saveChannelDefinition = async ( }; const result = await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, shouldEmbedContent ? undefined : [ - { - payload: new OdinBlob([payloadBytes], { type: 'application/json' }), - key: DEFAULT_PAYLOAD_KEY, - }, - ], + { + payload: new OdinBlob([payloadBytes], { type: 'application/json' }), + key: DEFAULT_PAYLOAD_KEY, + }, + ], undefined, encrypt ); @@ -203,13 +203,13 @@ export const saveChannelDefinition = async ( return result; }; -export const removeChannelDefinition = async (dotYouClient: DotYouClient, channelId: string) => { +export const removeChannelDefinition = async (odinClient: OdinClient, channelId: string) => { if (stringGuidsEqual(channelId, BlogConfig.PublicChannelId)) throw new Error(`Remove Channel: can't remove default channel`); - const channelData = await getChannelDefinitionInternal(dotYouClient, channelId); + const channelData = await getChannelDefinitionInternal(odinClient, channelId); if (channelData?.fileId) { - deleteFile(dotYouClient, GetTargetDriveFromChannelId(channelId), channelData.fileId); + deleteFile(odinClient, GetTargetDriveFromChannelId(channelId), channelData.fileId); // TODO Should remove the Drive itself as well } else { throw new Error(`Remove Channel: Channel with id: ${channelId} not found`); @@ -229,7 +229,7 @@ export const GetTargetDriveFromChannelId = (channelId: string): TargetDrive => { // Internals: const getChannelDefinitionInternal = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelId: string ): Promise | undefined> => { const targetDrive = GetTargetDriveFromChannelId(channelId); @@ -246,11 +246,11 @@ const getChannelDefinitionInternal = async ( }; try { - const response = await queryBatch(dotYouClient, params, ro); + const response = await queryBatch(odinClient, params, ro); if (response.searchResults.length == 1) { const dsr = response.searchResults[0]; - return dsrToChannelFile(dotYouClient, dsr, targetDrive, response.includeMetadataHeader); + return dsrToChannelFile(odinClient, dsr, targetDrive, response.includeMetadataHeader); } } catch { // Catch al, as targetDrive might be inaccesible (when it doesn't exist yet) @@ -260,13 +260,13 @@ const getChannelDefinitionInternal = async ( }; export const dsrToChannelFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | undefined> => { const definitionContent = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader diff --git a/packages/libs/js-lib/src/public/posts/Channel/PostCollaborativeChannelsManager.ts b/packages/libs/js-lib/src/public/posts/Channel/PostCollaborativeChannelsManager.ts index 6ced028d0..c1d67ad32 100644 --- a/packages/libs/js-lib/src/public/posts/Channel/PostCollaborativeChannelsManager.ts +++ b/packages/libs/js-lib/src/public/posts/Channel/PostCollaborativeChannelsManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { FileQueryParams } from '../../../core/DriveData/Drive/DriveTypes'; import { deleteFile } from '../../../core/DriveData/File/DriveFileManager'; import { getContentFromHeaderOrPayload } from '../../../core/DriveData/File/DriveFileProvider'; @@ -19,14 +19,14 @@ import { getRandom16ByteArray, jsonStringify64, toGuidId } from '../../../helper import { BlogConfig, RemoteCollaborativeChannelDefinition } from '../PostTypes'; export const getChannelLinkDefinitions = async ( - dotYouClient: DotYouClient + odinClient: OdinClient ): Promise[] | null> => { const params: FileQueryParams = { targetDrive: BlogConfig.FeedDrive, fileType: [BlogConfig.RemoteChannelDefinitionFileType], }; - const response = await queryBatch(dotYouClient, params); + const response = await queryBatch(odinClient, params); if (!response.searchResults.length) { return null; @@ -35,14 +35,14 @@ export const getChannelLinkDefinitions = async ( return ( await Promise.all( response.searchResults.map((dsr) => - dsrToChannelLink(dotYouClient, dsr, response.includeMetadataHeader) + dsrToChannelLink(odinClient, dsr, response.includeMetadataHeader) ) ) ).filter(Boolean) as HomebaseFile[]; }; export const saveChannelLink = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, definition: NewHomebaseFile ): Promise => { const channelContent = definition.fileMetadata.appData.content; @@ -78,7 +78,7 @@ export const saveChannelLink = async ( }; const result = await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, undefined, @@ -91,20 +91,20 @@ export const saveChannelLink = async ( }; export const removeChannelLink = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelLink: HomebaseFile ) => { - return await deleteFile(dotYouClient, BlogConfig.FeedDrive, channelLink.fileId); + return await deleteFile(odinClient, BlogConfig.FeedDrive, channelLink.fileId); }; const dsrToChannelLink = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, includeMetadataHeader: boolean ): Promise | undefined> => { const definitionContent = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, BlogConfig.FeedDrive, dsr, includeMetadataHeader diff --git a/packages/libs/js-lib/src/public/posts/PostProvider.ts b/packages/libs/js-lib/src/public/posts/PostProvider.ts index 35a01450c..ca37c07ac 100644 --- a/packages/libs/js-lib/src/public/posts/PostProvider.ts +++ b/packages/libs/js-lib/src/public/posts/PostProvider.ts @@ -10,7 +10,7 @@ import { import { CursoredResult, deleteFile, - DotYouClient, + OdinClient, HomebaseFile, FileQueryParams, GetBatchQueryResultOptions, @@ -28,7 +28,7 @@ import { toGuidId } from '../../helpers/DataUtil'; //Gets posts. if type is specified, returns a filtered list of the requested type; otherwise all types are returned export const getPosts = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelId: string, type: PostType | undefined, includeDrafts: true | 'only' | false, @@ -56,13 +56,13 @@ export const getPosts = async ( sorting: 'userDate', }; - const response = await queryBatch(dotYouClient, params, ro); + const response = await queryBatch(odinClient, params, ro); const posts: HomebaseFile[] = ( await Promise.all( response.searchResults.map( async (dsr) => - await dsrToPostFile(dotYouClient, dsr, targetDrive, response.includeMetadataHeader) + await dsrToPostFile(odinClient, dsr, targetDrive, response.includeMetadataHeader) ) ) ).filter((post) => !!post) as HomebaseFile[]; @@ -72,7 +72,7 @@ export const getPosts = async ( //Gets posts across all channels, ordered by date export const getRecentPosts = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, type: PostType | undefined, includeDrafts: true | 'only' | false, cursorState: Record | undefined = undefined, @@ -80,7 +80,7 @@ export const getRecentPosts = async ( channels?: HomebaseFile[], includeHiddenChannels = false ): Promise[]>> => { - const chnls = channels || (await getChannelDefinitions(dotYouClient)); + const chnls = channels || (await getChannelDefinitions(odinClient)); const allCursors: Record = {}; const queries = chnls @@ -114,7 +114,7 @@ export const getRecentPosts = async ( }; }); - const response = await queryBatchCollection(dotYouClient, queries); + const response = await queryBatchCollection(odinClient, queries); const postsPerChannel = await Promise.all( response.results.map(async (result) => { const targetDrive = GetTargetDriveFromChannelId(result.name); @@ -123,7 +123,7 @@ export const getRecentPosts = async ( await Promise.all( result.searchResults.map( async (dsr) => - await dsrToPostFile(dotYouClient, dsr, targetDrive, result.includeMetadataHeader) + await dsrToPostFile(odinClient, dsr, targetDrive, result.includeMetadataHeader) ) ) ).filter((post) => !!post) as HomebaseFile[]; @@ -145,30 +145,30 @@ export const getRecentPosts = async ( }; export const getPostByFileId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelId: string, fileId: string ): Promise | null> => { const targetDrive = GetTargetDriveFromChannelId(channelId); - const header = await getFileHeader(dotYouClient, targetDrive, fileId); - if (header) return await dsrToPostFile(dotYouClient, header, targetDrive, true); + const header = await getFileHeader(odinClient, targetDrive, fileId); + if (header) return await dsrToPostFile(odinClient, header, targetDrive, true); return null; }; export const getPostByGlobalTransitId = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelId: string, globalTransitId: string ): Promise | null> => { const targetDrive = GetTargetDriveFromChannelId(channelId); - const header = await getFileHeaderByGlobalTransitId(dotYouClient, targetDrive, globalTransitId); - if (header) return await dsrToPostFile(dotYouClient, header, targetDrive, true); + const header = await getFileHeaderByGlobalTransitId(odinClient, targetDrive, globalTransitId); + if (header) return await dsrToPostFile(odinClient, header, targetDrive, true); return null; }; //Gets the content for a given post id export const getPost = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelId: string, id: string ): Promise | null> => { @@ -179,7 +179,7 @@ export const getPost = async ( fileType: [BlogConfig.PostFileType, BlogConfig.DraftPostFileType], }; - const response = await queryBatch(dotYouClient, params); + const response = await queryBatch(odinClient, params); if (response.searchResults.length >= 1) { if (response.searchResults.length > 1) { @@ -187,28 +187,28 @@ export const getPost = async ( } const dsr = response.searchResults[0]; - return await dsrToPostFile(dotYouClient, dsr, targetDrive, response.includeMetadataHeader); + return await dsrToPostFile(odinClient, dsr, targetDrive, response.includeMetadataHeader); } return null; }; export const getPostBySlug = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, channelId: string, postSlug: string ): Promise | null> => { const targetDrive = GetTargetDriveFromChannelId(channelId); - const dsr = await getFileHeaderBytesByUniqueId(dotYouClient, targetDrive, toGuidId(postSlug), { + const dsr = await getFileHeaderBytesByUniqueId(odinClient, targetDrive, toGuidId(postSlug), { decrypt: false, }); if (!dsr) return null; - return await dsrToPostFile(dotYouClient, dsr, targetDrive, true); + return await dsrToPostFile(odinClient, dsr, targetDrive, true); }; export const removePost = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, postFile: HomebaseFile, channelId: string ) => { @@ -218,7 +218,7 @@ export const removePost = async ( // Fetch the first 1000 comments and delete their level 2 replies by groupId; const comments = ( await queryBatch( - dotYouClient, + odinClient, { targetDrive: targetDrive, groupId: [postFile.fileMetadata.globalTransitId], @@ -231,7 +231,7 @@ export const removePost = async ( ).searchResults; await deleteFilesByGroupId( - dotYouClient, + odinClient, targetDrive, [ ...(comments.map((cmnt) => cmnt.fileMetadata.globalTransitId).filter(Boolean) as string[]), @@ -242,20 +242,20 @@ export const removePost = async ( ); } - return await deleteFile(dotYouClient, targetDrive, postFile.fileId); + return await deleteFile(odinClient, targetDrive, postFile.fileId); }; /// export const dsrToPostFile = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { try { const postContent = await getContentFromHeaderOrPayload( - dotYouClient, + odinClient, targetDrive, dsr, includeMetadataHeader diff --git a/packages/libs/js-lib/src/public/posts/Reaction/PostCommentReactionManager.ts b/packages/libs/js-lib/src/public/posts/Reaction/PostCommentReactionManager.ts index 8af3728e6..5aa6503c3 100644 --- a/packages/libs/js-lib/src/public/posts/Reaction/PostCommentReactionManager.ts +++ b/packages/libs/js-lib/src/public/posts/Reaction/PostCommentReactionManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { getRandom16ByteArray, uint8ArrayToBase64 } from '../../../helpers/DataUtil'; import { createThumbnails } from '../../../media/Thumbs/ThumbnailProvider'; import { @@ -48,14 +48,14 @@ const COMMENT_MEDIA_PAYLOAD = 'cmmnt_md'; /* Adding a comment might fail if the referencedFile isn't available anymore (ACL got updates, post got deleted...) */ export const saveComment = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, context: ReactionContext, comment: | Omit, 'serverMetadata'> | HomebaseFile ): Promise => { const encrypt = context.target.isEncrypted; - const isLocal = context.odinId === dotYouClient.getHostIdentity(); + const isLocal = context.odinId === odinClient.getHostIdentity(); const targetDrive = GetTargetDriveFromChannelId(context.channelId); const payloads: PayloadFile[] = []; @@ -134,7 +134,7 @@ export const saveComment = async ( // Use owner/guest endpoint for reactions if the post to comment on is on the current root identity if (comment.fileId && comment.fileMetadata.globalTransitId) { const result = await patchFile( - dotYouClient, + odinClient, comment.sharedSecretEncryptedKeyHeader, { file: { @@ -156,7 +156,7 @@ export const saveComment = async ( return comment.fileMetadata.globalTransitId; } else { const result = await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, payloads, @@ -177,14 +177,14 @@ export const saveComment = async ( const remoteHeader = comment.fileMetadata.globalTransitId ? await getFileHeaderOverPeerByGlobalTransitId( - dotYouClient, - context.odinId, - targetDrive, - comment.fileMetadata.globalTransitId, - { - systemFileType: 'Comment', - } - ) + odinClient, + context.odinId, + targetDrive, + comment.fileMetadata.globalTransitId, + { + systemFileType: 'Comment', + } + ) : null; let result; @@ -208,7 +208,7 @@ export const saveComment = async ( metadata ); result = await patchFile( - dotYouClient, + odinClient, remoteHeader?.fileMetadata.isEncrypted ? remoteHeader?.sharedSecretEncryptedKeyHeader : undefined, @@ -228,7 +228,7 @@ export const saveComment = async ( }; result = await uploadFileOverPeer( - dotYouClient, + odinClient, instructionSet, metadata, payloads, @@ -249,22 +249,22 @@ export const saveComment = async ( }; export const removeComment = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, context: ReactionContext, commentFile: HomebaseFile ) => { - const isLocal = context.odinId === dotYouClient.getHostIdentity(); + const isLocal = context.odinId === odinClient.getHostIdentity(); const targetDrive = GetTargetDriveFromChannelId(context.channelId); if (isLocal) { if (!commentFile.fileId) return; - return await deleteFile(dotYouClient, targetDrive, commentFile.fileId, undefined, 'Comment'); + return await deleteFile(odinClient, targetDrive, commentFile.fileId, undefined, 'Comment'); } else { if (!commentFile.fileMetadata.globalTransitId) return; return await deleteFileOverPeer( - dotYouClient, + odinClient, targetDrive, commentFile.fileMetadata.globalTransitId, [context.odinId], @@ -274,12 +274,12 @@ export const removeComment = async ( }; export const getComments = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, context: ReactionContext, pageSize = 25, cursorState?: string ): Promise<{ comments: HomebaseFile[]; cursorState: string }> => { - const isLocal = context.odinId === dotYouClient.getHostIdentity(); + const isLocal = context.odinId === odinClient.getHostIdentity(); const targetDrive = GetTargetDriveFromChannelId(context.channelId); const qp: FileQueryParams = { targetDrive: targetDrive, @@ -294,13 +294,13 @@ export const getComments = async ( }; const result = isLocal - ? await queryBatch(dotYouClient, qp, ro) - : await queryBatchOverPeer(dotYouClient, context.odinId, qp, ro); + ? await queryBatch(odinClient, qp, ro) + : await queryBatchOverPeer(odinClient, context.odinId, qp, ro); const comments: HomebaseFile[] = ( await Promise.all( result.searchResults.map(async (dsr) => - dsrToComment(dotYouClient, context.odinId, dsr, targetDrive, result.includeMetadataHeader) + dsrToComment(odinClient, context.odinId, dsr, targetDrive, result.includeMetadataHeader) ) ) ).filter((attr) => !!attr) as HomebaseFile[]; @@ -309,19 +309,19 @@ export const getComments = async ( }; export const dsrToComment = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, dsr: HomebaseFile, targetDrive: TargetDrive, includeMetadataHeader: boolean ): Promise | null> => { - const isLocal = odinId === dotYouClient.getHostIdentity(); + const isLocal = odinId === odinClient.getHostIdentity(); const params = [targetDrive, dsr, includeMetadataHeader] as const; const contentData = isLocal - ? await getContentFromHeaderOrPayload(dotYouClient, ...params) - : await getContentFromHeaderOrPayloadOverPeer(dotYouClient, odinId, ...params); + ? await getContentFromHeaderOrPayload(odinClient, ...params) + : await getContentFromHeaderOrPayloadOverPeer(odinClient, odinId, ...params); if (!contentData) return null; diff --git a/packages/libs/js-lib/src/public/posts/Reaction/PostEmojiReactionManager.ts b/packages/libs/js-lib/src/public/posts/Reaction/PostEmojiReactionManager.ts index 822993e8a..bad23ce12 100644 --- a/packages/libs/js-lib/src/public/posts/Reaction/PostEmojiReactionManager.ts +++ b/packages/libs/js-lib/src/public/posts/Reaction/PostEmojiReactionManager.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { deleteReaction, uploadReaction } from '../../../core/ReactionData/ReactionService'; import { tryJsonParse } from '../../../helpers/DataUtil'; import { getChannelDrive, GetTargetDriveFromChannelId } from '../Channel/PostChannelManager'; @@ -14,34 +14,34 @@ interface ServerReactionsSummary { const emojiRootTransit = '/transit/reactions'; const emojiRoot = '/drive/files/reactions'; export const saveEmojiReaction = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, emoji: RawReactionContent, context: ReactionContext ): Promise => { - return uploadReaction(dotYouClient, emoji.body, context.odinId, { + return uploadReaction(odinClient, emoji.body, context.odinId, { ...context.target, targetDrive: getChannelDrive(context.channelId), }); }; export const removeEmojiReaction = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, emoji: RawReactionContent, context: ReactionContext ): Promise => { - return deleteReaction(dotYouClient, emoji, context.odinId, { + return deleteReaction(odinClient, emoji, context.odinId, { ...context.target, targetDrive: getChannelDrive(context.channelId), }); }; export const getReactionSummary = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, context: ReactionContext ): Promise => { - const isLocal = context.odinId === dotYouClient.getHostIdentity(); + const isLocal = context.odinId === odinClient.getHostIdentity(); - const client = dotYouClient.createAxiosClient(); + const client = odinClient.createAxiosClient(); const data = { file: { @@ -76,7 +76,7 @@ export const getReactionSummary = async ( }; }) .catch((e) => { - dotYouClient.handleErrorResponse(e); + odinClient.handleErrorResponse(e); return { reactions: [], totalCount: 0 }; }); } else { @@ -102,21 +102,21 @@ export const getReactionSummary = async ( }; }) .catch((e) => { - dotYouClient.handleErrorResponse(e); + odinClient.handleErrorResponse(e); return { reactions: [], totalCount: 0 }; }); } }; export const getMyReactions = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string | undefined, context: ReactionContext, pageSize = 15, cursor?: string ): Promise => { - const isLocal = context.odinId === dotYouClient.getHostIdentity(); - const client = dotYouClient.createAxiosClient(); + const isLocal = context.odinId === odinClient.getHostIdentity(); + const client = odinClient.createAxiosClient(); const data = { file: { @@ -124,7 +124,7 @@ export const getMyReactions = async ( fileId: context.target.fileId, globalTransitId: context.target.globalTransitId, }, - identity: odinId || dotYouClient.getHostIdentity(), + identity: odinId || odinClient.getHostIdentity(), cursor: cursor, maxRecords: pageSize, }; @@ -138,7 +138,7 @@ export const getMyReactions = async ( (emojiString) => tryJsonParse<{ emoji: string }>(emojiString).emoji ); }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); } else { const url = emojiRootTransit + '/listbyidentity'; return client @@ -148,6 +148,6 @@ export const getMyReactions = async ( (emojiString) => tryJsonParse<{ emoji: string }>(emojiString).emoji ); }) - .catch(dotYouClient.handleErrorResponse); + .catch(odinClient.handleErrorResponse); } }; diff --git a/packages/libs/js-lib/src/public/posts/Upload/PostUploadHelpers.ts b/packages/libs/js-lib/src/public/posts/Upload/PostUploadHelpers.ts index da1975660..965acf4e9 100644 --- a/packages/libs/js-lib/src/public/posts/Upload/PostUploadHelpers.ts +++ b/packages/libs/js-lib/src/public/posts/Upload/PostUploadHelpers.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { HomebaseFile, EmbeddedThumb, @@ -64,8 +64,8 @@ export const getPayloadForLinkPreview = async ( const imageBlob = imageUrl ? new Blob([base64ToUint8Array(imageUrl.split(',')[1])], { - type: imageUrl.split(';')[0].split(':')[1], - }) + type: imageUrl.split(';')[0].split(':')[1], + }) : undefined; const { tinyThumb } = imageBlob @@ -83,23 +83,23 @@ export const getPayloadForLinkPreview = async ( }; export const hasConflictingSlug = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string | undefined, file: HomebaseFile | NewHomebaseFile, channelId: string ) => { const existingPostWithThisSlug = odinId ? await getPostBySlugOverPeer( - dotYouClient, - odinId, - channelId, - file.fileMetadata.appData.content.slug ?? file.fileMetadata.appData.content.id - ) + odinClient, + odinId, + channelId, + file.fileMetadata.appData.content.slug ?? file.fileMetadata.appData.content.id + ) : await getPostBySlug( - dotYouClient, - channelId, - file.fileMetadata.appData.content.slug ?? file.fileMetadata.appData.content.id - ); + odinClient, + channelId, + file.fileMetadata.appData.content.slug ?? file.fileMetadata.appData.content.id + ); if (!existingPostWithThisSlug) { return false; @@ -112,9 +112,9 @@ export const hasConflictingSlug = async ( ) && (odinId ? !stringGuidsEqual( - existingPostWithThisSlug?.fileMetadata.globalTransitId, - file?.fileMetadata.globalTransitId - ) + existingPostWithThisSlug?.fileMetadata.globalTransitId, + file?.fileMetadata.globalTransitId + ) : !stringGuidsEqual(existingPostWithThisSlug?.fileId, file.fileId)) ); }; @@ -133,7 +133,7 @@ export const getUploadFileMetadata = async ( const encrypt = !( file.serverMetadata?.accessControlList?.requiredSecurityGroup === SecurityGroupType.Anonymous || file.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Authenticated + SecurityGroupType.Authenticated ); const payloadJson: string = jsonStringify64({ ...file.fileMetadata.appData.content }); diff --git a/packages/libs/js-lib/src/public/posts/Upload/PostUploader.test.ts b/packages/libs/js-lib/src/public/posts/Upload/PostUploader.test.ts index 7310097ff..6c021faf1 100644 --- a/packages/libs/js-lib/src/public/posts/Upload/PostUploader.test.ts +++ b/packages/libs/js-lib/src/public/posts/Upload/PostUploader.test.ts @@ -1,6 +1,6 @@ import { test, expect, vi, describe } from 'vitest'; import { savePost } from './PostUploader'; -import { ApiType, DotYouClient } from '../../../core/DotYouClient'; +import { ApiType, OdinClient } from '../../../core/OdinClient'; import { BlogConfig, Tweet } from '../PostTypes'; import { encryptKeyHeader } from '../../../core/DriveData/SecurityHelpers'; import { @@ -37,7 +37,7 @@ vi.mock('axios', () => ({ default: mockAxios, })); -const dotYouClient = new DotYouClient({ +const odinClient = new OdinClient({ api: ApiType.Guest, hostIdentity: 'example.com', sharedSecret: new Uint8Array(16).fill(1), @@ -94,7 +94,7 @@ const existingPostFile: HomebaseFile = { fileId: 'c18bfab0-2f02-42b7-a21b-bec77756a0a1', fileSystemType: 'Standard', sharedSecretEncryptedKeyHeader: await encryptKeyHeader( - dotYouClient, + odinClient, { aesKey: new Uint8Array(16).fill(1), iv: new Uint8Array(16).fill(1) }, new Uint8Array(16).fill(1) ), @@ -123,7 +123,7 @@ describe('PostUploader for local files', () => { }, }); - await savePost(dotYouClient, newPostFile, undefined, channelId); + await savePost(odinClient, newPostFile, undefined, channelId); expect(mockAxios.post.mock.calls.length).toBe(1); expect(mockAxios.post.mock.calls[0][0]).toBe('/drive/files/upload'); }); @@ -155,7 +155,7 @@ describe('PostUploader for local files', () => { }, }); - await savePost(dotYouClient, existingPostFile, undefined, channelId); + await savePost(odinClient, existingPostFile, undefined, channelId); expect(mockAxios.patch.mock.calls.length).toBe(1); expect(mockAxios.patch.mock.calls[0][0]).toBe('/drive/files/update'); const formDataBody = mockAxios.patch.mock.calls[0][1]; @@ -210,7 +210,7 @@ describe('PostUploader for local files', () => { }, }); - await savePost(dotYouClient, existPostFileWithPayloads, undefined, channelId); + await savePost(odinClient, existPostFileWithPayloads, undefined, channelId); expect(mockAxios.patch.mock.calls.length).toBe(1); expect(mockAxios.patch.mock.calls[0][0]).toBe('/drive/files/update'); @@ -253,7 +253,7 @@ describe('PostUploader for local files', () => { }, ]; - await savePost(dotYouClient, existingPostFile, undefined, channelId, toSaveFiles); + await savePost(odinClient, existingPostFile, undefined, channelId, toSaveFiles); expect(mockAxios.patch.mock.calls.length).toBe(1); expect(mockAxios.patch.mock.calls[0][0]).toBe('/drive/files/update'); @@ -284,7 +284,7 @@ describe('PostUploader for local files', () => { } as NewHomebaseFile; await expect( - savePost(dotYouClient, newPostFileMissingInfo, undefined, channelId) + savePost(odinClient, newPostFileMissingInfo, undefined, channelId) ).rejects.toThrow(); }); @@ -297,7 +297,7 @@ describe('PostUploader for local files', () => { data: null, }, }); - await expect(savePost(dotYouClient, existingPostFile, undefined, channelId)).rejects.toThrow( + await expect(savePost(odinClient, existingPostFile, undefined, channelId)).rejects.toThrow( '[odin-js] PostUploader: Cannot update a post that does not exist' ); }); @@ -306,7 +306,7 @@ describe('PostUploader for local files', () => { vi.clearAllMocks(); await expect( - savePost(dotYouClient, existingPostFile, undefined, 'some channel id') + savePost(odinClient, existingPostFile, undefined, 'some channel id') ).rejects.toThrow('GetTargetDriveFromChannelId: Invalid channelId: "some channel id"'); }); }); @@ -337,7 +337,7 @@ describe('PostUploader for remote files', () => { }, }); - await savePost(dotYouClient, newPostFile, 'collaborative.com', channelId); + await savePost(odinClient, newPostFile, 'collaborative.com', channelId); // expect(mockAxios.post.mock.calls.length).toBe(1); // expect(mockAxios.post.mock.calls[0][0]).toBe('/transit/sender/files/send'); }); @@ -364,7 +364,7 @@ describe('PostUploader for remote files', () => { }, }); - await savePost(dotYouClient, existingPostFile, 'collaborative.com', channelId); + await savePost(odinClient, existingPostFile, 'collaborative.com', channelId); expect(mockAxios.patch.mock.calls.length).toBe(1); expect(mockAxios.patch.mock.calls[0][0]).toBe('/drive/files/update'); const formDataBody = mockAxios.patch.mock.calls[0][1]; @@ -379,7 +379,7 @@ describe('PostUploader for remote files', () => { await expect( savePost( - dotYouClient, + odinClient, { ...existingPostFile, fileMetadata: { ...existingPostFile.fileMetadata, globalTransitId: undefined }, diff --git a/packages/libs/js-lib/src/public/posts/Upload/PostUploader.ts b/packages/libs/js-lib/src/public/posts/Upload/PostUploader.ts index dedf39994..ebed3467f 100644 --- a/packages/libs/js-lib/src/public/posts/Upload/PostUploader.ts +++ b/packages/libs/js-lib/src/public/posts/Upload/PostUploader.ts @@ -1,4 +1,4 @@ -import { DotYouClient } from '../../../core/DotYouClient'; +import { OdinClient } from '../../../core/OdinClient'; import { patchFile, uploadFile } from '../../../core/DriveData/Upload/DriveFileUploader'; import { PriorityOptions, @@ -45,7 +45,7 @@ import { export const POST_LINKS_PAYLOAD_KEY = 'pst_links'; export const savePost = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, file: HomebaseFile | NewHomebaseFile, odinId: string | undefined, channelId: string, @@ -59,7 +59,7 @@ export const savePost = async ( throw new Error('[odin-js] PostUploader: ACL is required to save a post'); if (!file.fileMetadata.appData.content.authorOdinId) - file.fileMetadata.appData.content.authorOdinId = dotYouClient.getHostIdentity(); + file.fileMetadata.appData.content.authorOdinId = odinClient.getHostIdentity(); if (!file.fileMetadata.appData.content.id) { // The content id is set once, and then never updated to keep the permalinks correct at all times; Even when the slug changes @@ -69,12 +69,12 @@ export const savePost = async ( } else if (!file.fileId && !odinId) { // Check if fileMetadata.appData.content.id already exists and with which fileId if it does file.fileId = - (await getPost(dotYouClient, channelId, file.fileMetadata.appData.content.id))?.fileId ?? + (await getPost(odinClient, channelId, file.fileMetadata.appData.content.id))?.fileId ?? undefined; } if (!file.fileMetadata.appData.content.authorOdinId) - file.fileMetadata.appData.content.authorOdinId = dotYouClient.getHostIdentity(); + file.fileMetadata.appData.content.authorOdinId = odinClient.getHostIdentity(); // Delete embeddedPost of embeddedPost (we don't want to embed an embed) if (file.fileMetadata.appData.content.embeddedPost) { @@ -88,7 +88,7 @@ export const savePost = async ( ); } return await updatePost( - dotYouClient, + odinClient, odinId, file as HomebaseFile, channelId, @@ -104,7 +104,7 @@ export const savePost = async ( } return await uploadPost( - dotYouClient, + odinClient, odinId, file as NewHomebaseFile, channelId, @@ -116,7 +116,7 @@ export const savePost = async ( }; const uploadPost = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string | undefined, file: NewHomebaseFile, channelId: string, @@ -130,7 +130,7 @@ const uploadPost = async ( const encrypt = !( file.serverMetadata?.accessControlList?.requiredSecurityGroup === SecurityGroupType.Anonymous || file.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Authenticated + SecurityGroupType.Authenticated ); const payloads: PayloadFile[] = []; @@ -154,10 +154,10 @@ const uploadPost = async ( if (file.fileMetadata.appData.content.type !== 'Article') { file.fileMetadata.appData.content.primaryMediaFile = payloads[0] ? { - fileId: undefined, - fileKey: payloads[0].key, - type: payloads[0].payload.type, - } + fileId: undefined, + fileKey: payloads[0].key, + type: payloads[0].payload.type, + } : undefined; } @@ -178,11 +178,10 @@ const uploadPost = async ( }, }; - if (await hasConflictingSlug(dotYouClient, odinId, file, channelId)) { + if (await hasConflictingSlug(odinClient, odinId, file, channelId)) { // There is clash with an existing slug - file.fileMetadata.appData.content.slug = `${ - file.fileMetadata.appData.content.slug - }-${new Date().getTime()}`; + file.fileMetadata.appData.content.slug = `${file.fileMetadata.appData.content.slug + }-${new Date().getTime()}`; } const { metadata, defaultPayload } = await getUploadFileMetadata(odinId, file, previewThumbnail); @@ -190,7 +189,7 @@ const uploadPost = async ( if (!odinId) { const result = await uploadFile( - dotYouClient, + odinClient, instructionSet, metadata, payloads, @@ -212,7 +211,7 @@ const uploadPost = async ( }; const result = await uploadFileOverPeer( - dotYouClient, + odinClient, transitInstructionSet, metadata, payloads, @@ -227,7 +226,7 @@ const uploadPost = async ( }; const updatePost = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, remoteOdinId: string | undefined, file: HomebaseFile, channelId: string, @@ -235,17 +234,17 @@ const updatePost = async ( onVersionConflict?: () => void, onUpdate?: (progress: number) => void ): Promise => { - const odinId = remoteOdinId === dotYouClient.getHostIdentity() ? undefined : remoteOdinId; + const odinId = remoteOdinId === odinClient.getHostIdentity() ? undefined : remoteOdinId; const targetDrive = GetTargetDriveFromChannelId(channelId); const header = odinId ? await getFileHeaderBytesOverPeerByGlobalTransitId( - dotYouClient, - odinId, - targetDrive, - file.fileMetadata.globalTransitId as string - ) - : await getFileHeader(dotYouClient, targetDrive, file.fileId as string); + odinClient, + odinId, + targetDrive, + file.fileMetadata.globalTransitId as string + ) + : await getFileHeader(odinClient, targetDrive, file.fileId as string); if (!header) throw new Error('[odin-js] PostUploader: Cannot update a post that does not exist'); @@ -294,7 +293,7 @@ const updatePost = async ( } return await patchPost( - dotYouClient, + odinClient, odinId, file, channelId, @@ -305,7 +304,7 @@ const updatePost = async ( }; const patchPost = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string | undefined, file: HomebaseFile, channelId: string, @@ -317,14 +316,13 @@ const patchPost = async ( const encrypt = !( file.serverMetadata?.accessControlList?.requiredSecurityGroup === SecurityGroupType.Anonymous || file.serverMetadata?.accessControlList?.requiredSecurityGroup === - SecurityGroupType.Authenticated + SecurityGroupType.Authenticated ); - if (await hasConflictingSlug(dotYouClient, odinId, file, channelId)) { + if (await hasConflictingSlug(odinClient, odinId, file, channelId)) { // There is clash with an existing slug - file.fileMetadata.appData.content.slug = `${ - file.fileMetadata.appData.content.slug - }-${new Date().getTime()}`; + file.fileMetadata.appData.content.slug = `${file.fileMetadata.appData.content.slug + }-${new Date().getTime()}`; } const payloads: PayloadFile[] = []; @@ -336,7 +334,7 @@ const patchPost = async ( // decrypt keyheader; const decryptedKeyHeader = encryptedKeyHeader - ? await decryptKeyHeader(dotYouClient, encryptedKeyHeader) + ? await decryptKeyHeader(odinClient, encryptedKeyHeader) : undefined; const { @@ -376,27 +374,27 @@ const patchPost = async ( const instructionSet: UpdateInstructionSet = odinId ? { - transferIv: getRandom16ByteArray(), - locale: 'peer', - file: { - globalTransitId: file.fileMetadata.globalTransitId as string, - targetDrive, - }, - versionTag: file.fileMetadata.versionTag, - recipients: [odinId], - } + transferIv: getRandom16ByteArray(), + locale: 'peer', + file: { + globalTransitId: file.fileMetadata.globalTransitId as string, + targetDrive, + }, + versionTag: file.fileMetadata.versionTag, + recipients: [odinId], + } : { - transferIv: getRandom16ByteArray(), - locale: 'local', - file: { - fileId: file.fileId, - targetDrive, - }, - versionTag: file.fileMetadata.versionTag, - }; + transferIv: getRandom16ByteArray(), + locale: 'local', + file: { + fileId: file.fileId, + targetDrive, + }, + versionTag: file.fileMetadata.versionTag, + }; const updateResult = await patchFile( - dotYouClient, + odinClient, encryptedKeyHeader, instructionSet, metadata, diff --git a/packages/libs/ui-lib/src/components/OdinAudio/OdinAudio.tsx b/packages/libs/ui-lib/src/components/OdinAudio/OdinAudio.tsx index 179d7ea12..f6ff353fb 100644 --- a/packages/libs/ui-lib/src/components/OdinAudio/OdinAudio.tsx +++ b/packages/libs/ui-lib/src/components/OdinAudio/OdinAudio.tsx @@ -1,4 +1,4 @@ -import { TargetDrive, SystemFileType, DotYouClient } from '@homebase-id/js-lib/core'; +import { TargetDrive, SystemFileType, OdinClient } from '@homebase-id/js-lib/core'; import { useAudio } from '../../hooks/audio/useAudio'; export interface AudioSource { @@ -21,12 +21,12 @@ export interface OdinAudioProps extends AudioSource, React.DetailedHTMLProps, HTMLAudioElement> { probablyEncrypted?: boolean; - dotYouClient: DotYouClient; + odinClient: OdinClient; } export const OdinAudio = (props: OdinAudioProps) => { const { - dotYouClient, + odinClient, odinId, fileId, globalTransitId, @@ -39,7 +39,7 @@ export const OdinAudio = (props: OdinAudioProps) => { ...elementProps } = props; const { data: audioUrl } = useAudio( - dotYouClient, + odinClient, odinId, fileId, globalTransitId, diff --git a/packages/libs/ui-lib/src/components/OdinAudio/OdinAudioWaveForm.tsx b/packages/libs/ui-lib/src/components/OdinAudio/OdinAudioWaveForm.tsx index c1d4d29eb..b34bb0708 100644 --- a/packages/libs/ui-lib/src/components/OdinAudio/OdinAudioWaveForm.tsx +++ b/packages/libs/ui-lib/src/components/OdinAudio/OdinAudioWaveForm.tsx @@ -1,19 +1,19 @@ import { useEffect, useMemo, useRef, useState } from 'react'; import { AudioSource } from './OdinAudio'; -import { DotYouClient } from '@homebase-id/js-lib/core'; +import { OdinClient } from '@homebase-id/js-lib/core'; import { useAudio } from '../../hooks/audio/useAudio'; export interface OdinAudioWaveformProps extends AudioSource, React.DetailedHTMLProps, HTMLDivElement> { probablyEncrypted?: boolean; - dotYouClient: DotYouClient; + odinClient: OdinClient; isDarkMode: boolean; } export const OdinAudioWaveForm = (props: OdinAudioWaveformProps) => { const { - dotYouClient, + odinClient, odinId, fileId, globalTransitId, @@ -28,7 +28,7 @@ export const OdinAudioWaveForm = (props: OdinAudioWaveformProps) => { } = props; const { data: audioData } = useAudio( - dotYouClient, + odinClient, odinId, fileId, globalTransitId, diff --git a/packages/libs/ui-lib/src/components/OdinImage/OdinPayloadImage.tsx b/packages/libs/ui-lib/src/components/OdinImage/OdinPayloadImage.tsx index 59bf12674..10cba357c 100644 --- a/packages/libs/ui-lib/src/components/OdinImage/OdinPayloadImage.tsx +++ b/packages/libs/ui-lib/src/components/OdinImage/OdinPayloadImage.tsx @@ -1,4 +1,4 @@ -import { DotYouClient, ImageSize } from '@homebase-id/js-lib/core'; +import { OdinClient, ImageSize } from '@homebase-id/js-lib/core'; import { useImage } from '../../hooks/image/useImage'; import { useEffect } from 'react'; import { ImageEvents, ImageSource } from './types'; @@ -10,7 +10,7 @@ export interface OdinPayloadImageProps React.DetailedHTMLProps, HTMLImageElement>, 'onError' > { - dotYouClient: DotYouClient; + odinClient: OdinClient; naturalSize?: ImageSize; } @@ -18,7 +18,7 @@ export interface OdinPayloadImageProps // Component to render a tiny thumb image; // Uses either the previewThumbnail provided or fetches the thumbnail from the server export const OdinPayloadImage = ({ - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -39,7 +39,7 @@ export const OdinPayloadImage = ({ error: imageError, isFetched: isImageFetched, } = useImage({ - dotYouClient, + odinClient, odinId, imageFileId: fileId, imageGlobalTransitId: globalTransitId, diff --git a/packages/libs/ui-lib/src/components/OdinImage/OdinPreviewImage.tsx b/packages/libs/ui-lib/src/components/OdinImage/OdinPreviewImage.tsx index a4acd186b..a6e2bdb06 100644 --- a/packages/libs/ui-lib/src/components/OdinImage/OdinPreviewImage.tsx +++ b/packages/libs/ui-lib/src/components/OdinImage/OdinPreviewImage.tsx @@ -1,4 +1,4 @@ -import { DotYouClient, EmbeddedThumb, ImageSize } from '@homebase-id/js-lib/core'; +import { OdinClient, EmbeddedThumb, ImageSize } from '@homebase-id/js-lib/core'; import { useTinyThumb } from '../../hooks/image/useTinyThumb'; import { forwardRef, useEffect, useMemo, useRef } from 'react'; import { useImageCache } from '../../hooks/image/useImage'; @@ -16,7 +16,7 @@ export interface OdinPreviewImageProps >, 'onLoad' > { - dotYouClient: DotYouClient; + odinClient: OdinClient; blockFetchFromServer?: boolean; blur?: 'auto' | 'none'; @@ -32,7 +32,7 @@ const isDebug = hasDebugFlag(); export const OdinPreviewImage = forwardRef( ( { - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -64,7 +64,7 @@ export const OdinPreviewImage = forwardRef( [previewThumbnail] ); - const { getFromCache } = useImageCache(dotYouClient); + const { getFromCache } = useImageCache(odinClient); const cachedImage = useMemo( () => fileId && fileKey @@ -79,7 +79,7 @@ export const OdinPreviewImage = forwardRef( error: tinyError, isFetched: isTinyFetched, } = useTinyThumb( - dotYouClient, + odinClient, odinId, fetchTinyFromServer ? fileId : undefined, globalTransitId, diff --git a/packages/libs/ui-lib/src/components/OdinImage/OdinThumbnailImage.tsx b/packages/libs/ui-lib/src/components/OdinImage/OdinThumbnailImage.tsx index 5805b8c07..d1dc9387f 100644 --- a/packages/libs/ui-lib/src/components/OdinImage/OdinThumbnailImage.tsx +++ b/packages/libs/ui-lib/src/components/OdinImage/OdinThumbnailImage.tsx @@ -1,4 +1,4 @@ -import { DotYouClient, ImageSize } from '@homebase-id/js-lib/core'; +import { OdinClient, ImageSize } from '@homebase-id/js-lib/core'; import { useImage } from '../../hooks/image/useImage'; import { useEffect } from 'react'; import { ImageEvents, ImageSource } from './types'; @@ -10,7 +10,7 @@ export interface OdinThumbnailImageProps React.DetailedHTMLProps, HTMLImageElement>, 'onError' > { - dotYouClient: DotYouClient; + odinClient: OdinClient; loadSize: ImageSize | undefined; naturalSize?: ImageSize; @@ -19,7 +19,7 @@ export interface OdinThumbnailImageProps // Component to render a tiny thumb image; // Uses either the previewThumbnail provided or fetches the thumbnail from the server export const OdinThumbnailImage = ({ - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -43,7 +43,7 @@ export const OdinThumbnailImage = ({ error: imageError, isFetched: isImageFetched, } = useImage({ - dotYouClient, + odinClient, odinId, imageFileId: fetchThumb ? fileId : undefined, imageGlobalTransitId: fetchThumb ? globalTransitId : undefined, diff --git a/packages/libs/ui-lib/src/components/OdinVideo/DirectSource.tsx b/packages/libs/ui-lib/src/components/OdinVideo/DirectSource.tsx index 2701dfd87..aaffc886c 100644 --- a/packages/libs/ui-lib/src/components/OdinVideo/DirectSource.tsx +++ b/packages/libs/ui-lib/src/components/OdinVideo/DirectSource.tsx @@ -11,7 +11,7 @@ interface OdinDirectProps extends OdinVideoProps { // Plain normal playback of a payload, no MSE, no chunks... export const DirectSource = ({ - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -24,7 +24,7 @@ export const DirectSource = ({ systemFileType, }: OdinDirectProps) => { const { data: videoUrl } = useVideoUrl( - dotYouClient, + odinClient, odinId, fileId, globalTransitId, diff --git a/packages/libs/ui-lib/src/components/OdinVideo/EncryptedMseSource.tsx b/packages/libs/ui-lib/src/components/OdinVideo/EncryptedMseSource.tsx index 733e3d3d5..26e1df94f 100644 --- a/packages/libs/ui-lib/src/components/OdinVideo/EncryptedMseSource.tsx +++ b/packages/libs/ui-lib/src/components/OdinVideo/EncryptedMseSource.tsx @@ -10,7 +10,7 @@ interface OdinEncryptedMseProps extends OdinVideoProps { } export const EncryptedMseSource = ({ - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -23,7 +23,7 @@ export const EncryptedMseSource = ({ lastModified, }: OdinEncryptedMseProps) => { const { getChunk } = useVideo( - dotYouClient, + odinClient, odinId, fileId, globalTransitId, diff --git a/packages/libs/ui-lib/src/components/OdinVideo/HlsSource.tsx b/packages/libs/ui-lib/src/components/OdinVideo/HlsSource.tsx index 36909deb1..0a736b2dd 100644 --- a/packages/libs/ui-lib/src/components/OdinVideo/HlsSource.tsx +++ b/packages/libs/ui-lib/src/components/OdinVideo/HlsSource.tsx @@ -13,7 +13,7 @@ interface OdinHlsProps extends OdinVideoProps { } export const HlsSource = ({ - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -26,7 +26,7 @@ export const HlsSource = ({ lastModified, }: OdinHlsProps) => { const { data: hlsManifest } = useHlsManifest( - dotYouClient, + odinClient, odinId, fileId, globalTransitId, @@ -50,9 +50,9 @@ export const HlsSource = ({ () => hls.isSupported(), // hls.isSupported() // && (!videoRef.current?.canPlayType('application/vnd.apple.mpegurl') || - // (dotYouClient.getType() === ApiType.App && + // (odinClient.getType() === ApiType.App && // odinId && - // odinId !== dotYouClient.getHostIdentity())), + // odinId !== odinClient.getHostIdentity())), [videoRef] ); @@ -61,7 +61,7 @@ export const HlsSource = ({ if (videoRef.current) { const hlsInstance = new hls({ xhrSetup: (xhr) => { - const headers: Record = dotYouClient.getHeaders(); + const headers: Record = odinClient.getHeaders(); for (const [key, value] of Object.entries(headers)) { xhr.setRequestHeader(key, value); } diff --git a/packages/libs/ui-lib/src/components/OdinVideo/MseSource.tsx b/packages/libs/ui-lib/src/components/OdinVideo/MseSource.tsx index fe4ffcedc..9e2578cad 100644 --- a/packages/libs/ui-lib/src/components/OdinVideo/MseSource.tsx +++ b/packages/libs/ui-lib/src/components/OdinVideo/MseSource.tsx @@ -10,7 +10,7 @@ interface OdinMseProps extends OdinVideoProps { } export const MseSource = ({ - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -22,7 +22,7 @@ export const MseSource = ({ systemFileType, }: OdinMseProps) => { const { data: videoUrl } = useVideoUrl( - dotYouClient, + odinClient, odinId, fileId, globalTransitId, diff --git a/packages/libs/ui-lib/src/components/OdinVideo/OdinVideo.tsx b/packages/libs/ui-lib/src/components/OdinVideo/OdinVideo.tsx index 7b1c2631b..a571e6c17 100644 --- a/packages/libs/ui-lib/src/components/OdinVideo/OdinVideo.tsx +++ b/packages/libs/ui-lib/src/components/OdinVideo/OdinVideo.tsx @@ -1,4 +1,4 @@ -import { DotYouClient, HomebaseFile, SystemFileType, TargetDrive } from '@homebase-id/js-lib/core'; +import { OdinClient, HomebaseFile, SystemFileType, TargetDrive } from '@homebase-id/js-lib/core'; import { SegmentedVideoMetadata } from '@homebase-id/js-lib/media'; import { useEffect, useMemo, useRef, useState } from 'react'; import { useIntersection } from '../../hooks/intersection/useIntersection'; @@ -14,7 +14,7 @@ import { MseSource } from './MseSource'; import { HlsSource } from './HlsSource'; export interface OdinVideoProps { - dotYouClient: DotYouClient; + odinClient: OdinClient; odinId?: string; systemFileType?: SystemFileType; targetDrive: TargetDrive; @@ -35,7 +35,7 @@ export interface OdinVideoProps { const MB = 1000000; export const OdinVideo = (videoProps: OdinVideoProps) => { const { - dotYouClient, + odinClient, odinId, targetDrive, fileId, @@ -63,7 +63,7 @@ export const OdinVideo = (videoProps: OdinVideoProps) => { const { fetchMetadata: { data, isFetched: videoMetaDataFetched }, } = useVideo( - dotYouClient, + odinClient, odinId, isInView ? fileId : undefined, globalTransitId, diff --git a/packages/libs/ui-lib/src/hooks/audio/useAudio.ts b/packages/libs/ui-lib/src/hooks/audio/useAudio.ts index e5158e2ff..9b28c8f4c 100644 --- a/packages/libs/ui-lib/src/hooks/audio/useAudio.ts +++ b/packages/libs/ui-lib/src/hooks/audio/useAudio.ts @@ -2,7 +2,7 @@ import { useQuery, UseQueryResult } from '@tanstack/react-query'; import { TargetDrive, SystemFileType, - DotYouClient, + OdinClient, getPayloadBytes, } from '@homebase-id/js-lib/core'; import { getDecryptedMediaUrl } from '@homebase-id/js-lib/media'; @@ -14,7 +14,7 @@ import { } from '@homebase-id/js-lib/peer'; export const useAudio = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId?: string, fileId?: string | undefined, globalTransitId?: string | undefined, @@ -29,7 +29,7 @@ export const useAudio = ( fetchUrl: UseQueryResult; fetch: UseQueryResult<{ bytes: Uint8Array; contentType: string } | null, Error>; } => { - const localHost = dotYouClient.getHostIdentity(); + const localHost = odinClient.getHostIdentity(); const fetchAudioData = async ( odinId: string, @@ -44,24 +44,24 @@ export const useAudio = ( return odinId !== localHost ? globalTransitId ? await getPayloadBytesOverPeerByGlobalTransitId( - dotYouClient, - odinId, - drive, - globalTransitId, - fileKey, - { - systemFileType, - lastModified, - } - ) - : await getPayloadBytesOverPeer(dotYouClient, odinId, drive, fileId, fileKey, { + odinClient, + odinId, + drive, + globalTransitId, + fileKey, + { systemFileType, lastModified, - }) - : await getPayloadBytes(dotYouClient, drive, fileId, fileKey, { + } + ) + : await getPayloadBytesOverPeer(odinClient, odinId, drive, fileId, fileKey, { systemFileType, lastModified, - }); + }) + : await getPayloadBytes(odinClient, drive, fileId, fileKey, { + systemFileType, + lastModified, + }); }; const fetchAudioUrl = async ( @@ -78,31 +78,20 @@ export const useAudio = ( return odinId !== localHost ? globalTransitId ? await getDecryptedMediaUrlOverPeerByGlobalTransitId( - dotYouClient, - odinId, - drive, - globalTransitId, - fileKey, - probablyEncrypted, - lastModified, - { - systemFileType, - } - ) + odinClient, + odinId, + drive, + globalTransitId, + fileKey, + probablyEncrypted, + lastModified, + { + systemFileType, + } + ) : await getDecryptedMediaUrlOverPeer( - dotYouClient, - odinId, - drive, - fileId, - fileKey, - probablyEncrypted, - lastModified, - { - systemFileType, - } - ) - : await getDecryptedMediaUrl( - dotYouClient, + odinClient, + odinId, drive, fileId, fileKey, @@ -111,7 +100,18 @@ export const useAudio = ( { systemFileType, } - ); + ) + : await getDecryptedMediaUrl( + odinClient, + drive, + fileId, + fileKey, + probablyEncrypted, + lastModified, + { + systemFileType, + } + ); }; return { diff --git a/packages/libs/ui-lib/src/hooks/image/useImage.ts b/packages/libs/ui-lib/src/hooks/image/useImage.ts index 6460734d9..eb35c5f10 100644 --- a/packages/libs/ui-lib/src/hooks/image/useImage.ts +++ b/packages/libs/ui-lib/src/hooks/image/useImage.ts @@ -1,6 +1,6 @@ import { useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'; -import { ImageSize, TargetDrive, DotYouClient, SystemFileType } from '@homebase-id/js-lib/core'; +import { ImageSize, TargetDrive, OdinClient, SystemFileType } from '@homebase-id/js-lib/core'; import { getDecryptedImageUrl } from '@homebase-id/js-lib/media'; import { getDecryptedImageUrlOverPeer, @@ -12,8 +12,8 @@ interface ImageData { naturalSize?: ImageSize; } -export const useImageCache = (dotYouClient: DotYouClient) => { - const localHost = dotYouClient.getHostIdentity(); +export const useImageCache = (odinClient: OdinClient) => { + const localHost = odinClient.getHostIdentity(); const queryClient = useQueryClient(); return { @@ -45,7 +45,7 @@ export const useImageCache = (dotYouClient: DotYouClient) => { }; export const useImage = (props: { - dotYouClient: DotYouClient; + odinClient: OdinClient; odinId?: string; imageFileId?: string | undefined; imageGlobalTransitId?: string | undefined; @@ -59,7 +59,7 @@ export const useImage = (props: { preferObjectUrl?: boolean; }): { fetch: UseQueryResult } => { const { - dotYouClient, + odinClient, odinId, imageFileId, imageGlobalTransitId, @@ -73,7 +73,7 @@ export const useImage = (props: { preferObjectUrl, } = props; - const localHost = dotYouClient.getHostIdentity(); + const localHost = odinClient.getHostIdentity(); const queryClient = useQueryClient(); const checkIfWeHaveLargerCachedImage = ( @@ -167,37 +167,24 @@ export const useImage = (props: { odinId !== localHost ? imageGlobalTransitId ? await getDecryptedImageUrlOverPeerByGlobalTransitId( - dotYouClient, - odinId, - imageDrive, - imageGlobalTransitId, - imageFileKey, - - probablyEncrypted, - - lastModified, - { - size, - systemFileType, - preferObjectUrl, - } - ) + odinClient, + odinId, + imageDrive, + imageGlobalTransitId, + imageFileKey, + + probablyEncrypted, + + lastModified, + { + size, + systemFileType, + preferObjectUrl, + } + ) : await getDecryptedImageUrlOverPeer( - dotYouClient, - odinId, - imageDrive, - imageFileId, - imageFileKey, - probablyEncrypted, - lastModified, - { - size, - systemFileType, - preferObjectUrl, - } - ) - : await getDecryptedImageUrl( - dotYouClient, + odinClient, + odinId, imageDrive, imageFileId, imageFileKey, @@ -208,7 +195,20 @@ export const useImage = (props: { systemFileType, preferObjectUrl, } - ), + ) + : await getDecryptedImageUrl( + odinClient, + imageDrive, + imageFileId, + imageFileKey, + probablyEncrypted, + lastModified, + { + size, + systemFileType, + preferObjectUrl, + } + ), naturalSize: naturalSize, }; }; diff --git a/packages/libs/ui-lib/src/hooks/image/useTinyThumb.ts b/packages/libs/ui-lib/src/hooks/image/useTinyThumb.ts index 6680ffa4c..ed65abd05 100644 --- a/packages/libs/ui-lib/src/hooks/image/useTinyThumb.ts +++ b/packages/libs/ui-lib/src/hooks/image/useTinyThumb.ts @@ -1,11 +1,11 @@ import { useQuery, UseQueryResult } from '@tanstack/react-query'; -import { TargetDrive, DotYouClient, SystemFileType } from '@homebase-id/js-lib/core'; +import { TargetDrive, OdinClient, SystemFileType } from '@homebase-id/js-lib/core'; import { getDecryptedThumbnailMeta, ThumbnailMeta } from '@homebase-id/js-lib/media'; import { getDecryptedThumbnailMetaOverPeer } from '@homebase-id/js-lib/peer'; export const useTinyThumb = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId?: string, imageFileId?: string, imageGlobalTransitId?: string, @@ -13,7 +13,7 @@ export const useTinyThumb = ( imageDrive?: TargetDrive, systemFileType?: SystemFileType ): UseQueryResult => { - const localHost = dotYouClient.getHostIdentity(); + const localHost = odinClient.getHostIdentity(); const fetchImageData = async ( odinId: string, @@ -35,7 +35,7 @@ export const useTinyThumb = ( if (odinId !== localHost) return ( (await getDecryptedThumbnailMetaOverPeer( - dotYouClient, + odinClient, odinId, imageDrive, imageFileId, @@ -47,7 +47,7 @@ export const useTinyThumb = ( return ( (await getDecryptedThumbnailMeta( - dotYouClient, + odinClient, imageDrive, imageFileId, imageFileKey, diff --git a/packages/libs/ui-lib/src/hooks/video/useHlsManifest.ts b/packages/libs/ui-lib/src/hooks/video/useHlsManifest.ts index 6be381f39..91268c8b8 100644 --- a/packages/libs/ui-lib/src/hooks/video/useHlsManifest.ts +++ b/packages/libs/ui-lib/src/hooks/video/useHlsManifest.ts @@ -1,6 +1,6 @@ import { useQuery, UseQueryResult } from '@tanstack/react-query'; import { - DotYouClient, + OdinClient, HomebaseFile, SystemFileType, TargetDrive, @@ -16,7 +16,7 @@ import { getAnonymousDirectImageUrl } from '@homebase-id/js-lib/media'; import { useVideo } from './useVideo'; export const useHlsManifest = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId?: string, videoFileId?: string | undefined, videoGlobalTransitId?: string | undefined, @@ -25,9 +25,9 @@ export const useHlsManifest = ( systemFileType?: SystemFileType, lastModified?: number ): { fetch: UseQueryResult } => { - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const { data: videoFileData, isFetched: videoFileDataFetched } = useVideo( - dotYouClient, + odinClient, odinId, videoFileId, videoGlobalTransitId, @@ -60,7 +60,7 @@ export const useHlsManifest = ( videoFileData?.metadata.hlsPlaylist, async (url) => (await getSegmentUrl( - dotYouClient, + odinClient, odinId, videoDrive, videoFile.fileId, @@ -71,7 +71,7 @@ export const useHlsManifest = ( async (url) => { if (!videoFileData?.fileHeader.sharedSecretEncryptedKeyHeader) return url; const keyHeader = await decryptKeyHeader( - dotYouClient, + odinClient, videoFileData?.fileHeader.sharedSecretEncryptedKeyHeader ); @@ -145,7 +145,7 @@ const replaceSegmentUrls = async ( }; const getSegmentUrl = async ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId: string, videoDrive: TargetDrive, videoFileId: string, @@ -153,7 +153,7 @@ const getSegmentUrl = async ( isEncrypted: boolean, systemFileType?: SystemFileType ) => { - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); if (!isEncrypted) return await getAnonymousDirectImageUrl( odinId || identity, @@ -164,7 +164,7 @@ const getSegmentUrl = async ( systemFileType ); - const ss = dotYouClient.getSharedSecret(); + const ss = odinClient.getSharedSecret(); if (!ss) { return null; } @@ -178,8 +178,8 @@ const getSegmentUrl = async ( const unenryptedThumbUrl = odinId !== identity - ? `${dotYouClient.getEndpoint()}/transit/query/payload?${stringifyToQueryParams({ odinId, ...params })}` - : `${dotYouClient.getEndpoint()}/drive/files/payload?${stringifyToQueryParams(params)}`; + ? `${odinClient.getEndpoint()}/transit/query/payload?${stringifyToQueryParams({ odinId, ...params })}` + : `${odinClient.getEndpoint()}/drive/files/payload?${stringifyToQueryParams(params)}`; return InterceptionEncryptionUtil.encryptUrl(unenryptedThumbUrl, ss); }; diff --git a/packages/libs/ui-lib/src/hooks/video/useVideo.ts b/packages/libs/ui-lib/src/hooks/video/useVideo.ts index 16106f257..8f69cf164 100644 --- a/packages/libs/ui-lib/src/hooks/video/useVideo.ts +++ b/packages/libs/ui-lib/src/hooks/video/useVideo.ts @@ -1,6 +1,6 @@ import { useQuery, UseQueryResult } from '@tanstack/react-query'; import { - DotYouClient, + OdinClient, HomebaseFile, SystemFileType, TargetDrive, @@ -23,7 +23,7 @@ import { } from '@homebase-id/js-lib/peer'; export const useVideo = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId?: string, videoFileId?: string | undefined, videoGlobalTransitId?: string | undefined, @@ -41,7 +41,7 @@ export const useVideo = ( >; getChunk: (chunkStart: number, chunkEnd?: number) => Promise | null; } => { - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const fetchVideoData = async ( odinId: string, @@ -68,16 +68,16 @@ export const useVideo = ( odinId !== identity ? videoGlobalTransitId ? await getFileHeaderBytesOverPeerByGlobalTransitId( - dotYouClient, - odinId, - videoDrive, - videoGlobalTransitId, - { systemFileType } - ) - : await getFileHeaderOverPeer(dotYouClient, odinId, videoDrive, videoFileId, { - systemFileType, - }) - : await getFileHeader(dotYouClient, videoDrive, videoFileId, { systemFileType }); + odinClient, + odinId, + videoDrive, + videoGlobalTransitId, + { systemFileType } + ) + : await getFileHeaderOverPeer(odinClient, odinId, videoDrive, videoFileId, { + systemFileType, + }) + : await getFileHeader(odinClient, videoDrive, videoFileId, { systemFileType }); if (!fileHeader) return undefined; const payloadData = fileHeader.fileMetadata.payloads?.find((p) => p.key === videoFileKey); @@ -129,14 +129,14 @@ export const useVideo = ( systemFileType, ] as const; return odinId && odinId !== identity - ? getDecryptedVideoChunkOverPeer(dotYouClient, odinId, ...params) - : getDecryptedVideoChunk(dotYouClient, ...params); + ? getDecryptedVideoChunkOverPeer(odinClient, odinId, ...params) + : getDecryptedVideoChunk(odinClient, ...params); }, }; }; export const useVideoUrl = ( - dotYouClient: DotYouClient, + odinClient: OdinClient, odinId?: string, videoFileId?: string | undefined, videoGlobalTransitId?: string | undefined, @@ -146,7 +146,7 @@ export const useVideoUrl = ( systemFileType?: SystemFileType, lastModified?: number ): { fetch: UseQueryResult } => { - const identity = dotYouClient.getHostIdentity(); + const identity = odinClient.getHostIdentity(); const fetchVideoData = async ( odinId: string, @@ -167,33 +167,33 @@ export const useVideoUrl = ( return odinId !== identity ? videoGlobalTransitId ? await getDecryptedVideoUrlOverPeerByGlobalTransitId( - dotYouClient, - odinId, - videoDrive, - videoGlobalTransitId, - videoFileKey, + odinClient, + odinId, + videoDrive, + videoGlobalTransitId, + videoFileKey, - systemFileType, - fileSizeLimit - ) + systemFileType, + fileSizeLimit + ) : await getDecryptedVideoUrlOverPeer( - dotYouClient, - odinId, - videoDrive, - videoFileId, - videoFileKey, - systemFileType, - fileSizeLimit - ) - : await getDecryptedVideoUrl( - dotYouClient, + odinClient, + odinId, videoDrive, videoFileId, videoFileKey, - undefined, - fileSizeLimit, - { systemFileType } - ); + systemFileType, + fileSizeLimit + ) + : await getDecryptedVideoUrl( + odinClient, + videoDrive, + videoFileId, + videoFileKey, + undefined, + fileSizeLimit, + { systemFileType } + ); }; return await fetchUrl(); From f8ebfb7b7bfebe34388e0a4c46cd7c5694968b1c Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Thu, 24 Apr 2025 10:39:12 +0530 Subject: [PATCH 2/3] fix fix --- package-lock.json | 2 +- .../community-app/src/providers/CommunityMetadataProvider.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 013d8b1ab..5a958c7a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21851,7 +21851,7 @@ }, "packages/libs/js-lib": { "name": "@homebase-id/js-lib", - "version": "0.0.7-alpha.52", + "version": "0.0.8-alpha.1", "dependencies": { "guid-typescript": "^1.0.9" }, diff --git a/packages/apps/community-app/src/providers/CommunityMetadataProvider.ts b/packages/apps/community-app/src/providers/CommunityMetadataProvider.ts index 06bc631a4..1f3ec4734 100644 --- a/packages/apps/community-app/src/providers/CommunityMetadataProvider.ts +++ b/packages/apps/community-app/src/providers/CommunityMetadataProvider.ts @@ -123,7 +123,7 @@ export const uploadCommunityMetadata = async ( locale: 'local' } - const patchResult = await patchFile(dotYouClient, encryptedKeyHeader, patchInstructions, metadata, payloads, undefined, undefined, onVersionConflicht as () => Promise, + const patchResult = await patchFile(odinClient, encryptedKeyHeader, patchInstructions, metadata, payloads, undefined, undefined, onVersionConflicht as () => Promise, ); if (!patchResult) throw new Error(`Upload failed`); return patchResult; From 3729dfd4c1bf262272f21c04064177792a41b3e2 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Thu, 24 Apr 2025 11:05:43 +0530 Subject: [PATCH 3/3] fix one more instance of dotyouclient --- .../apps/community-app/src/providers/CommunityDraftsProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apps/community-app/src/providers/CommunityDraftsProvider.ts b/packages/apps/community-app/src/providers/CommunityDraftsProvider.ts index cc29574d4..0af040bce 100644 --- a/packages/apps/community-app/src/providers/CommunityDraftsProvider.ts +++ b/packages/apps/community-app/src/providers/CommunityDraftsProvider.ts @@ -104,7 +104,7 @@ export const uploadCommunityDrafts = async ( locale: 'local' } - const patchResult = await patchFile(dotYouClient, encryptedKeyHeader, patchInstructions, metadata, payloads, undefined, undefined, onVersionConflicht as () => Promise, + const patchResult = await patchFile(odinClient, encryptedKeyHeader, patchInstructions, metadata, payloads, undefined, undefined, onVersionConflicht as () => Promise, ); if (!patchResult) throw new Error(`Upload failed`); return patchResult;