diff --git a/backlog/tasks/task-104 - n8n-style-automation-canvas-for-rSchedule.md b/backlog/tasks/task-104 - n8n-style-automation-canvas-for-rMinders.md similarity index 100% rename from backlog/tasks/task-104 - n8n-style-automation-canvas-for-rSchedule.md rename to backlog/tasks/task-104 - n8n-style-automation-canvas-for-rMinders.md diff --git a/backlog/tasks/task-118.5 - Add-local-first-client-to-rschedule.md b/backlog/tasks/task-118.5 - Add-local-first-client-to-rminders.md similarity index 100% rename from backlog/tasks/task-118.5 - Add-local-first-client-to-rschedule.md rename to backlog/tasks/task-118.5 - Add-local-first-client-to-rminders.md diff --git a/modules/rpast/mod.ts b/modules/rpast/mod.ts index 27a53a04..2240c916 100644 --- a/modules/rpast/mod.ts +++ b/modules/rpast/mod.ts @@ -51,14 +51,13 @@ async function buildProjection(c: any) { // Derive the public base URL from the request so in-timeline "Open in // rApp" links resolve against the same origin the user arrived from. - // Default to https — rSpace always runs behind Cloudflare/Traefik TLS in - // production. Only fall back to http for loopback dev hosts. + // rSpace production is always behind Cloudflare/Traefik TLS, so for any + // non-loopback host we always emit https — forwarded-proto headers can + // be `http` (internal Traefik→container hop) even though the real client + // request was https. const host = c.req.header('x-forwarded-host') ?? c.req.header('host'); const isLocal = !host || /^(localhost|127\.|\[::1\])/i.test(host); - const forwardedProto = c.req.header('x-forwarded-proto'); - const proto = forwardedProto === 'http' || forwardedProto === 'https' - ? forwardedProto - : (isLocal ? 'http' : 'https'); + const proto = isLocal ? 'http' : 'https'; const baseUrl = host ? `${proto}://${host}` : undefined; const sources = await enumerateCreations(space, { modules, from, to });