Skip to content

Resolve #982, #999, #1002, #1003: compressed body limits, SBOM, signed releases & event activity charts - #1069

Open
susanyusuf wants to merge 6 commits into
Core-Foundry:mainfrom
susanyusuf:feat/supply-chain-and-dashboard-issues
Open

susanyusuf wants to merge 6 commits into
Core-Foundry:mainfrom
susanyusuf:feat/supply-chain-and-dashboard-issues

Conversation

@susanyusuf

@susanyusuf susanyusuf commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Closes #982
Closes #999
Closes #1002
Closes #1003

Summary

Resolves the four issues above.

#999 — Compressed request body limits

  • New listener/src/middleware/decompression-limit.ts bounds both the compressed and the inflated request body before any route handler reads it, guarding against decompression bombs.
  • Supports gzip / x-gzip / deflate / br; unsupported encodings → 415, oversized payloads → 413, malformed bodies → 400.
  • Wired into the events server behind new maxCompressedBytes / maxDecompressedBytes options.
  • 38 new unit tests, all passing.

#1002 — SBOM generation

  • New .github/workflows/sbom.yml generates SPDX and CycloneDX SBOMs (via Syft) for listener, dashboard, frontend and contract.
  • Artifacts are versioned with the build (sbom-<version>-<sha>) and the job fails visibly when no components are detected or the files are missing.

#1003 — Signed release artifacts & verification

  • New .github/workflows/release.yml: builds a versioned tarball, publishes SHA256SUMS, attaches a build-provenance attestation, and verifies both the checksums and the attestation after publishing. A validate-workflow job lints the workflow and rehearses the checksum logic on pull requests.
  • New docs/RELEASE_VERIFICATION.md with verification instructions; docs/RELEASE_CHECKLIST.md updated to reference it.

#982 — Event activity charts

  • New dashboard/src/utils/eventActivityData.ts and dashboard/src/components/EventActivityChart.tsx with selectable 1h / 6h / 24h / 7d ranges.
  • Buckets use consistent, equal-width, non-overlapping time boundaries so chart values reconcile with the underlying event data, and empty datasets render a dedicated empty state.
  • Wired into EventExplorerPage.tsx.
  • 10 data-layer tests plus component tests.

Included: repair of pre-existing main breakage

While implementing the above I found main in a broken merge state and fixed the parts that block CI and the code touched here:

  • listener/package.json had its production dependencies clobbered by a bad merge; restored @stellar/stellar-sdk, node-cache and uuid.
  • listener/package-lock.json was invalid JSON → regenerated; npm ci succeeds again.
  • Repaired duplicated / partial declarations in security-headers.ts, compatibility-check.ts, webhook-sender.ts, webhook-verifier.ts (and its test suite) and dashboard/jest.setup.cjs.

Test notes / known pre-existing issues

  • Passing suites: webhook-verifier (69), decompression-limit (38), security-headers + compatibility-check (12).
  • Pre-existing: the listener npm run typecheck still reports ~84 errors in files untouched by this PR, so the ci.yml migrations job will remain red until that unrelated merge corruption is cleaned up. Happy to take that as a follow-up.
  • Dashboard npm ci hits a pre-existing Storybook peer-dependency conflict (ERESOLVE); it requires --legacy-peer-deps locally.

Restore @stellar/stellar-sdk, node-cache and uuid to listener
dependencies (clobbered by a bad merge) and regenerate the invalidated
package-lock.json so npm ci succeeds again.

Also repair merge-corruption left in security-headers, compatibility-check,
webhook-sender, webhook-verifier and its test suite, and in the dashboard
jest setup, where duplicated/partial declarations broke typecheck and tests.
)

Add a decompression-limit middleware that bounds both the compressed and
the inflated request body before any route handler reads it, guarding
against decompression bombs. Unsupported encodings are rejected with 415,
oversized payloads with 413 and malformed bodies with 400.

Wire it into the events server behind maxCompressedBytes and
maxDecompressedBytes options.
Add a workflow that produces SPDX and CycloneDX SBOMs for the listener,
dashboard, frontend and contract packages on pushes to main, tags and
manual runs. Artifacts are versioned with the build and the job fails
visibly when no components are detected.
Add a release workflow that builds a versioned tarball, publishes a
SHA256SUMS checksum file, attaches build provenance attestations and
verifies both checksums and attestations after publishing. A
validate-workflow job lints the workflow and rehearses the checksum
logic on pull requests.

Document the verification steps and reference them from the release
checklist.
Add an event activity chart to the event explorer with selectable time
ranges (1h/6h/24h/7d). Buckets use consistent, non-overlapping time
boundaries so chart values reconcile with the underlying event data, and
empty ranges render a dedicated empty state.
@drips-wave

drips-wave Bot commented Oct 17, 2026

Copy link
Copy Markdown

@susanyusuf Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

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

Labels

None yet

Projects

None yet

1 participant