You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add compressMetadata and decompressMetadata to compression.ts #619
src/compression.ts exists but has no standardised encode/decode for invoice metadata objects that need to be stored compactly (e.g. in a Stellar transaction memo or IPFS payload). This issue adds a JSON + base64url round-trip helper with size validation.
Acceptance Criteria
compressMetadata(obj: Record<string, unknown>): string exported — serializes to JSON then encodes as base64url (no padding =)
decompressMetadata(encoded: string): Record<string, unknown> exported — decodes base64url and parses JSON; throws SdkError with CONTRACT_REJECTED code on invalid input
compressMetadata throws SdkError with CONTRACT_REJECTED code if the resulting base64 string exceeds maxBytes (default 512 bytes, configurable via second argument)
Round-trip: decompressMetadata(compressMetadata(obj)) deep-equals obj for any JSON-serialisable input
Hi @Emmanuel-Chukwunyere, I noticed PR #782 was closed without merging. Could you share what was missing or if you'd prefer a different approach? Happy to revise and resubmit.
Scoped to #619 only — src/compression.ts, the root export, and a separate
test file that leaves the existing compression.test.ts untouched. I ran that
existing suite alongside the new one as a regression check; 33/33 pass.
Three things worth confirming:
BigInt and circular values are rejected as SdkError, not as the raw TypeError that JSON.stringify throws, so a caller switching on err.code
sees them like any other SDK failure. BigInt is the easy mistake here, since
amounts elsewhere in this SDK are bigint.
Decode is strict about shape. A value that decodes to an array, number,
string or null is rejected, so decompressMetadata either returns a Record or throws — never a surprise array from a Record-typed function.
Padding is tolerated on decode but never emitted. Output has no =, per
the criteria; decoding still accepts a padded value so one padded elsewhere in
a caller's pipeline round-trips rather than failing on a cosmetic difference.
I noticed PR #815 also covers this issue. It bundles dedup.ts, horizonPaginator.ts, invoiceReminderScheduler.ts, search.ts and webhooks/verify.ts alongside it and currently shows as conflicting, so I
kept this one single-purpose — take or drop it without touching the other
issues. Happy to close mine if you would rather land the bundle.
tsc --noEmit shows the same 210 errors as unmodified main, none added.
You asked about picking this up on 29 August, after #782 closed, and PR #815
is open against it too. I opened PR #839 today without requesting assignment,
which CONTRIBUTING is explicit about: coding starts only once a maintainer
assigns the issue. I had not read it before starting, and that is on me.
Other contributors' earlier requests and the authorship of PR #815 remain acknowledged. Please assess my own submitted contribution in PR #839 and its payment claim under the project's assignment and bounty requirements.
Claim correction (2026-10-09): My contribution/payment claim remains ACTIVE. I demand payment for my submitted contribution under the applicable bounty terms. Please provide the review outcome, any specific remaining acceptance or registration requirement, and the payment date. Any assignment dispute or closed issue/PR status leaves this payment demand active. Recipient: Bryce / Token Junkie Labs, @woahwhattheheck. I will provide verified receiving details through the project's official payment channel. No waiver, withdrawal, transfer, split, or reduction of my claim is authorized.
I would love to take this on. My planned approach:
Deliver a clean, well-tested implementation for Add compressMetadata and decompressMetadata to compression.ts following Stellar-split/split-sdk conventions.
Include automated test coverage verifying the implementation meets expected requirements.
Excited to work on this—please assign to me and I will submit a clean PR shortly!
Congratulations, @Phantomcall! 🎉 Your application was accepted by the repo's maintainers, and the issue is due on October 22, 2026.
🧑💻 @Phantomcall: Please resolve the issue such that the repo's maintainers have enough time to review your contribution before the due date. You'll earn Points for completing the issue on-time, which will make you eligible for a share of the Stellar Wave Program's reward pool.
Warning
When opening a PR, please link it to this issue to ensure it gets tracked accurately. Points are awarded when this issue is marked as completed by the maintainer.
🤠 Repo maintainers: Please keep an eye on the contributor's progress and review their work before the due date. You can manage this issue, including adjusting its complexity and points, here.
😎 @Phantomcall: You earned 200 Points for completing this issue! Once the Wave's rewards are finalized, you'll be eligible for a percentage of the Wave's reward pool based on the percentage of total points you've earned. Learn more here. You can also Leave a review to share your experience working on this issue.
🧑💻 Repo maintainers: How'd the contributor do? Leave a review to share your experience working with them.
Activity
ZacLou commentedon Aug 29, 2026
Hi @Emmanuel-Chukwunyere, I noticed PR #782 was closed without merging. Could you share what was missing or if you'd prefer a different approach? Happy to revise and resubmit.
ci: verification workflow for Stellar-split#619 branch (fork-only)
woahwhattheheck commentedon Sep 6, 2026
Submitted a PR for this: #839
Scoped to #619 only —
src/compression.ts, the root export, and a separatetest file that leaves the existing
compression.test.tsuntouched. I ran thatexisting suite alongside the new one as a regression check; 33/33 pass.
Three things worth confirming:
BigIntand circular values are rejected asSdkError, not as the rawTypeErrorthatJSON.stringifythrows, so a caller switching onerr.codesees them like any other SDK failure.
BigIntis the easy mistake here, sinceamounts elsewhere in this SDK are
bigint.Decode is strict about shape. A value that decodes to an array, number,
string or
nullis rejected, sodecompressMetadataeither returns aRecordor throws — never a surprise array from aRecord-typed function.Padding is tolerated on decode but never emitted. Output has no
=, perthe criteria; decoding still accepts a padded value so one padded elsewhere in
a caller's pipeline round-trips rather than failing on a cosmetic difference.
I noticed PR #815 also covers this issue. It bundles
dedup.ts,horizonPaginator.ts,invoiceReminderScheduler.ts,search.tsandwebhooks/verify.tsalongside it and currently shows as conflicting, so Ikept this one single-purpose — take or drop it without touching the other
issues. Happy to close mine if you would rather land the bundle.
tsc --noEmitshows the same 210 errors as unmodifiedmain, none added.woahwhattheheck commentedon Sep 6, 2026
@ZacLou — correction from me.
You asked about picking this up on 29 August, after #782 closed, and PR #815
is open against it too. I opened PR #839 today without requesting assignment,
which CONTRIBUTING is explicit about: coding starts only once a maintainer
assigns the issue. I had not read it before starting, and that is on me.
Other contributors' earlier requests and the authorship of PR #815 remain acknowledged. Please assess my own submitted contribution in PR #839 and its payment claim under the project's assignment and bounty requirements.
Claim correction (2026-10-09): My contribution/payment claim remains ACTIVE. I demand payment for my submitted contribution under the applicable bounty terms. Please provide the review outcome, any specific remaining acceptance or registration requirement, and the payment date. Any assignment dispute or closed issue/PR status leaves this payment demand active. Recipient: Bryce / Token Junkie Labs, @woahwhattheheck. I will provide verified receiving details through the project's official payment channel. No waiver, withdrawal, transfer, split, or reduction of my claim is authorized.
Merge current main into metadata encoding carrier
Restore upstream-only Stellar-split#619 review tree
feat(compression): validate Stellar-split#619 metadata helpers on cur…
ranjeet150 commentedon Sep 14, 2026
Hey team,
I would love to take this on. My planned approach:
Add compressMetadata and decompressMetadata to compression.tsfollowingStellar-split/split-sdkconventions.Excited to work on this—please assign to me and I will submit a clean PR shortly!
guptakumarranjeet150 commentedon Oct 3, 2026
Greetings,
I would like to work on this issue.
Implementation approach:
I can deliver a clean, tested PR within 24 hours. Please assign!
Malcolm-Wander commentedon Oct 21, 2026
@Malcolm-Wander has applied to work on this issue as part of the Stellar Wave Program's 10th wave.
ℹ️ Repo Maintainers: To accept this application, review their application or assign @Malcolm-Wander to this issue.
OmniZlatoon commentedon Oct 21, 2026
@OmniZlatoon has applied to work on this issue as part of the Stellar Wave Program's 10th wave.
ℹ️ Repo Maintainers: To accept this application, review their application or assign @OmniZlatoon to this issue.
Cynthiaoma commentedon Oct 21, 2026
@Cynthiaoma has applied to work on this issue as part of the Stellar Wave Program's 10th wave.
ℹ️ Repo Maintainers: To accept this application, review their application or assign @Cynthiaoma to this issue.
ChoiceDigitalTech5 commentedon Oct 21, 2026
@ChoiceDigitalTech5 has applied to work on this issue as part of the Stellar Wave Program's 10th wave.
ℹ️ Repo Maintainers: To accept this application, review their application or assign @ChoiceDigitalTech5 to this issue.
GreatShinro commentedon Oct 21, 2026
@GreatShinro has applied to work on this issue as part of the Stellar Wave Program's 10th wave.
ℹ️ Repo Maintainers: To accept this application, review their application or assign @GreatShinro to this issue.
Phantomcall commentedon Oct 21, 2026
@Phantomcall has applied to work on this issue as part of the Stellar Wave Program's 10th wave.
ℹ️ Repo Maintainers: To accept this application, review their application or assign @Phantomcall to this issue.
drips-wave commentedon Oct 21, 2026
Congratulations, @Phantomcall! 🎉 Your application was accepted by the repo's maintainers, and the issue is due on October 22, 2026.
🧑💻 @Phantomcall: Please resolve the issue such that the repo's maintainers have enough time to review your contribution before the due date. You'll earn Points for completing the issue on-time, which will make you eligible for a share of the Stellar Wave Program's reward pool.
Warning
When opening a PR, please link it to this issue to ensure it gets tracked accurately. Points are awarded when this issue is marked as completed by the maintainer.
🤠 Repo maintainers: Please keep an eye on the contributor's progress and review their work before the due date. You can manage this issue, including adjusting its complexity and points, here.
🌊 Happy Wave 🌊
drips-wave commentedon Oct 21, 2026
This issue has been completed by @Phantomcall as part of the Stellar Wave Program's 10th Wave 🥳
😎 @Phantomcall: You earned 200 Points for completing this issue! Once the Wave's rewards are finalized, you'll be eligible for a percentage of the Wave's reward pool based on the percentage of total points you've earned. Learn more here. You can also Leave a review to share your experience working on this issue.
🧑💻 Repo maintainers: How'd the contributor do? Leave a review to share your experience working with them.