Skip to content

Add compressMetadata and decompressMetadata to compression.ts #619

Description

@Kingsman-99

Description

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

Context

  • Target files: src/compression.ts, src/index.ts
  • Use Buffer.from(json).toString('base64url') — no external compression library

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions