feat(media-proxy-ts): TypeScript/Bun port of the media proxy
A drop-in equivalent of apps/media-proxy (stream, tunein, image, icy)
built on Bun.serve. Same routes, wire contract, CORS, rate limiting, and
per-node TTL cache — so it can swap in for the Gleam service.
The streaming and ICY routes use a raw-socket HTTP/1.1 client
(node:net/node:tls) instead of fetch, so they tolerate SHOUTcast's
`ICY 200 OK` status line, stream connection-close-delimited bodies
unbuffered with backpressure, and impose no total-duration cap that
would cut a listener off mid-song. The Gleam service is left in place.
Adds systemd/atradio-media-proxy-ts.service (same default PORT=7081).
feat(media-proxy-ts): TypeScript/Bun port of the media proxy
A drop-in equivalent of apps/media-proxy (stream, tunein, image, icy)
built on Bun.serve. Same routes, wire contract, CORS, rate limiting, and
per-node TTL cache — so it can swap in for the Gleam service.
The streaming and ICY routes use a raw-socket HTTP/1.1 client
(node:net/node:tls) instead of fetch, so they tolerate SHOUTcast's
`ICY 200 OK` status line, stream connection-close-delimited bodies
unbuffered with backpressure, and impose no total-duration cap that
would cut a listener off mid-song. The Gleam service is left in place.
Adds systemd/atradio-media-proxy-ts.service (same default PORT=7081).
feat(media-proxy-ts): TypeScript/Bun port of the media proxy
A drop-in equivalent of apps/media-proxy (stream, tunein, image, icy)
built on Bun.serve. Same routes, wire contract, CORS, rate limiting, and
per-node TTL cache — so it can swap in for the Gleam service.
The streaming and ICY routes use a raw-socket HTTP/1.1 client
(node:net/node:tls) instead of fetch, so they tolerate SHOUTcast's
`ICY 200 OK` status line, stream connection-close-delimited bodies
unbuffered with backpressure, and impose no total-duration cap that
would cut a listener off mid-song. The Gleam service is left in place.
Adds systemd/atradio-media-proxy-ts.service (same default PORT=7081).
feat(media-proxy-ts): TypeScript/Bun port of the media proxy
A drop-in equivalent of apps/media-proxy (stream, tunein, image, icy)
built on Bun.serve. Same routes, wire contract, CORS, rate limiting, and
per-node TTL cache — so it can swap in for the Gleam service.
The streaming and ICY routes use a raw-socket HTTP/1.1 client
(node:net/node:tls) instead of fetch, so they tolerate SHOUTcast's
`ICY 200 OK` status line, stream connection-close-delimited bodies
unbuffered with backpressure, and impose no total-duration cap that
would cut a listener off mid-song. The Gleam service is left in place.
Adds systemd/atradio-media-proxy-ts.service (same default PORT=7081).
feat(media-proxy-ts): TypeScript/Bun port of the media proxy
A drop-in equivalent of apps/media-proxy (stream, tunein, image, icy)
built on Bun.serve. Same routes, wire contract, CORS, rate limiting, and
per-node TTL cache — so it can swap in for the Gleam service.
The streaming and ICY routes use a raw-socket HTTP/1.1 client
(node:net/node:tls) instead of fetch, so they tolerate SHOUTcast's
`ICY 200 OK` status line, stream connection-close-delimited bodies
unbuffered with backpressure, and impose no total-duration cap that
would cut a listener off mid-song. The Gleam service is left in place.
Adds systemd/atradio-media-proxy-ts.service (same default PORT=7081).
feat(media-proxy-ts): TypeScript/Bun port of the media proxy
A drop-in equivalent of apps/media-proxy (stream, tunein, image, icy)
built on Bun.serve. Same routes, wire contract, CORS, rate limiting, and
per-node TTL cache — so it can swap in for the Gleam service.
The streaming and ICY routes use a raw-socket HTTP/1.1 client
(node:net/node:tls) instead of fetch, so they tolerate SHOUTcast's
`ICY 200 OK` status line, stream connection-close-delimited bodies
unbuffered with backpressure, and impose no total-duration cap that
would cut a listener off mid-song. The Gleam service is left in place.
Adds systemd/atradio-media-proxy-ts.service (same default PORT=7081).
feat(media-proxy-ts): TypeScript/Bun port of the media proxy
A drop-in equivalent of apps/media-proxy (stream, tunein, image, icy)
built on Bun.serve. Same routes, wire contract, CORS, rate limiting, and
per-node TTL cache — so it can swap in for the Gleam service.
The streaming and ICY routes use a raw-socket HTTP/1.1 client
(node:net/node:tls) instead of fetch, so they tolerate SHOUTcast's
`ICY 200 OK` status line, stream connection-close-delimited bodies
unbuffered with backpressure, and impose no total-duration cap that
would cut a listener off mid-song. The Gleam service is left in place.
Adds systemd/atradio-media-proxy-ts.service (same default PORT=7081).