• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

decentraland / atlas-server / 39815816587
94%

Build:
DEFAULT BRANCH: master
Ran 22 Oct 2026 04:41PM UTC
Jobs 1
Files 42
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

22 Oct 2026 04:39PM UTC coverage: 89.94% (+3.7%) from 86.267%
39815816587

push

github

web-flow
fix: harden the map image and http routes (#151)

## What was wrong

- `map.png?on-sale=true` / `listed-for-rent=true` read `tile.price` /
`tile.rentalListing` before the `tile` check, so viewports past the map
edge failed (prd: `/v2/parcels/150/150/map.png?on-sale=true` → 500).
- `/v1/estatemap.png` assigned `array.push(id)` (k+1) on first sight but
`indexOf(id)` (k) afterwards, splitting every estate and colliding
neighbours (3186 of 3187 prd estates affected). It was also an O(tiles ×
estates) scan.
- `map.png` allowed 4096×4096 at size 5 (~1.4s blocking, ~60MB each)
with no concurrency bound.
- `/v2/estates/01` and `/v2/contracts/<ESTATE>/tokens/01` reached the
subgraph with an invalid Int (500); `/v2/parcels/abc/1` was a 403;
`parseInt(x) || 0` rendered 0,0; `center=foo` rendered and cached a
blank PNG; a checksummed LAND address was a 404.
- Estate image center used a lexicographic `.sort()`; `exclude` without
`include` was a no-op.
- The last-modified middleware put public `Cache-Control` on 5xx and
duplicated handler-set `cache-control`.
- `dcl_map_render_time` stopped before the encode, never ended on 503,
did not cover parcel/estate images, and had buckets that missed 0.05–3s
renders. Every map update printed all tile coordinates.

## What changed

- Tile guard in the overlays; a 1-based `Map` for estate indexes (0 = no
estate, same pixel encoding).
- `width * height ≤ 2048²` and `ceil(w/size) * ceil(h/size) ≤ 40000` →
400 with the limit in the message. Current clients stay well under
(unity-explorer 1020/20, bevy 768/16, NFT metadata 1024/24, default
1024/20).
- New `renderLimiter` (2 concurrent, 8 queued, 5s wait; `RENDER_MAX_*`
overrides). Draw and PNG encode run inside it (the PNG is buffered), and
a full queue or timeout returns 503 with `Retry-After` and `no-store`.
- Strict `^-?\d+$` coordinates (400), `^(0|[1-9]\d*)$` estate ids (400)
and token ids (404). Parcels are looked up by normalized coordinates,
and token addresses are lowerc... (continued)

1041 of 1203 branches covered (86.53%)

Branch coverage included in aggregate %.

442 of 466 new or added lines in 14 files covered. (94.85%)

4073 of 4483 relevant lines covered (90.85%)

705.61 hits per line

Uncovered Changes

Lines Coverage ∆ File
20
0.0
src/modules/render-limiter/types.ts
2
0.0
0.0% src/types.ts
1
87.92
-0.81% src/modules/image/component.ts
1
82.9
2.48% src/modules/map/component.ts
Jobs
ID Job ID Ran Files Coverage
1 39815816587.1 22 Oct 2026 04:41PM UTC 84
90.31
GitHub Action Run
Source Files on build 39815816587
  • Tree
  • List 42
  • Changed 33
  • Source Changed 11
  • Coverage Changed 33
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #39815816587
  • c7cac612 on github
  • Prev Build on master (#39798590350)
  • Next Build on master (#39821345489)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc