You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update guides, configuration reference, architecture notes, and the
domain glossary to reflect the single proxy-routed image: remove the
public/proxy endpoint connection fields, document that all requests flow
through the proxy server (which requires network access to the
database), and add the Proxy Server glossary term.
Copy file name to clipboardExpand all lines: CONTEXT.md
+7-2Lines changed: 7 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,8 +13,8 @@ A directed relationship between two vertices (source → target), with a type an
13
13
_Avoid_: Relationship, link
14
14
15
15
**Connection**:
16
-
A saved database profile — the URL, query engine, authentication settings, and proxy routing needed to reach a graph database. Users create and manage these in the UI.
17
-
_Avoid_: Configuration (legacy term being phased out — previously bundled connection + schema + Styles into one object)
16
+
A saved database profile — the graph database endpoint URL (`graphDbUrl`), query language, and optional IAM authentication settings. The client always reaches the database through the same-origin **Proxy Server**, so no proxy endpoint is configured. Users create and manage these in the UI.
17
+
_Avoid_: Configuration (legacy term being phased out — previously bundled connection + schema + Styles into one object); proxy endpoint / `proxyConnection` (removed — see ADR `unify-docker-image-remove-sagemaker-variant`)
18
18
19
19
**Active Connection**:
20
20
The one Connection a single browser tab is currently exploring — what the entire app reads to decide which Schema, Session, and queries are in play. Held per-tab (sessionStorage): it survives that tab's reload but dies with the tab, and one tab activating a Connection never changes another tab's Active Connection.
@@ -86,6 +86,10 @@ _Avoid_: Save state (ambiguous with Session)
86
86
The UI element in the nav bar (after the page title) that renders Persistence Status. It surfaces only on `failed` — a standing danger "Changes not saved" button — and stays absent at `idle` and `saving`. Clicking it opens a dialog showing the raw failure records (key, reason, attempt count, last attempt, and the underlying error's name/message/cause) in a read-only JSON editor. The dialog offers to save the configuration to a file via `saveLocalForageToFile` (`core/StateProvider/localDb.ts`) when storage is full (quota) — IndexedDB is still readable then — but not when storage is inaccessible (private mode, blocked), since the database never opened and there is nothing to read. Recovery scope is retry (transient failures) plus that backup (terminal-quota failures) — it does not guarantee the write eventually lands.
87
87
_Avoid_: Save-status indicator
88
88
89
+
**Proxy Server**:
90
+
The Node.js server that serves the frontend (mounted at `/explorer`) and proxies all database requests (mounted at `/`). The client resolves API endpoints relative to its own origin via `apiUrl()` — `../endpoint` from the static mount — so the frontend and proxy are always same-origin. This means every database request routes through the Proxy Server, which has network access to the database and handles SigV4 signing. See ADR `unify-docker-image-remove-sagemaker-variant`.
91
+
_Avoid_: proxy endpoint URL (no longer user-configured)
92
+
89
93
## Relationships
90
94
91
95
- Each browser tab has at most one **Active Connection**; different tabs may have different ones
- "Node" means **Vertex** in code but is the preferred UI term for property graphs — resolved: use **Vertex** in code, "node" in UI copy.
121
125
- "Attribute" vs "Property" — resolved: **Property** is canonical, "attribute" is legacy code term being phased out.
122
126
- "Active connection" meant a single shared per-origin value, but the app consumed it as if it were per-tab — resolved: **Active Connection** is per-tab (sessionStorage), **Last Active Connection** is the shared persisted breadcrumb. The legacy `activeConfigurationAtom` / `active-configuration` key is reused as the breadcrumb.
127
+
- Connection URL field — `url` and `proxyConnection` are legacy fields that survive only in `LegacyConnectionConfig` and are migrated at read time to the canonical `graphDbUrl` (see `migrateLegacyConnection`, ADR `unify-docker-image-remove-sagemaker-variant`). Use `graphDbUrl` in code.
The React client constructs queries and sends them through the proxy server, which forwards requests to the graph database. When connecting to Amazon Neptune, the proxy signs requests with AWS SigV4 credentials. For non-Neptune databases, the proxy is optional — the client can connect directly to a publicly accessible endpoint (shown as the dotted line above).
19
+
The React client constructs queries and sends them through the proxy server using relative URLs, which forwards requests to the graph database. When connecting to Amazon Neptune, the proxy signs requests with AWS SigV4 credentials.
21
20
22
21
The proxy does not store any user data — all preferences, connections, and query history live in the browser's IndexedDB.
23
22
24
-
This split exists because browsers cannot perform SigV4 signing directly (it requires AWS credentials that should not be exposed to the client), and because the proxy can run inside a VPC alongside the database while the browser runs outside it.
23
+
This architecture allows the app to work behind any reverse proxy (SageMaker, custom paths) without build-time configuration, since the client resolves API endpoints relative to its own location. The proxy can run inside a VPC alongside the database while the browser runs outside it.
24
+
25
+
Because all requests flow through the proxy, the server must have network access to the target database. If the server is in a restricted network (e.g., a private subnet with no NAT gateway), it will not be able to reach databases outside that network even if the user's browser could reach them directly.
Copy file name to clipboardExpand all lines: docs/features/connections.md
+5-8Lines changed: 5 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,14 +10,11 @@ For guides on connecting to specific databases, see [Connecting to databases](..
10
10
11
11
-**Name:** Enter a name for your connection (e.g., `MyNeptuneCluster`).
12
12
-**Query Language:** Choose a query language that corresponds to your graph database.
13
-
-**Public or proxy endpoint:** Provide the publicly accessible endpoint URL for a graph database, e.g., Gremlin Server. If connecting to Amazon Neptune, then provide a proxy endpoint URL that is accessible from outside the VPC, e.g., EC2.
14
-
-**Note:** For connecting to Amazon Neptune, ensure that the graph connection URL is in the format `https://[NEPTUNE_ENDPOINT]:8182`, and that the proxy endpoint URL is either `https://[EC2_PUBLIC_HOSTNAME]:443` or `http://[EC2_PUBLIC_HOSTNAME]:80`, depending on the protocol used. Ensure that you don't end either of the URLs with `/`.
15
-
-**Using proxy server:** Check this box if using a proxy endpoint.
16
-
-**Graph connection URL:** Provide the endpoint for the graph database
17
-
-**AWS IAM Auth Enabled:** Check this box if connecting to Amazon Neptune using IAM Auth and SigV4 signed requests
18
-
-**Service Type:** Choose the service type
19
-
-**AWS Region:** Specify the AWS region where the Neptune cluster is hosted (e.g., us-east-1)
20
-
-**Fetch Timeout:** Specify the timeout for the fetch request
13
+
-**Graph Connection URL:** Provide the endpoint URL for your graph database (e.g., `https://[NEPTUNE_ENDPOINT]:8182`). Ensure that the URL does not end with `/`.
14
+
-**AWS IAM Auth Enabled:** Check this box if connecting to Amazon Neptune using IAM Auth and SigV4 signed requests.
15
+
-**Service Type:** Choose the service type (`neptune-db` or `neptune-graph`).
16
+
-**AWS Region:** Specify the AWS region where the Neptune cluster is hosted (e.g., us-east-1).
17
+
-**Fetch Timeout:** Specify the timeout for the fetch request.
21
18
-**Neighbor Expansion Limit:** Specify the default limit for neighbor expansion. This will override the app setting for neighbor expansion.
All database requests from Graph Explorer are routed through the proxy server running on the SageMaker notebook instance. This means the instance must have network access to any database you want to explore.
20
+
21
+
If your notebook instance is in a private subnet without a NAT gateway or internet gateway, it will not be able to reach databases outside the VPC. To connect to external databases, ensure the instance has the appropriate network routing (VPC peering, NAT gateway, transit gateway, etc.).
22
+
17
23
## Minimum Database Permissions
18
24
19
25
By default, the permission policy for the IAM role of the SageMaker instance will have full access to the Neptune Database or Neptune Analytics instance. This means queries executed within Graph Explorer could contain mutations.
Runtime convenience preset for SageMaker/Jupyter deployments. When set to `true`, configures port 9250, cloudwatch logging, and disables SSL automatically.
111
+
112
+
- Optional
113
+
- Default: not set
114
+
- Type: `boolean`
115
+
118
116
## Default Connection
119
117
120
118
To provide a default connection such that initial loads of Graph Explorer always result with the same starting connection, modify the `docker run ...` command to either take in a JSON configuration or runtime environment variables. If you provide both a JSON configuration and environmental variables, the JSON will be prioritized.
@@ -124,19 +122,16 @@ To provide a default connection such that initial loads of Graph Explorer always
124
122
These are the valid environment variables used for the default connection, their defaults, and their descriptions.
125
123
126
124
- Required:
127
-
-`PUBLIC_OR_PROXY_ENDPOINT` - `None`
125
+
-`GRAPH_CONNECTION_URL` - `None` - The URL of the graph database endpoint.
128
126
- Optional
129
127
-`GRAPH_TYPE` - `None` - If not specified, multiple connections will be created for every available query language.
130
-
-`USING_PROXY_SERVER` - `False`
131
128
-`IAM` - `False`
132
129
-`GRAPH_EXP_HTTPS_CONNECTION` - `True` - Controls whether Graph Explorer uses SSL or not
133
130
-`PROXY_SERVER_HTTPS_CONNECTION` - `True` - Controls whether the server uses SSL or not
134
131
-`GRAPH_EXP_FETCH_REQUEST_TIMEOUT` - `240000` - Controls the timeout for the fetch request. Measured in milliseconds (i.e. 240000 is 240 seconds or 4 minutes).
135
132
-`GRAPH_EXP_NODE_EXPANSION_LIMIT` - `None` - Controls the limit for node counts and expansion queries.
136
133
- Conditionally Required:
137
-
- Required if `USING_PROXY_SERVER=True`
138
-
-`GRAPH_CONNECTION_URL` - `None`
139
-
- Required if `USING_PROXY_SERVER=True` and `IAM=True`
134
+
- Required if `IAM=True`
140
135
-`AWS_REGION` - `None`
141
136
-`SERVICE_TYPE` - `neptune-db`, Set this as `neptune-db` for Neptune database or `neptune-graph` for Neptune Analytics.
142
137
@@ -146,9 +141,7 @@ First, create a `config.json` file containing values for the connection attribut
0 commit comments