feat: add subscription requests - #736
Merged
Merged
Conversation
6 tasks
This PR is not safe to merge until subscription creation avoids orphaned public icon uploads and canceled creator subscriptions retain an accessible payment history. Findings
|
8 tasks
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
jvsena42
enabled auto-merge
September 14, 2026 14:21
Contributor
Author
|
Checked this path. |
jvsena42
approved these changes
Sep 14, 2026
ovitrif
disabled auto-merge
September 15, 2026 06:51
ben-kaufman
enabled auto-merge (squash)
September 15, 2026 07:12
ben-kaufman
force-pushed
the
codex/paykit-subscription-requests
branch
2 times, most recently
from
September 15, 2026 07:14
949cfea to
091b62e
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.
Description
This PR adds subscription proposals to contacts, building on the payer flow merged in #685.
Discover, autopay and renewal UI are intentionally excluded. Icon hosting is public by design. Adds one changelog fragment.
Base:
master, including the merged payer PR. No additional unmerged branch dependency.Custom icon limits
Custom subscription icons remain enabled. Paykit rc54 stops successful Pubky file responses once they exceed the caller's limit. iOS applies a 1 MiB limit to both the descriptor and image blob, requires descriptor redirects to stay in the same Pubky namespace, decodes images to at most 512 pixels, and caps its memory and disk LRU caches at 32 MiB each.
The current Pubky HTTP client can still buffer an unbounded error response body before Paykit receives it. Transport buffers and the current response chunk can also use memory beyond the retained file bytes.
Safe publication and cleanup remain unresolved. Avatar filenames are shared by content, and a proposal call can fail after enqueueing. Deleting an uploaded image on every error could break another profile or a queued proposal. The remaining publication and cleanup work, plus the corresponding Android integration for #1239 or its merged successor, is deferred. This PR does not fix those risks or claim complete security readiness.
Linked Issues/Tasks
Design
Screenshot / Video
Recordings are silent at 4× speed using test wallets. All attached media was inspected and shows only Bitkit, including its keyboard; no device home screen, photo picker or other app is included.
Final keyboard and recipient behavior:
ios-keyboard-fix-4x.mp4
Final recipient and keyboard screenshots
Earlier create → recipient → sent → overview walkthrough
This walkthrough predates the final keyboard and recipient sizing/spacing corrections. The recording and screenshots above show those final corrections.
ios-figma-audit-4x.mp4
QA Notes
Manual Tests
Live regtest creation/delivery/acceptance/manual on-chain payment, public icon transfer and cancellation passed in both directions with Android. Latest-build confirmation, pending deletion and restart also passed. Offline draft retention/retry was tested on Android. Live Lightning, mainnet and production push were not tested.
Automated Checks
PaykitSubscriptionProposalTests.swiftcovers UTF-8 wire boundaries, escaped strings, reserved icon space and image downsampling/errors.PaykitPaymentRequestServiceTests.swiftcovers creator lifecycle, validation before upload/enqueue and proof aggregation, including fractional billing instants.DEBUG E2E_BUILD,E2E_BACKEND=network,E2E_NETWORK=regtest; SwiftFormat lint passed for the touched Swift files. This was a focused test run, not the entire iOS suite.