summaryrefslogtreecommitdiffhomepage
path: root/src/app/resolve-http-url.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-07 00:39:31 +0900
committerAdam Malczewski <[email protected]>2026-06-07 00:39:31 +0900
commitd96e504d197140e83c379a02527cf8148925ea67 (patch)
tree8e94ca913c93e279fb0a2b9fb8ef2d78220dd57f /src/app/resolve-http-url.ts
parent979fd1aac559805e05b36369e0fb756a8ec517dd (diff)
downloaddispatch-web-d96e504d197140e83c379a02527cf8148925ea67.tar.gz
dispatch-web-d96e504d197140e83c379a02527cf8148925ea67.zip
Slice 2 wave 3: wire chat end-to-end at the composition root
- app/store.svelte.ts: one WebSocket carries surfaces AND chat (onChat -> chatStore.handleDelta); build the conversation cache over the IndexedDB adapter; createChatStore wired to transport (socket.send), injected HTTP historySync, and the cache; load() on construct - app/resolve-http-url.ts: host-relative HTTP base (port 24203), mirrors resolve-ws-url; injected fetch - App.svelte: render ChatView + Composer alongside the surface picker - createAppStore gains optional injection points (httpUrl/fetchImpl/indexedDB/ conversationId) for tests - vitest-setup.ts: fake-indexeddb/auto for jsdom IndexedDB (orchestrator-owned config; agent change adopted) Verified green (x2, stable): svelte-check 0/0, vitest 218, biome clean, build ok. Slice 2 (conversation transcript: cache + delta streaming) feature-complete.
Diffstat (limited to 'src/app/resolve-http-url.ts')
-rw-r--r--src/app/resolve-http-url.ts28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/app/resolve-http-url.ts b/src/app/resolve-http-url.ts
new file mode 100644
index 0000000..357d2fc
--- /dev/null
+++ b/src/app/resolve-http-url.ts
@@ -0,0 +1,28 @@
+export interface HttpUrlEnv {
+ readonly VITE_HTTP_URL?: string;
+ readonly VITE_HTTP_PORT?: string;
+}
+
+export interface HttpUrlLocation {
+ readonly protocol: string;
+ readonly hostname: string;
+}
+
+const DEFAULT_PORT = "24203";
+const DEFAULT_FALLBACK = "http://localhost:24203";
+
+export function resolveHttpUrl(env: HttpUrlEnv, location?: HttpUrlLocation): string {
+ if (env.VITE_HTTP_URL !== undefined && env.VITE_HTTP_URL !== "") {
+ return env.VITE_HTTP_URL;
+ }
+
+ if (location === undefined) {
+ return DEFAULT_FALLBACK;
+ }
+
+ const port =
+ env.VITE_HTTP_PORT !== undefined && env.VITE_HTTP_PORT !== ""
+ ? env.VITE_HTTP_PORT
+ : DEFAULT_PORT;
+ return `${location.protocol}//${location.hostname}:${port}`;
+}