Skip to content

feat(compression): add compressMetadata and decompressMetadata helpers (#619) - #804

Draft
s6pa1rta3n-lab wants to merge 1 commit into
Stellar-split:mainfrom
s6pa1rta3n-lab:fix-issue
Draft

feat(compression): add compressMetadata and decompressMetadata helpers (#619)#804
s6pa1rta3n-lab wants to merge 1 commit into
Stellar-split:mainfrom
s6pa1rta3n-lab:fix-issue

Conversation

@s6pa1rta3n-lab

Copy link
Copy Markdown

Summary of Changes

  • Implements compressMetadata(obj: Record<string, unknown>, maxBytes = 512): string in src/compression.ts — serializes metadata to JSON and encodes as unpadded base64url.
  • Implements decompressMetadata(encoded: string): Record<string, unknown> in src/compression.ts — decodes base64url and parses JSON into a plain object.
  • Validates base64url character set and structure, throwing SdkError with SdkErrorCode.CONTRACT_REJECTED on invalid base64url characters, non-string/empty inputs, malformed JSON, or non-object payloads.
  • Enforces configurable maxBytes size limit (default 512 bytes), throwing SdkError with SdkErrorCode.CONTRACT_REJECTED when the resulting payload exceeds the limit.
  • Exports compressMetadata and decompressMetadata alongside existing compression utilities and types in src/index.ts.
  • Adds extensive unit tests in test/metadataCompression.test.ts verifying round-trip deep equality, empty object handling, nested/unicode objects, custom and default maxBytes boundaries, and various invalid input conditions.

Acceptance Criteria Checklist

  • 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
  • Both exported from src/index.ts
  • Unit tests: round-trip correctness, oversized payload throws, invalid base64 input throws, empty object round-trips

Closes #619
/claim #619

Payout Routing

  • EVM (Base/Arbitrum/Polygon/ETH): 0xF46C9F6d70C50BF81ef3588AB523a90a594a2F89
  • Stellar: GCL6OXAMLD75BMTINA6EMRUDWK5THQUSHMYNLSNBCJAPZJHNYJTUNIBC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add compressMetadata and decompressMetadata to compression.ts

1 participant