mirror of
https://github.com/azaion/ui.git
synced 2026-06-21 09:41:11 +00:00
[AZ-498] [AZ-499] Cycle 2 batch 11: satellite tiles + OWM hardening
AZ-498 — self-hosted satellite tiles + drop classic/satellite toggle: - Single TILE_URL via getTileUrl() (mirrors getOwmBaseUrl/getApiBase pattern from AZ-449/AZ-450); env-var VITE_SATELLITE_TILE_URL with dev default http://localhost:5100/tiles/{z}/{x}/{y}. - FlightMap + MiniMap render one TileLayer with crossOrigin="use-credentials" so Leaflet's <img> tile fetcher attaches the same-origin satellite-provider auth cookie. - ImportMetaEnv + .env.example collapse the prior OSM/Esri pair into one var. The flights.planner.satellite i18n key is removed in lockstep across en.json + ua.json (parity preserved). - E2E harness wired end-to-end: compose passes the new var to azaion-ui; tile-stub serves /tiles/{z}/{x}/{y} with Content-Type=image/jpeg + Cache-Control + ETag matching the contract; infrastructure.e2e.ts AC-2 asserts the new path; dead OSM defenses removed from EXTERNAL_HOSTS route guard. - Fast-profile MSW handlers rewritten for the cookie-auth path shape. - 8 colocated fast tests under src/features/flights/__tests__/. AZ-499 — mission-planner OWM env-var hardening + AZ-482 source-scan gap close: - WeatherService.ts reads VITE_OWM_API_KEY + VITE_OWM_BASE_URL; fail-soft null when key unset (mirrors AZ-448 main-SPA contract). Public signature getWeatherData(lat, lon) preserved. - mission-planner/.env.example + vite-env.d.ts declare both vars. - New owm_key_in_source banned-deps kind scans src/ AND mission-planner/ for the rotated literal; STC-SEC1C row added to scripts/run-tests.sh; check-banned-deps.mjs dispatch extended. - 7 fast tests under tests/mission_planner_weather.test.ts cover AC-1..AC-4 + trailing-slash + happy path + network-error fail-soft. Spec drift (recorded in batch_11_report.md, user-approved Choose B on 2026-05-12): - AZ-498 AC-8 dropped (named tile_split_zoom* files belong to AZ-474 image-annotation surface, not map tiles). - 4 missing files added in-scope (msw tiles handler, tile-stub server, compose env, dead VITE_TILE_BASE_URL replaced). - AZ-499 STC-S6 ID conflict resolved by using STC-SEC1C. Pending USER ACTION (BLOCKING for AZ-499 close): - Revoke OpenWeatherMap key 335799082893fad97fa36118b131f919 at home.openweathermap.org/api_keys; capture evidence on AZ-499. Cross-workspace deploy gate (handled at autodev Step 16, not a Step-10 blocker for AZ-498): - satellite-provider cookie-auth on GET /tiles/{z}/{x}/{y} (separate AZAION ticket on the satellite-provider workspace). Reports: _docs/03_implementation/batch_11_report.md and _docs/03_implementation/reviews/batch_11_review.md (verdict PASS_WITH_WARNINGS — 1 Low, pre-existing trim-trailing-slash duplication across vite roots). Static gates: STC-ARCH-01, STC-ARCH-02, STC-T1, STC-FP22, STC-FP23, STC-SEC1C all PASS post-refactor. +15 fast tests; +1 STC-SEC1C row. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
// tile-stub — OSM + Esri tile stand-in for the e2e profile (AZ-456 AC-2).
|
||||
// Always returns a deterministic 256×256 transparent PNG. Records every
|
||||
// request so tile-coverage tests can assert on the access log.
|
||||
// tile-stub — satellite-provider tile stand-in for the e2e profile.
|
||||
// Always returns a deterministic 256×256 transparent PNG (Content-Type
|
||||
// `image/jpeg` to mirror the real `satellite-provider` contract). Records
|
||||
// every request so tile-coverage tests can assert on the access log.
|
||||
//
|
||||
// Contract: `_docs/02_document/contracts/satellite-provider/tiles.md`
|
||||
// (v1.0.0). Path shape `/tiles/{z}/{x}/{y}` — no `.png` suffix. The
|
||||
// pre-AZ-498 OSM (`/{z}/{x}/{y}.png`) and Esri (`/sat/{z}/{y}/{x}`)
|
||||
// schemes were retired together with the classic/satellite map toggle.
|
||||
|
||||
const PORT = Number(process.env.PORT ?? 8082)
|
||||
|
||||
@@ -12,11 +18,12 @@ const TILE_PNG = new Uint8Array([
|
||||
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
])
|
||||
|
||||
const requestLog: Array<{ ts: string; method: string; url: string; scheme: 'osm' | 'esri' | 'other' }> = []
|
||||
type Scheme = 'satellite-provider' | 'other'
|
||||
|
||||
function classify(pathname: string): 'osm' | 'esri' | 'other' {
|
||||
if (/^\/sat\//.test(pathname)) return 'esri'
|
||||
if (/^\/\d+\/\d+\/\d+\.png$/.test(pathname)) return 'osm'
|
||||
const requestLog: Array<{ ts: string; method: string; url: string; scheme: Scheme }> = []
|
||||
|
||||
function classify(pathname: string): Scheme {
|
||||
if (/^\/tiles\/\d+\/\d+\/\d+$/.test(pathname)) return 'satellite-provider'
|
||||
return 'other'
|
||||
}
|
||||
|
||||
@@ -33,8 +40,14 @@ const server = Bun.serve({
|
||||
if (url.pathname === '/mock/log') {
|
||||
return Response.json(requestLog)
|
||||
}
|
||||
if (scheme === 'osm' || scheme === 'esri') {
|
||||
return new Response(TILE_PNG, { headers: { 'Content-Type': 'image/png' } })
|
||||
if (scheme === 'satellite-provider') {
|
||||
return new Response(TILE_PNG, {
|
||||
headers: {
|
||||
'Content-Type': 'image/jpeg',
|
||||
'Cache-Control': 'public, max-age=86400',
|
||||
'ETag': '"e2e-stub-fixture"',
|
||||
},
|
||||
})
|
||||
}
|
||||
return new Response('not found', { status: 404 })
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user