feat: add profile and contacts fetching from pubky#476
Open
ben-kaufman wants to merge 27 commits intomasterfrom
Open
feat: add profile and contacts fetching from pubky#476ben-kaufman wants to merge 27 commits intomasterfrom
ben-kaufman wants to merge 27 commits intomasterfrom
Conversation
ovitrif
previously approved these changes
Mar 11, 2026
Collaborator
ovitrif
left a comment
There was a problem hiding this comment.
LGTM with some nit comments.
all tests worked great, tested:
- open profile from topbar + drawer
- 2x auth successes
- button to download ring
- share pk button(s)
- signout button
This comment has been minimized.
This comment has been minimized.
9cebb74 to
78b4078
Compare
- Profile creation with restore flow (detects existing remote profile) - Ring auth flow with contact import overview and selection screens - Pay Contacts onboarding step after profile creation and Ring import - Session restoration with re-sign-in recovery, preserving session on failure - Toast notification when session restoration fails - Lightbulb icon and tag suggestion button placement fixes - Edit profile error message fix - PubkyProfileData backward-compatible decoding (tags field defaults to []) - New tests for PubkyProfileData encoding/decoding Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
78b4078 to
71f063f
Compare
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Show "Loading your profile…" instead of "Waiting for authorization…" once Ring approves, and hide the cancel button during data fetch. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v0.1.53's Package.swift references v0.1.54 binaries which don't exist. v0.1.52 correctly references its own release binaries. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PubkyAuthDetails.kind is now PubkyAuthKind enum instead of String. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
287007d to
a44b1ed
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Integrates Pubky decentralized identity into Bitkit, allowing users to create a Bitkit-managed profile or connect via Pubky Ring authentication. Once connected, the user's profile name and avatar appear on the home screen header, a full profile page shows their bio, links, tags, and shareable QR code, and a contacts section lists people they follow on the Pubky network.
What's included
pubkyauth://)PubkyService— service layer wrappingpaykit-ffi(profile/contacts/payments) andbitkit-core(auth relay, PKDNS file fetching, key derivation)PubkyProfileManager— manages auth state, session lifecycle, key derivation, profile creation/editing, and remote profile fetchingContactsManager— fetches contacts in parallel viawithTaskGroup, groups alphabetically, supports add/edit/delete/import, discovers remote contacts from pubky.appPubkyImagecomponent for loadingpubky://URIs with two-tier (memory + disk) cachingPubkyProfileDatabackward-compatible decoding —tagsfield defaults to empty array when missing from JSON (older profiles, other clients)New dependencies
paykit-rs(SPM, pinned revision) — Pubky SDK for profile, contacts, and payment operationsCoreBluetoothframework (linker flag, required by paykit-rs)Key new files
Services/PubkyService.swiftManagers/PubkyProfileManager.swiftManagers/ContactsManager.swiftModels/PubkyProfile.swiftModels/PubkyAuthRequest.swiftComponents/PubkyImage.swiftpubky://image loader with disk+memory cacheViews/Profile/ProfileView.swiftViews/Profile/CreateProfileView.swiftViews/Profile/EditProfileView.swiftViews/Profile/PayContactsView.swiftViews/Profile/PubkyChoiceView.swiftViews/Profile/PubkyRingAuthView.swiftViews/Profile/AddLinkSheet.swiftViews/Profile/AddProfileTagSheet.swiftViews/Contacts/ContactsListView.swiftViews/Contacts/ContactDetailView.swiftViews/Contacts/ContactImportOverviewView.swiftViews/Contacts/ContactImportSelectView.swiftViews/Contacts/AddContactView.swiftViews/Contacts/EditContactView.swiftViews/Sheets/PubkyAuthApproval/PubkyAuthApprovalSheet.swiftBitkitTests/PubkyModelTests.swiftBitkitTests/PubkyProfileManagerTests.swiftBitkitTests/PubkyAuthRequestTests.swiftTest plan
🤖 Generated with Claude Code