summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/server.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/context/server.tsx')
-rw-r--r--packages/app/src/context/server.tsx51
1 files changed, 30 insertions, 21 deletions
diff --git a/packages/app/src/context/server.tsx b/packages/app/src/context/server.tsx
index 1204fba55..a981d99fa 100644
--- a/packages/app/src/context/server.tsx
+++ b/packages/app/src/context/server.tsx
@@ -33,6 +33,33 @@ function isLocalHost(url: string) {
if (host === "localhost" || host === "127.0.0.1") return "local"
}
+export function resolveServerList(input: {
+ props?: Array<ServerConnection.Any>
+ stored: StoredServer[]
+}): Array<ServerConnection.Any> {
+ const servers = [
+ ...input.stored.map((value) =>
+ typeof value === "string"
+ ? {
+ type: "http" as const,
+ http: { url: value },
+ }
+ : value,
+ ),
+ ...(input.props ?? []),
+ ]
+
+ const deduped = new Map<ServerConnection.Key, ServerConnection.Any>()
+ for (const value of servers) {
+ const conn: ServerConnection.Any = "type" in value ? value : { type: "http", http: value }
+ const key = ServerConnection.key(conn)
+ if (deduped.has(key) && conn.type === "http" && !conn.authToken) continue
+ deduped.set(key, conn)
+ }
+
+ return [...deduped.values()]
+}
+
export namespace ServerConnection {
type Base = { displayName?: string }
@@ -46,6 +73,7 @@ export namespace ServerConnection {
export type Http = {
type: "http"
http: HttpBase
+ authToken?: boolean
} & Base
export type Sidecar = {
@@ -113,26 +141,7 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
const url = (x: StoredServer) => (typeof x === "string" ? x : "type" in x ? x.http.url : x.url)
const allServers = createMemo((): Array<ServerConnection.Any> => {
- const servers = [
- ...(props.servers ?? []),
- ...store.list.map((value) =>
- typeof value === "string"
- ? {
- type: "http" as const,
- http: { url: value },
- }
- : value,
- ),
- ]
-
- const deduped = new Map(
- servers.map((value) => {
- const conn: ServerConnection.Any = "type" in value ? value : { type: "http", http: value }
- return [ServerConnection.key(conn), conn]
- }),
- )
-
- return [...deduped.values()]
+ return resolveServerList({ stored: store.list, props: props.servers })
})
const [state, setState] = createStore({
@@ -174,7 +183,7 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
function add(input: ServerConnection.Http) {
const url_ = normalizeServerUrl(input.http.url)
if (!url_) return
- const conn = { ...input, http: { ...input.http, url: url_ } }
+ const conn: ServerConnection.Http = { ...input, authToken: undefined, http: { ...input.http, url: url_ } }
return batch(() => {
const existing = store.list.findIndex((x) => url(x) === url_)
if (existing !== -1) {