From da82664bba5b6d57ce68c9e123918bbdf53f949a Mon Sep 17 00:00:00 2001 From: Muyukani Ephraim Kizito Date: Tue, 12 May 2026 10:59:46 +0300 Subject: [PATCH 01/16] =?UTF-8?q?docs:=20full=20revamp=20=E2=80=94=20new?= =?UTF-8?q?=20nav,=20Nexus=20brand=20CSS,=20all=20pages=20rewritten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New four-zone nav: Concepts / Getting Started / Guides / Reference - docs/stylesheets/extra.css: custom theme ported from JarvisCore docs with Nexus brand blue (#0071F7), Inter + JetBrains Mono fonts, tight prose density, polished sidebar, header, tables, admonitions - mkdocs.yml: updated theme config, nav, extra_css - docs/index.md: prose home page, no link dump - docs/concepts/how-nexus-works.md: four-component architecture, OAuth handshake, credential retrieval, connection states - docs/concepts/security-model.md: master vs usage secrets, three critical keys, network hardening, audit log - docs/concepts/provider-types.md: OAuth2 (discovery + manual), static key providers, credential payload, aliases - docs/getting-started/quickstart.md: key generation, Docker startup, health checks, first provider registration - docs/getting-started/configuration.md: all env vars with types and descriptions, production Azure deployment guide - docs/getting-started/first-connection.md: complete OAuth handshake walkthrough, status polling, credential retrieval - docs/guides/integrating-agents.md: Bridge library, manual HTTP, Go SDK, connection ID management patterns - docs/guides/managing-providers.md: OAuth2 and API key provider registration, listing, updating, deleting - docs/guides/security-as-code.md: nexus-cli plan/apply, manifest format, CI/CD integration, audit trail - docs/guides/obo-delegation.md: new page — OBO session creation, fixed clearance, scope validation, Go SDK usage - docs/reference/api.md: Gateway and Broker API surfaces, endpoint tables, credential payload, auth model - docs/reference/audit-log.md: event types, query params, response schema, retention, nexus-cli audit trail - docs/reference/roadmap.md: active work, known limitations, explicitly deferred features with rationale Writing rules enforced throughout: no em dashes, no bullet lists for explanatory prose, no numbered sub-headers, no bold for emphasis, code only when showing something runnable. --- docs/concepts/how-nexus-works.md | 69 +++ docs/concepts/provider-types.md | 53 ++ docs/concepts/security-model.md | 80 +++ docs/getting-started/configuration.md | 67 ++ docs/getting-started/first-connection.md | 108 ++++ docs/getting-started/quickstart.md | 98 +++ docs/guides/integrating-agents.md | 185 +++--- docs/guides/managing-providers.md | 453 +++----------- docs/guides/obo-delegation.md | 92 +++ docs/guides/security-as-code.md | 138 ++--- docs/index.md | 71 ++- docs/reference/api.md | 83 ++- docs/reference/audit-log.md | 152 ++--- docs/reference/roadmap.md | 57 ++ docs/stylesheets/extra.css | 759 +++++++++++++++++++++++ mkdocs.yml | 76 ++- 16 files changed, 1818 insertions(+), 723 deletions(-) create mode 100644 docs/concepts/how-nexus-works.md create mode 100644 docs/concepts/provider-types.md create mode 100644 docs/concepts/security-model.md create mode 100644 docs/getting-started/configuration.md create mode 100644 docs/getting-started/first-connection.md create mode 100644 docs/getting-started/quickstart.md create mode 100644 docs/guides/obo-delegation.md create mode 100644 docs/reference/roadmap.md create mode 100644 docs/stylesheets/extra.css diff --git a/docs/concepts/how-nexus-works.md b/docs/concepts/how-nexus-works.md new file mode 100644 index 0000000..c1cd033 --- /dev/null +++ b/docs/concepts/how-nexus-works.md @@ -0,0 +1,69 @@ +# How Nexus Works + +Nexus is split into a control plane and a data plane. The control plane manages the lifecycle of credentials: registering providers, completing OAuth handshakes, storing tokens, and refreshing them before they expire. The data plane serves credentials to agents when they need them and injects those credentials into outgoing requests. + +Understanding this separation is the mental model for everything else in this documentation. + +--- + +## The four components + +### The Broker + +The Broker is the most sensitive component in the system. It is the only service that ever holds refresh tokens or provider API keys. Everything it stores is encrypted at rest using AES-GCM 256-bit with a key you supply and manage. The Broker never sends a refresh token to any other service. When the Gateway asks for credentials, the Broker decrypts the stored token, fetches a fresh access token from the provider, and returns only that. + +The Broker runs a background refresh loop. Before any stored token expires, the Broker fetches a new one using the stored refresh token. If a provider rejects the refresh (for example, because a user revoked access), the Broker transitions that connection to `attention_required` and records the failure in the audit log. The agent does not need to handle this case; it will simply receive an error on the next credential request and can surface it to the user. + +### The Gateway + +The Gateway is the public-facing API that agents call. It accepts REST and gRPC requests, proxies them to the Broker using an internal API key, and returns the response. Agents never reach the Broker directly. This decoupling means you can expose the Gateway to agents running outside your network without exposing the Broker. + +The Gateway handles CORS, request validation, and API versioning. From an agent's perspective, the Gateway is Nexus. + +### The Bridge + +The Bridge is a Go library that runs inside your agent process. You instantiate it with a Gateway client, and it handles credential retrieval and request signing automatically. For a persistent WebSocket or gRPC connection, you call `bridge.MaintainWebSocket()` or the gRPC equivalent and the Bridge keeps the connection authenticated through token rotations, including exponential backoff on failures. It also exposes a Prometheus `/metrics` endpoint for operational visibility. + +Use the Bridge when your agent is written in Go and makes ongoing connections to provider services. + +### The SDK + +The SDK is a thin Go client for the Gateway API. It exposes `GetToken()` and related methods, giving you direct control over credential retrieval without the connection management logic the Bridge provides. Use the SDK when you want to fetch credentials explicitly rather than having them injected automatically, or when you are implementing a non-persistent integration pattern. + +--- + +## The OAuth handshake flow + +When a user connects a new provider account, the flow runs as follows. + +Your application backend calls `POST /v1/request-connection` on the Gateway, passing the user identifier, the provider name, the requested scopes, and a return URL. The Gateway forwards this to the Broker, which generates a unique `state` parameter signed with the `STATE_KEY` and returns an authorization URL and a `connection_id`. + +Your application redirects the user's browser to the authorization URL. The user authenticates with the provider and grants consent. The provider redirects back to the Broker's callback endpoint, which validates the `state` parameter, exchanges the authorization code for tokens, encrypts the tokens, and stores them in PostgreSQL. + +The Broker then redirects the user's browser to your `return_url` with the `connection_id` and a `status=success` parameter. Your application captures the `connection_id` and stores it. That is the only thing your application needs to hold. The actual tokens stay in the Broker. + +--- + +## The credential retrieval flow + +When your agent needs to call a provider, the flow is simpler. + +Your agent calls `GET /v1/token/{connection_id}` on the Gateway. The Gateway forwards the request to the Broker, which retrieves the stored tokens, decrypts them in RAM, and returns a credential payload to the Gateway. The payload contains a `strategy` field that describes how to use the credentials and a `credentials` object with the actual values. + +The `strategy` field exists because Nexus supports multiple credential types. An OAuth2 connection returns `{"type": "oauth2"}` with an `access_token`. An API key connection returns `{"type": "api_key"}` with the key value in a field matching the provider's schema. The Bridge handles strategy interpretation automatically. If you are making direct HTTP calls, you inspect `strategy.type` and apply the credentials accordingly. + +--- + +## Connection states + +A connection moves through a small set of states during its lifetime. + +`pending` is the initial state after `request-connection` returns but before the user has completed consent. `active` is the normal operating state: tokens are valid and the background refresh loop is keeping them current. `attention_required` means the last refresh attempt failed with a provider error that cannot be retried, typically because the user revoked the application's access. `failed` means the initial token exchange failed. + +Your application should surface `attention_required` to the user so they can reconnect the provider account. + +--- + +## What Nexus does not do + +Nexus does not make API calls to providers on behalf of agents. It provides credentials; agents make the calls. Nexus does not manage authorization within your own application (which users can access which connections). It manages authentication with external providers. Nexus does not run inside your agent. The Bridge is an in-process library, but the Broker and Gateway are network services that you deploy separately. diff --git a/docs/concepts/provider-types.md b/docs/concepts/provider-types.md new file mode 100644 index 0000000..113898f --- /dev/null +++ b/docs/concepts/provider-types.md @@ -0,0 +1,53 @@ +# Provider Types + +A provider in Nexus represents a third-party service that your agents need to authenticate against. Nexus supports two categories of provider: OAuth 2.0 providers and static key providers. The category determines how Nexus acquires credentials, how it stores them, and what it returns when an agent requests a session. + +--- + +## OAuth 2.0 providers + +An OAuth 2.0 provider uses the standard authorization code flow: a user grants consent, the provider issues tokens, and Nexus stores and manages those tokens on the user's behalf. + +Nexus supports two configuration approaches for OAuth 2.0 providers. + +Discovery-based providers expose an OIDC discovery endpoint at `/.well-known/openid-configuration`. You supply the issuer URL, and Nexus fetches the authorization endpoint, token endpoint, and JWKS URI automatically. Google, Microsoft Entra, Okta, and most modern identity platforms support discovery. + +Manual configuration is for providers that do not support OIDC discovery. You supply the authorization URL and token URL explicitly. GitHub, Twitter, and many API-first products fall into this category. + +Both approaches result in the same runtime behavior: Nexus holds the refresh token, runs the background refresh loop, and returns a short-lived access token when an agent requests credentials. + +--- + +## Static key providers + +A static key provider does not use OAuth. Instead, you register a JSON schema that describes the shape of the credential (an API key, a username and password, an AWS access key pair, and so on). When a connection is established, the user or system supplies values matching that schema. Nexus encrypts and stores the values. When an agent requests credentials, Nexus decrypts them and returns them as a structured payload. + +Static key providers do not have a background refresh loop because the credentials do not expire on a schedule managed by Nexus. If a static credential is rotated externally, you update the connection in Nexus manually. + +--- + +## The credential payload + +Regardless of provider type, the credential retrieval endpoint returns a consistent structure: + +```json +{ + "strategy": { "type": "oauth2" }, + "credentials": { + "access_token": "eyJ...", + "expires_at": 1715000000 + } +} +``` + +For a static key provider, the `strategy.type` is `api_key` or `basic_auth`, and the `credentials` object contains the fields defined by the provider's schema. + +Your agent inspects `strategy.type` to determine how to use the credentials. The Bridge handles this automatically. If you are making direct HTTP calls, you apply the credentials based on the strategy type. + +--- + +## Provider aliases + +Every provider is assigned a human-readable name (its alias) at registration time. Aliases are the identifier you use throughout Nexus: in connection requests, in the `nexus-providers.yaml` manifest, and in audit log entries. Internally, each provider also has a UUID, but you never need to use it directly. + +Aliases must be unique within a workspace. Choose names that are stable and descriptive: `google-workspace`, `github-ci`, `salesforce-prod`. Renaming an alias requires updating every connection that references it. diff --git a/docs/concepts/security-model.md b/docs/concepts/security-model.md new file mode 100644 index 0000000..a286f60 --- /dev/null +++ b/docs/concepts/security-model.md @@ -0,0 +1,80 @@ +# The Security Model + +Nexus is built on one principle: agents should never hold master secrets. An agent that is compromised should give an attacker only a short-lived, scoped access token. The refresh token or API key that would let them persist. + +This page explains how that boundary is enforced, what the three critical environment variables are and what happens if any of them is mishandled, and how the network is hardened to limit the blast radius of a credential leak. + +--- + +## Master secrets and usage secrets + +Nexus draws a hard line between two categories of credential. + +Master secrets are the credentials that grant long-term or permanent access: OAuth refresh tokens and provider API keys. These are stored in the Broker's PostgreSQL database, encrypted at rest. No service other than the Broker ever holds a master secret. The Gateway does not store them. The Bridge does not store them. Your application stores only a `connection_id` that refers to them. + +Usage secrets are the credentials that grant short-lived access: OAuth access tokens and the signed headers produced from API keys. These are held in the Bridge's process memory for the duration of a request or connection and discarded. If an attacker gains access to an agent process, they obtain at most a usage secret that expires within an hour. + +| Category | Examples | Where it lives | Lifetime | +|---|---|---|---| +| Master secret | Refresh token, API key | Broker database (encrypted) | Persistent | +| Usage secret | Access token, signed header | Bridge process memory | Less than one hour | + +--- + +## The three critical environment variables + +### ENCRYPTION_KEY + +The `ENCRYPTION_KEY` is a 32-byte, Base64-encoded value that the Broker uses for AES-GCM 256-bit encryption of all tokens stored in PostgreSQL. Generate it with: + +```bash +openssl rand -base64 32 +``` + +If this key is lost or changed, every stored connection in the database becomes permanently unreadable. There is no recovery path. You will need to delete all stored connections and require users to reconnect their provider accounts. + +Store this key in a secrets manager (Azure Key Vault, AWS Secrets Manager, HashiCorp Vault). Inject it as an environment variable at deploy time. Never commit it to version control. Treat it as you would a private key for a certificate authority. + +### STATE_KEY + +The `STATE_KEY` is a 32-byte, Base64-encoded value used to sign the `state` and `nonce` parameters during the OAuth handshake. Both the Broker and the Gateway must have the same `STATE_KEY`. Generate it with: + +```bash +openssl rand -base64 32 +``` + +If the keys differ between Broker and Gateway, every OAuth callback will fail with an invalid state error. Both services perform a startup check and will exit with a fatal error if `STATE_KEY` is absent: + +``` +FATAL: STATE_KEY environment variable is required and must be identical across Broker and Gateway +``` + +In orchestrated deployments (Kubernetes, Docker Swarm, Azure Container Apps), inject this from a shared secret object so both services always receive the same value. + +### API_KEY / BROKER_API_KEY + +The `API_KEY` on the Broker and the corresponding `BROKER_API_KEY` on the Gateway authenticate the Gateway-to-Broker channel. The Gateway includes this key in every request it proxies to the Broker. If this key is compromised, an attacker can query any stored connection's token and register or delete providers. + +--- + +## Network hardening + +The Broker supports an `ALLOWED_CIDRS` configuration that restricts which IP addresses can reach it. In production, set this to the IP address (or CIDR range) of the Gateway. This means that even if the Broker's API key is leaked, it cannot be used from any host outside your trusted network. + +``` +ALLOWED_CIDRS=10.0.0.0/8 +``` + +The Gateway should be the only service with a path to the Broker. Agents talk to the Gateway; nothing else reaches the Broker. + +Mutual TLS between the Gateway and Broker is on the roadmap. Until it ships, the API key plus network-level IP allowlisting is the recommended defense-in-depth posture. + +--- + +## Audit log + +Every mutation that affects the control plane is written to the `audit_events` table. This includes provider creates, updates, and deletes; OAuth flow completions; token retrievals; and token refresh failures. Each record captures the event type, the structured event data, the caller IP address (respecting `X-Forwarded-For`), and the User-Agent. + +The audit log is queryable via `GET /audit` on the Broker. See the [Audit Log reference](../reference/audit-log.md) for the schema and query parameters. + +If you manage providers declaratively with `nexus-cli`, every `apply` run generates audit log entries in addition to the git history of your manifest file, giving you two independent records of every provider change. diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md new file mode 100644 index 0000000..3590846 --- /dev/null +++ b/docs/getting-started/configuration.md @@ -0,0 +1,67 @@ +# Environment Variables + +This page documents every environment variable accepted by the Broker and Gateway. Variables marked **Required** will cause the service to refuse to start if absent. + +--- + +## Shared + +Both the Broker and the Gateway must receive the same value for `STATE_KEY`. If they differ, all OAuth callbacks will fail. + +| Variable | Required | Description | +|---|---|---| +| `STATE_KEY` | Yes | 32-byte Base64 string used to sign and verify OAuth `state` and `nonce` parameters. Generate with `openssl rand -base64 32`. | + +--- + +## Broker + +| Variable | Required | Description | +|---|---|---| +| `DATABASE_URL` | Yes | PostgreSQL connection string. Example: `postgres://nexus:password@localhost:5432/nexus` | +| `REDIS_URL` | Yes | Redis URL for caching and peer discovery. Example: `redis://localhost:6379` | +| `ENCRYPTION_KEY` | Yes | 32-byte Base64 string for AES-GCM 256-bit token encryption. Generate with `openssl rand -base64 32`. This key must never change while connections exist in the database. | +| `STATE_KEY` | Yes | Same as the shared `STATE_KEY`. Must match the Gateway exactly. | +| `API_KEY` | Yes | Key that the Gateway and admin callers use to authenticate with the Broker. | +| `BASE_URL` | Yes | The public URL of the Broker, used to construct the OAuth callback URL. Example: `https://broker.example.com` | +| `REDIRECT_PATH` | No | The path appended to `BASE_URL` for the OAuth callback. Default: `/auth/callback` | +| `ALLOWED_CIDRS` | No | Comma-separated list of IP ranges allowed to reach the Broker. In production, restrict this to the Gateway's IP. Example: `10.0.0.0/8` | +| `ALLOWED_RETURN_DOMAINS` | No | Comma-separated list of allowed domains for the `return_url` parameter in connection requests. Prevents open redirect abuse. | +| `PORT` | No | Port the Broker listens on. Default: `8080` | + +--- + +## Gateway + +| Variable | Required | Description | +|---|---|---| +| `BROKER_BASE_URL` | Yes | Internal URL of the Broker. Example: `http://nexus-broker:8080` | +| `BROKER_API_KEY` | Yes | API key used to authenticate the Gateway with the Broker. Must match the Broker's `API_KEY`. | +| `STATE_KEY` | Yes | Same as the shared `STATE_KEY`. Must match the Broker exactly. | +| `PORT` | No | Port the Gateway listens on. Default: `8090` | + +--- + +## Key generation + +Both `ENCRYPTION_KEY` and `STATE_KEY` are 32-byte values encoded as Base64. Generate them with: + +```bash +openssl rand -base64 32 +``` + +Run this command twice, once for each key. Do not reuse the same value for both. + +--- + +## Production deployment on Azure Container Apps + +Build Docker images for `nexus-broker` and `nexus-gateway` and push them to Azure Container Registry. + +The Broker must be reachable from the public internet for OAuth callbacks (the provider redirects the user's browser to your `BASE_URL`). The Gateway can be internal-only if your agents run inside the same virtual network, or public-facing if they run externally. + +Set all environment variables in the Container App configuration. For `ENCRYPTION_KEY` and `STATE_KEY`, inject them from Azure Key Vault using managed identity references rather than storing them as plain environment variable values. + +Ensure the Broker can reach the PostgreSQL instance. Azure Database for PostgreSQL with managed identity authentication is the recommended approach. Set `DATABASE_URL` to the connection string for your managed instance. + +Set `ALLOWED_CIDRS` on the Broker to the outbound IP range of the Gateway Container App environment. This prevents the Broker from being reachable from any host other than the Gateway. diff --git a/docs/getting-started/first-connection.md b/docs/getting-started/first-connection.md new file mode 100644 index 0000000..3e57a29 --- /dev/null +++ b/docs/getting-started/first-connection.md @@ -0,0 +1,108 @@ +# Your First Connection + +This walkthrough takes you from a running Nexus stack and a registered provider to a working credential retrieval. It uses the Google provider registered in the [quickstart](quickstart.md) and walks through each step of the OAuth handshake and the subsequent credential fetch. + +By the end you will have a `connection_id` and know how to use it to retrieve credentials from your application or agent. + +--- + +## What your application stores + +Before walking through the flow, clarify what your application's responsibility is. Nexus stores OAuth tokens. Your application stores a `connection_id`, an opaque string that references a user's authorized connection with a specific provider. You persist the `connection_id` in your own database, associated with your user. When your agent needs credentials, it presents the `connection_id` to the Gateway. + +Your application never sees a refresh token. It never handles token expiry. Those are Nexus's responsibilities. + +--- + +## Step 1: Initiate the connection + +Your backend calls the Gateway to create a pending connection. Pass the user's identifier, the provider name, the scopes needed, and a `return_url` on your frontend where Nexus will redirect the user after consent. + +```bash +curl -s -X POST http://localhost:8090/v1/request-connection \ + -H "Content-Type: application/json" \ + -d '{ + "user_id": "user_abc123", + "provider_name": "google", + "scopes": ["openid", "email", "profile"], + "return_url": "https://app.example.com/oauth/return" + }' +``` + +The response includes two fields: + +```json +{ + "authUrl": "https://accounts.google.com/o/oauth2/auth?client_id=...&state=...", + "connection_id": "conn_01HXYZ..." +} +``` + +Store the `connection_id` immediately, associated with `user_abc123`. Then redirect the user's browser to `authUrl`. + +--- + +## Step 2: The user completes consent + +The user lands on Google's consent screen, selects the account they want to connect, and grants the requested permissions. Google redirects to the Broker's callback URL. The Broker validates the `state` parameter, exchanges the authorization code for tokens, encrypts the tokens, and stores them. + +The Broker then redirects the user's browser to your `return_url` with query parameters: + +``` +https://app.example.com/oauth/return?status=success&connection_id=conn_01HXYZ... +``` + +Your frontend extracts the `connection_id` from the query string and sends it to your backend for persistence if you have not already stored it from step 1. + +--- + +## Step 3: Verify the connection is active + +You can poll the connection status before using it, particularly if your backend needs to confirm the handshake completed successfully: + +```bash +curl -s http://localhost:8090/v1/check-connection/conn_01HXYZ... +``` + +A successful connection returns: + +```json +{ + "status": "active" +} +``` + +If the status is `pending`, the user has not yet completed consent. If it is `failed`, the token exchange did not succeed and the user will need to reconnect. + +--- + +## Step 4: Retrieve credentials + +Once the connection is active, your agent retrieves credentials by calling the Gateway with the `connection_id`: + +```bash +curl -s http://localhost:8090/v1/token/conn_01HXYZ... +``` + +The response: + +```json +{ + "strategy": { "type": "oauth2" }, + "credentials": { + "access_token": "ya29.A0AfH6...", + "expires_at": 1715000000 + }, + "expires_at": 1715000000 +} +``` + +Inspect `strategy.type` to know how to use the credentials. For `oauth2`, inject the `access_token` as a `Bearer` token in the `Authorization` header of your API calls to the provider. For `api_key` or `basic_auth`, the `credentials` object will contain the fields appropriate for that scheme. + +The Bridge handles this step and the header injection automatically. See the [Integrating Agents](../guides/integrating-agents.md) guide if your agent is written in Go. + +--- + +## Checking connection status in production + +In production, surface connection status to your users. If a call to `/v1/token/{connection_id}` returns a non-200 response, it typically means the connection has moved to `attention_required` because the user revoked access or the provider expired the refresh token. Your application should handle this by asking the user to go through the consent flow again, which will create a new connection and update the `connection_id` you store for that user. diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md new file mode 100644 index 0000000..a4a85b3 --- /dev/null +++ b/docs/getting-started/quickstart.md @@ -0,0 +1,98 @@ +# Deploy in Five Minutes + +This guide gets a Nexus stack running locally. By the end you will have a Broker, a Gateway, and a PostgreSQL database running in Docker, with the admin API accessible and ready to accept provider registrations. + +--- + +## Prerequisites + +You need Docker and Docker Compose installed. You also need `openssl` available on your PATH to generate the required keys. + +--- + +## Generate the required secrets + +Nexus requires two symmetric keys before it will start. Generate them now and keep them safe. + +```bash +openssl rand -base64 32 # ENCRYPTION_KEY +openssl rand -base64 32 # STATE_KEY +``` + +The `ENCRYPTION_KEY` encrypts all stored tokens. If you lose it, all existing connections become permanently unreadable. The `STATE_KEY` signs OAuth state parameters. Both the Broker and the Gateway must receive the same `STATE_KEY` value or every OAuth callback will fail. + +--- + +## Configure the environment + +Copy the example environment file and fill in the values you just generated. + +```bash +cp .env.example .env +``` + +Open `.env` and set: + +```bash +ENCRYPTION_KEY= +STATE_KEY= +API_KEY= +``` + +The other variables in `.env.example` have sensible defaults for local development. + +--- + +## Start the stack + +```bash +make up +``` + +If you do not have `make` installed: + +```bash +docker-compose up -d --build +``` + +This starts the Broker on port 8080 and the Gateway on port 8090. PostgreSQL and Redis start as dependencies of the Broker. The Gateway connects to the Broker automatically using the `BROKER_API_KEY` you set. + +Wait a few seconds for the database migrations to complete, then verify both services are healthy: + +```bash +curl http://localhost:8080/health +curl http://localhost:8090/health +``` + +Both should return `{"status": "ok"}`. + +--- + +## Register your first provider + +With the stack running, register a provider. This example uses Google with OIDC discovery: + +```bash +curl -s -X POST http://localhost:8080/providers \ + -H "Content-Type: application/json" \ + -H "X-API-Key: " \ + -d '{ + "name": "google", + "auth_type": "oauth2", + "client_id": "YOUR_GOOGLE_CLIENT_ID", + "client_secret": "YOUR_GOOGLE_CLIENT_SECRET", + "issuer": "https://accounts.google.com", + "enable_discovery": true, + "scopes": ["openid", "email", "profile", "offline_access"] + }' +``` + +A successful registration returns the provider object with a UUID. Save the `name` field. That is the alias you use in all subsequent operations. + +--- + +## What is next + +Your stack is running and you have a provider registered. The [Environment Variables](configuration.md) page documents every configuration option the Broker and Gateway accept. The [Your First Connection](first-connection.md) page walks through completing an OAuth handshake and retrieving a credential from an agent. + +For production deployment on Azure Container Apps, see the Production Deployment section of the [Environment Variables](configuration.md) page. diff --git a/docs/guides/integrating-agents.md b/docs/guides/integrating-agents.md index 3bbe660..04dec10 100644 --- a/docs/guides/integrating-agents.md +++ b/docs/guides/integrating-agents.md @@ -1,155 +1,144 @@ -# Agent Integrations Guide +# Integrating Agents -This guide explains how agents and services integrate with the OAuth framework. +This guide covers the two ways an agent retrieves credentials from Nexus at runtime: the Bridge library for Go agents, and the manual HTTP flow for agents written in other languages or for cases where you want direct control over credential retrieval. -## Recommended Integration: The Bridge Client (for Go) +--- -For Go-based agents and services, the **`bridge` client library** is the recommended integration path. It is a universal connector that handles the entire connection lifecycle, including authentication, polling, refreshing, and reconnection for both **WebSocket** and **gRPC** transports. +## The Bridge library (Go) -Using the Bridge abstracts away the manual HTTP calls detailed below and provides production-ready observability out of the box. +The Bridge is the recommended integration path for Go agents. It handles everything after the OAuth handshake: authenticating requests, maintaining persistent connections through token rotations, and retrying on transient failures. -### Example: Persistent WebSocket Connection +Import the library and instantiate it with a Gateway client: ```go import ( - "context" - "net/http" + "context" + "net/http" - "nexus.io/nexus-bridge" - "nexus.io/nexus-bridge/telemetry" - "github.com/Prescott-Data/nexus-framework/nexus-sdk" + bridge "nexus.io/nexus-bridge" + "nexus.io/nexus-bridge/telemetry" + oauthsdk "github.com/Prescott-Data/nexus-framework/nexus-sdk" ) func main() { - // 1. Create a client for the Nexus Gateway - authClient := oauthsdk.New("http://nexus-gateway.example.com") - - // 2. Instantiate the Bridge with standard logging and metrics - // agentLabels are applied as const_labels to all Prometheus metrics - agentLabels := map[string]string{"agent_id": "my-stable-id"} - b := bridge.NewStandard(authClient, agentLabels) - - // 3. Expose the /metrics endpoint - http.Handle("/metrics", telemetry.Handler()) - go http.ListenAndServe(":9090", nil) - - // 4. Run the connection loop - // The Bridge will fetch the correct credentials (OAuth2, Basic, API Key, etc.) - // and keep the connection alive indefinitely. - connectionID := "your-persistent-connection-id" - endpointURL := "wss://external.service.com/stream" - - b.MaintainWebSocket(context.Background(), connectionID, endpointURL, &myAppHandler{}) + authClient := oauthsdk.New("http://nexus-gateway.example.com") + + agentLabels := map[string]string{"agent_id": "my-agent"} + b := bridge.NewStandard(authClient, agentLabels) + + http.Handle("/metrics", telemetry.Handler()) + go http.ListenAndServe(":9090", nil) + + connectionID := "conn_01HXYZ..." + endpointURL := "wss://external.service.com/stream" + + b.MaintainWebSocket(context.Background(), connectionID, endpointURL, &myHandler{}) } ``` -See the [`bridge/README.md`](../../bridge/README.md) for full documentation. ---- +`MaintainWebSocket` runs a loop. When the current access token approaches expiry, the Bridge fetches a new one from the Gateway and seamlessly re-authenticates the connection without interrupting your handler. Exponential backoff handles transient network failures. -## Manual HTTP Integration Flow +The `agentLabels` map is applied as constant labels to all Prometheus metrics the Bridge emits. This allows you to filter Bridge metrics by agent in your observability stack. -This flow is for non-Go clients or for understanding the low-level mechanics of the Gateway API. Go clients should prefer the `bridge` library. +### gRPC connections -### Concepts -- `connection_id`: Opaque handle representing a user-approved connection. Agents store this; do not store tokens. -- Gateway: Front door API for agent access. -- Broker: Handles provider OAuth flows, token storage, and refresh; keep private. +For gRPC, use `MaintainGRPC` instead of `MaintainWebSocket`. The API is the same: you provide a `connection_id`, a target endpoint, and a handler. The Bridge injects the strategy-appropriate credentials as gRPC metadata headers on the initial connection and on each re-authentication. -### Typical Flow -1) **Initiate connection (for user-interactive OAuth2):** - - `POST /v1/request-connection` - - Body: `{"user_id":"...", "provider_name":"Google", "scopes":[...], "return_url":"..."}` - - Response: `{"authUrl":"...", "connection_id":"..."}` - - Redirect the user to `authUrl` to consent. +--- + +## Manual HTTP integration -2) **User completes consent:** - - The provider redirects to the Broker, which stores tokens and redirects the user to your `return_url` with `status=success&connection_id=...`. +Use this approach if your agent is not written in Go, or if you want explicit control over when credentials are fetched rather than having the Bridge manage them. -3) **Poll connection status (optional):** - - `GET /v1/check-connection/{connection_id}` → `{ "status": "active|pending|failed" }` +### Fetching credentials -4) **Use the connection:** - - `GET /v1/token/{connection_id}` - - The response is a **generic credential payload**, not just a simple token. You must inspect the `strategy` field to determine how to authenticate. - ```json - { - "strategy": { "type": "oauth2" }, - "credentials": { "access_token": "...", "expires_at": 123456 }, - "expires_at": 123456 - } - // OR - { - "strategy": { "type": "basic_auth" }, - "credentials": { "username": "...", "password": "..." } - } - ``` +Call `GET /v1/token/{connection_id}` on the Gateway: -5) **Refresh (until gateway proxy is added):** - - `POST Broker /connections/{connection_id}/refresh` with header `X-API-Key: `. +```bash +curl -s http://nexus-gateway.example.com/v1/token/conn_01HXYZ... +``` -### Frontend Integration (browser flow) -The browser initiates consent; server(s) hold secrets and call the gateway. +The response includes a `strategy` field and a `credentials` object. The strategy tells you how to use the credentials: -1) **Agent/server asks gateway to create a connection:** - - Your backend calls `POST /v1/request-connection` with a `return_url` hosted by your frontend (e.g., `https://app.example.com/oauth/return`). +```json +{ + "strategy": { "type": "oauth2" }, + "credentials": { + "access_token": "ya29.A0AfH...", + "expires_at": 1715000000 + }, + "expires_at": 1715000000 +} +``` -2) **Redirect the user:** - - From your frontend, redirect the browser to the `authUrl` in the response. +For `oauth2`, set `Authorization: Bearer ` on your outgoing request. -3) **Provider → Broker → Frontend:** - - After consent, the Broker redirects the user back to your `return_url` with `status=success&connection_id=...`. +For `basic_auth`, the credentials object contains `username` and `password`. Encode them as Base64 and set `Authorization: Basic `. -4) **Frontend → Backend to consume connection:** - - Your frontend extracts `connection_id` and sends it to your backend. Your backend stores only the `connection_id`. +For `api_key`, the credentials object contains the key fields defined by the provider's schema. The schema tells you the field name and where to inject it (header, query parameter, or request body). -5) **Backend fetches credentials on-demand:** - - Your backend calls Gateway `GET /v1/token/{connection_id}` to retrieve the generic credential payload. +### When to re-fetch -### Using the Go SDK (server-side) -The `nexus-sdk` is a thin client for the Gateway API. +The `expires_at` field is a Unix timestamp. Fetch a new token before this time. A safe strategy is to re-fetch when the remaining lifetime drops below five minutes. Do not cache a token beyond its expiry. The Broker runs the background refresh loop, so a fresh fetch is always cheap and always returns a valid token. + +### Using the Go SDK directly + +If your agent is Go but you want explicit fetches rather than automatic management, use the SDK: ```go import ( - "context" - oauthsdk "github.com/Prescott-Data/nexus-framework/nexus-sdk" + "context" + oauthsdk "github.com/Prescott-Data/nexus-framework/nexus-sdk" ) -client := oauthsdk.New("https://") +client := oauthsdk.New("https://nexus-gateway.example.com") -// Fetch the credential payload: -payload, _ := client.GetToken(context.Background(), "your-connection-id") +payload, err := client.GetToken(context.Background(), "conn_01HXYZ...") +if err != nil { + return err +} -// Inspect the strategy to decide how to authenticate strategyType := payload.Strategy["type"] ``` -See the [Go SDK Reference](../sdks/go.md) for full documentation. -### Using the TypeScript SDK (server-side) +Inspect `strategyType` and use the `payload.Credentials` map to extract the values you need. See [The SDK](../concepts/sdk.md) for the full method reference. + +### Using the TypeScript SDK ```typescript -import { NexusClient } from '@dromos/nexus-sdk'; +import { NexusClient } from '@prescott/nexus-sdk'; -const client = new NexusClient({ gatewayUrl: 'https://' }); +const client = new NexusClient({ gatewayUrl: 'https://nexus-gateway.example.com' }); -const token = await client.getTokenByConnectionId('your-connection-id'); -console.log(token.accessToken); +const token = await client.getTokenByConnectionId('conn_01HXYZ...'); +// Apply based on strategy type +if (token.strategy.type === 'oauth2') { + headers['Authorization'] = `Bearer ${token.credentials.access_token}`; +} ``` -See the [TypeScript SDK Reference](../sdks/typescript.md) for full documentation. -### Using the Python SDK (server-side) +### Using the Python SDK ```python from nexus_sdk import NexusClient, NexusClientOptions -client = NexusClient(NexusClientOptions(gateway_url='https://')) +client = NexusClient(NexusClientOptions(gateway_url='https://nexus-gateway.example.com')) -token = client.get_token_by_connection_id('your-connection-id') -print(token.access_token) +token = client.get_token_by_connection_id('conn_01HXYZ...') +if token.strategy['type'] == 'oauth2': + headers['Authorization'] = f"Bearer {token.credentials['access_token']}" ``` -See the [Python SDK Reference](../sdks/python.md) for full documentation. + +--- + +## Connection IDs in agent deployments + +Your application stores connection IDs and passes them to agents at task dispatch time. A well-designed agent integration keeps connection ID management out of agent code. The agent receives the connection ID as task input, uses it to fetch credentials, and does not store it beyond the current task. + +If your agent system uses a task queue or orchestrator, inject the relevant connection IDs into the task payload when the task is enqueued. The agent retrieves them from the payload, fetches credentials at the start of execution, and proceeds. --- ## MCP Server Integration -For building MCP servers that automatically resolve and inject tokens, see the dedicated [MCP Server Integration Guide](mcp-integration.md). \ No newline at end of file +For building MCP servers that automatically resolve and inject tokens, see the dedicated [MCP Server Integration Guide](mcp-integration.md). diff --git a/docs/guides/managing-providers.md b/docs/guides/managing-providers.md index 6a96220..712a851 100644 --- a/docs/guides/managing-providers.md +++ b/docs/guides/managing-providers.md @@ -1,421 +1,142 @@ -# Provider Registration and Management Guide +# Managing Providers -This guide provides a comprehensive overview of how to register, manage, and test identity providers within the Nexus OAuth Broker. +A provider in Nexus represents the configuration for a third-party service your agents connect to. This guide covers how to register, update, and delete providers through the Broker's REST API, and how to list the providers available in your workspace. -!!! tip "Prefer a GitOps workflow?" - For production deployments, consider using **[`nexus-cli`](security-as-code.md)** — a declarative reconciler that manages providers via a YAML manifest committed to your repository. It gives you version history, code review, and an automatic audit trail for every change. - - -## Provider Types - -The broker supports two primary types of providers: - -1. **OAuth 2.0 / OIDC Providers**: Standard identity providers like Google, Microsoft Entra ID, or Okta that use the OAuth 2.0 authorization code flow. These are typically configured using an OIDC discovery issuer URL. -2. **Non-OAuth (API Key) Providers**: Services that use static credentials, such as API keys, tokens, or username/password combinations. These are configured using a flexible JSON schema. +For declarative provider management using `nexus-cli`, see the [Security-as-Code](security-as-code.md) guide. For production environments where provider configuration is sensitive infrastructure, the declarative approach is preferred. --- -## 1. OAuth 2.0 / OIDC Providers - -### Registration - -The preferred method for registering OIDC-compliant providers is to use the `issuer` URL, which enables auto-discovery of the necessary endpoints. - -#### **Payload Fields:** - -* `name` (string, required): A unique name for the provider (e.g., "google"). -* `issuer` (string, optional): The OIDC issuer URL for auto-discovery. -* `client_id` (string, required): The OAuth client ID from the provider. -* `client_secret` (string, required): The OAuth client secret from the provider. -* `scopes` (string array, required): A list of default scopes to request. -* `auth_url` (string, optional): Override for the authorization endpoint. -* `token_url` (string, optional): Override for the token endpoint. -* `auth_header` (string, optional): Authentication method for token exchange. Values: `"client_secret_post"` (default, credentials in body) or `"client_secret_basic"` (credentials in Basic Auth header). Required for Twitter/GitHub. -* `api_base_url` (string, optional): The root URL for the provider's API (e.g., "https://api.github.com"). Exposed to frontend for integration logic. -* `user_info_endpoint` (string, optional): Path to fetch user profile (e.g., "/user"). Exposed to frontend. -* `params` (json, optional): A JSON object for provider-specific parameters (e.g., `{"access_type": "offline"}`). - -#### **Example: Registering Google** - -```bash -curl -X POST http://localhost:8080/providers \ - -H "Content-Type: application/json" \ - -H "X-API-Key: dev-api-key-12345" \ - -d '{ - "profile": { - "name": "google", - "issuer": "https://accounts.google.com", - "client_id": "YOUR_GOOGLE_CLIENT_ID", - "client_secret": "YOUR_GOOGLE_CLIENT_SECRET", - "scopes": ["openid", "email", "profile"], - "api_base_url": "https://www.googleapis.com", - "user_info_endpoint": "/oauth2/v3/userinfo", - "params": { - "access_type": "offline", - "prompt": "consent" - } - } - }' | jq . -``` - -#### **Example: Registering Twitter (Basic Auth)** - -Twitter requires `client_secret_basic` and manual endpoint configuration. - -```bash -curl -X POST http://localhost:8080/providers \ - -H "Content-Type: application/json" \ - -H "X-API-Key: dev-api-key-12345" \ - -d '{ - "profile": { - "name": "twitter", - "auth_type": "oauth2", - "auth_url": "https://twitter.com/i/oauth2/authorize", - "token_url": "https://api.twitter.com/2/oauth2/token", - "client_id": "YOUR_TWITTER_CLIENT_ID", - "client_secret": "YOUR_TWITTER_CLIENT_SECRET", - "scopes": ["tweet.read", "users.read"], - "auth_header": "client_secret_basic", - "api_base_url": "https://api.twitter.com/2", - "user_info_endpoint": "/users/me" - } - }' | jq . -``` - -### Testing the OAuth 2.0 Flow +## Registering an OAuth 2.0 provider -You can simulate the entire flow using `curl`. +POST to `/providers` on the Broker with the provider configuration. The `X-API-Key` header must carry the Broker's `API_KEY`. -#### **Step 1: Get the Consent URL** +### Discovery-based provider -Request a consent specification from the broker. This is what a client application would do to start the login process. +For providers that support OIDC discovery, set `enable_discovery: true` and supply the `issuer` URL. Nexus fetches the authorization endpoint, token endpoint, and JWKS URI from the discovery document automatically. ```bash -# Replace with the ID returned from the registration step -PROVIDER_ID="" - -curl -s -X POST http://localhost:8080/auth/consent-spec \ - -H "Content-Type: application/json" \ - -H "X-API-Key: dev-api-key-12345" \ - -d '{ - "workspace_id": "ws-test-123", - "provider_id": "'$PROVIDER_ID'", - "scopes": ["openid", "email"], - "return_url": "http://localhost:3000/my-app-callback" - }' | jq . +curl -s -X POST http://localhost:8080/providers \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-api-key" \ + -d '{ + "name": "google-workspace", + "auth_type": "oauth2", + "client_id": "YOUR_CLIENT_ID", + "client_secret": "YOUR_CLIENT_SECRET", + "issuer": "https://accounts.google.com", + "enable_discovery": true, + "scopes": ["openid", "email", "profile", "offline_access"] + }' ``` -This will return a JSON payload containing an `authUrl`. - -#### **Step 2: Complete Consent in a Browser** - -Copy the `authUrl` from the response and paste it into your web browser. You will be directed to the provider's login and consent screen. After you approve, the provider will redirect you back to the `return_url` you specified, which will have a `connection_id` and `status` in the query string. +### Manual configuration -> **Note:** The `return_url` does not need to be a real, running application for this test. After the redirect, you can simply copy the `connection_id` from the browser's address bar. The final URL will also contain `status` and `provider` as query parameters. - -#### **Step 3: Retrieve the Token** - -Once you have the `connection_id`, you can use it to retrieve the token from the broker. +For providers without OIDC discovery, supply the `auth_url` and `token_url` explicitly: ```bash -# Replace with the ID from the redirect URL -CONNECTION_ID="" - -curl -s -H "X-API-Key: dev-api-key-12345" \ - "http://localhost:8080/connections/''$CONNECTION_ID''/token" | jq . +curl -s -X POST http://localhost:8080/providers \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-api-key" \ + -d '{ + "name": "github", + "auth_type": "oauth2", + "client_id": "YOUR_CLIENT_ID", + "client_secret": "YOUR_CLIENT_SECRET", + "auth_url": "https://github.com/login/oauth/authorize", + "token_url": "https://github.com/login/oauth/access_token", + "api_base_url": "https://api.github.com", + "enable_discovery": false, + "scopes": ["read:user", "user:email"] + }' ``` -This will return the access token, refresh token, and expiry information. - --- -## 2. Non-OAuth (API Key) Providers - -### Registration - -Non-OAuth providers are configured by defining a **JSON schema** that describes the credentials the broker needs to collect, AND an **Authentication Strategy** that tells the Bridge client how to use those credentials. - -#### **Payload Fields:** - -* `name` (string, required): A unique name for the provider. -* `auth_type` (string, required): The authentication strategy type. - * `"header"`: Inject a value into an HTTP header (e.g., API Keys). - * `"query_param"`: Inject a value into the query string. - * `"basic_auth"`: Standard HTTP Basic Auth (username/password). - * `"aws_sigv4"`: AWS Signature Version 4. - * `"hmac_payload"`: HMAC signature of the request body. - * `"api_key"`: (Legacy) Alias for `header` type. -* `params` (json, required): A JSON object containing configuration for both the frontend (schema) and the client (strategy). - * `credential_schema` (json, required): A valid JSON schema defining the fields to be collected from the user (e.g., "Enter your API Key"). - * **Strategy Config**: Any other fields in `params` are treated as configuration for the chosen `auth_type` (e.g., `header_name`, `region`). - -### Authentication Strategies & Configuration - -The following table shows the required configuration fields in `params` for each strategy. - -#### **1. Header Authentication (`header`)** -Injects a value into a specific HTTP header. - -**Params Config:** -* `header_name` (string): The header key (e.g., `X-API-Key`, `Authorization`). Default: `Authorization`. -* `credential_field` (string): The key from the collected credentials to use. Default: `api_key`. -* `value_prefix` (string): Optional prefix (e.g., `Bearer `). - -#### **2. Query Parameter Authentication (`query_param`)** -Injects a value into the query string. - -**Params Config:** -* `param_name` (string, required): The query param key (e.g., `api_key` for `?api_key=...`). -* `credential_field` (string): The key from the collected credentials. Default: `api_key`. +## Registering a static key provider -#### **3. Basic Authentication (`basic_auth`)** -Uses standard HTTP Basic Auth (base64 encoded user:pass). - -**Params Config:** -* `username_field` (string): Key for the username in credentials. Default: `username`. -* `password_field` (string): Key for the password in credentials. Default: `password`. - -#### **4. AWS Signature V4 (`aws_sigv4`)** -Signs requests using AWS standard signing. - -**Params Config:** -* `service` (string, required): AWS Service (e.g., `s3`, `execute-api`). -* `region` (string): AWS Region. Default: `us-east-1`. - -*Note: The credentials map must contain `access_key` and `secret_key`.* - ---- - -### **Example: Registering a Custom API Provider (Header Auth)** - -This provider requires an `api_key` which must be sent in the `X-Freedcamp-Key` header. +For providers that use API keys rather than OAuth, set `auth_type` to `api_key` and define a `credential_schema` that describes the shape of the credential: ```bash -# Define the schema and params as a shell variable -PARAMS='{ - "base_url": "https://freedcamp.com/api/v1/", - "header_name": "X-Freedcamp-Key", - "credential_field": "user_key", - "credential_schema": { - "type": "object", - "properties": { - "user_key": { - "type": "string", - "title": "API Key" - } - }, - "required": ["user_key"] - } -}' - -# Use jq to construct the final JSON payload -jq -n --argjson params "$PARAMS" '{ - "profile": { - "name": "freedcamp", - "auth_type": "header", - "params": $params - } -}' | curl -X POST http://localhost:8080/providers \ - -H "Content-Type: application/json" \ - -H "X-API-Key: dev-api-key-12345" \ - -d @- | jq . -``` - -### **Example: Registering an AWS Service** - -This provider collects AWS credentials and signs requests for API Gateway. - -```bash -PARAMS='{ - "service": "execute-api", - "region": "us-west-2", - "credential_schema": { - "type": "object", - "properties": { - "access_key": { "type": "string", "title": "AWS Access Key ID" }, - "secret_key": { "type": "string", "title": "AWS Secret Access Key" } - }, - "required": ["access_key", "secret_key"] - } -}' - -jq -n --argjson params "$PARAMS" '{ - "profile": { - "name": "my-aws-service", - "auth_type": "aws_sigv4", - "params": $params +curl -s -X POST http://localhost:8080/providers \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-api-key" \ + -d '{ + "name": "stripe", + "auth_type": "api_key", + "api_base_url": "https://api.stripe.com", + "credential_schema": { + "fields": [ + { "name": "secret_key", "label": "Secret Key", "sensitive": true } + ] } -}' | curl -X POST http://localhost:8080/providers \ - -H "Content-Type: application/json" \ - -H "X-API-Key: dev-api-key-12345" \ - -d @- | jq . -``` - -### Testing the Non-OAuth Flow - -The flow for non-OAuth providers is entirely API-driven and does not require a browser. - -#### **Step 1: Get the Schema Capture URL** - -Request a consent spec, just like in the OAuth flow. - -```bash -# Replace with the ID returned from registration -PROVIDER_ID="" - -# The `authUrl` will be captured into a shell variable -AUTH_URL=$(curl -s -X POST http://localhost:8080/auth/consent-spec \ - -H "Content-Type: application/json" \ - -H "X-API-Key: dev-api-key-12345" \ - -d '{ - "workspace_id": "ws-test-123", - "provider_id": "'$PROVIDER_ID'", - "return_url": "http://localhost:3000/my-app-callback" - }' | jq -r .authUrl) - -echo "Schema URL: $AUTH_URL" + }' ``` -The `authUrl` returned will point to the broker's `/auth/capture-schema` endpoint. - -#### **Step 2: Fetch the JSON Schema** +When a connection is established for this provider, the user supplies values for each field in the schema. Nexus encrypts and stores them. -A client application would call this URL to get the schema needed to render a form. - -```bash -# The state parameter is extracted for the next step -STATE=$(echo "$AUTH_URL" | grep -o 'state=[^&]*' | cut -d= -f2) +--- -curl -s -L "$AUTH_URL" | jq . -``` +## Provider fields reference + +| Field | Type | Description | +|---|---|---| +| `name` | string | Unique alias for the provider. Used in all subsequent operations. | +| `auth_type` | string | `oauth2` or `api_key` | +| `client_id` | string | OAuth 2.0 client ID | +| `client_secret` | string | OAuth 2.0 client secret | +| `issuer` | string | OIDC issuer URL (required when `enable_discovery: true`) | +| `auth_url` | string | Authorization endpoint (required when `enable_discovery: false`) | +| `token_url` | string | Token endpoint (required when `enable_discovery: false`) | +| `api_base_url` | string | Provider API root URL | +| `enable_discovery` | boolean | Fetch endpoints from OIDC discovery document | +| `scopes` | array | Default scopes to request during the OAuth handshake | +| `params` | object | Provider-specific extra parameters passed to the authorization request | +| `credential_schema` | object | Field definitions for `api_key` providers | -This returns the provider's name and the `credential_schema` you registered. +--- -#### **Step 3: Submit the Credentials** +## Listing providers -Submit the user's credentials along with the `state` from the previous step. +To see all registered providers in a workspace: ```bash -curl -s -i -X POST http://localhost:8080/auth/capture-credential \ - -H "Content-Type: application/json" \ - -H "X-API-Key: dev-api-key-12345" \ - -d '{ - "state": "'$STATE'", - "credentials": { - "user_key": "my-user-supplied-api-key" - } - }' +curl -s http://localhost:8080/providers \ + -H "X-API-Key: your-api-key" | jq . ``` -This will return a `302 Found` redirect. The `Location` header will contain the `connection_id`. - -#### **Step 4: Retrieve the Token** - -Extract the `connection_id` from the `Location` header of the previous response and use it to fetch the stored credentials. +To retrieve grouped metadata (a condensed view suitable for frontend integration logic): ```bash -# Replace with the ID from the redirect -CONNECTION_ID="" - -curl -s -H "X-API-Key: dev-api-key-12345" \ - "http://localhost:8080/connections/''$CONNECTION_ID''/token" | jq . +curl -s http://localhost:8080/providers/metadata \ + -H "X-API-Key: your-api-key" | jq . ``` -The response will now include the strategy: - -```json -{ - "strategy": { - "type": "header", - "config": { - "header_name": "X-Freedcamp-Key", - "credential_field": "user_key" - } - }, - "credentials": { - "user_key": "my-user-supplied-api-key" - } -} -``` +The metadata endpoint returns providers grouped by `auth_type`, with only the fields needed to render a connection UI: `api_base_url`, `user_info_endpoint`, and `scopes`. --- -## 3. General Provider Management - -The following API endpoints can be used to manage any provider, regardless of type. All management endpoints require an API key. - -#### **List All Active Providers** - -```bash -curl -s http://localhost:8080/providers \ - -H "X-API-Key: dev-api-key-12345" | jq . -``` - -#### **Describe a Specific Provider** +## Updating a provider -Get the full configuration for a single provider (client secret is omitted). +Updating a provider's `client_secret` or `scopes` is a PATCH operation. Only the fields you include in the request body are changed. ```bash -curl -s http://localhost:8080/providers/ \ - -H "X-API-Key: dev-api-key-12345" | jq . -``` - -#### **Update a Provider** - -Update a provider's configuration. The request body should contain only the fields you want to change. - -```bash -curl -s -X PUT http://localhost:8080/providers/ \ +curl -s -X PATCH http://localhost:8080/providers/google-workspace \ -H "Content-Type: application/json" \ - -H "X-API-Key: dev-api-key-12345" \ - -d '{"name": "New Provider Name"}' + -H "X-API-Key: your-api-key" \ + -d '{"client_secret": "NEW_SECRET"}' ``` -#### **Delete a Provider** - -This performs a "soft delete," marking the provider as inactive but preserving it for existing connections. - -```bash -curl -s -X DELETE http://localhost:8080/providers/ \ - -H "X-API-Key: dev-api-key-12345" -``` +Every update is recorded in the [audit log](../reference/audit-log.md). --- -## 4. Provider Metadata (Frontend Integration) +## Deleting a provider -To assist frontend applications in rendering dynamic integration lists or performing client-side checks, the broker exposes a metadata endpoint. - -#### **Get Grouped Metadata** - -Returns a map of all providers, grouped by `auth_type` ("oauth2", "api_key"), containing only the fields necessary for frontend logic (`api_base_url`, `user_info_endpoint`, `scopes`). +Deleting a provider removes its configuration from the Broker. Existing connections that reference the provider will fail credential retrieval after deletion because the client credentials are gone. ```bash -curl -s http://localhost:8080/providers/metadata \ - -H "X-API-Key: dev-api-key-12345" | jq . +curl -s -X DELETE http://localhost:8080/providers/google-workspace \ + -H "X-API-Key: your-api-key" ``` -**Response Example:** -```json -{ - "oauth2": { - "google": { - "api_base_url": "https://www.googleapis.com", - "user_info_endpoint": "/oauth2/v3/userinfo", - "scopes": ["openid", "email", "profile"] - }, - "twitter": { - "api_base_url": "https://api.twitter.com/2", - "user_info_endpoint": "/users/me", - "scopes": ["tweet.read", "users.read"] - } - }, - "api_key": { - "freedcamp": { - "api_base_url": "https://freedcamp.com/api/v1/", - "user_info_endpoint": "", - "scopes": null - } - } -} -``` \ No newline at end of file +Delete operations are also audit-logged with the caller IP and timestamp. \ No newline at end of file diff --git a/docs/guides/obo-delegation.md b/docs/guides/obo-delegation.md new file mode 100644 index 0000000..4648f3c --- /dev/null +++ b/docs/guides/obo-delegation.md @@ -0,0 +1,92 @@ +# OBO Delegation + +On Behalf Of (OBO) delegation is a session pattern for multi-agent systems where an agent needs to act with a specific user's authorization rather than with system-level access. Instead of the agent holding credentials that grant broad access, OBO sessions tie the agent's credentials to the identity and permission tier of the user who initiated the operation. + +This matters in multi-tenant systems where agents serve multiple users and where the data a user can access varies by their role or clearance level. + +--- + +## The problem OBO solves + +Consider an agent that retrieves documents from a provider on behalf of users. If the agent holds a single system-level credential, it can retrieve documents from any user's account. The agent's authorization is entirely separate from the user's authorization. If the agent is compromised or makes an error, there is no connection between what the agent accessed and what the user actually has permission to see. + +OBO sessions solve this by tying the agent's session to the originating user. The broker validates the user's identity token, extracts the user's identity and clearance level, and stamps those onto the session. The agent can then only access what that specific user is authorized to access, not the maximum of what the agent's own credentials allow. + +--- + +## How to create an OBO session + +Your backend validates the user's incoming identity token from your IdP (Okta, Microsoft Entra, or your own). It then calls the Nexus broker, passing the validated user context token: + +```bash +curl -s -X POST http://localhost:8090/v1/obo-sessions \ + -H "Content-Type: application/json" \ + -H "X-Agent-ID: ops-agent" \ + -H "X-User-Context-Token: " \ + -d '{ + "provider": "internal-ops", + "scopes": ["acme:documents:read"] + }' +``` + +The broker validates the request and returns an OBO session: + +```json +{ + "session_id": "ses_01HXYZ...", + "access_token": "eyJ...", + "expires_at": "2026-05-12T14:30:00Z", + "acting_for": "user:alice@acme.com", + "tenant_id": "tenant:acme-corp", + "clearance_level": "L2" +} +``` + +The `acting_for`, `tenant_id`, and `clearance_level` fields describe the delegation chain. Your agent uses the `access_token` to make requests to the provider and includes the OBO context in any downstream logging or audit records. + +--- + +## The clearance level is fixed at session creation + +Once the broker issues an OBO session, the clearance level cannot be changed for that session. An agent that received an L2 delegation cannot request L3 resources, even if its own registered scopes include them. The broker enforces this at the session layer before issuing the token. + +This is not a limitation. It is the point. An OBO session is a capability grant bounded by the user who authorized the operation. An agent that could escalate its own clearance within a user session would be able to access resources the user themselves cannot reach, which defeats the purpose of delegation. + +--- + +## Session scope validation + +The broker validates the requested scopes against two independent boundaries: the agent's registered scope list and the user's permission set derived from the context token. The session is granted only the intersection. If the agent requests `acme:documents:write` but the user only has read permission, the session is created with read scope only. + +The broker rejects the request entirely if the agent requests scopes that appear in neither the agent's registered list nor the user's permission set. + +--- + +## Audit logging + +Every OBO session appears in the audit log with the full delegation chain: the originating user, the agent ID, the provider, the scopes granted, the clearance level, and the session timestamps. This gives your compliance team a complete, tamper-evident record of every user-initiated agent action without requiring you to instrument agents individually. + +--- + +## Using OBO sessions from Go + +```go +import oauthsdk "github.com/Prescott-Data/nexus-framework/nexus-sdk" + +client := oauthsdk.New("https://nexus-gateway.example.com") + +session, err := client.RequestOBOSession(ctx, oauthsdk.OBOSessionInput{ + AgentID: "ops-agent", + Provider: "internal-ops", + Scopes: []string{"acme:documents:read"}, + UserContextToken: userToken, +}) +if err != nil { + return err +} + +// session.AccessToken, session.ActingFor, session.ClearanceLevel +defer client.CloseOBOSession(ctx, session.SessionID) +``` + +Call `CloseOBOSession` when the operation is complete. The broker revokes the token server-side, which means it cannot be replayed if it is intercepted after the agent finishes its work. diff --git a/docs/guides/security-as-code.md b/docs/guides/security-as-code.md index cbd3915..27b9581 100644 --- a/docs/guides/security-as-code.md +++ b/docs/guides/security-as-code.md @@ -1,20 +1,8 @@ -# Security-as-Code: Declarative Provider Management +# Security-as-Code with nexus-cli -The **`nexus-cli`** tool brings a GitOps-compatible, Terraform-style workflow to managing your Nexus provider configurations. Instead of managing providers through direct API calls (which leave no version history and are impossible to review), you declare your desired state in a YAML manifest, commit it to your repository, and let `nexus-cli` reconcile the live Broker against that source of truth. +`nexus-cli` is a command-line tool that applies a GitOps workflow to Nexus provider configuration. Instead of making ad-hoc API calls to register and update providers, you declare the desired state in a YAML manifest, commit it to your repository, and use `nexus-cli` to reconcile the live Broker against that manifest. -!!! tip "Why this matters" - Nexus holds Refresh Tokens and API Keys for every provider a workspace connects to — it is critical infrastructure. Without declarative management, a single bad API call can silently break all agents that depend on a provider, with no git history to recover from. - ---- - -## How It Works - -`nexus-cli` follows a **plan → confirm → apply** workflow: - -1. **Fetches** the current live state from `GET /providers`. -2. **Diffs** it against your `nexus-providers.yaml` manifest. -3. **Prints** a human-readable plan showing creates, updates, and orphaned providers. -4. **Applies** the changes only after you confirm with `yes` (or non-interactively in CI). +This matters for Nexus specifically because the Broker holds refresh tokens and API keys for every provider in your workspace. An undocumented API call that misconfigures or deletes a provider can silently break every agent that depends on it, with no record of what changed or who made the change. Declarative management gives you git history, peer review, and an audit trail for every provider mutation. --- @@ -27,7 +15,7 @@ cd nexus-cli go build -o nexus-cli . ``` -Or install directly: +Or install directly with Go: ```bash go install github.com/Prescott-Data/nexus-framework/nexus-cli@latest @@ -37,22 +25,22 @@ go install github.com/Prescott-Data/nexus-framework/nexus-cli@latest ## Configuration -`nexus-cli` is configured via environment variables: +`nexus-cli` is configured through environment variables: -| Variable | Description | Default | -| :--- | :--- | :--- | -| `BROKER_BASE_URL` | Base URL of the Nexus Broker | `http://localhost:8080` | -| `API_KEY` | API key for Broker authentication | *(none)* | +| Variable | Default | Description | +|---|---|---| +| `BROKER_BASE_URL` | `http://localhost:8080` | URL of the Nexus Broker | +| `API_KEY` | none | API key for Broker authentication | --- -## The Provider Manifest +## The provider manifest -Create a `nexus-providers.yaml` file and **commit it to your GitOps repository**. This file is your single source of truth for all provider configurations. +Create a file named `nexus-providers.yaml` and commit it to your infrastructure repository. This file is the single source of truth for all provider configurations in the target environment. -Environment variables are expanded at runtime, so secrets never need to be hardcoded. +Environment variable references in the manifest are expanded at runtime, so secrets never appear in the file itself: -```yaml title="nexus-providers.yaml" +```yaml providers: - name: google-workspace auth_type: oauth2 @@ -79,19 +67,19 @@ providers: - user:email ``` -### Manifest Fields +### Manifest fields | Field | Type | Description | -| :--- | :--- | :--- | -| `name` | string | Unique provider name (used as the reconciliation key) | +|---|---|---| +| `name` | string | Provider alias. Used as the reconciliation key. Must be unique. | | `auth_type` | string | `oauth2` or `api_key` | | `client_id` | string | OAuth client ID | | `client_secret` | string | OAuth client secret | | `issuer` | string | OIDC issuer URL for auto-discovery | -| `auth_url` | string | Authorization endpoint (if not using discovery) | -| `token_url` | string | Token endpoint (if not using discovery) | +| `auth_url` | string | Authorization endpoint (when not using discovery) | +| `token_url` | string | Token endpoint (when not using discovery) | | `api_base_url` | string | Provider API root URL | -| `enable_discovery` | bool | Use OIDC discovery if `true` | +| `enable_discovery` | bool | Fetch endpoints from OIDC discovery document | | `scopes` | list | Default scopes to request | | `params` | map | Provider-specific extra parameters | @@ -99,17 +87,16 @@ providers: ## Commands -### `plan` — Preview Changes +### plan -Show what would change without making any mutations: +`plan` fetches the current live state from the Broker, computes the diff against your manifest, and prints what would change without making any mutations: ```bash nexus-cli plan -# Or with a custom manifest path: -nexus-cli plan --file ./path/to/nexus-providers.yaml +nexus-cli plan --file ./infra/nexus-providers.prod.yaml ``` -**Example output:** +Example output: ``` Read 2 providers from nexus-providers.yaml @@ -117,93 +104,52 @@ Read 2 providers from nexus-providers.yaml --- Execution Plan --- + CREATE : github ~ UPDATE : google-workspace -! ORPHAN : old-slack-provider (would be deleted if --prune was passed) +! ORPHAN : old-slack-provider Plan complete. Run 'nexus-cli apply' to perform these actions. ``` -The symbols mean: +The symbols in the plan output: -| Symbol | Action | -| :--- | :--- | +| Symbol | Meaning | +|---|---| | `+` | Provider will be created | | `~` | Provider will be updated | -| `-` | Provider will be deleted (only shown with `--prune`) | -| `!` | Provider exists in live state but not in manifest (orphan) | +| `!` | Provider exists in the live state but not in the manifest (orphan) | +| `-` | Provider will be deleted (only shown when `--prune` is passed) | -### `apply` — Apply Changes +### apply -Apply the manifest, with an interactive confirmation prompt: +`apply` executes the plan after an interactive confirmation prompt: ```bash nexus-cli apply ``` -``` -Read 2 providers from nexus-providers.yaml - ---- Execution Plan --- -+ CREATE : github -~ UPDATE : google-workspace - -Do you want to perform these actions? - Nexus will perform the actions described above. - Only 'yes' will be accepted to approve. - - Enter a value: yes - ---- Applying Changes --- -Creating github... OK -Updating google-workspace... OK -``` - -#### Flags +Pass `--prune` to also delete orphaned providers. Do not use `--prune` until you are confident your manifest is the complete desired state for the environment. Deleting a provider immediately breaks all connections that reference it. | Flag | Default | Description | -| :--- | :--- | :--- | +|---|---|---| | `--file` | `nexus-providers.yaml` | Path to the manifest file | -| `--prune` | `false` | Also delete providers in live state not in the manifest | - -!!! warning "Using `--prune`" - The `--prune` flag will **delete** providers that exist in the Broker but are absent from your manifest. Only use this when you are certain your manifest is the complete desired state. Any agents depending on a pruned provider will immediately lose their connections. +| `--prune` | `false` | Delete providers not present in the manifest | --- -## CI/CD Integration (Optional) - -`nexus-cli` is a standalone binary — you can run it from your laptop, a bastion host, or a CI pipeline. If you want to integrate it into your own CI/CD, here's a recommended pattern: +## CI/CD integration -- **On pull requests**: run `nexus-cli plan` as an informational check so reviewers can see what would change. -- **Apply manually**: use a `workflow_dispatch` trigger or run `nexus-cli apply` from a trusted environment when you're ready. +Run `nexus-cli plan` as an informational check on pull requests so reviewers can see what would change before merging. Apply manually from a trusted environment when you are ready to change the live state. -> **Note:** Auto-applying on merge is discouraged. Provider configurations are live operational data — you should always review a plan before applying. - -### Example GitHub Actions Snippet +Automatic apply on merge is not recommended. Provider configuration is live operational data that affects all agents in the workspace. A plan review step before apply prevents accidental provider deletions or misconfigurations from reaching production silently. ```yaml -# Add this to your internal repo's workflow — not the open-source framework repo. -- name: Plan +# Example GitHub Actions snippet +- name: Nexus plan env: BROKER_BASE_URL: ${{ secrets.BROKER_BASE_URL }} API_KEY: ${{ secrets.BROKER_API_KEY }} - # Add all env vars referenced in your manifest + GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} run: ./nexus-cli plan ``` -### Required Environment Variables - -| Variable | Description | -| :--- | :--- | -| `BROKER_BASE_URL` | URL of your target Nexus Broker (staging, prod, etc.) | -| `API_KEY` | API key for Broker authentication | -| `*_CLIENT_ID` / `*_CLIENT_SECRET` | Any provider credentials referenced via `${...}` in your manifest | - ---- - -## Best Practices - -1. **Treat `nexus-providers.yaml` as infrastructure code** — require PR reviews for all changes. -2. **Never hardcode secrets** — always use `${ENV_VAR}` expansion and inject via CI secrets. -3. **Start without `--prune`** — let orphans accumulate warnings first so you can audit them intentionally before deletion. -4. **One manifest per environment** — keep a `nexus-providers.prod.yaml` and `nexus-providers.staging.yaml` and set `BROKER_BASE_URL` accordingly in each CI environment. -5. **All mutations are audited** — every create, update, or delete applied by `nexus-cli` is recorded in the [Audit Log](../reference/audit-log.md). +Every `apply` run generates audit log entries on the Broker, giving you a record of which providers were created, updated, or deleted and at what time. Combined with the git history of your manifest file, you have two independent audit trails for every provider change. diff --git a/docs/index.md b/docs/index.md index 6de0a79..5ee5164 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,38 +1,59 @@ -# Nexus Framework +# Nexus -The Nexus Framework is a provider-agnostic, secure integration layer for managing OAuth 2.0 and OIDC connections. It abstracts away the complexity of managing tokens, refreshes, and provider quirks, allowing your agents and services to focus on business logic. +Nexus is a credential broker for autonomous agents. It sits between your agents and every third-party service they need to reach, and it manages the entire credential lifecycle so your agents never hold OAuth tokens, API keys, or refresh tokens directly. -## Quick Start +When an agent needs to call Salesforce, Google Drive, or any other provider, it asks the Nexus broker for a session. The broker validates the request, fetches a short-lived access token, and returns only that. The agent uses the token and discards it. If the agent is compromised, the attacker has nothing durable. -The fastest way to get started is with Docker Compose. This will spin up the Broker, Gateway, Postgres, and Redis. +Nexus handles token storage, refresh scheduling, OAuth handshakes, and audit logging as infrastructure concerns. You configure providers once and your agents authenticate against them through a single API surface. + +--- + +## Quick start + +The fastest path to a running Nexus stack is Docker Compose. This brings up the Broker, Gateway, PostgreSQL, and Redis. ```bash -# 1. Configure environment cp .env.example .env - -# 2. Start the stack +# Fill in ENCRYPTION_KEY and STATE_KEY — see Getting Started for key generation make up - -# Or if you don't have make: -docker-compose up -d --build ``` -- **Broker**: http://localhost:8080 -- **Gateway**: http://localhost:8090 -- **Admin API Key**: Configured in `.env` (Default: `nexus-admin-key`) +Once running: + +| Service | Default address | +|----------|-------------------------| +| Broker | http://localhost:8080 | +| Gateway | http://localhost:8090 | + +--- + +## How to read this documentation + +If you are new to Nexus, start with [How Nexus Works](concepts/how-nexus-works.md). It explains the four-component architecture, the two data flows (OAuth handshake and credential retrieval), and the security boundary the system enforces. Reading it once makes every other page easier to understand. + +After that, follow the [Getting Started](getting-started/quickstart.md) guide to deploy a working stack and make your first credential request. + +If you are integrating agents that need third-party credentials, the [Agent Integration guide](guides/integrating-agents.md) covers the Go Bridge library and the manual HTTP flow for non-Go clients. + +The [Guides](guides/managing-providers.md) cover the operational tasks you will return to repeatedly: registering providers, managing provider state declaratively with `nexus-cli`, and auditing credential access. + +--- + +## Components at a glance + +**The Broker** is the authority. It holds encrypted refresh tokens and API keys, runs the OAuth handshake with providers, and operates the background token refresh loop. No other service ever sees a refresh token. + +**The Gateway** is the public API. Agents talk to the Gateway; the Gateway proxies requests to the Broker over an internal API key. Agents never reach the Broker directly. + +**The Bridge** is a Go library that runs inside your agent process. It retrieves credentials from the Gateway and injects them into outgoing HTTP and gRPC requests automatically. -## Documentation +**The SDK** is a thin Go client for the Gateway API. Use it when you want direct control over credential retrieval without the full Bridge abstraction. -- **[Architecture](architecture.md)**: System overview, components, and data flow. -- **[Deployment & Config](deployment.md)**: How to configure, build, and deploy the services. -- **[Agent Integration Guide](guides/integrating-agents.md)**: How to build agents that consume connections (including the Go Bridge). -- **[Provider Management Guide](guides/managing-providers.md)**: How to register and configure identity providers (OAuth2, API Keys). -- **[API Reference](reference/api.md)**: Links to OpenAPI specifications. -- **[Security Model](reference/security-model.md)**: Security guardrails and hardening. -- **[Technical Debt & Roadmap](reference/tech-debt.md)**: Known issues and future plans. +--- -## Quick Links +## Links -- **[Broker Service](nexus-broker/README.md)**: Backend service details. -- **[Gateway Service](nexus-gateway/README.md)**: Frontend API service details. -- **[Bridge Library](nexus-bridge/README.md)**: Go client library details. \ No newline at end of file +- [GitHub repository](https://github.com/Prescott-Data/nexus-framework) +- [OpenAPI specification](https://github.com/Prescott-Data/nexus-framework/blob/main/openapi.yaml) +- [CHANGELOG](https://github.com/Prescott-Data/nexus-framework/blob/main/CHANGELOG.md) +- [Prescott Data developer portal](https://developers.prescottdata.io) \ No newline at end of file diff --git a/docs/reference/api.md b/docs/reference/api.md index 8420fbf..0caa61b 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -1,16 +1,77 @@ -# API Reference +# API Overview -The Nexus Framework uses OpenAPI 3.0 specifications to define its contracts. +Nexus exposes two API surfaces: the Gateway API, which agents and applications call, and the Broker API, which is internal and used only by the Gateway and administrative tooling. -## Gateway API (Public) -The Gateway provides the stable, public-facing API for agents and services. +--- -- **Spec File:** [`openapi.yaml`](../../openapi.yaml) -- **Status:** v1 Frozen. -- **Client SDK:** [`nexus-sdk`](../../nexus-sdk) +## Gateway API -## Broker API (Internal) -The Broker provides the internal API for provider management and token operations. +The Gateway API is the stable, public-facing surface for all agent integrations. It is versioned at `/v1` and follows standard REST conventions. -- **Spec File:** [`nexus-broker/openapi.yaml`](../../nexus-broker/openapi.yaml) -- **Status:** Internal / Evolving. +The full OpenAPI 3.0 specification is in the repository at [`openapi.yaml`](https://github.com/Prescott-Data/nexus-framework/blob/main/openapi.yaml). The v1 surface is frozen. No breaking changes will be made without a major version bump and a deprecation period. + +### Core endpoints + +| Method | Path | Description | +|---|---|---| +| `POST` | `/v1/request-connection` | Initiate an OAuth handshake or API key connection | +| `GET` | `/v1/check-connection/{id}` | Poll the connection status | +| `GET` | `/v1/token/{id}` | Retrieve credentials for an active connection | +| `POST` | `/v1/obo-sessions` | Create an On Behalf Of session | +| `DELETE` | `/v1/obo-sessions/{id}` | Close an OBO session | +| `GET` | `/v1/health` | Health check | + +### Authentication + +The Gateway does not require authentication for connection initiation or token retrieval. Access control is enforced by the `connection_id` itself. Only callers who hold a valid `connection_id` can retrieve its credentials. Protect `connection_id` values as you would a session token. + +For administrative operations (provider management), calls go directly to the Broker and require the `X-API-Key` header. + +### Credential payload + +The `GET /v1/token/{id}` endpoint returns a structured payload regardless of credential type: + +```json +{ + "strategy": { "type": "oauth2" }, + "credentials": { + "access_token": "...", + "expires_at": 1715000000 + }, + "expires_at": 1715000000 +} +``` + +The `strategy.type` field tells you how to apply the credentials. See [Provider Types](../concepts/provider-types.md) for the full list of strategy types and their credential shapes. + +--- + +## Broker API + +The Broker API is internal. It is called by the Gateway for token operations and by administrative tooling (including `nexus-cli`) for provider management. Do not expose the Broker API to agents or to untrusted networks. + +The Broker's OpenAPI specification is at [`nexus-broker/openapi.yaml`](https://github.com/Prescott-Data/nexus-framework/blob/main/nexus-broker/openapi.yaml). It is marked internal and evolving. Fields and endpoints may change between minor versions. + +### Provider management endpoints + +| Method | Path | Description | +|---|---|---| +| `GET` | `/providers` | List all registered providers | +| `GET` | `/providers/metadata` | Grouped metadata for frontend use | +| `POST` | `/providers` | Register a new provider | +| `GET` | `/providers/{name}` | Get a provider by name | +| `PUT` | `/providers/{name}` | Replace a provider configuration | +| `PATCH` | `/providers/{name}` | Update specific fields of a provider | +| `DELETE` | `/providers/{name}` | Delete a provider | + +### Authentication + +All Broker API calls require the `X-API-Key` header carrying the value set in the Broker's `API_KEY` environment variable. + +### Audit endpoint + +| Method | Path | Description | +|---|---|---| +| `GET` | `/audit` | Query audit log events | + +See the [Audit Log reference](audit-log.md) for query parameters and response schema. diff --git a/docs/reference/audit-log.md b/docs/reference/audit-log.md index c6e6574..8f6fe83 100644 --- a/docs/reference/audit-log.md +++ b/docs/reference/audit-log.md @@ -1,129 +1,85 @@ -# Audit Log Reference +# Audit Log -The Nexus Broker maintains a tamper-evident **audit log** of every control-plane mutation. Every time a provider is created, updated, or deleted — or an OAuth connection is established — a structured record is written to the `audit_events` table. +The Nexus Broker maintains a tamper-evident audit log of every control-plane mutation. The log is written to the `audit_events` table in PostgreSQL and is queryable through the Broker's REST API. -This provides a queryable history of who changed what and when, which is essential for operating Nexus as critical infrastructure. +The audit log records who did what to which resource, and when. It is the primary tool for answering compliance questions ("when was this provider created?"), forensic questions ("why did this agent lose access?"), and operational questions ("which connections were affected by the provider update on the 8th?"). --- -## Audited Events - -| Event Type | Trigger | -| :--- | :--- | -| `provider.created` | A new provider profile is registered via `POST /providers` | -| `provider.updated` | A provider's configuration is modified (`PUT` or `PATCH`) | -| `provider.deleted` | A provider is deleted (by ID or by name) | -| `oauth_flow_completed` | An OAuth callback completes successfully and a connection is established | -| `token_exchange_failed` | The authorization code → token exchange failed | -| `token_storage_failed` | Tokens were exchanged but could not be encrypted/stored | -| `token_retrieved` | A downstream service fetched a connection's token via `GET /connections/{id}/token` | -| `token_retrieval_failed` | A token fetch failed (not found, decryption error, inactive connection, etc.) | -| `token_refresh_fatal` | A refresh token was rejected by the provider (4xx), connection moved to `attention` | -| `oauth_error` | The provider returned an error on the OAuth callback (e.g. `access_denied`) | +## What is logged ---- - -## Query the Audit Log - -``` -GET /audit -``` - -Returns recent audit events in descending chronological order. This endpoint is protected by `ApiKeyMiddleware`. +Every event in the audit log carries an event type, structured event data, the caller's IP address, and the User-Agent string. -> **Note:** The Nexus Broker API is unversioned — all routes are mounted at the root (e.g., `/providers`, `/audit`). The `/v1/audit` path referenced elsewhere is aspirational and will apply if/when the Broker adopts a versioned API prefix. +| Event type | When it is written | +|---|---| +| `provider.created` | On every successful `POST /providers` | +| `provider.updated` | On every `PUT` or `PATCH` to a provider | +| `provider.deleted` | On every successful provider deletion | +| `connection.created` | On every successful OAuth callback (token exchange completed) | +| `token.retrieved` | On every successful `GET /connections/{id}/token` | +| `token.exchange_failed` | When the OAuth token exchange fails during a callback | +| `token.storage_failed` | When token encryption or database write fails | +| `token.refresh_fatal` | When a background refresh fails permanently (4xx from provider) | -### Query Parameters +--- -| Parameter | Type | Description | -| :--- | :--- | :--- | -| `event_type` | string | Filter by event type (e.g. `provider.deleted`) | -| `since` | string | RFC3339 timestamp — only return events after this time | -| `limit` | integer | Maximum records to return (default: `50`, max: `1000`) | +## Querying the audit log -### Examples +The audit log is available at `GET /audit` on the Broker. All requests require the `X-API-Key` header. -**Fetch the last 50 audit events:** ```bash curl -s "http://localhost:8080/audit" \ - -H "X-API-Key: " | jq . + -H "X-API-Key: your-api-key" | jq . ``` -**Filter by event type:** -```bash -curl -s "http://localhost:8080/audit?event_type=provider.deleted" \ - -H "X-API-Key: " | jq . -``` +### Query parameters -**Filter by time window:** -```bash -curl -s "http://localhost:8080/audit?since=2026-05-01T00:00:00Z&limit=100" \ - -H "X-API-Key: " | jq . -``` - -**Combine filters:** -```bash -curl -s "http://localhost:8080/audit?event_type=provider.created&since=2026-05-01T00:00:00Z" \ - -H "X-API-Key: " | jq . -``` - ---- +| Parameter | Type | Description | +|---|---|---| +| `event_type` | string | Filter by event type. Example: `provider.deleted` | +| `resource_id` | string | Filter by provider ID or connection ID | +| `since` | ISO 8601 | Return events after this timestamp | +| `until` | ISO 8601 | Return events before this timestamp | +| `limit` | integer | Maximum number of events to return. Default: 50, max: 500 | +| `offset` | integer | Pagination offset | -## Response Schema +### Response schema ```json -[ - { - "id": "a1b2c3d4-...", - "connection_id": "f5e6d7c8-...", - "event_type": "oauth_flow_completed", - "event_data": "{\"provider_id\": \"...\"}", - "ip_address": "10.0.0.1", - "user_agent": "nexus-gateway/1.0", - "created_at": "2026-05-05T10:30:00Z" - }, - { - "id": "b2c3d4e5-...", - "event_type": "provider.deleted", - "event_data": "{\"provider_id\": \"...\", \"provider_name\": \"old-slack\"}", - "ip_address": "192.168.1.5", - "user_agent": "curl/7.88.1", - "created_at": "2026-05-05T09:15:00Z" - } -] +{ + "events": [ + { + "id": "evt_01HXYZ...", + "event_type": "provider.created", + "created_at": "2026-05-08T09:12:34Z", + "caller_ip": "10.0.0.2", + "user_agent": "nexus-cli/0.4.0", + "data": { + "provider_id": "prov_01HABC...", + "provider_name": "google-workspace" + } + } + ], + "total": 142, + "limit": 50, + "offset": 0 +} ``` -> **Note:** Fields with `omitempty` (`connection_id`, `event_data`, `ip_address`, `user_agent`) are omitted from the response when their value is null, rather than being rendered as `null`. +--- -### Field Descriptions +## IP address handling -| Field | Type | Description | -| :--- | :--- | :--- | -| `id` | UUID | Unique audit event identifier | -| `connection_id` | UUID \| null | Associated connection, if applicable | -| `event_type` | string | The event type (see table above) | -| `event_data` | string \| null | JSON payload with event-specific context | -| `ip_address` | string \| null | IP of the caller (respects `X-Forwarded-For`) | -| `user_agent` | string \| null | User-Agent of the caller | -| `created_at` | RFC3339 | Timestamp of the event | +The Broker respects the `X-Forwarded-For` header when recording the caller IP. If your Gateway is behind a load balancer or reverse proxy, ensure the proxy sets `X-Forwarded-For` correctly so the audit log reflects the originating client IP rather than the proxy address. --- -## Database - -Audit events are stored in the `audit_events` PostgreSQL table, created in the initial migration (`00_create_tables.sql`). An index on `created_at DESC` (migration `11_add_audit_created_at_index.sql`) ensures fast time-range queries even at high volume. +## Retention -!!! note "Retention Policy" - There is currently no automatic retention/pruning policy for audit events. For long-running production deployments, consider adding a scheduled job to archive or delete records older than your compliance window (e.g., 90 days). +The audit log is stored in the same PostgreSQL database as provider and connection data. There is no automatic retention policy. Events are not deleted on a schedule. If you need to bound the size of the audit log, implement a periodic archival job that copies events older than your retention window to cold storage and deletes them from the `audit_events` table. --- -## Audit via `nexus-cli` - -Every mutation performed by [`nexus-cli apply`](../guides/security-as-code.md) is automatically recorded in the audit log. You can correlate CLI runs with audit events using the `ip_address` field (the IP of your CI runner) and the `event_data.provider_name` field. +## Using the audit log with nexus-cli -```bash -# See all provider changes from a CI apply run -curl -s "http://localhost:8080/audit?event_type=provider.created&since=2026-05-05T13:00:00Z" \ - -H "X-API-Key: " | jq . -``` +When you manage providers through `nexus-cli apply`, every provider create, update, and delete generates audit log entries. This gives you an automated, traceable record of every declarative change with the `nexus-cli` User-Agent in the `user_agent` field, making it straightforward to distinguish CLI-driven changes from manual API calls. diff --git a/docs/reference/roadmap.md b/docs/reference/roadmap.md new file mode 100644 index 0000000..7f64355 --- /dev/null +++ b/docs/reference/roadmap.md @@ -0,0 +1,57 @@ +# Roadmap + +This page documents what is actively being built, what has been intentionally deferred, and the known limitations of the current implementation. It is kept in this documentation site rather than only in GitHub Issues so that developers integrating with Nexus can plan their own work against it. + +--- + +## Active work + +### mTLS between Gateway and Broker + +The current security model uses an API key for Gateway-to-Broker authentication. Mutual TLS will replace this, providing cryptographically enforced identity at the transport layer. This removes the API key as a single-point secret that, if compromised, allows unrestricted Broker access from any host. + +The design is complete. Implementation is in progress. + +### Gateway-proxied token refresh + +Today, if a token expires and you are making direct HTTP calls (not using the Bridge), you call the Broker's refresh endpoint directly to force a refresh before the next `GET /token`. This is an internal endpoint that should not be accessible to agents. The Gateway will expose a proxy endpoint that wraps this operation so agents and non-Go clients can trigger refreshes without needing Broker access. + +### OBO session webhooks + +When an OBO session is created, closed, or expires, Nexus will emit a webhook event. This allows you to stream delegation activity to your SIEM, audit store, or observability pipeline without polling the audit log. + +### TypeScript and Python SDKs + +The Go SDK is the reference implementation. TypeScript (`@nexus/sdk`) and Python (`nexus-sdk`) ports are in development. The TypeScript SDK is scheduled for the 0.6 milestone. The Python SDK follows in 0.7. + +--- + +## Known limitations + +### No per-scope access control on connections + +Currently, when a connection is established, it grants access to all scopes the provider was configured with. There is no mechanism to create a connection scoped to a subset of those scopes per-user. This is relevant for multi-tenant deployments where different users should have different levels of access to the same provider. + +The OBO delegation feature addresses this for agent-initiated operations by tying the session to the user's clearance level. Full per-scope connection scoping is on the roadmap but has not been scheduled. + +### Static credential rotation requires reconnection + +For `api_key` providers, if the underlying credential changes externally (the API key is rotated at the provider), there is no automated mechanism to detect the change and prompt reconnection. You update the connection manually. Automated stale credential detection for static key providers is tracked but not scheduled. + +### Audit log has no built-in archival + +The audit log grows without bound. There is no TTL or archival mechanism in the Broker. Teams running Nexus in production should implement their own archival job. See the [Audit Log reference](audit-log.md) for the recommended approach. + +### Single-region deployment + +Nexus does not currently support multi-region active-active deployments. The `ENCRYPTION_KEY` and PostgreSQL state make cross-region replication non-trivial to implement safely. Multi-region read replicas for the audit log query path are feasible today; write operations must route to a single Broker primary. + +--- + +## Deferred features + +The following features were considered and explicitly deferred rather than forgotten. + +**SAML provider support.** Nexus is designed around OAuth 2.0 and OIDC. SAML is a different protocol with different security properties and a different credential lifecycle. Supporting it within the current Broker architecture would require significant changes to the handshake engine. SAML support is out of scope until the core OAuth surface is stable and well-tested in production. + +**Role-based access control for the admin API.** The Broker's admin API currently uses a single API key. Fine-grained RBAC (read-only admin, provider admin, full admin) is deferred. The immediate mitigation is to manage providers declaratively through `nexus-cli` with git-enforced review gates, which provides access control at the process level rather than the API level. diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css new file mode 100644 index 0000000..141c97c --- /dev/null +++ b/docs/stylesheets/extra.css @@ -0,0 +1,759 @@ +/* ============================================================ + Nexus Docs — Custom Theme + Adapted from the JarvisCore docs stylesheet. + ============================================================ */ + +/* ---------- Material Custom Palette Overrides ---------- */ +[data-md-color-primary="custom"] { + --md-primary-fg-color: #0071F7; + --md-primary-fg-color--light: #35B0FE; + --md-primary-fg-color--dark: #0049C6; + --md-primary-bg-color: #ffffff; + --md-primary-bg-color--light: rgba(255, 255, 255, 0.7); +} + +[data-md-color-accent="custom"] { + --md-accent-fg-color: #0CF0E3; + --md-accent-fg-color--light: rgba(12, 240, 227, 0.1); + --md-accent-bg-color-light: rgba(12, 240, 227, 0.1); +} + +/* ---------- Google Fonts ---------- */ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap'); + +/* ---------- Design Tokens ---------- */ +:root { + --nx-brand: #0071F7; + --nx-brand-light: #35B0FE; + --nx-brand-dark: #0049C6; + --nx-accent: #0CF0E3; + + /* Semantic */ + --nx-green: #0CC572; + --nx-green-subtle: rgba(12, 197, 114, 0.10); + --nx-yellow: #E8A302; + --nx-yellow-subtle: rgba(232, 163, 2, 0.10); + --nx-red: #EF4444; + --nx-red-subtle: rgba(239, 68, 68, 0.10); + + /* Surface */ + --nx-surface: #f8fafc; + --nx-border: #e2e8f0; + --nx-text-muted: #64748b; + + --nx-gradient: linear-gradient(135deg, #35B0FE 0%, #0071F7 40%, #0049C6 100%); + --nx-gradient-subtle: linear-gradient(135deg, rgba(0, 113, 247, 0.06) 0%, rgba(12, 240, 227, 0.04) 100%); + + --nx-radius: 10px; + --nx-shadow: 0 4px 24px rgba(0, 113, 247, 0.10); + --nx-shadow-hov: 0 8px 32px rgba(0, 113, 247, 0.18); + --nx-transition: 0.22s cubic-bezier(0.4, 0, 0.2, 1); + + --md-sidebar-width: 15rem; +} + +[data-md-color-scheme="slate"] { + --nx-surface: #0f1117; + --nx-border: #1e2130; + --nx-text-muted: #94a3b8; + --nx-gradient-subtle: linear-gradient(135deg, rgba(0, 113, 247, 0.12) 0%, rgba(12, 240, 227, 0.08) 100%); + --nx-shadow: 0 4px 24px rgba(0, 0, 0, 0.40); + --nx-shadow-hov: 0 8px 40px rgba(0, 113, 247, 0.25); +} + +/* ---------- Base Typography ---------- */ +body, +.md-content { + font-family: 'Inter', system-ui, -apple-system, sans-serif; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +/* ── Heading scale ───────────────────────────────────────── + H1 — page title → dark/white, large + H2 — section → brand blue, left border + H3 — sub-section → brand-light + H4 — detail → muted, normal weight + ─────────────────────────────────────────────────────── */ + +.md-typeset h1 { + font-weight: 700; + letter-spacing: -0.025em; +} + +.md-typeset h2 { + font-weight: 600; + letter-spacing: -0.015em; + color: var(--nx-brand); + border-left: 3px solid var(--nx-brand); + padding-left: 0.7rem; + margin-top: 2rem; +} + +.md-typeset h3 { + font-weight: 600; + color: var(--nx-brand-light); +} + +.md-typeset h4 { + font-weight: 500; + color: var(--nx-text-muted); +} + +[data-md-color-scheme="slate"] .md-typeset h2 { + color: var(--nx-brand-light); + border-left-color: var(--nx-brand-light); +} + +[data-md-color-scheme="slate"] .md-typeset h3 { + color: #7ec8f8; +} + +[data-md-color-scheme="slate"] .md-typeset h4 { + color: var(--nx-text-muted); +} + +/* ── Body copy density — tight prose ── */ +.md-typeset { + font-size: 0.7875rem !important; + line-height: 1.5 !important; +} + +.md-typeset p { + font-size: 0.7875rem; + line-height: 1.5; + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +.md-typeset li { + font-size: 0.7875rem; + line-height: 1.45; +} + +.md-typeset dt, +.md-typeset dd { + font-size: 0.75rem; + line-height: 1.45; +} + +.md-typeset .admonition p, +.md-typeset details p { + font-size: 0.75rem; + line-height: 1.45; +} + +.md-typeset table td, +.md-typeset table th { + font-size: 0.75rem; + line-height: 1.4; +} + +.md-typeset table th { + font-size: 0.7rem !important; + font-weight: 600 !important; + letter-spacing: 0.03em !important; + text-transform: uppercase !important; +} + +.md-typeset code, +.md-typeset pre code { + font-family: 'JetBrains Mono', monospace; + font-size: 0.72rem; + line-height: 1.38; +} + +/* Headings stay prominent */ +.md-typeset h1 { font-size: 1.75rem; line-height: 1.2; } +.md-typeset h2 { font-size: 1.05rem; line-height: 1.25; } +.md-typeset h3 { font-size: 0.9rem; line-height: 1.3; } +.md-typeset h4 { font-size: 0.85rem; line-height: 1.35; } + +/* ============================================================ + HEADER + ============================================================ */ + +.md-header { + background: #ffffff !important; + box-shadow: none !important; + border-bottom: 1px solid rgba(0, 0, 0, 0.08); +} + +.md-header[data-md-state="shadow"] { + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06) !important; +} + +[data-md-color-scheme="slate"] .md-header { + background: #0c0c0e !important; + border-bottom: 1px solid rgba(255, 255, 255, 0.07); +} + +[data-md-color-scheme="slate"] .md-header[data-md-state="shadow"] { + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06) !important; +} + +.md-header__inner { + display: flex; + align-items: center; +} + +.md-header__title { + flex-grow: 0 !important; + flex-shrink: 0 !important; + min-width: max-content !important; + font-family: 'Inter', sans-serif; + font-size: 0.9375rem; + font-weight: 700; + letter-spacing: -0.025em; + color: #0c0c0e !important; + margin-left: 0.45rem; +} + +[data-md-color-scheme="slate"] .md-header__title { + color: #fff !important; +} + +.md-header .md-header__inner.md-grid { + position: relative !important; +} + +.md-header .md-header__inner .md-search, +.md-header .md-search[data-md-component="search"] { + position: absolute !important; + left: 50% !important; + transform: translateX(-50%) !important; + width: 380px !important; + z-index: 2 !important; +} + +.md-header .md-search__form { + width: 100%; +} + +.nx-version-chip { + margin-right: auto; +} + +.md-header__source { + display: none !important; +} + +.md-header__button.md-logo { + padding: 0 !important; + margin-right: 1.2rem; + display: flex; + align-items: center; + width: auto !important; +} + +.md-header__button.md-logo img, +.md-header__button.md-logo svg { + height: 18px !important; + width: auto !important; +} + +.md-header .md-icon, +.md-header .md-header__button { + color: rgba(0, 0, 0, 0.45) !important; + transition: color 0.15s ease; +} + +.md-header .md-header__button:hover { + color: rgba(0, 0, 0, 0.8) !important; +} + +[data-md-color-scheme="slate"] .md-header .md-icon, +[data-md-color-scheme="slate"] .md-header .md-header__button { + color: rgba(255, 255, 255, 0.5) !important; +} + +[data-md-color-scheme="slate"] .md-header .md-header__button:hover { + color: #fff !important; +} + +/* ============================================================ + SEARCH + ============================================================ */ + +.md-header .md-search__form { + background: rgba(0, 0, 0, 0.05) !important; + border-radius: 99px !important; + border: none !important; + height: 36px !important; + position: relative; + transition: all 0.2s ease; +} + +.md-header .md-search__input { + font-family: 'Inter', sans-serif; + font-size: 0.85rem; + color: #0c0c0e !important; + padding-left: 2.2rem !important; + padding-right: 2.5rem !important; + padding-top: 0 !important; + padding-bottom: 0 !important; + background: transparent !important; +} + +.md-header .md-search__input::placeholder { + color: rgba(0, 0, 0, 0.4) !important; +} + +.md-search__icon[for="__search"] { + display: block !important; + position: absolute; + left: 0.7rem; + top: 50%; + transform: translateY(-50%); + width: 1rem; + height: 1rem; + color: rgba(0, 0, 0, 0.4); +} + +.md-header .md-search__form::after { + content: "⌘K"; + position: absolute; + right: 0.8rem; + top: 50%; + transform: translateY(-50%); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + font-size: 0.75rem; + font-weight: 500; + color: rgba(0, 0, 0, 0.4); + pointer-events: none; +} + +[data-md-toggle="search"]:checked~.md-header .md-search { + position: fixed !important; + top: 0 !important; + left: 0 !important; + width: 100vw !important; + height: 100vh !important; + z-index: 100 !important; + transform: none !important; + display: flex; + justify-content: center; + align-items: flex-start; + padding-top: 15vh; +} + +[data-md-toggle="search"]:checked~.md-header .md-search__overlay { + position: fixed !important; + top: 0 !important; + left: 0 !important; + width: 100vw !important; + height: 100vh !important; + background: rgba(0, 0, 0, 0.4) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; + z-index: 0 !important; + opacity: 1 !important; + display: block !important; +} + +[data-md-toggle="search"]:checked~.md-header .md-search__inner { + position: relative !important; + width: 600px !important; + max-width: 90vw !important; + background: transparent !important; + box-shadow: none !important; + top: 0 !important; + transform: none !important; + left: 0 !important; + z-index: 10 !important; +} + +[data-md-toggle="search"]:checked~.md-header .md-search__form { + background: #fff !important; + border-radius: 12px 12px 0 0 !important; + border: 1px solid rgba(0, 0, 0, 0.1) !important; + border-bottom: 1px solid rgba(0, 0, 0, 0.05) !important; + height: 56px !important; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1) !important; +} + +[data-md-toggle="search"]:checked~.md-header .md-search__form::after { + display: none !important; +} + +[data-md-toggle="search"]:checked~.md-header .md-search__output { + position: static !important; + background: #fff !important; + border-radius: 0 0 12px 12px !important; + border: 1px solid rgba(0, 0, 0, 0.1) !important; + border-top: none !important; + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15) !important; + max-height: 60vh !important; + overflow: hidden !important; +} + +[data-md-color-scheme="slate"] .md-header .md-search__form { + background: rgba(255, 255, 255, 0.08) !important; +} + +[data-md-color-scheme="slate"] .md-header .md-search__input { + color: #fff !important; +} + +[data-md-color-scheme="slate"] .md-header .md-search__input::placeholder, +[data-md-color-scheme="slate"] .md-search__icon[for="__search"], +[data-md-color-scheme="slate"] .md-header .md-search__form::after { + color: rgba(255, 255, 255, 0.5) !important; +} + +[data-md-color-scheme="slate"] [data-md-toggle="search"]:checked~.md-header .md-search__form { + background: #1e1e1e !important; + border-color: rgba(255, 255, 255, 0.1) !important; +} + +[data-md-color-scheme="slate"] [data-md-toggle="search"]:checked~.md-header .md-search__output { + background: #1e1e1e !important; + border-color: rgba(255, 255, 255, 0.1) !important; +} + +/* ── Version chip ── */ +.nx-version-chip { + display: inline-flex; + align-items: center; + font-family: 'Inter', sans-serif; + font-size: 0.68rem; + font-weight: 500; + letter-spacing: 0.03em; + padding: 2px 8px; + border-radius: 4px; + border: 1px solid rgba(0, 0, 0, 0.12); + color: rgba(0, 0, 0, 0.4); + margin-left: 0.6rem; + white-space: nowrap; + flex-shrink: 0; +} + +[data-md-color-scheme="slate"] .nx-version-chip { + border-color: rgba(255, 255, 255, 0.15); + color: rgba(255, 255, 255, 0.4); +} + +/* ── GitHub stars widget ── */ +.nx-gh-btn { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 3px 10px; + border-radius: 6px; + border: 1px solid rgba(0, 0, 0, 0.12); + font-family: 'Inter', sans-serif; + font-size: 0.75rem; + font-weight: 500; + color: rgba(0, 0, 0, 0.5) !important; + text-decoration: none !important; + margin: 0 0.5rem; + transition: border-color 0.15s, color 0.15s, background 0.15s; + flex-shrink: 0; + white-space: nowrap; +} + +.nx-gh-btn:hover { + border-color: var(--nx-brand); + color: var(--nx-brand) !important; + background: rgba(0, 113, 247, 0.05); + text-decoration: none !important; +} + +[data-md-color-scheme="slate"] .nx-gh-btn { + border-color: rgba(255, 255, 255, 0.13); + color: rgba(255, 255, 255, 0.48) !important; +} + +[data-md-color-scheme="slate"] .nx-gh-btn:hover { + border-color: var(--nx-brand-light); + color: var(--nx-brand-light) !important; + background: rgba(0, 113, 247, 0.1); +} + +/* ============================================================ + NAVIGATION TABS + ============================================================ */ + +.md-tabs { + background: #ffffff !important; + border-bottom: 1px solid rgba(0, 0, 0, 0.08); + margin-top: 0; + min-height: 0; +} + +[data-md-color-scheme="slate"] .md-tabs { + background: #0c0c0e !important; + border-bottom: 1px solid rgba(255, 255, 255, 0.07); + margin-top: 0; +} + +.md-tabs__list { + padding: 0; + margin: 0; + display: flex; + align-items: stretch; +} + +.md-tabs__item { + display: flex; + align-items: stretch; +} + +.md-tabs__link { + font-family: 'Inter', sans-serif; + font-size: 0.78rem; + font-weight: 500; + letter-spacing: 0; + color: #292929 !important; + opacity: 1 !important; + padding: 6px 12px 4px; + position: relative; + transition: color 0.15s ease; + margin-top: 0 !important; + display: inline-flex; + align-items: center; + gap: 5px; + text-decoration: none; + box-sizing: border-box; +} + +[data-md-color-scheme="slate"] .md-tabs__link { + color: rgba(255, 255, 255, 0.42) !important; +} + +.md-tabs__link::after { + content: ''; + position: absolute; + bottom: -1px; + left: 12px; + right: 12px; + height: 2px; + background: var(--nx-brand); + border-radius: 2px 2px 0 0; + transform: scaleX(0); + transform-origin: center; + transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1); +} + +.md-tabs__link:hover { + color: #1a1a1a !important; + text-decoration: none; +} + +[data-md-color-scheme="slate"] .md-tabs__link:hover { + color: rgba(255, 255, 255, 0.8) !important; +} + +.md-tabs__item--active .md-tabs__link { + color: var(--nx-brand) !important; + font-weight: 600 !important; +} + +.md-tabs__item--active .md-tabs__link::after { + transform: scaleX(1); +} + +.md-tabs__item:not(.md-tabs__item--active) .md-tabs__link:hover::after { + transform: scaleX(0.6); + opacity: 0.35; +} + +/* ============================================================ + LEFT SIDEBAR + ============================================================ */ + +.md-sidebar--primary .md-sidebar__scrollwrap { + padding: 0.15rem 0 2rem; +} + +.md-nav--primary>.md-nav__list>.md-nav__item>.md-nav__link, +.md-nav__title { + font-family: 'Inter', sans-serif; + font-size: 0.62rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--nx-text-muted) !important; + padding: 0.9rem 0.75rem 0.3rem; + opacity: 0.7; + cursor: default; + pointer-events: none; +} + +.md-nav__link { + font-family: 'Inter', sans-serif; + font-size: 0.65rem; + font-weight: 400; + color: var(--md-default-fg-color) !important; + opacity: 0.88; + padding: 0.24rem 0.6rem; + border-radius: 6px; + margin: 1px 0.25rem; + display: flex; + align-items: center; + transition: background 0.13s ease, color 0.13s ease, opacity 0.13s ease; + position: relative; + text-decoration: none !important; + white-space: normal; + overflow: visible; + word-break: break-word; +} + +.md-nav__link:hover { + background: rgba(0, 113, 247, 0.07); + color: var(--nx-brand) !important; + opacity: 1; + text-decoration: none !important; +} + +[data-md-color-scheme="slate"] .md-nav__link:hover { + background: rgba(0, 113, 247, 0.12); + color: var(--nx-brand-light) !important; +} + +.md-nav__link--active { + background: rgba(0, 113, 247, 0.08) !important; + color: var(--nx-brand) !important; + font-weight: 600 !important; + opacity: 1 !important; + border-left: 2px solid var(--nx-brand); + padding-left: calc(0.6rem - 2px); +} + +[data-md-color-scheme="slate"] .md-nav__link--active { + background: rgba(0, 113, 247, 0.14) !important; + color: var(--nx-brand-light) !important; + border-left-color: var(--nx-brand-light); +} + +/* Nested nav items — indented children */ +.md-nav__item .md-nav .md-nav__link { + font-size: 0.63rem; + padding: 0.2rem 0.6rem 0.2rem 1rem; +} + +/* ============================================================ + CODE BLOCKS + ============================================================ */ + +.md-typeset pre { + border-radius: var(--nx-radius); +} + +.md-typeset code { + border-radius: 4px; +} + +/* Copy button */ +.md-clipboard { + color: rgba(255, 255, 255, 0.35); + transition: color 0.15s; +} + +.md-clipboard:hover { + color: rgba(255, 255, 255, 0.8); +} + +/* ============================================================ + TABLES + ============================================================ */ + +.md-typeset table:not([class]) { + border: 1px solid var(--nx-border); + border-radius: var(--nx-radius); + overflow: hidden; + font-size: 0.75rem; +} + +.md-typeset table:not([class]) th { + background: var(--nx-surface); + font-family: 'Inter', sans-serif; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.06em; + text-transform: uppercase; + color: var(--nx-text-muted); + border-bottom: 1px solid var(--nx-border); +} + +.md-typeset table:not([class]) td { + border-bottom: 1px solid var(--nx-border); + vertical-align: top; +} + +.md-typeset table:not([class]) tr:last-child td { + border-bottom: none; +} + +/* ============================================================ + ADMONITIONS — minimal, not decorative + ============================================================ */ + +.md-typeset .admonition, +.md-typeset details { + border-left-width: 3px; + border-radius: 0 var(--nx-radius) var(--nx-radius) 0; + font-size: 0.75rem; +} + +.md-typeset .admonition-title, +.md-typeset summary { + font-weight: 600; + font-size: 0.72rem; + letter-spacing: 0.02em; +} + +/* Warning — genuinely red */ +.md-typeset .admonition.warning, +.md-typeset details.warning { + border-color: var(--nx-red); + background: var(--nx-red-subtle); +} + +/* Note — brand blue */ +.md-typeset .admonition.note, +.md-typeset details.note { + border-color: var(--nx-brand); + background: rgba(0, 113, 247, 0.06); +} + +/* Tip — green */ +.md-typeset .admonition.tip, +.md-typeset details.tip { + border-color: var(--nx-green); + background: var(--nx-green-subtle); +} + +/* ============================================================ + FOOTER + ============================================================ */ + +.md-footer { + background: #0c0c0e; +} + +.md-footer-meta { + background: #0c0c0e; + border-top: 1px solid rgba(255, 255, 255, 0.07); +} + +.md-footer-meta__inner { + font-family: 'Inter', sans-serif; + font-size: 0.68rem; + color: rgba(255, 255, 255, 0.35); +} + +/* ============================================================ + CONTENT AREA + ============================================================ */ + +.md-content__inner { + max-width: 780px; + padding-top: 1.5rem; +} + +/* Horizontal rule — light separator */ +.md-typeset hr { + border-color: var(--nx-border); + margin: 2rem 0; +} diff --git a/mkdocs.yml b/mkdocs.yml index 6b44a79..e3c5b57 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ -site_name: Nexus Framework -site_description: Provider-agnostic identity and connection orchestration for autonomous agents. +site_name: Nexus +site_description: Provider-agnostic credential brokering for autonomous agents. Built by Prescott Data. site_url: https://prescott-data.github.io/nexus-framework/ repo_url: https://github.com/Prescott-Data/nexus-framework repo_name: Prescott-Data/nexus-framework @@ -10,31 +10,44 @@ site_dir: site theme: name: material + custom_dir: docs/overrides + logo: assets/nexus-logo-blue.png + favicon: assets/nexus-logo-blue.png palette: - scheme: default - primary: indigo - accent: indigo + primary: custom + accent: custom toggle: icon: material/brightness-7 name: Switch to dark mode - scheme: slate - primary: indigo - accent: indigo + primary: custom + accent: custom toggle: icon: material/brightness-4 name: Switch to light mode + font: + text: Inter + code: JetBrains Mono features: - navigation.tabs - navigation.tabs.sticky - navigation.sections - navigation.expand - navigation.top + - navigation.indexes - search.highlight - search.share - content.code.copy - content.code.annotate - toc.integrate +extra_css: + - stylesheets/extra.css + +extra_javascript: + - javascripts/header.js + plugins: - search @@ -46,7 +59,7 @@ markdown_extensions: anchor_linenums: true - pymdownx.inlinehilite - pymdownx.snippets: - base_path: ['.'] # repo root — allows --8<-- "README.md" in index.md + base_path: ['.'] - pymdownx.tabbed: alternate_style: true - tables @@ -55,35 +68,40 @@ markdown_extensions: nav: - Home: index.md - - Core Concepts: - - Architecture: architecture.md - - The Nexus Protocol: NEXUS_PROTOCOL.md - - Technical Whitepaper: nexus-protocol-whitepaper.pdf - - Security Model: reference/security-model.md + - Concepts: + - Architecture: concepts/architecture.md + - Connections: concepts/connections.md + - Agent Identity: concepts/agent-identity.md + - Auth Strategies: concepts/auth-strategies.md + - Provider Types: concepts/provider-types.md + - Security Model: concepts/security-model.md + - The SDK: concepts/sdk.md + - The Bridge: concepts/bridge.md + - The Broker: concepts/broker.md + - The Gateway: concepts/gateway.md - Getting Started: - - Quick Start: index.md - - Deployment & Config: deployment.md - - Component Deep Dives: - - Nexus Broker: services/broker.md - - Nexus Gateway: services/gateway.md - - Nexus Bridge: services/bridge.md - - SDKs: - - Overview: sdks/index.md - - Go SDK: sdks/go.md - - TypeScript SDK: sdks/typescript.md - - Python SDK: sdks/python.md + - Deploy in Five Minutes: getting-started/quickstart.md + - Environment Variables: getting-started/configuration.md + - Your First Connection: getting-started/first-connection.md - Guides: - - Agent Integration: guides/integrating-agents.md + - Registering a Provider: guides/registering-a-provider.md + - Integrating Agents: guides/integrating-agents.md - MCP Server Integration: guides/mcp-integration.md + - Agent Sessions: guides/agent-sessions.md + - Static Credential Flow: guides/static-credentials.md + - Handling Attention State: guides/attention-state.md + - OBO Delegation: guides/obo-delegation.md - Managing Providers: guides/managing-providers.md - - Security-as-Code (nexus-cli): guides/security-as-code.md - - API Reference: - - API Overview: reference/api.md + - Security-as-Code: guides/security-as-code.md - Audit Log: reference/audit-log.md - - Technical Debt & Roadmap: reference/tech-debt.md + - Deploying Nexus: infrastructure/deploying-nexus.md + - Reference: + - API Reference: reference/api.md + - CLI Reference: reference/cli.md extra: + version: "0.4.0" social: - icon: fontawesome/brands/github link: https://github.com/Prescott-Data/nexus-framework - name: Nexus Framework on GitHub + name: nexus-framework on GitHub From 222e9b6e6fcfee0be54a46894c888a4f8668e1c6 Mon Sep 17 00:00:00 2001 From: Muyukani Ephraim Kizito Date: Thu, 14 May 2026 21:57:55 +0300 Subject: [PATCH 02/16] =?UTF-8?q?docs:=20revamp=20doc=20site=20=E2=80=94?= =?UTF-8?q?=20new=20nav,=20SDK=20reference,=20CLI=20reference,=20logo,=20t?= =?UTF-8?q?able=20styles,=20audit=20log,=20agent=20identity,=20agent=20ses?= =?UTF-8?q?sions,=20OBO=20delegation,=20security-as-code,=20infra=20deploy?= =?UTF-8?q?=20guide,=20brand=20CSS=20overhaul?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/assets/nexus-logo-black.png | Bin 0 -> 249579 bytes docs/assets/nexus-logo-blue.png | Bin 0 -> 89571 bytes docs/assets/nexus-logo-white.png | Bin 0 -> 470083 bytes docs/concepts/agent-identity.md | 131 ++ docs/concepts/architecture.md | 32 + docs/concepts/auth-strategies.md | 91 ++ docs/concepts/bridge.md | 54 + docs/concepts/broker.md | 59 + docs/concepts/connections.md | 91 ++ docs/concepts/gateway.md | 55 + docs/concepts/provider-types.md | 64 +- docs/concepts/sdk.md | 152 ++ docs/concepts/security-model.md | 81 +- docs/guides/agent-sessions.md | 207 +++ docs/guides/attention-state.md | 113 ++ docs/guides/obo-delegation.md | 149 +- docs/guides/registering-a-provider.md | 153 ++ docs/guides/static-credentials.md | 154 ++ docs/index.md | 89 +- docs/infrastructure/deploying-nexus.md | 144 ++ docs/javascripts/header.js | 71 + docs/reference/api.md | 87 +- docs/reference/cli.md | 147 ++ docs/reference/roadmap.md | 72 +- docs/stylesheets/extra.css | 1825 +++++++++++++++++++++--- 25 files changed, 3638 insertions(+), 383 deletions(-) create mode 100644 docs/assets/nexus-logo-black.png create mode 100644 docs/assets/nexus-logo-blue.png create mode 100644 docs/assets/nexus-logo-white.png create mode 100644 docs/concepts/agent-identity.md create mode 100644 docs/concepts/architecture.md create mode 100644 docs/concepts/auth-strategies.md create mode 100644 docs/concepts/bridge.md create mode 100644 docs/concepts/broker.md create mode 100644 docs/concepts/connections.md create mode 100644 docs/concepts/gateway.md create mode 100644 docs/concepts/sdk.md create mode 100644 docs/guides/agent-sessions.md create mode 100644 docs/guides/attention-state.md create mode 100644 docs/guides/registering-a-provider.md create mode 100644 docs/guides/static-credentials.md create mode 100644 docs/infrastructure/deploying-nexus.md create mode 100644 docs/javascripts/header.js create mode 100644 docs/reference/cli.md diff --git a/docs/assets/nexus-logo-black.png b/docs/assets/nexus-logo-black.png new file mode 100644 index 0000000000000000000000000000000000000000..2d776a7bfc878824a56e68c027bb2e327ed28adc GIT binary patch literal 249579 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 z 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 LbM^a`2QU8*6xpqp literal 0 HcmV?d00001 diff --git a/docs/assets/nexus-logo-blue.png b/docs/assets/nexus-logo-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..93158e7fbc8f4e94705f9cf234c75deaab32cfe2 GIT binary patch literal 89571 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 literal 0 HcmV?d00001 diff --git a/docs/assets/nexus-logo-white.png b/docs/assets/nexus-logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..5079528564a2b7260a13dd50899e539ecf62311c GIT binary patch literal 470083 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

?z)~t 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

Qkl0%Q(izV(1z&Nftv6 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%0Au-9e@ah9pNHTj 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/concepts/agent-identity.md b/docs/concepts/agent-identity.md new file mode 100644 index 0000000..e99e8dc --- /dev/null +++ b/docs/concepts/agent-identity.md @@ -0,0 +1,131 @@ +# Agent Identity + +Nexus today has a connection model: a user authorizes a connection, and any agent that has the `connection_id` can retrieve tokens from it. The agent is anonymous. There is no record in the system of which agent is which, what it is allowed to do, or how long its authorization should last. + +The agent identity model, currently in development, adds agents as first-class principals in Nexus. An agent has a registered identity, a declared set of allowed scopes, and requests short-lived scoped sessions rather than holding a connection token directly. + +## The agent registry + +Each agent is registered once by an administrator: + +```bash +curl -X POST https://your-gateway.example.com/admin/v1/agents \ + -H "X-API-Key: your-admin-api-key" \ + -H "Content-Type: application/json" \ + -d '{ + "agent_id": "crm-agent", + "description": "Reads and updates customer records in Salesforce", + "allowed_scopes": ["crm:contacts:read", "crm:contacts:write"] + }' +``` + +| Field | Description | +|---|---| +| `agent_id` | Stable identifier for this agent — used in session requests and audit records | +| `description` | Human-readable label for the agent registry UI | +| `allowed_scopes` | The complete set of scopes this agent is ever permitted to request | + +The `allowed_scopes` list is the agent's authorization ceiling. An agent can request any subset of these scopes at session time, but can never request a scope that is not in this list. + +## Agent sessions + +An agent session is a short-lived, scoped credential grant. The agent requests a session specifying exactly which scopes it needs for the current operation: + +```bash +curl -X POST https://your-gateway.example.com/v1/agent-sessions \ + -H "X-API-Key: your-gateway-api-key" \ + -H "Content-Type: application/json" \ + -d '{ + "agent_id": "crm-agent", + "provider_name": "salesforce", + "scopes": ["crm:contacts:read"], + "ttl_seconds": 900 + }' +``` + +Response: + +```json +{ + "session_id": "sess_a1b2c3", + "access_token": "eyJ...", + "scopes_granted": ["crm:contacts:read"], + "expires_at": "2026-05-12T21:00:00Z" +} +``` + +The Broker enforces two constraints before issuing a session: + +1. Every requested scope must be in the agent's `allowed_scopes` list. +2. The agent's `allowed_scopes` are themselves a subset of what the underlying connection's provider grants. + +If either check fails, the Broker returns `403`. The agent receives exactly what it requests — never more. + +## Session lifecycle + +| Field | Description | +|---|---| +| `session_id` | Stable identifier — use for audit queries and session closure | +| `access_token` | Short-lived token to use against the provider's API | +| `scopes_granted` | The actual scopes issued — confirm these match what you requested | +| `expires_at` | Hard expiry — the session cannot be refreshed, only replaced | + +When the agent finishes its operation, close the session explicitly: + +```bash +curl -X DELETE https://your-gateway.example.com/v1/agent-sessions/sess_a1b2c3 \ + -H "X-API-Key: your-gateway-api-key" +``` + +Closing a session revokes the token server-side. A token intercepted after session closure cannot be replayed. + +Sessions that are not explicitly closed expire at `expires_at`. The default TTL is 900 seconds (15 minutes). + +## Custom scopes + +Not every permission maps to an OAuth provider scope. Internal business operations have their own authorization requirements: `acme:gliding`, `acme:flaring`, `pipeline:trigger`, `reports:generate`. These are custom scopes. + +Custom scopes are declared in the agent's `allowed_scopes` list exactly like provider scopes: + +```bash +curl -X POST https://your-gateway.example.com/admin/v1/agents \ + -H "X-API-Key: your-admin-api-key" \ + -d '{ + "agent_id": "ops-agent", + "description": "Performs authorized internal financial operations", + "allowed_scopes": [ + "acme:gliding", + "acme:flaring", + "crm:contacts:read" + ] + }' +``` + +The enforcement mechanism differs from provider scopes: + +| Scope type | How the Broker resolves the session token | +|---|---| +| Provider scope (`crm:contacts:read`) | Fetches the underlying OAuth token from the stored connection, returns it scoped to the requested permissions | +| Custom scope (`acme:gliding`) | Returns a signed session token asserting the agent is authorized for this scope — your downstream service validates the assertion | + +For custom scopes, the session response includes `token_type: session` rather than `token_type: bearer`: + +```json +{ + "session_id": "sess_xyz", + "session_token": "eyJ...", + "scopes_granted": ["acme:gliding"], + "expires_at": "2026-05-12T21:00:00Z", + "token_type": "session" +} +``` + +Your downstream service verifies this session token against the Broker's public key, or by calling `GET /v1/agent-sessions/{session_id}` to confirm it is active. + +## Why this matters + +The connection model does not restrict what an agent can do with a token it retrieves. If the token has `crm:delete` scope, any agent with the `connection_id` can delete records. There is no enforcement point between the token's capabilities and the specific agent's intended use. + +The agent identity model enforces least-privilege at the session layer. The `crm-agent` registered with `["crm:contacts:read"]` cannot request `crm:delete` even if the underlying Salesforce connection has it. The agent can only ever operate within its declared scope boundary, regardless of how the connection was authorized. + +This is the difference between "the token allows this" and "this agent is allowed to do this." diff --git a/docs/concepts/architecture.md b/docs/concepts/architecture.md new file mode 100644 index 0000000..fbe39c8 --- /dev/null +++ b/docs/concepts/architecture.md @@ -0,0 +1,32 @@ +# Architecture + +Nexus splits credential management into two planes. + +The **control plane** handles credential lifecycle: registering providers, completing OAuth handshakes, storing tokens, and scheduling refreshes. The **data plane** delivers credentials to agents on demand. + +## The four services + +**Broker** — the trust boundary. The only service that holds plaintext credential material. Owns the database, runs the encryption vault, and executes token refreshes. Never reachable by agents. + +**Gateway** — the public API. Agents and your backend talk to the Gateway. It proxies credential requests to the Broker over an internal channel. Agents never see the Broker address. + +**Bridge** — the agent library. Runs inside your agent process. Fetches tokens from the Gateway, injects them into outgoing requests, and refreshes them before expiry. Your agent code never touches a token directly. + +**SDK** — the thin client. Wraps the Gateway's REST API for explicit credential fetches. The Bridge uses the SDK internally; you can use it directly when you need manual control. + +## Data flow + +``` +Your agent + └─ Bridge (in-process) + └─ GET /v1/token/{connection_id} + └─ Gateway + └─ Broker (internal network only) + └─ PostgreSQL (encrypted tokens) +``` + +Agents initiate all communication. The Broker never pushes data outward. + +## What Nexus does not manage + +Nexus has no user table. `workspace_id` is an opaque string you choose — typically your application's user ID. Nexus does not decide which agents may access which connections. That enforcement belongs to your application. diff --git a/docs/concepts/auth-strategies.md b/docs/concepts/auth-strategies.md new file mode 100644 index 0000000..5fd2ba8 --- /dev/null +++ b/docs/concepts/auth-strategies.md @@ -0,0 +1,91 @@ +# Authentication Strategies + +An authentication strategy defines how the Bridge applies a connection's credentials to an outgoing request. The strategy is stored on the provider profile and returned as part of every token response. Your agent code does not select or configure strategies at runtime — the Bridge reads and applies them automatically. + +There are six strategy types. + +## oauth2 + +Injects the `access_token` as an HTTP Bearer token. Used by all standard OAuth2 providers. + +``` +Authorization: Bearer +``` + +No additional configuration. This strategy is set automatically when you register an OAuth2 provider. + +## header + +Places a credential value into a named HTTP header with an optional prefix. Use for any provider that authenticates via a custom header. + +| Config field | Required | Description | +|---|---|---| +| `header_name` | yes | The header to set | +| `credential_field` | yes | Which key in the credentials map to use | +| `value_prefix` | no | String prepended to the value (e.g. `"Token "`) | + +Example — `X-API-Key: `: +```json +{ "header_name": "X-API-Key", "credential_field": "api_key" } +``` + +Example — `Authorization: Token `: +```json +{ "header_name": "Authorization", "credential_field": "api_key", "value_prefix": "Token " } +``` + +## query_param + +Appends a credential value to the request URL as a query parameter. Not supported for gRPC. + +| Config field | Required | Description | +|---|---|---| +| `param_name` | yes | Query parameter name | +| `credential_field` | yes | Which key in the credentials map to use | + +## basic_auth + +Encodes username and password as HTTP Basic Auth. + +``` +Authorization: Basic +``` + +| Config field | Required | Description | +|---|---|---| +| `username_field` | no | Credentials key for the username (default: `"username"`) | +| `password_field` | no | Credentials key for the password (default: `"password"`) | + +Supported for gRPC — injects as `authorization` metadata. + +## hmac_payload + +Signs the request body with HMAC and writes the signature to a header. Used by Stripe, Twilio, GitHub webhooks, and similar request-signing patterns. + +| Config field | Required | Description | +|---|---|---| +| `header_name` | yes | Header to write the signature into | +| `secret_field` | yes | Credentials key holding the signing secret | +| `algo` | no | `sha256` (default) or `sha1` | +| `encoding` | no | `hex` (default) or `base64` | + +The Bridge reads the body, computes the HMAC, restores the body, and sets the header. If the request has no body, the HMAC is computed over an empty byte slice. + +## aws_sigv4 + +Signs requests with AWS Signature Version 4. Required for all AWS service APIs — S3, DynamoDB, Bedrock, SageMaker, and others. + +| Config field | Required | Description | +|---|---|---| +| `region` | no | AWS region (default: `us-east-1`) | +| `service` | yes | AWS service name (e.g. `s3`, `bedrock`) | + +The stored credentials must include: + +| Credential field | Required | Description | +|---|---|---| +| `access_key` | yes | AWS access key ID | +| `secret_key` | yes | AWS secret access key | +| `session_token` | no | Session token for temporary / assumed-role credentials | + +The Bridge sets `X-Amz-Content-Sha256`, computes the payload hash, and calls the AWS SDK's `v4.Signer` to complete full SigV4 signing. diff --git a/docs/concepts/bridge.md b/docs/concepts/bridge.md new file mode 100644 index 0000000..b0e832b --- /dev/null +++ b/docs/concepts/bridge.md @@ -0,0 +1,54 @@ +# The Bridge + +The Bridge is a Go library you embed in your agent process. It maintains an authenticated connection for you — fetching tokens, injecting credentials into requests, and refreshing tokens before expiry — so your agent code handles only application logic. + +## How it works + +When you call `MaintainWebSocket` or `MaintainGRPC`, the Bridge runs a `manageConnection` loop: + +1. Calls `GET /v1/token/{connection_id}` to fetch the current token and auth strategy. +2. Applies the strategy to authenticate the underlying connection (WebSocket headers or gRPC metadata). +3. Starts three goroutines: a read pump, a write pump, and a ping ticker. +4. Monitors `ExpiresAt` and fires a background `RefreshConnection` before the token expires — the connection stays open during refresh. +5. On any error, calls `OnDisconnect`, closes the connection, and returns to the retry loop. + +## The Handler interface + +Implement `Handler` to receive connection events: + +```go +type Handler interface { + OnConnect(send func([]byte) error) + OnMessage(message []byte) + OnDisconnect(err error) +} +``` + +`OnConnect` gives you a thread-safe `send` function. Use it to write messages. `OnMessage` is called for every inbound frame. `OnDisconnect` tells you why the connection closed. + +## Reconnection + +The outer retry loop applies exponential backoff with jitter between reconnect attempts. Jitter prevents thundering herd when many agents reconnect after a Gateway restart. + +| Error type | Behaviour | +|---|---| +| Transient (network failure, abnormal close) | Retry with backoff | +| `PermanentError` (connection does not exist) | Stop immediately | +| `ErrInteractionRequired` (connection in `attention` state) | Stop immediately — surface to user | + +Initial token fetch failures are always permanent. If `GetToken` fails on startup, the Bridge does not retry. + +## Prometheus metrics + +| Metric | Type | Description | +|---|---|---| +| `nexus_bridge_connections_total` | Counter | Connections established | +| `nexus_bridge_disconnections_total` | Counter | Connections closed | +| `nexus_bridge_connection_status` | Gauge | `1` when connected, `0` when not | +| `nexus_bridge_token_refreshes_total` | Counter | In-place token refreshes completed | + +## Bridge vs SDK + +Use the **Bridge** when your agent holds a persistent WebSocket or gRPC connection and you want automatic lifecycle management. + +Use the **SDK** directly when your agent makes discrete HTTP calls and you want to fetch credentials explicitly per call. diff --git a/docs/concepts/broker.md b/docs/concepts/broker.md new file mode 100644 index 0000000..840cf17 --- /dev/null +++ b/docs/concepts/broker.md @@ -0,0 +1,59 @@ +# The Broker + +The Broker is the only service in a Nexus deployment that holds durable credential material. No other service receives a refresh token, client secret, or plaintext key. + +## Database schema + +| Table | Purpose | +|---|---| +| `provider_profiles` | OAuth2 and static provider configuration — client ID, client secret, auth/token URLs, scopes, auth strategy | +| `connections` | One row per authorization grant — workspace ID, provider ID, status, PKCE verifier, scopes, return URL | +| `tokens` | Encrypted credential material — one row per connection, enforced by `ON CONFLICT (connection_id) DO UPDATE` | +| `audit_events` | Append-only event log — consent created, token issued, refresh succeeded or failed, connection cleaned up | + +## Encryption + +All token material is encrypted with AES-GCM 256-bit using your `ENCRYPTION_KEY`. The key must be exactly 32 bytes. A fresh 12-byte nonce from `crypto/rand` is generated per write and prepended to the ciphertext before base64 encoding. + +```bash +# Generate ENCRYPTION_KEY +openssl rand -base64 32 +``` + +Losing `ENCRYPTION_KEY` makes every stored token permanently unreadable. There is no recovery. Key rotation requires a migration that decrypts and re-encrypts every token row. + +## Token refresh + +`POST /connections/{connection_id}/refresh` — the Bridge calls this before each access token expires. + +The Broker decrypts the stored token, extracts `refresh_token`, calls the provider's token endpoint, encrypts the new response, and upserts it into `tokens`. + +| Provider response | Broker action | +|---|---| +| `2xx` | Encrypt and store new token, return it | +| `4xx` | Set connection status to `attention`, return `attention_required` | +| `5xx` or network error | Return error without changing connection status — Bridge retries | + +Static connections (`api_key`, `basic_auth`) cannot be refreshed. Calling refresh on a static connection returns `400 static_token`. + +## Connection states + +| Status | Meaning | +|---|---| +| `pending` | Consent URL issued, user has not yet authorized | +| `active` | Token stored and usable | +| `attention` | Refresh failed with a `4xx` — user must re-authorize | +| `failed` | Unrecoverable. Delete and recreate. | + +## OAuth state signing + +The Broker signs every OAuth `state` parameter with HMAC-SHA256 using `STATE_KEY`. The state encodes `{workspace_id, provider_id, nonce, iat}` and expires after 10 minutes. Both the Broker and the Gateway must share the same `STATE_KEY`. + +```bash +# Generate STATE_KEY +openssl rand -base64 32 +``` + +## Network isolation + +The Broker should only accept connections from the Gateway's IP range. It should not be reachable from the public internet or from agent processes. The `API_KEY` on the Broker should be known only to the Gateway. diff --git a/docs/concepts/connections.md b/docs/concepts/connections.md new file mode 100644 index 0000000..32b9ce5 --- /dev/null +++ b/docs/concepts/connections.md @@ -0,0 +1,91 @@ +# Connections + +A connection represents a user's authorization grant to a specific provider. Every token fetch and audit event is tied to a connection ID. + +## Fields + +| Field | Type | Description | +|---|---|---| +| `id` | UUID | The `connection_id` your application stores and uses for token fetches | +| `workspace_id` | string | Your identifier for the user who authorized this connection — opaque to Nexus | +| `provider_id` | UUID | The provider this connection belongs to | +| `status` | string | Current state — see state machine below | +| `scopes` | `[]string` | The scopes requested for this connection — what you asked for, not necessarily what was granted | +| `code_verifier` | string | PKCE verifier for the OAuth code exchange — removed after completion | +| `return_url` | string | Where the Broker redirects after consent completes | +| `expires_at` | timestamp | Expiry for `pending` connections that are never completed | + +## State machine + +``` +pending ──► active ──► attention + │ │ + └──────────────────────┴──► failed +``` + +| Status | Meaning | Next action | +|---|---|---| +| `pending` | Consent URL issued, user has not authorized yet | Poll `check-connection` or wait for redirect | +| `active` | Token stored — connection is usable | Normal operation | +| `attention` | Token refresh failed with a provider `4xx` | Initiate a new consent flow for this workspace + provider | +| `failed` | Unrecoverable | Delete and recreate | + +## Scopes + +Nexus has three scope contexts. Confusing them causes subtle bugs. + +### Provider scopes + +`provider_profiles.scopes` — the default scope list for a provider. The Broker uses these when you call `POST /v1/request-connection` without passing a `scopes` array. + +```json +{ "scopes": ["openid", "email", "profile"] } +``` + +These are configured once on the provider. They represent the broadest set of scopes your application needs from this provider. + +### Per-connection scopes + +Override the provider defaults for a specific connection by passing `scopes` to `POST /v1/request-connection`: + +```json +{ + "workspace_id": "user_abc", + "provider_id": "3fa85f64-...", + "scopes": ["read:reports"] +} +``` + +The Broker stores this array on the connection record and uses it to build the authorization URL: `scope=read:reports`. Two connections to the same provider can carry completely different scopes. Use this to apply least-privilege — a reporting agent gets `["read:reports"]`, an admin agent gets `["read:reports", "write:data", "admin:users"]`. + +### Requested vs granted + +The scopes your agent requested and the scopes the provider actually granted are not always the same. Providers can downscope a grant based on their own policies or the user's own permission level. + +The `scope` field in the token response reflects what was actually granted: + +```go +token, _ := client.GetToken(ctx, connectionID) +granted := token.Scope // "read:reports" — even if you requested more +``` + +Do not assume your agent has a scope because it was requested. If your agent's operations depend on specific scopes, check `token.Scope` after the connection becomes active and surface a clear error if the required scope is absent. + +### Provider-specific scope quirks + +Some providers handle scopes in non-standard ways. These are controlled via the `params` field on the provider profile: + +| Param | Type | Providers | Effect | +|---|---|---|---| +| `skip_scope_on_auth` | bool | Salesforce | Omits `scope` from the authorization URL | +| `skip_scope_on_exchange` | bool | Salesforce | Omits `scope` from the token exchange request | + +Both default to `false`. Set them only if the provider rejects requests that include `scope`. + +## Static credential connections + +For `api_key` and `basic_auth` providers, there is no OAuth redirect. Your backend calls `GET /v1/capture-schema` to get the field schema, presents it to the user, and submits the completed values via `POST /v1/capture-credential`. The connection goes directly to `active`. Static connections cannot be refreshed. + +## Token storage + +The `tokens` table keeps exactly one row per connection. Every refresh upserts via `ON CONFLICT (connection_id) DO UPDATE`. There is no token history. The current encrypted token is always the only row. diff --git a/docs/concepts/gateway.md b/docs/concepts/gateway.md new file mode 100644 index 0000000..d49d664 --- /dev/null +++ b/docs/concepts/gateway.md @@ -0,0 +1,55 @@ +# The Gateway + +The Gateway is the public API for Nexus. Your application backend and agents communicate exclusively with the Gateway. The Broker is unreachable from outside. + +## APIs + +The Gateway ships two binaries from the same OpenAPI spec: + +| Binary | Protocol | Use case | +|---|---|---| +| `nexus-rest` | HTTP/1.1 REST | Default. Works with any HTTP client. | +| `nexus-grpc` | gRPC / HTTP/2 | High-concurrency agents that benefit from multiplexing. | + +## Endpoints + +### Provider management + +| Method | Path | Description | +|---|---|---| +| `POST` | `/v1/providers` | Register a new provider profile | +| `GET` | `/v1/providers` | List all providers | +| `GET` | `/v1/providers/{id}` | Get a provider by ID | +| `PATCH` | `/v1/providers/{id}` | Update provider fields | +| `DELETE` | `/v1/providers/{id}` | Delete a provider | + +### OAuth consent flow + +| Method | Path | Description | +|---|---|---| +| `POST` | `/v1/request-connection` | Initiate OAuth consent — returns `auth_url` and `connection_id` | +| `GET` | `/v1/callback` | OAuth redirect target — proxied to the Broker | +| `GET` | `/v1/capture-schema` | Get credential field schema for static providers | +| `POST` | `/v1/capture-credential` | Submit static credentials — returns `connection_id` | + +### Token operations + +| Method | Path | Description | +|---|---|---| +| `GET` | `/v1/token/{connection_id}` | Fetch current credentials for a connection | +| `POST` | `/v1/refresh/{connection_id}` | Force an immediate token refresh | +| `GET` | `/v1/check-connection/{connection_id}` | Get connection status | + +## Authentication + +Pass your Gateway API key in the `X-API-Key` header on every request. + +``` +X-API-Key: +``` + +The Gateway uses a separate `API_KEY` when forwarding requests to the Broker. These should be different values. + +## CORS + +CORS is only relevant if your frontend JavaScript calls the Gateway directly during the OAuth consent flow. Configure `ALLOWED_ORIGINS` with your frontend domain. Server-side agents do not need CORS configured. diff --git a/docs/concepts/provider-types.md b/docs/concepts/provider-types.md index 113898f..6727281 100644 --- a/docs/concepts/provider-types.md +++ b/docs/concepts/provider-types.md @@ -1,53 +1,57 @@ # Provider Types -A provider in Nexus represents a third-party service that your agents need to authenticate against. Nexus supports two categories of provider: OAuth 2.0 providers and static key providers. The category determines how Nexus acquires credentials, how it stores them, and what it returns when an agent requests a session. +A provider profile tells Nexus how to authenticate users against a third-party service. The provider type determines the authorization flow and the shape of stored credentials. ---- +## OAuth2 -## OAuth 2.0 providers +OAuth2 providers use the Authorization Code flow with PKCE. Nexus manages the full token lifecycle — your agents always receive a current access token. -An OAuth 2.0 provider uses the standard authorization code flow: a user grants consent, the provider issues tokens, and Nexus stores and manages those tokens on the user's behalf. +### OIDC discovery -Nexus supports two configuration approaches for OAuth 2.0 providers. +Set `enable_discovery: true` and provide an `issuer` URL. Nexus fetches `{issuer}/.well-known/openid-configuration` to populate `authorization_endpoint` and `token_endpoint` automatically. -Discovery-based providers expose an OIDC discovery endpoint at `/.well-known/openid-configuration`. You supply the issuer URL, and Nexus fetches the authorization endpoint, token endpoint, and JWKS URI automatically. Google, Microsoft Entra, Okta, and most modern identity platforms support discovery. +Use this for Google, Microsoft Entra ID, Auth0, and any provider with a published discovery document. -Manual configuration is for providers that do not support OIDC discovery. You supply the authorization URL and token URL explicitly. GitHub, Twitter, and many API-first products fall into this category. +### Manual configuration -Both approaches result in the same runtime behavior: Nexus holds the refresh token, runs the background refresh loop, and returns a short-lived access token when an agent requests credentials. +Set `auth_url` and `token_url` explicitly. Use this for GitHub and other OAuth2 providers without a discovery document. ---- +### Provider profile fields -## Static key providers +| Field | Required | Description | +|---|---|---| +| `name` | yes | Unique name for this provider within your Nexus instance | +| `auth_type` | yes | `oauth2`, `api_key`, or `basic_auth` | +| `client_id` | OAuth2 | OAuth2 application client ID | +| `client_secret` | OAuth2 | OAuth2 application client secret | +| `auth_url` | OAuth2 (manual) | Authorization endpoint | +| `token_url` | OAuth2 (manual) | Token endpoint | +| `issuer` | OAuth2 (discovery) | OIDC issuer URL | +| `enable_discovery` | no | `true` to use OIDC discovery | +| `scopes` | no | Default OAuth2 scopes for this provider | +| `auth_header` | static | Header name for static-key injection | +| `params` | no | Additional provider-specific parameters as JSON | -A static key provider does not use OAuth. Instead, you register a JSON schema that describes the shape of the credential (an API key, a username and password, an AWS access key pair, and so on). When a connection is established, the user or system supplies values matching that schema. Nexus encrypts and stores the values. When an agent requests credentials, Nexus decrypts them and returns them as a structured payload. +### PKCE -Static key providers do not have a background refresh loop because the credentials do not expire on a schedule managed by Nexus. If a static credential is rotated externally, you update the connection in Nexus manually. +All OAuth2 flows use PKCE (RFC 7636). The Broker generates a random `code_verifier`, sends the SHA-256 `code_challenge` to the provider, and verifies the exchange on callback. You do not configure this — it is always enabled. ---- +## Static credentials -## The credential payload +Static providers authenticate with credentials that do not expire and cannot be refreshed. -Regardless of provider type, the credential retrieval endpoint returns a consistent structure: +### api_key -```json -{ - "strategy": { "type": "oauth2" }, - "credentials": { - "access_token": "eyJ...", - "expires_at": 1715000000 - } -} -``` +A single opaque key. Your backend calls `GET /v1/capture-schema` to get the field definition, presents it to the user, and submits via `POST /v1/capture-credential`. The connection goes directly to `active`. Set `auth_strategy` to `header` or `query_param` on the provider profile to control how the key is injected. -For a static key provider, the `strategy.type` is `api_key` or `basic_auth`, and the `credentials` object contains the fields defined by the provider's schema. +### basic_auth -Your agent inspects `strategy.type` to determine how to use the credentials. The Bridge handles this automatically. If you are making direct HTTP calls, you apply the credentials based on the strategy type. +Username and password pair. The capture flow is identical to `api_key`. The stored credentials map has `username` and `password` keys. The auth strategy is always `basic_auth`. ---- +## Scopes -## Provider aliases +The `scopes` array on the provider profile is the default for new connections. Individual connections can request a different subset by passing `scopes` to `POST /v1/request-connection`. Static providers ignore scopes entirely. -Every provider is assigned a human-readable name (its alias) at registration time. Aliases are the identifier you use throughout Nexus: in connection requests, in the `nexus-providers.yaml` manifest, and in audit log entries. Internally, each provider also has a UUID, but you never need to use it directly. +## Registration and deletion -Aliases must be unique within a workspace. Choose names that are stable and descriptive: `google-workspace`, `github-ci`, `salesforce-prod`. Renaming an alias requires updating every connection that references it. +Register providers via `POST /v1/providers`. Each provider has a unique name. Deleting a provider with `DELETE /v1/providers/{id}` does not delete its connections — clean up connections first to avoid orphaned records. diff --git a/docs/concepts/sdk.md b/docs/concepts/sdk.md new file mode 100644 index 0000000..58d5731 --- /dev/null +++ b/docs/concepts/sdk.md @@ -0,0 +1,152 @@ +# The SDK + +The Nexus SDK is a Go HTTP client that wraps the Gateway's REST API. The Bridge uses it internally. Use it directly when you want explicit control over credential fetches rather than the Bridge's automatic lifecycle management. + +## Install + +```bash +go get github.com/Prescott-Data/nexus-framework/nexus-sdk@v0.1.1 +``` + +## When to use the SDK + +- Your agent makes discrete outgoing HTTP calls rather than holding a persistent connection. +- You are building orchestration logic — waiting for a user to complete a consent flow before proceeding. +- You are implementing Nexus in a language without a Bridge. The REST API is accessible from any HTTP client; the SDK is the Go reference implementation. + +## Client setup + +```go +client := oauthsdk.New( + "https://your-gateway.internal", + oauthsdk.WithRetry(oauthsdk.RetryPolicy{ + Retries: 3, + MinDelay: 200 * time.Millisecond, + MaxDelay: 5 * time.Second, + RetryOn429: true, + }), + oauthsdk.WithLogger(yourLogger), +) +``` + +The SDK never logs token bodies. + +Retries use exponential backoff with jitter. Retryable statuses: `502`, `503`, `504`, and optionally `429`. + +## The agent credential lifecycle + +Whether you use the SDK directly or via the Bridge, a Nexus-integrated agent follows five phases: + +**1. Resolution** — Fetch the strategy and credentials from the Gateway using the `connection_id`. The response tells you both the credentials and exactly how to apply them to a request. + +```go +token, err := client.GetToken(ctx, connectionID) +strategyType := token.Strategy["type"].(string) // "oauth2", "header", "hmac_payload", etc. +``` + +**2. Configuration** — Apply the strategy to your transport layer. For HTTP, inject the appropriate header or query parameter. For gRPC, inject metadata. The Bridge does this automatically; with the SDK you do it manually using the `strategy` and `credentials` fields. + +**3. Maintenance** — Cache the token locally and monitor `ExpiresAt`. Refresh proactively before expiry to avoid latency spikes during active work. Do not wait for a `401` to refresh. + +```go +if time.Until(expiresAt) < refreshBuffer { + token, err = client.RefreshConnection(ctx, connectionID) +} +``` + +**4. Rotation** — If you receive a `401` from an upstream provider despite a valid token (configuration drift), invalidate your local cache and call `GetToken` again to re-resolve. + +**5. Intervention** — If `RefreshConnection` returns `attention_required`, the provider rejected the refresh. The user must re-authorize. Do not retry — surface the need for re-delegation to your application layer. + +```go +var e oauthsdk.ErrorEnvelope +if errors.As(err, &e) && e.Code == "attention_required" { + // initiate a new consent flow for this workspace + provider +} +``` + +## Methods + +| Method | Gateway call | Returns | +|---|---|---| +| `RequestConnection(ctx, input)` | `POST /v1/request-connection` | `auth_url`, `connection_id` | +| `CheckConnection(ctx, id)` | `GET /v1/check-connection/{id}` | Status string | +| `WaitForActive(ctx, id, interval)` | Polls `CheckConnection` | `"active"` or `"failed"` | +| `GetToken(ctx, id)` | `GET /v1/token/{id}` | `TokenResponse` | +| `RefreshConnection(ctx, id)` | `POST /v1/refresh/{id}` | `TokenResponse` | + +`WaitForActive` defaults to 1500ms polling interval. Pass zero to use the default. + +## TokenResponse fields + +| Field | Type | Description | +|---|---|---| +| `AccessToken` | `string` | Short-lived access token (OAuth2 convenience field) | +| `ExpiresAt` | varies | Token expiry — Unix timestamp or RFC3339 depending on provider | +| `Scope` | `*string` | Scope string as returned by the provider | +| `Strategy` | `map[string]interface{}` | How to apply this token to an outgoing request | +| `Credentials` | `map[string]interface{}` | Full credential map — `access_token`, and optionally `refresh_token` | +| `Raw` | `map[string]any` | Raw Gateway JSON — for provider-specific fields not in typed fields | + +## Leased identity model + +The SDK enforces a strict separation between master secrets and usage secrets. Your agent receives only usage secrets — short-lived access tokens or API keys — never the refresh tokens, client secrets, or signing keys that are held in the Broker's encrypted vault. + +If your agent process is compromised, the attacker gets a usage secret valid for at most the remaining token lifetime. They cannot renew it. Once it expires, it is useless. + +This is the fundamental difference from static `.env` files: a leaked access token has a bounded blast radius. A leaked refresh token or client secret does not. + +## Sidecar model + +For environments requiring zero in-process secret exposure, the sidecar deployment model removes credentials from the agent process entirely. The agent sends unauthenticated requests to a local Nexus sidecar on `localhost`. The sidecar fetches credentials from the Gateway, signs the request, and forwards it. The agent process never holds any credential material. This is in development. + +## Agent session methods + +The following methods are being added to the SDK to support the agent identity model. See [Agent Sessions](../guides/agent-sessions.md) for the full guide. + +**Go:** + +```go +// Register is done via admin API, not SDK. +// These methods are used at agent runtime: +func (c *Client) RequestAgentSession(ctx context.Context, in AgentSessionInput) (*AgentSession, error) +func (c *Client) RequestOBOSession(ctx context.Context, in OBOSessionInput) (*OBOSession, error) +func (c *Client) CloseAgentSession(ctx context.Context, sessionID string) error +func (c *Client) GetAgentSession(ctx context.Context, sessionID string) (*AgentSession, error) +``` + +**Python:** + +```python +# pip install nexus-sdk +from nexus import NexusClient + +nexus = NexusClient(gateway_url="https://your-gateway.example.com") +session = nexus.request_agent_session(agent_id="crm-agent", provider="salesforce", scopes=["crm:contacts:read"]) +obo = nexus.request_obo_session(agent_id="ops-agent", provider="internal-ops", scopes=["acme:gliding"], user_context_token=token) +nexus.close_agent_session(session.session_id) +``` + +The Python SDK exists today inside `jarviscore` as `jarviscore.nexus.NexusClient`. It is being extracted into a standalone `nexus-sdk` package and published to PyPI. + +**TypeScript:** + +```typescript +// npm install nexus-sdk +import { NexusClient } from 'nexus-sdk' + +const nexus = new NexusClient({ gatewayUrl: 'https://your-gateway.example.com' }) +const session = await nexus.requestAgentSession({ agentId: 'crm-agent', provider: 'salesforce', scopes: ['crm:contacts:read'] }) +const obo = await nexus.requestOBOSession({ agentId: 'ops-agent', provider: 'internal-ops', scopes: ['acme:gliding'], userContextToken: token }) +await nexus.closeAgentSession(session.sessionId) +``` + +## Language availability + +| Language | Package | Status | +|---|---|---| +| Go | `github.com/Prescott-Data/nexus-framework/nexus-sdk` | Available | +| Python | `nexus-sdk` on PyPI | Extracting from jarviscore — in development | +| TypeScript | `nexus-sdk` on npm | In development | + +The REST API is stable and language-agnostic. Any HTTP client works against the Gateway's v1 endpoints. diff --git a/docs/concepts/security-model.md b/docs/concepts/security-model.md index a286f60..106d3e4 100644 --- a/docs/concepts/security-model.md +++ b/docs/concepts/security-model.md @@ -1,80 +1,59 @@ -# The Security Model +# Security Model -Nexus is built on one principle: agents should never hold master secrets. An agent that is compromised should give an attacker only a short-lived, scoped access token. The refresh token or API key that would let them persist. +Nexus is built on one rule: agents never hold durable secrets. An access token expires within hours. A refresh token, API key, or client secret does not. Nexus ensures agents receive only the former. -This page explains how that boundary is enforced, what the three critical environment variables are and what happens if any of them is mishandled, and how the network is hardened to limit the blast radius of a credential leak. +## Secret separation ---- +| Service | What it holds | +|---|---| +| Broker | Refresh tokens, API keys, client secrets — encrypted at rest | +| Gateway | Nothing. Proxies requests, holds no credential state. | +| Bridge | Short-lived access token in memory, for the duration of one connection. Discarded on close. | -## Master secrets and usage secrets +If a Bridge process is compromised, the attacker gets an access token valid for at most the remaining token lifetime. They cannot get the refresh token. -Nexus draws a hard line between two categories of credential. +## Encryption at rest -Master secrets are the credentials that grant long-term or permanent access: OAuth refresh tokens and provider API keys. These are stored in the Broker's PostgreSQL database, encrypted at rest. No service other than the Broker ever holds a master secret. The Gateway does not store them. The Bridge does not store them. Your application stores only a `connection_id` that refers to them. - -Usage secrets are the credentials that grant short-lived access: OAuth access tokens and the signed headers produced from API keys. These are held in the Bridge's process memory for the duration of a request or connection and discarded. If an attacker gains access to an agent process, they obtain at most a usage secret that expires within an hour. - -| Category | Examples | Where it lives | Lifetime | -|---|---|---|---| -| Master secret | Refresh token, API key | Broker database (encrypted) | Persistent | -| Usage secret | Access token, signed header | Bridge process memory | Less than one hour | - ---- - -## The three critical environment variables - -### ENCRYPTION_KEY - -The `ENCRYPTION_KEY` is a 32-byte, Base64-encoded value that the Broker uses for AES-GCM 256-bit encryption of all tokens stored in PostgreSQL. Generate it with: +All token material is encrypted with **AES-GCM 256-bit**. The `ENCRYPTION_KEY` must be exactly 32 bytes. A fresh 12-byte nonce from `crypto/rand` is generated per write. ```bash -openssl rand -base64 32 +openssl rand -base64 32 # ENCRYPTION_KEY ``` -If this key is lost or changed, every stored connection in the database becomes permanently unreadable. There is no recovery path. You will need to delete all stored connections and require users to reconnect their provider accounts. +Losing this key makes all stored tokens permanently unreadable. There is no built-in rotation — rotation requires a migration script that decrypts and re-encrypts every token row. -Store this key in a secrets manager (Azure Key Vault, AWS Secrets Manager, HashiCorp Vault). Inject it as an environment variable at deploy time. Never commit it to version control. Treat it as you would a private key for a certificate authority. +## OAuth state signing -### STATE_KEY - -The `STATE_KEY` is a 32-byte, Base64-encoded value used to sign the `state` and `nonce` parameters during the OAuth handshake. Both the Broker and the Gateway must have the same `STATE_KEY`. Generate it with: +Every OAuth `state` parameter is signed with **HMAC-SHA256** using `STATE_KEY`. The state payload encodes `{workspace_id, provider_id, nonce, iat}` and is rejected if older than 10 minutes or if the signature does not verify. ```bash -openssl rand -base64 32 -``` - -If the keys differ between Broker and Gateway, every OAuth callback will fail with an invalid state error. Both services perform a startup check and will exit with a fatal error if `STATE_KEY` is absent: - +openssl rand -base64 32 # STATE_KEY ``` -FATAL: STATE_KEY environment variable is required and must be identical across Broker and Gateway -``` - -In orchestrated deployments (Kubernetes, Docker Swarm, Azure Container Apps), inject this from a shared secret object so both services always receive the same value. -### API_KEY / BROKER_API_KEY +The Broker and Gateway must share the same `STATE_KEY`. A mismatch causes all OAuth callbacks to fail. -The `API_KEY` on the Broker and the corresponding `BROKER_API_KEY` on the Gateway authenticate the Gateway-to-Broker channel. The Gateway includes this key in every request it proxies to the Broker. If this key is compromised, an attacker can query any stored connection's token and register or delete providers. +## PKCE ---- +All OAuth2 flows use PKCE (RFC 7636). The Broker generates a random `code_verifier` per consent request and sends the SHA-256 `code_challenge` to the provider. The verifier is submitted on callback. This is always enabled — you cannot disable it. ## Network hardening -The Broker supports an `ALLOWED_CIDRS` configuration that restricts which IP addresses can reach it. In production, set this to the IP address (or CIDR range) of the Gateway. This means that even if the Broker's API key is leaked, it cannot be used from any host outside your trusted network. +API keys are not sufficient on their own. Layer network controls on top: -``` -ALLOWED_CIDRS=10.0.0.0/8 -``` +- The Broker should only accept connections from the Gateway's IP range. +- The Gateway's admin paths should only accept connections from your application backend's IP range. +- Agents should only reach the Gateway's token and check-connection endpoints. -The Gateway should be the only service with a path to the Broker. Agents talk to the Gateway; nothing else reaches the Broker. +CIDR allowlisting is configurable on both the Broker and the Gateway. -Mutual TLS between the Gateway and Broker is on the roadmap. Until it ships, the API key plus network-level IP allowlisting is the recommended defense-in-depth posture. +## Audit log ---- +Every significant event is written to `audit_events`: consents created, tokens issued, refreshes succeeded or failed, connections cleaned up. Each row includes IP address and User-Agent. -## Audit log +The audit log has no TTL. Implement a scheduled archival job to move rows older than your retention window to cold storage. Without archival, the table grows without bound. -Every mutation that affects the control plane is written to the `audit_events` table. This includes provider creates, updates, and deletes; OAuth flow completions; token retrievals; and token refresh failures. Each record captures the event type, the structured event data, the caller IP address (respecting `X-Forwarded-For`), and the User-Agent. +## What Nexus does not enforce -The audit log is queryable via `GET /audit` on the Broker. See the [Audit Log reference](../reference/audit-log.md) for the schema and query parameters. +Nexus does not control which agents may request tokens for which connections. If your agent has a `connection_id`, it can call `GET /v1/token/{connection_id}`. Access control over which agents may use which connections belongs to your application layer. -If you manage providers declaratively with `nexus-cli`, every `apply` run generates audit log entries in addition to the git history of your manifest file, giving you two independent records of every provider change. +Mutual TLS between internal services is not yet implemented. Rely on network isolation and TLS termination at the load balancer for current deployments. diff --git a/docs/guides/agent-sessions.md b/docs/guides/agent-sessions.md new file mode 100644 index 0000000..8e31e87 --- /dev/null +++ b/docs/guides/agent-sessions.md @@ -0,0 +1,207 @@ +# Agent Sessions + +This guide covers the complete developer journey for building an agent that uses Nexus for authentication — from registering providers and agents to making scoped requests and handling the full OBO flow. + +## What you are building + +An agent that: +- Calls Salesforce with read-only access +- Calls Google Calendar with read-only access +- Executes internal business operations only when a human user with the right permission triggers them + +No OAuth code in the agent. No credentials in environment variables. No refresh token logic. Nexus handles all of it. + +## Step 1 — Register your providers (one-time admin) + +```bash +# Salesforce +curl -X POST https://your-gateway.example.com/v1/providers \ + -H "X-API-Key: your-api-key" \ + -H "Content-Type: application/json" \ + -d '{ + "name": "salesforce", + "auth_type": "oauth2", + "client_id": "SF_CLIENT_ID", + "client_secret": "SF_CLIENT_SECRET", + "auth_url": "https://login.salesforce.com/services/oauth2/authorize", + "token_url": "https://login.salesforce.com/services/oauth2/token", + "scopes": ["crm:contacts:read", "crm:contacts:write"], + "params": { "skip_scope_on_exchange": true } + }' + +# Google Calendar +curl -X POST https://your-gateway.example.com/v1/providers \ + -H "X-API-Key: your-api-key" \ + -H "Content-Type: application/json" \ + -d '{ + "name": "google-calendar", + "auth_type": "oauth2", + "client_id": "GOOGLE_CLIENT_ID", + "client_secret": "GOOGLE_CLIENT_SECRET", + "issuer": "https://accounts.google.com", + "enable_discovery": true, + "scopes": ["https://www.googleapis.com/auth/calendar.events.readonly"] + }' +``` + +## Step 2 — Register your agents (one-time admin) + +Each agent is registered with its maximum allowed scope set. An agent can never request more than what is declared here. + +```bash +# CRM agent — read-only access to Salesforce contacts +curl -X POST https://your-gateway.example.com/admin/v1/agents \ + -H "X-API-Key: your-api-key" \ + -H "Content-Type: application/json" \ + -d '{ + "agent_id": "crm-agent", + "description": "Reads customer records from Salesforce", + "allowed_scopes": ["crm:contacts:read"] + }' + +# Calendar agent +curl -X POST https://your-gateway.example.com/admin/v1/agents \ + -H "X-API-Key: your-api-key" \ + -d '{ + "agent_id": "calendar-agent", + "description": "Reads calendar events", + "allowed_scopes": ["https://www.googleapis.com/auth/calendar.events.readonly"] + }' + +# Ops agent — custom scopes for internal operations +curl -X POST https://your-gateway.example.com/admin/v1/agents \ + -H "X-API-Key: your-api-key" \ + -d '{ + "agent_id": "ops-agent", + "description": "Executes authorized internal financial operations", + "allowed_scopes": ["acme:gliding", "acme:flaring"] + }' +``` + +## Step 3 — Connect users to providers + +Each user who will authorize an agent must complete the OAuth flow for their account. Your backend initiates this: + +```bash +curl -X POST https://your-gateway.example.com/v1/request-connection \ + -H "X-API-Key: your-api-key" \ + -d '{ + "workspace_id": "user_sarah", + "provider_id": "SALESFORCE_PROVIDER_UUID", + "scopes": ["crm:contacts:read", "crm:contacts:write"], + "return_url": "https://your-app.com/connections/callback" + }' +``` + +Redirect the user to the returned `auth_url`. After they authorize, poll `check-connection` until `status` is `active`. Store the `connection_id` against the user. + +## Step 4 — Agent requests a scoped session + +When the agent needs to call Salesforce for a user, it requests a session. In Go: + +```go +session, err := nexusClient.RequestAgentSession(ctx, oauthsdk.AgentSessionInput{ + AgentID: "crm-agent", + ProviderName: "salesforce", + Scopes: []string{"crm:contacts:read"}, + TTL: 15 * time.Minute, +}) +if err != nil { + return err +} +defer nexusClient.CloseAgentSession(ctx, session.SessionID) + +resp, err := http.Get("https://api.salesforce.com/v1/contacts?q=" + filter, + // session.AccessToken is scoped to crm:contacts:read only + withBearer(session.AccessToken), +) +``` + +In Python: + +```python +session = nexus.request_agent_session( + agent_id="crm-agent", + provider="salesforce", + scopes=["crm:contacts:read"], +) +try: + resp = httpx.get( + "https://api.salesforce.com/v1/contacts", + params={"q": filter}, + headers={"Authorization": f"Bearer {session.access_token}"}, + ) + return resp.json()["records"] +finally: + nexus.close_agent_session(session.session_id) +``` + +In TypeScript: + +```typescript +const session = await nexus.requestAgentSession({ + agentId: 'crm-agent', + provider: 'salesforce', + scopes: ['crm:contacts:read'], + ttl: 900, +}) +try { + const resp = await fetch('https://api.salesforce.com/v1/contacts', { + headers: { Authorization: `Bearer ${session.accessToken}` }, + }) + return resp.json() +} finally { + await nexus.closeAgentSession(session.sessionId) +} +``` + +## Step 5 — OBO session for user-triggered operations + +When a human user triggers an operation that requires their specific authorization, use an OBO session. The Broker validates the user's permissions before issuing the session. + +```python +def run_gliding(user_token: str, customer_ids: list) -> dict: + # Raises NexusAuthError if the user does not have acme:gliding permission + obo = nexus.request_obo_session( + agent_id="ops-agent", + provider="internal-ops", + scopes=["acme:gliding"], + user_context_token=user_token, + ) + try: + return internal_ops.glide( + customer_ids=customer_ids, + tenant_id=obo.tenant_id, # enforced downstream + clearance_level=obo.clearance_level, + ) + finally: + nexus.close_agent_session(obo.session_id) +``` + +The Broker validates both gates before issuing the OBO session: +- The user must have `acme:gliding` in their permissions (verified via your `BACKEND_AUTH_URL`) +- The `ops-agent` must have `acme:gliding` in its `allowed_scopes` + +If either check fails, the request returns `403`. + +## What the agent never wrote + +``` +OAuth implementation broker handles it +Refresh token logic broker handles it +Token storage broker handles it +Scope enforcement broker enforces at session request time +JWT validation for OBO broker calls your backend, extracts claims +User context stamping broker stamps acting_for, tenant_id, clearance_level +Credential rotation broker handles it +Token expiry session has explicit expires_at, broker enforces +``` + +## Session vs connection — when to use which + +| Use connection tokens (`GetToken`) | Use agent sessions (`RequestAgentSession`) | +|---|---| +| Agent has no registered identity | Agent is registered with `allowed_scopes` | +| You want maximum flexibility | You want enforced least-privilege | +| Bridge-based persistent connections | Discrete per-operation credential grants | +| Existing integrations | New agent builds | diff --git a/docs/guides/attention-state.md b/docs/guides/attention-state.md new file mode 100644 index 0000000..ebd328f --- /dev/null +++ b/docs/guides/attention-state.md @@ -0,0 +1,113 @@ +# Handling Attention State + +A connection enters `attention` state when the Broker attempts to refresh the access token and the provider responds with a `4xx` error. This indicates the user's authorization grant has been revoked, the refresh token has expired, or the provider requires the user to re-authorize. + +This guide covers how to detect `attention` state, surface it to the user, and restore the connection. + +## How attention state is triggered + +During a token refresh (`POST /connections/{id}/refresh`), the Broker calls the provider's token endpoint. If the provider returns a `4xx` response, the Broker: + +1. Updates the connection status to `attention`. +2. Returns an `attention_required` error to the caller (the Bridge or your backend). +3. Writes an `attention_required` event to the audit log. + +The stored access token may still be valid for the remainder of its lifetime. Once it expires, the connection becomes unusable. + +## Detecting attention state + +### Via the Bridge + +The Bridge returns `ErrInteractionRequired` when it detects `attention_required` during a refresh. The retry loop stops immediately — the Bridge does not retry because retrying cannot help. + +```go +err := bridge.MaintainWebSocket(ctx, connectionID, endpointURL, handler) +if errors.Is(err, nexusbridge.ErrInteractionRequired) { + // Connection is in attention state. + // Notify your application to re-authorize this connection. + notifyReconsentRequired(connectionID) +} +``` + +### Via the SDK + +If you are managing the refresh cycle manually, check the error code: + +```go +_, err := client.RefreshConnection(ctx, connectionID) +if err != nil { + var e oauthsdk.ErrorEnvelope + if errors.As(err, &e) && e.Code == "attention_required" { + notifyReconsentRequired(connectionID) + return + } + // Other errors are transient — retry according to your policy. +} +``` + +### Via polling + +If your application polls connection status, `check-connection` returns `attention` for connections in this state: + +```bash +curl -s "https://your-gateway.example.com/v1/check-connection/CONNECTION_ID" \ + -H "X-API-Key: your-gateway-api-key" +# {"status": "attention"} +``` + +## Notifying the user + +`attention` state is a user-facing event. The user who authorized the connection must re-authorize it. Your application is responsible for surfacing this. + +Recommended pattern: + +1. Store the `connection_id` alongside the `workspace_id` in your application database. +2. When `attention_required` is detected, mark the connection as needing re-authorization in your database. +3. On the user's next session, display a re-authorization prompt identifying which provider needs attention. +4. Initiate a new consent flow for that workspace and provider. + +Do not silently swallow `attention_required` errors or retry indefinitely. Users will lose access to the agent's capabilities without knowing why. + +## Re-authorizing the connection + +Initiate a new consent flow for the same `workspace_id` and `provider_id`: + +```bash +curl -s -X POST https://your-gateway.example.com/v1/request-connection \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-gateway-api-key" \ + -d '{ + "workspace_id": "user_abc", + "provider_id": "SAME_PROVIDER_UUID", + "scopes": ["openid", "email", "offline_access"], + "return_url": "https://your-app.com/connections/callback" + }' | jq . +``` + +This creates a new connection with a new `connection_id`. The old connection in `attention` state remains in the database until you delete it or the cleanup job removes it. + +Update your application's connection registry to use the new `connection_id` for this workspace and provider. Restart any Bridge instances using the old connection ID with the new one. + +## Cleaning up the old connection + +The old connection in `attention` state does not delete itself. Delete it explicitly after the new connection is active: + +```bash +# Verify the new connection is active first +curl -s "https://your-gateway.example.com/v1/check-connection/NEW_CONNECTION_ID" \ + -H "X-API-Key: your-gateway-api-key" +# {"status": "active"} + +# Then delete the old one +curl -s -X DELETE "https://your-gateway.example.com/v1/connections/OLD_CONNECTION_ID" \ + -H "X-API-Key: your-gateway-api-key" +``` + +## Common causes of attention state + +| Cause | How to confirm | Resolution | +|---|---|---| +| User revoked access in the provider's settings | Audit log shows `token_refresh_fatal` with `400` or `401` status | User must re-authorize | +| Refresh token expired (some providers set a max lifetime) | Same as above | User must re-authorize | +| Provider OAuth app credentials rotated | All connections for this provider enter `attention` | Update `client_secret` on the provider profile with `PATCH /v1/providers/{id}`, then users re-authorize | +| Provider API outage | Audit log shows `token_refresh_fatal` with `5xx` status | This should not set `attention` — only `4xx` triggers it. File a bug if you see `5xx` causing attention state. | diff --git a/docs/guides/obo-delegation.md b/docs/guides/obo-delegation.md index 4648f3c..f8cc350 100644 --- a/docs/guides/obo-delegation.md +++ b/docs/guides/obo-delegation.md @@ -1,92 +1,127 @@ # OBO Delegation -On Behalf Of (OBO) delegation is a session pattern for multi-agent systems where an agent needs to act with a specific user's authorization rather than with system-level access. Instead of the agent holding credentials that grant broad access, OBO sessions tie the agent's credentials to the identity and permission tier of the user who initiated the operation. +On Behalf Of (OBO) delegation is a session pattern for multi-agent systems where an agent needs to act with a specific user's authorization rather than with system-level access. OBO sessions tie the agent's credentials to the identity and permission tier of the user who initiated the operation. This matters in multi-tenant systems where agents serve multiple users and where the data a user can access varies by their role or clearance level. ---- - ## The problem OBO solves -Consider an agent that retrieves documents from a provider on behalf of users. If the agent holds a single system-level credential, it can retrieve documents from any user's account. The agent's authorization is entirely separate from the user's authorization. If the agent is compromised or makes an error, there is no connection between what the agent accessed and what the user actually has permission to see. +An agent that holds a system-level credential can operate on any user's behalf. If the agent is compromised or makes an error, there is no connection between what the agent accessed and what the user who triggered the operation was actually permitted to see or modify. -OBO sessions solve this by tying the agent's session to the originating user. The broker validates the user's identity token, extracts the user's identity and clearance level, and stamps those onto the session. The agent can then only access what that specific user is authorized to access, not the maximum of what the agent's own credentials allow. +Consider: an agent executing `acme:gliding` — a finance operation that only members of the finance team are authorized to trigger. Without OBO, if any user can trigger the agent, the agent can run `acme:gliding` regardless of whether the triggering user has finance permissions. The agent's authorization is entirely separate from the user's. ---- +OBO sessions solve this by validating the user's permissions before issuing the session. The session is stamped with the user's identity and permission context. The agent can only do what the specific user who triggered it is authorized to do. -## How to create an OBO session +## How OBO validation works -Your backend validates the user's incoming identity token from your IdP (Okta, Microsoft Entra, or your own). It then calls the Nexus broker, passing the validated user context token: +OBO uses a two-gate enforcement model. Both gates must pass before a session is issued. -```bash -curl -s -X POST http://localhost:8090/v1/obo-sessions \ - -H "Content-Type: application/json" \ - -H "X-Agent-ID: ops-agent" \ - -H "X-User-Context-Token: " \ - -d '{ - "provider": "internal-ops", - "scopes": ["acme:documents:read"] - }' +**Gate 1 — Agent scope check** + +The requested scope must be in the agent's registered `allowed_scopes`. If `ops-agent` does not have `acme:gliding` in its allowed scopes, the request is rejected with `403` regardless of the user's permissions. + +**Gate 2 — User permission check** + +The Broker calls your backend's token verification endpoint to validate the user context token and extract the user's permissions: + +``` +POST {BACKEND_AUTH_URL}/auth/verify-agent-token +{ "token": "" } ``` -The broker validates the request and returns an OBO session: +Your backend responds with the user's identity and permissions: ```json { - "session_id": "ses_01HXYZ...", - "access_token": "eyJ...", - "expires_at": "2026-05-12T14:30:00Z", - "acting_for": "user:alice@acme.com", - "tenant_id": "tenant:acme-corp", - "clearance_level": "L2" + "user_id": "sarah@acme.com", + "tenant_id": "acme-finance", + "clearance_level": 2, + "permissions": ["acme:gliding", "acme:reporting"] } ``` -The `acting_for`, `tenant_id`, and `clearance_level` fields describe the delegation chain. Your agent uses the `access_token` to make requests to the provider and includes the OBO context in any downstream logging or audit records. - ---- +If the requested scope is not in the user's `permissions` array, the Broker rejects the request with `403`. If both gates pass, the Broker issues an OBO session stamped with the user context. -## The clearance level is fixed at session creation - -Once the broker issues an OBO session, the clearance level cannot be changed for that session. An agent that received an L2 delegation cannot request L3 resources, even if its own registered scopes include them. The broker enforces this at the session layer before issuing the token. +## Configuration -This is not a limitation. It is the point. An OBO session is a capability grant bounded by the user who authorized the operation. An agent that could escalate its own clearance within a user session would be able to access resources the user themselves cannot reach, which defeats the purpose of delegation. +Set `BACKEND_AUTH_URL` on the Broker. The Broker appends `/auth/verify-agent-token` to this URL when validating user context tokens. ---- - -## Session scope validation +```bash +BACKEND_AUTH_URL=https://your-backend.example.com +``` -The broker validates the requested scopes against two independent boundaries: the agent's registered scope list and the user's permission set derived from the context token. The session is granted only the intersection. If the agent requests `acme:documents:write` but the user only has read permission, the session is created with read scope only. +Your backend must implement `POST /auth/verify-agent-token` and return the response shape above. The Broker does not validate the user token itself — that is your backend's responsibility. The Broker trusts your backend's response. -The broker rejects the request entirely if the agent requests scopes that appear in neither the agent's registered list nor the user's permission set. +## Creating an OBO session ---- +```bash +curl -X POST https://your-gateway.example.com/v1/agent-sessions/obo \ + -H "X-API-Key: your-api-key" \ + -H "Content-Type: application/json" \ + -d '{ + "agent_id": "ops-agent", + "provider_name": "internal-ops", + "scopes": ["acme:gliding"], + "user_context_token": "", + "ttl_seconds": 900 + }' +``` -## Audit logging +Response: -Every OBO session appears in the audit log with the full delegation chain: the originating user, the agent ID, the provider, the scopes granted, the clearance level, and the session timestamps. This gives your compliance team a complete, tamper-evident record of every user-initiated agent action without requiring you to instrument agents individually. +```json +{ + "session_id": "obo_x9y8z7", + "access_token": "eyJ...", + "scopes_granted": ["acme:gliding"], + "expires_at": "2026-05-12T21:00:00Z", + "obo": true, + "acting_for": "sarah@acme.com", + "tenant_id": "acme-finance", + "clearance_level": 2 +} +``` ---- +## Using the OBO context + +The `acting_for`, `tenant_id`, and `clearance_level` fields are for your application to use — they are not enforced downstream by Nexus. Use them to scope data access in your internal services: + +```python +obo = nexus.request_obo_session( + agent_id="ops-agent", + provider="internal-ops", + scopes=["acme:gliding"], + user_context_token=user_token, +) +try: + result = internal_ops.glide( + customer_ids=customer_ids, + tenant_id=obo.tenant_id, # isolate to user's tenant + clearance_level=obo.clearance_level, # enforce level in downstream logic + ) + audit_log.write( + operation="acme:gliding", + actor=obo.acting_for, # full audit trail + tenant=obo.tenant_id, + ) + return result +finally: + nexus.close_agent_session(obo.session_id) +``` -## Using OBO sessions from Go +## The clearance level is fixed at session creation -```go -import oauthsdk "github.com/Prescott-Data/nexus-framework/nexus-sdk" +The clearance level cannot be changed after a session is issued. An agent that received a clearance level 2 session cannot escalate to clearance level 3 resources within that session. The Broker enforces this at issuance time. -client := oauthsdk.New("https://nexus-gateway.example.com") +## Audit trail -session, err := client.RequestOBOSession(ctx, oauthsdk.OBOSessionInput{ - AgentID: "ops-agent", - Provider: "internal-ops", - Scopes: []string{"acme:documents:read"}, - UserContextToken: userToken, -}) -if err != nil { - return err -} +Every OBO session is written to `audit_events` with the full delegation chain: the agent ID, the user the agent is acting for, the tenant, the scopes granted, the clearance level, and the session timestamps. This gives your compliance team a complete record of every user-triggered agent operation without requiring agent-level instrumentation. -// session.AccessToken, session.ActingFor, session.ClearanceLevel -defer client.CloseOBOSession(ctx, session.SessionID) -``` +## Error cases -Call `CloseOBOSession` when the operation is complete. The broker revokes the token server-side, which means it cannot be replayed if it is intercepted after the agent finishes its work. +| Error | Cause | +|---|---| +| `403 scope_not_permitted_for_agent` | Requested scope is not in `ops-agent.allowed_scopes` | +| `403 user_not_authorized_for_scope` | User's permissions do not include the requested scope | +| `503 backend_auth_unavailable` | `BACKEND_AUTH_URL` is unreachable or returned a non-200 response | +| `401 invalid_user_context_token` | Your backend returned an error for the provided token | diff --git a/docs/guides/registering-a-provider.md b/docs/guides/registering-a-provider.md new file mode 100644 index 0000000..8a4c4ca --- /dev/null +++ b/docs/guides/registering-a-provider.md @@ -0,0 +1,153 @@ +# Registering a Provider + +Before you can create connections, you need a provider profile in Nexus. This guide covers the two steps involved: setting up the OAuth application in the provider's developer console, then registering it in Nexus. + +## Step 1 — Set up the OAuth app in the provider console + +Every OAuth2 provider requires you to register an application in their developer portal before issuing credentials. The terminology varies — "OAuth Apps", "API Credentials", "Integrations" — but the process is the same. + +### What you need from the provider + +| Field | Description | +|---|---| +| Client ID | The public identifier for your application | +| Client Secret | The secret Nexus uses to exchange authorization codes for tokens | +| Authorization URL | The endpoint users are redirected to for consent | +| Token URL | The endpoint Nexus calls to exchange codes and refresh tokens | +| Issuer URL | For OIDC-capable providers — replaces auth URL and token URL | + +### The redirect URI + +Every provider console requires a redirect URI. This must be set to your Broker's callback endpoint: + +``` +https://your-broker.example.com/auth/callback +``` + +For local development: + +``` +http://localhost:8080/auth/callback +``` + +The Broker's `BASE_URL` + `/auth/callback` must match this exactly. Most providers perform strict string matching — a trailing slash or `http` vs `https` mismatch causes every OAuth flow to fail. + +### Compliance fields + +Most providers sandbox your app in "Development Mode" until you fill in compliance metadata. This limits you to a small number of test users and blocks production use. + +| Field | What to provide | +|---|---| +| App name | Your product name | +| App logo | Your company logo | +| Website URL | `https://your-company.com` | +| Privacy Policy URL | `https://your-company.com/privacy` | +| Terms of Service URL | `https://your-company.com/terms` | +| Support email | Your support address | + +Fill these in before requesting production access from the provider. + +## Step 2 — Register the provider in Nexus + +### OAuth2 with OIDC discovery + +Use OIDC discovery when the provider supports it (Google, Microsoft Entra, Okta, Auth0). Nexus fetches the authorization and token endpoints automatically from `{issuer}/.well-known/openid-configuration`. + +```bash +curl -s -X POST https://your-gateway.example.com/v1/providers \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-gateway-api-key" \ + -d '{ + "name": "google-workspace", + "auth_type": "oauth2", + "client_id": "YOUR_CLIENT_ID", + "client_secret": "YOUR_CLIENT_SECRET", + "issuer": "https://accounts.google.com", + "enable_discovery": true, + "scopes": ["openid", "email", "profile", "offline_access"] + }' | jq . +``` + +### OAuth2 with manual endpoints + +Use manual configuration for providers without OIDC discovery (GitHub, Slack, Stripe). + +```bash +curl -s -X POST https://your-gateway.example.com/v1/providers \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-gateway-api-key" \ + -d '{ + "name": "github", + "auth_type": "oauth2", + "client_id": "YOUR_CLIENT_ID", + "client_secret": "YOUR_CLIENT_SECRET", + "auth_url": "https://github.com/login/oauth/authorize", + "token_url": "https://github.com/login/oauth/access_token", + "scopes": ["repo", "read:user"] + }' | jq . +``` + +### API key provider + +Static credential providers do not use a redirect flow. The `params.credential_schema` field defines the form your application presents to the user to collect credentials. + +```bash +curl -s -X POST https://your-gateway.example.com/v1/providers \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-gateway-api-key" \ + -d '{ + "name": "airtable", + "auth_type": "api_key", + "params": { + "credential_schema": { + "type": "object", + "required": ["api_key"], + "properties": { + "api_key": { "type": "string", "title": "Personal Access Token" } + } + } + } + }' | jq . +``` + +### Provider-specific quirks + +Some providers deviate from the OAuth2 spec in ways that require additional params: + +| Provider | Issue | Fix | +|---|---|---| +| Salesforce | Rejects `scope` on the authorization URL | `"params": { "skip_scope_on_auth": true }` | +| Salesforce | Rejects `scope` on the token exchange | `"params": { "skip_scope_on_exchange": true }` | +| Twitter/X | Requires Basic Auth for token exchange | `"auth_header": "client_secret_basic"` | +| Microsoft Entra | Requires `scope` on the token exchange | Default behaviour — no change needed | + +## Step 3 — Verify the registration + +Test an OAuth2 provider by requesting a connection URL and completing the flow in your browser: + +```bash +curl -s -X POST https://your-gateway.example.com/v1/request-connection \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-gateway-api-key" \ + -d '{ + "workspace_id": "test-user-001", + "provider_id": "PROVIDER_UUID_FROM_REGISTRATION", + "scopes": ["openid", "email"], + "return_url": "https://httpbin.org/get" + }' | jq . +``` + +Open the `auth_url` from the response in a browser. After authorizing, you should be redirected to `httpbin.org/get` with `connection_id` and `status=success` as query parameters. + +## Updating a registered provider + +Use `PATCH` to update specific fields. Do not delete and recreate a provider — this orphans every active connection. + +```bash +curl -s -X PATCH https://your-gateway.example.com/v1/providers/PROVIDER_ID \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-gateway-api-key" \ + -d '{ + "client_secret": "ROTATED_SECRET" + }' | jq . +``` diff --git a/docs/guides/static-credentials.md b/docs/guides/static-credentials.md new file mode 100644 index 0000000..e788955 --- /dev/null +++ b/docs/guides/static-credentials.md @@ -0,0 +1,154 @@ +# Static Credential Flow + +OAuth2 providers redirect users to an authorization page. Static credential providers — `api_key` and `basic_auth` — do not. Instead, your application presents a form, the user fills it in, and you submit the credentials directly to Nexus. + +This guide covers the complete flow for static credential connections. + +## How it works + +``` +Your backend Gateway Broker + │ │ │ + │ POST /v1/request-connection │ │ + │─────────────────────────────►│ │ + │ ◄── { auth_url, connection_id } │ + │ │ │ + │ GET /v1/capture-schema │ │ + │─────────────────────────────►│ │ + │ ◄── { fields schema } │ │ + │ │ │ + │ (render form, user fills in credentials) │ + │ │ │ + │ POST /v1/capture-credential │ │ + │─────────────────────────────►│──────────────────────►│ + │ ◄── { connection_id, status: "success" } │ + │ │ │ + │ GET /v1/check-connection │ │ + │─────────────────────────────►│ │ + │ ◄── { status: "active" } │ │ +``` + +## Step 1 — Initiate the connection + +Call `POST /v1/request-connection` as you would for an OAuth2 provider. The response contains an `auth_url` with a signed `state` token. You will need the state for the credential submission. + +```bash +curl -s -X POST https://your-gateway.example.com/v1/request-connection \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-gateway-api-key" \ + -d '{ + "workspace_id": "user_abc", + "provider_id": "PROVIDER_UUID", + "return_url": "https://your-app.com/connections/callback" + }' | jq . +``` + +Response: + +```json +{ + "connection_id": "8f3a1c2d-...", + "auth_url": "https://your-broker.example.com/auth/capture-schema?state=eyJ..." +} +``` + +Store the `connection_id`. Extract the `state` parameter from the `auth_url`. + +## Step 2 — Fetch the credential schema + +Call `GET /v1/capture-schema` with the state token to get the field definitions for this provider. + +```bash +curl -s "https://your-gateway.example.com/v1/capture-schema?state=eyJ..." \ + -H "X-API-Key: your-gateway-api-key" | jq . +``` + +Response for an API key provider: + +```json +{ + "type": "object", + "required": ["api_key"], + "properties": { + "api_key": { + "type": "string", + "title": "Personal Access Token" + } + } +} +``` + +Response for a basic auth provider: + +```json +{ + "type": "object", + "required": ["username", "password"], + "properties": { + "username": { "type": "string", "title": "Username" }, + "password": { "type": "string", "title": "Password", "format": "password" } + } +} +``` + +Use the schema to render a form in your application UI. The `title` field is the human-readable label. Fields with `"format": "password"` should use a masked input. + +## Step 3 — Submit the credentials + +When the user submits the form, post the credentials to `POST /v1/capture-credential`: + +```bash +curl -s -X POST https://your-gateway.example.com/v1/capture-credential \ + -H "Content-Type: application/json" \ + -H "X-API-Key: your-gateway-api-key" \ + -d '{ + "state": "eyJ...", + "credentials": { + "api_key": "pat_abc123xyz" + } + }' | jq . +``` + +The Gateway submits this to the Broker, which encrypts the credentials and stores them. The response: + +```json +{ + "connection_id": "8f3a1c2d-...", + "status": "success", + "redirect_url": "https://your-app.com/connections/callback?status=success&connection_id=8f3a1c2d-..." +} +``` + +The Broker also issues a redirect to the `return_url` you specified in step 1. If your application uses a browser-based flow, redirect the user there. If it is server-side only, the `connection_id` in the response is sufficient. + +## Step 4 — Verify the connection is active + +```bash +curl -s "https://your-gateway.example.com/v1/check-connection/8f3a1c2d-..." \ + -H "X-API-Key: your-gateway-api-key" | jq . +``` + +```json +{ "status": "active" } +``` + +## Fetching tokens for static connections + +The token fetch is identical to OAuth2. Call `GET /v1/token/{connection_id}`: + +```bash +curl -s "https://your-gateway.example.com/v1/token/8f3a1c2d-..." \ + -H "X-API-Key: your-gateway-api-key" | jq . +``` + +The `credentials` field in the response contains the stored key material. The `strategy` field tells the Bridge how to inject it into outgoing requests. + +## Static connections cannot be refreshed + +Calling `POST /v1/refresh/{connection_id}` on a static connection returns: + +```json +{ "error": "static_token", "message": "This connection uses a static token and cannot be refreshed" } +``` + +To update credentials — for example when a user rotates their API key — initiate a new capture flow for the same `workspace_id` and `provider_id`. The new connection replaces the old one in your application's connection registry. diff --git a/docs/index.md b/docs/index.md index 5ee5164..18552ce 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,59 +1,94 @@ +
+ + + # Nexus -Nexus is a credential broker for autonomous agents. It sits between your agents and every third-party service they need to reach, and it manages the entire credential lifecycle so your agents never hold OAuth tokens, API keys, or refresh tokens directly. +Credential brokering for autonomous agents. Nexus sits between your agents and every third-party service they reach, managing the full credential lifecycle so your agents never hold OAuth tokens, API keys, or refresh tokens directly. -When an agent needs to call Salesforce, Google Drive, or any other provider, it asks the Nexus broker for a session. The broker validates the request, fetches a short-lived access token, and returns only that. The agent uses the token and discards it. If the agent is compromised, the attacker has nothing durable. +
-Nexus handles token storage, refresh scheduling, OAuth handshakes, and audit logging as infrastructure concerns. You configure providers once and your agents authenticate against them through a single API surface. +[Deploy in five minutes](getting-started/quickstart.md) · [How Nexus works](concepts/how-nexus-works.md) · [GitHub](https://github.com/Prescott-Data/nexus-framework) ---- +
-## Quick start +
-The fastest path to a running Nexus stack is Docker Compose. This brings up the Broker, Gateway, PostgreSQL, and Redis. +[Get started](getting-started/quickstart.md){ .nx-btn .nx-btn-primary } +[View on GitHub](https://github.com/Prescott-Data/nexus-framework){ .nx-btn .nx-btn-github } -```bash -cp .env.example .env -# Fill in ENCRYPTION_KEY and STATE_KEY — see Getting Started for key generation -make up -``` +
-Once running: +
+
AES-256Token encryption
+
4Core components
+
v0.4Current release
+
GoRuntime
+
-| Service | Default address | -|----------|-------------------------| -| Broker | http://localhost:8080 | -| Gateway | http://localhost:8090 | +
--- -## How to read this documentation +## What Nexus does + +When an agent needs to call Salesforce, Google Drive, or any other provider, it asks the Nexus Gateway for a session. The Gateway forwards the request to the Broker, which decrypts the stored refresh token, fetches a fresh access token from the provider, and returns only that short-lived token. The agent uses it and discards it. If the agent is compromised, the attacker has nothing durable. + +Nexus handles token storage, refresh scheduling, OAuth handshakes, and audit logging as infrastructure. You configure providers once. Your agents authenticate against them through a single API surface. + +
+ +
+Broker -If you are new to Nexus, start with [How Nexus Works](concepts/how-nexus-works.md). It explains the four-component architecture, the two data flows (OAuth handshake and credential retrieval), and the security boundary the system enforces. Reading it once makes every other page easier to understand. +**The authority.** Holds all master secrets encrypted at rest. Runs the background refresh loop. Never exposed to agents directly. +
-After that, follow the [Getting Started](getting-started/quickstart.md) guide to deploy a working stack and make your first credential request. +
+Gateway -If you are integrating agents that need third-party credentials, the [Agent Integration guide](guides/integrating-agents.md) covers the Go Bridge library and the manual HTTP flow for non-Go clients. +**The public API.** Agents call the Gateway. It proxies to the Broker over an internal channel. Agents never reach the Broker. +
-The [Guides](guides/managing-providers.md) cover the operational tasks you will return to repeatedly: registering providers, managing provider state declaratively with `nexus-cli`, and auditing credential access. +
+Bridge + +**The Go library.** Runs inside your agent process. Fetches credentials and injects them into outgoing HTTP and gRPC requests automatically. +
+ +
+SDK + +**The thin client.** Direct Gateway access for explicit credential fetches. Use when you want control rather than automation. +
+ +
--- -## Components at a glance +## Quick start + +```bash +cp .env.example .env +# Generate ENCRYPTION_KEY and STATE_KEY — see Getting Started +make up +``` + +Broker runs on `localhost:8080`. Gateway runs on `localhost:8090`. -**The Broker** is the authority. It holds encrypted refresh tokens and API keys, runs the OAuth handshake with providers, and operates the background token refresh loop. No other service ever sees a refresh token. +--- -**The Gateway** is the public API. Agents talk to the Gateway; the Gateway proxies requests to the Broker over an internal API key. Agents never reach the Broker directly. +## Documentation map -**The Bridge** is a Go library that runs inside your agent process. It retrieves credentials from the Gateway and injects them into outgoing HTTP and gRPC requests automatically. +Read [How Nexus Works](concepts/how-nexus-works.md) first. It establishes the control plane / data plane split, the OAuth handshake, and the credential retrieval model. Every other page assumes that mental model. -**The SDK** is a thin Go client for the Gateway API. Use it when you want direct control over credential retrieval without the full Bridge abstraction. +Then follow [Deploy in Five Minutes](getting-started/quickstart.md) to run a stack and make your first connection. After that, the [Guides](guides/integrating-agents.md) cover the operational tasks you return to repeatedly. --- ## Links - [GitHub repository](https://github.com/Prescott-Data/nexus-framework) -- [OpenAPI specification](https://github.com/Prescott-Data/nexus-framework/blob/main/openapi.yaml) +- [OpenAPI spec](https://github.com/Prescott-Data/nexus-framework/blob/main/openapi.yaml) - [CHANGELOG](https://github.com/Prescott-Data/nexus-framework/blob/main/CHANGELOG.md) - [Prescott Data developer portal](https://developers.prescottdata.io) \ No newline at end of file diff --git a/docs/infrastructure/deploying-nexus.md b/docs/infrastructure/deploying-nexus.md new file mode 100644 index 0000000..3c3bd53 --- /dev/null +++ b/docs/infrastructure/deploying-nexus.md @@ -0,0 +1,144 @@ +# Deploying Nexus + +This guide covers deploying the Broker and Gateway to a production environment. For local development setup, see [Deploy in Five Minutes](../getting-started/quickstart.md). + +## Prerequisites + +- PostgreSQL 14 or later +- Docker (for containerised deployment) or Go 1.22+ (for binary deployment) +- TLS termination at your load balancer or reverse proxy + +## Generate secrets + +Both services require secrets that must be generated before deployment and stored securely. + +```bash +openssl rand -base64 32 # ENCRYPTION_KEY — Broker only +openssl rand -base64 32 # STATE_KEY — must be identical on Broker and Gateway +openssl rand -hex 32 # BROKER_API_KEY — shared between Broker and Gateway +``` + +Store these in your secret manager (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault, Kubernetes Secrets). Do not commit them to source control. + +## Broker environment variables + +| Variable | Required | Description | +|---|---|---| +| `DATABASE_URL` | yes | PostgreSQL connection string | +| `ENCRYPTION_KEY` | yes | 32-byte base64 key for AES-GCM token encryption | +| `STATE_KEY` | yes | 32-byte base64 key for OAuth state HMAC signing — must match Gateway | +| `BASE_URL` | yes | Public URL of the Broker, e.g. `https://broker.internal.example.com` | +| `API_KEY` | yes | Key the Gateway uses to authenticate with the Broker | +| `REDIRECT_PATH` | no | OAuth callback path (default: `/auth/callback`) | +| `ALLOWED_CIDRS` | no | Comma-separated CIDRs for IP allowlisting, e.g. `10.0.0.0/8` | +| `ALLOWED_RETURN_DOMAINS` | no | Comma-separated allowed domains for `return_url` validation | + +## Gateway environment variables + +| Variable | Required | Description | +|---|---|---| +| `STATE_KEY` | yes | Same value as the Broker's `STATE_KEY` | +| `BROKER_BASE_URL` | yes | Internal URL of the Broker, e.g. `http://broker.internal:8080` | +| `BROKER_API_KEY` | yes | The Broker's `API_KEY` | +| `PORT` | no | Port to listen on (default: `8090`) | + +## Network topology + +``` +Internet + │ + ▼ +Load Balancer / Reverse Proxy (TLS termination) + │ │ + ▼ ▼ +Gateway Broker +(public or (internal network only) + internal) │ + │ ▼ + └───────────────► PostgreSQL +``` + +The Broker handles OAuth callbacks and must be reachable from the public internet at its `BASE_URL/auth/callback`. All other Broker traffic should be internal only. + +The Gateway can be internal-only if your agents run inside the same network. Make it public only if agents run outside your network perimeter. + +## Database setup + +Run the migration before starting the Broker: + +```bash +cd nexus-broker +go run ./cmd/migrate +``` + +This creates the `provider_profiles`, `connections`, `tokens`, and `audit_events` tables. + +## Docker Compose (production-ready) + +```yaml +services: + broker: + image: ghcr.io/prescott-data/nexus-broker:latest + environment: + DATABASE_URL: postgres://nexus:${DB_PASSWORD}@postgres:5432/nexus + ENCRYPTION_KEY: ${ENCRYPTION_KEY} + STATE_KEY: ${STATE_KEY} + BASE_URL: https://broker.internal.example.com + API_KEY: ${BROKER_API_KEY} + ALLOWED_CIDRS: "10.0.0.0/8" + networks: + - internal + + gateway: + image: ghcr.io/prescott-data/nexus-gateway:latest + environment: + STATE_KEY: ${STATE_KEY} + BROKER_BASE_URL: http://broker:8080 + BROKER_API_KEY: ${BROKER_API_KEY} + PORT: "8090" + ports: + - "8090:8090" + networks: + - internal + - public + + postgres: + image: postgres:16-alpine + environment: + POSTGRES_DB: nexus + POSTGRES_USER: nexus + POSTGRES_PASSWORD: ${DB_PASSWORD} + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - internal + +networks: + internal: + public: + +volumes: + postgres_data: +``` + +## Key management + +`ENCRYPTION_KEY` must remain stable across deployments. Changing it makes every stored token permanently unreadable. Treat it as you would a database master password. + +`STATE_KEY` can be rotated, but doing so invalidates all in-flight OAuth flows (pending connections at the moment of rotation). Any user mid-authorization will see an "invalid state" error and need to restart the flow. + +Both keys must be identical across all instances of the same service. In Kubernetes, use a single `Secret` object mounted into both the Broker and Gateway pods for `STATE_KEY`. + +## Health checks + +The Broker exposes `GET /health` and the Gateway exposes `GET /health`. Both return `200 OK` when the service is ready. Configure your load balancer to use these endpoints. + +## Upgrading + +Run database migrations before starting the new Broker version: + +```bash +go run ./cmd/migrate +``` + +Migrations are additive and backward-compatible within the same minor version. Check the release notes for any breaking schema changes between major versions. diff --git a/docs/javascripts/header.js b/docs/javascripts/header.js new file mode 100644 index 0000000..72f14d0 --- /dev/null +++ b/docs/javascripts/header.js @@ -0,0 +1,71 @@ +/* Nexus Docs — Header enhancements + - Injects version chip after site title + - Injects GitHub repo + stars widget + - Moves theme palette toggle to far-right + - Opens external tabs in new window +*/ +document.addEventListener('DOMContentLoaded', function () { + + /* ── 1. Version chip ─────────────────────────────────── */ + var title = document.querySelector('.md-header__title'); + var fallbackVersion = 'v0.4.0'; + var chip; + if (title) { + chip = document.createElement('span'); + chip.className = 'nx-version-chip'; + chip.textContent = fallbackVersion; + title.insertAdjacentElement('afterend', chip); + } + + /* Fetch live version from GitHub tags */ + fetch('https://api.github.com/repos/Prescott-Data/nexus-framework/tags') + .then(function (r) { return r.json(); }) + .then(function (tags) { + if (Array.isArray(tags) && tags.length > 0) { + if (chip) chip.textContent = tags[0].name; + } + }) + .catch(function () {}); + + /* ── 2. GitHub stars widget ─────────────────────────── */ + var inner = document.querySelector('.md-header__inner'); + var palette = document.querySelector('form[data-md-component="palette"]'); + if (inner && palette) { + var ghBtn = document.createElement('a'); + ghBtn.href = 'https://github.com/Prescott-Data/nexus-framework'; + ghBtn.target = '_blank'; + ghBtn.rel = 'noopener noreferrer'; + ghBtn.className = 'nx-gh-btn'; + ghBtn.setAttribute('aria-label', 'Star Nexus on GitHub'); + ghBtn.innerHTML = + 'Prescott-Data/nexus' + + '' + + ''; + + inner.insertBefore(ghBtn, palette); + inner.appendChild(palette); + } + + /* ── 3. Async star count ────────────────────────────── */ + fetch('https://api.github.com/repos/Prescott-Data/nexus-framework') + .then(function (r) { return r.json(); }) + .then(function (data) { + var el = document.querySelector('.nx-stars-count'); + if (el && typeof data.stargazers_count === 'number') { + var n = data.stargazers_count; + el.textContent = n >= 1000 ? (n / 1000).toFixed(1) + 'k' : String(n); + } + }) + .catch(function () {}); + + /* ── 4. External tabs → new window ────────────────────── */ + var EXT = ['https://developers.prescottdata.io', 'https://discord.gg']; + document.querySelectorAll('.md-tabs__link').forEach(function (link) { + var href = link.getAttribute('href') || ''; + if (EXT.some(function (p) { return href.startsWith(p); })) { + link.setAttribute('target', '_blank'); + link.setAttribute('rel', 'noopener noreferrer'); + } + }); + +}); diff --git a/docs/reference/api.md b/docs/reference/api.md index 0caa61b..c772d4e 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -1,77 +1,96 @@ -# API Overview +# API Reference -Nexus exposes two API surfaces: the Gateway API, which agents and applications call, and the Broker API, which is internal and used only by the Gateway and administrative tooling. +Nexus exposes two API surfaces: the **Gateway API**, which agents and applications call, and the **Broker API**, which is internal and used only by the Gateway and administrative tooling. ---- +The full OpenAPI 3.0 specification is at [`openapi.yaml`](https://github.com/Prescott-Data/nexus-framework/blob/main/openapi.yaml). The v1 surface is frozen — no breaking changes without a major version bump and a deprecation period. ## Gateway API -The Gateway API is the stable, public-facing surface for all agent integrations. It is versioned at `/v1` and follows standard REST conventions. - -The full OpenAPI 3.0 specification is in the repository at [`openapi.yaml`](https://github.com/Prescott-Data/nexus-framework/blob/main/openapi.yaml). The v1 surface is frozen. No breaking changes will be made without a major version bump and a deprecation period. +The stable, public-facing surface for all agent integrations. Versioned at `/v1`. -### Core endpoints +### Connection endpoints | Method | Path | Description | |---|---|---| -| `POST` | `/v1/request-connection` | Initiate an OAuth handshake or API key connection | -| `GET` | `/v1/check-connection/{id}` | Poll the connection status | +| `POST` | `/v1/request-connection` | Initiate an OAuth handshake or static credential capture | +| `GET` | `/v1/check-connection/{id}` | Poll connection status | | `GET` | `/v1/token/{id}` | Retrieve credentials for an active connection | -| `POST` | `/v1/obo-sessions` | Create an On Behalf Of session | -| `DELETE` | `/v1/obo-sessions/{id}` | Close an OBO session | -| `GET` | `/v1/health` | Health check | +| `POST` | `/v1/refresh/{id}` | Force a token refresh for a connection | +| `GET` | `/v1/capture-schema` | Fetch the credential schema for a static provider | +| `POST` | `/v1/capture-credential` | Submit credentials for a static provider | + +### Agent session endpoints + +| Method | Path | Description | +|---|---|---| +| `POST` | `/v1/agent-sessions` | Request a scoped session for a registered agent | +| `GET` | `/v1/agent-sessions/{id}` | Check session status and metadata | +| `DELETE` | `/v1/agent-sessions/{id}` | Close a session and revoke the token | +| `POST` | `/v1/agent-sessions/obo` | Request an OBO session tied to a user context token | + +### Provider endpoints + +| Method | Path | Description | +|---|---|---| +| `GET` | `/v1/providers` | List all registered providers | +| `GET` | `/v1/providers/metadata` | Grouped metadata for frontend rendering | +| `POST` | `/v1/providers` | Register a new provider | +| `GET` | `/v1/providers/{id}` | Get provider by ID | +| `PATCH` | `/v1/providers/{id}` | Update specific fields of a provider | +| `DELETE` | `/v1/providers/{id}` | Delete a provider | + +### System + +| Method | Path | Description | +|---|---|---| +| `GET` | `/v1/health` | Health check — returns `200 OK` when ready | ### Authentication -The Gateway does not require authentication for connection initiation or token retrieval. Access control is enforced by the `connection_id` itself. Only callers who hold a valid `connection_id` can retrieve its credentials. Protect `connection_id` values as you would a session token. +Connection and token endpoints do not require authentication headers. Access control is enforced by the `connection_id` — only callers holding a valid connection ID can retrieve its credentials. Treat `connection_id` values as session tokens. -For administrative operations (provider management), calls go directly to the Broker and require the `X-API-Key` header. +Provider management and agent session endpoints require the `X-API-Key` header. -### Credential payload +### Token response shape -The `GET /v1/token/{id}` endpoint returns a structured payload regardless of credential type: +`GET /v1/token/{id}` returns a structured payload regardless of credential type: ```json { "strategy": { "type": "oauth2" }, "credentials": { - "access_token": "...", + "access_token": "eyJ...", "expires_at": 1715000000 }, + "scope": "openid email profile", "expires_at": 1715000000 } ``` -The `strategy.type` field tells you how to apply the credentials. See [Provider Types](../concepts/provider-types.md) for the full list of strategy types and their credential shapes. +The `strategy.type` field tells you how to apply the credentials. See [Authentication Strategies](../concepts/auth-strategies.md) for all strategy types and their credential shapes. --- ## Broker API -The Broker API is internal. It is called by the Gateway for token operations and by administrative tooling (including `nexus-cli`) for provider management. Do not expose the Broker API to agents or to untrusted networks. +Internal surface. Called by the Gateway and administrative tooling (`nexus-cli`). Do not expose the Broker to agents or untrusted networks. -The Broker's OpenAPI specification is at [`nexus-broker/openapi.yaml`](https://github.com/Prescott-Data/nexus-framework/blob/main/nexus-broker/openapi.yaml). It is marked internal and evolving. Fields and endpoints may change between minor versions. +The Broker's OpenAPI spec is at [`nexus-broker/openapi.yaml`](https://github.com/Prescott-Data/nexus-framework/blob/main/nexus-broker/openapi.yaml). It evolves between minor versions — fields and endpoints may change. -### Provider management endpoints +### Agent registry endpoints (admin) | Method | Path | Description | |---|---|---| -| `GET` | `/providers` | List all registered providers | -| `GET` | `/providers/metadata` | Grouped metadata for frontend use | -| `POST` | `/providers` | Register a new provider | -| `GET` | `/providers/{name}` | Get a provider by name | -| `PUT` | `/providers/{name}` | Replace a provider configuration | -| `PATCH` | `/providers/{name}` | Update specific fields of a provider | -| `DELETE` | `/providers/{name}` | Delete a provider | - -### Authentication - -All Broker API calls require the `X-API-Key` header carrying the value set in the Broker's `API_KEY` environment variable. +| `POST` | `/admin/v1/agents` | Register an agent with its allowed scopes | +| `GET` | `/admin/v1/agents` | List all registered agents | +| `GET` | `/admin/v1/agents/{id}` | Get a specific agent | +| `PATCH` | `/admin/v1/agents/{id}` | Update agent allowed scopes | +| `DELETE` | `/admin/v1/agents/{id}` | Deregister an agent | -### Audit endpoint +### Audit | Method | Path | Description | |---|---|---| | `GET` | `/audit` | Query audit log events | -See the [Audit Log reference](audit-log.md) for query parameters and response schema. +All Broker API calls require the `X-API-Key` header. See the [Audit Log](audit-log.md) guide for query parameters and response schema. diff --git a/docs/reference/cli.md b/docs/reference/cli.md new file mode 100644 index 0000000..56cf9d7 --- /dev/null +++ b/docs/reference/cli.md @@ -0,0 +1,147 @@ +# CLI Reference + +`nexus-cli` is a command-line tool for managing Nexus provider configuration declaratively. It reads a YAML manifest, compares it against the live Broker state, and applies changes. + +## Install + +```bash +# Build from source +cd nexus-cli && go build -o nexus-cli . + +# Install with Go +go install github.com/Prescott-Data/nexus-framework/nexus-cli@latest +``` + +## Environment variables + +| Variable | Required | Description | +|---|---|---| +| `BROKER_BASE_URL` | yes | Base URL of the Broker, e.g. `http://localhost:8080` | +| `API_KEY` | yes | Broker API key — same value as the Broker's `API_KEY` env var | + +## Commands + +### `plan` + +Computes the diff between the manifest and the live Broker state. Prints the actions that would be taken. Makes no changes. + +```bash +nexus-cli plan [flags] +``` + +| Flag | Default | Description | +|---|---|---| +| `-file` | `nexus-providers.yaml` | Path to the providers manifest file | +| `-prune` | `false` | Include deletion of providers not in the manifest | + +**Output:** + +``` ++ CREATE : google-workspace +~ UPDATE : salesforce + client_secret: [redacted] → [redacted] + scopes: ["crm:read"] → ["crm:read","crm:write"] +! ORPHAN : old-provider (would be deleted if --prune was passed) + +Plan complete. Run 'nexus-cli apply' to perform these actions. +``` + +`client_secret` and `client_id` values are always masked in plan output. + +--- + +### `apply` + +Applies the manifest against the live Broker. Creates new providers, updates drifted fields, and optionally deletes orphans. + +```bash +nexus-cli apply [flags] +``` + +| Flag | Default | Description | +|---|---|---| +| `-file` | `nexus-providers.yaml` | Path to the providers manifest file | +| `-prune` | `false` | Delete providers that exist in the Broker but not in the manifest | + +`apply` runs `plan` internally first and prints the same diff before executing. Use `-prune` with care — it permanently deletes providers and orphans every active connection tied to them. + +--- + +## Manifest format + +The manifest is a YAML file declaring the desired state of all providers. + +```yaml +providers: + - name: google-workspace + auth_type: oauth2 + client_id: ${GOOGLE_CLIENT_ID} + client_secret: ${GOOGLE_CLIENT_SECRET} + issuer: https://accounts.google.com + enable_discovery: true + scopes: + - openid + - email + - profile + - offline_access + + - name: salesforce + auth_type: oauth2 + client_id: ${SF_CLIENT_ID} + client_secret: ${SF_CLIENT_SECRET} + auth_url: https://login.salesforce.com/services/oauth2/authorize + token_url: https://login.salesforce.com/services/oauth2/token + scopes: + - crm:contacts:read + params: + skip_scope_on_exchange: true + + - name: internal-api + auth_type: api_key + params: + credential_schema: + type: object + required: [api_key] + properties: + api_key: + type: string + title: API Key +``` + +### Provider fields + +| Field | Type | Required | Description | +|---|---|---|---| +| `name` | string | yes | Unique slug — used as the identifier in connection requests | +| `auth_type` | string | yes | `oauth2`, `api_key`, `basic_auth`, `aws_sigv4`, `query_param`, `hmac_payload` | +| `client_id` | string | OAuth2 only | OAuth2 client ID | +| `client_secret` | string | OAuth2 only | OAuth2 client secret | +| `auth_url` | string | OAuth2 (no OIDC) | Authorization endpoint | +| `token_url` | string | OAuth2 (no OIDC) | Token endpoint | +| `issuer` | string | OIDC only | Issuer URL — enables OIDC discovery | +| `enable_discovery` | bool | OIDC only | Must be `true` when using `issuer` | +| `scopes` | []string | OAuth2 | Default scopes for this provider | +| `auth_header` | string | rarely | Auth header style, e.g. `client_secret_basic` for Twitter/X | +| `api_base_url` | string | no | Base URL for the provider's API — informational | +| `params` | object | varies | Strategy-specific and provider-specific parameters | + +### Environment variable substitution + +The CLI expands `${VAR}` references in the manifest at runtime using the process environment. Use this to keep secrets out of the manifest file: + +```bash +export GOOGLE_CLIENT_ID=my-client-id +export GOOGLE_CLIENT_SECRET=my-client-secret +nexus-cli apply -file nexus-providers.yaml +``` + +## Drift detection + +`nexus-cli` computes drift by comparing each field in the manifest against the live Broker response. Fields with semantic equivalence (empty array vs null) are not flagged as drift. Secret fields (`client_id`, `client_secret`) are always included in the update payload when any drift is detected on the provider — they cannot be compared because the Broker does not return secret values in GET responses. + +## Exit codes + +| Code | Meaning | +|---|---| +| `0` | Success — no errors | +| `1` | Error — manifest read failure, API error, or unrecoverable drift | diff --git a/docs/reference/roadmap.md b/docs/reference/roadmap.md index 7f64355..b10dd2d 100644 --- a/docs/reference/roadmap.md +++ b/docs/reference/roadmap.md @@ -1,57 +1,79 @@ # Roadmap -This page documents what is actively being built, what has been intentionally deferred, and the known limitations of the current implementation. It is kept in this documentation site rather than only in GitHub Issues so that developers integrating with Nexus can plan their own work against it. +This page documents what is actively being built, what has been intentionally deferred, and the known limitations of the current implementation. It is kept here rather than only in GitHub Issues so that developers integrating with Nexus can plan their own work against it. ---- +## Active development -## Active work +### Agent identity and sessions -### mTLS between Gateway and Broker +The core agent auth surface is in development. This includes the agent registry, scoped agent sessions, and OBO delegation. + +| Work item | Priority | Description | +|---|---|---| +| Broker: `POST /admin/v1/agents` + agent registry table | High | Register agents with `allowed_scopes`, list and manage the registry | +| Broker: `POST /v1/agent-sessions` + enforcement | High | Short-lived scoped sessions with two-gate scope validation | +| Broker: `POST /v1/agent-sessions/obo` + JWT validation | High | OBO sessions tied to user identity and permission tier | +| Go SDK: `RequestAgentSession`, `RequestOBOSession`, `CloseAgentSession` | Medium | Extend `nexus-sdk/client.go` with agent session methods | +| CLI: `nexus agents list`, `nexus agents register`, `nexus sessions list` | Medium | CLI surface for agent management | +| OpenAPI spec: all new agent endpoints | Low | Document in `openapi.yaml` for SDK generation | + +### Python SDK + +The Python SDK exists inside `jarviscore` as `jarviscore.nexus.NexusClient`. It is being extracted into a standalone `nexus-sdk` package and published to PyPI. Once published, it will include the agent session methods (`request_agent_session`, `request_obo_session`, `close_agent_session`). + +### TypeScript SDK + +New package. Same REST API surface as the Go and Python SDKs, TypeScript ergonomics. Will be published to npm as `nexus-sdk` and include agent session support from the initial release. + +### Vault backend integration -The current security model uses an API key for Gateway-to-Broker authentication. Mutual TLS will replace this, providing cryptographically enforced identity at the transport layer. This removes the API key as a single-point secret that, if compromised, allows unrestricted Broker access from any host. +The Broker currently stores OAuth `client_id` and `client_secret` in PostgreSQL. A `SECRET_BACKEND` configuration option is in development that will allow the Broker to read credentials from external secret managers instead: -The design is complete. Implementation is in progress. +| Backend | Config value | +|---|---| +| Internal PostgreSQL (current default) | `SECRET_BACKEND=internal` | +| HashiCorp Vault | `SECRET_BACKEND=hashicorp-vault` | +| AWS Secrets Manager | `SECRET_BACKEND=aws-secrets-manager` | +| GCP Secret Manager | `SECRET_BACKEND=gcp-secret-manager` | -### Gateway-proxied token refresh +When an external backend is configured, provider registration stores only metadata in PostgreSQL (auth URLs, scopes) — not credentials. Credentials are written to and read from the vault at OAuth flow time. Nexus becomes a pure orchestration layer over your existing secret infrastructure. -Today, if a token expires and you are making direct HTTP calls (not using the Bridge), you call the Broker's refresh endpoint directly to force a refresh before the next `GET /token`. This is an internal endpoint that should not be accessible to agents. The Gateway will expose a proxy endpoint that wraps this operation so agents and non-Go clients can trigger refreshes without needing Broker access. +### mTLS between Gateway and Broker + +The current security model uses an API key for Gateway-to-Broker authentication. Mutual TLS will replace this, providing cryptographically enforced identity at the transport layer. Design is complete. Implementation is in progress. ### OBO session webhooks -When an OBO session is created, closed, or expires, Nexus will emit a webhook event. This allows you to stream delegation activity to your SIEM, audit store, or observability pipeline without polling the audit log. +When an OBO session is created, closed, or expires, Nexus will emit a webhook event. This allows streaming delegation activity to a SIEM, audit store, or observability pipeline without polling the audit log. -### TypeScript and Python SDKs +### Sidecar deployment model -The Go SDK is the reference implementation. TypeScript (`@nexus/sdk`) and Python (`nexus-sdk`) ports are in development. The TypeScript SDK is scheduled for the 0.6 milestone. The Python SDK follows in 0.7. +For environments requiring zero in-process secret exposure, a Nexus sidecar will intercept outgoing agent requests on `localhost`, fetch credentials from the Gateway, sign the request, and forward it. The agent process holds no credential material. Design phase. --- ## Known limitations -### No per-scope access control on connections - -Currently, when a connection is established, it grants access to all scopes the provider was configured with. There is no mechanism to create a connection scoped to a subset of those scopes per-user. This is relevant for multi-tenant deployments where different users should have different levels of access to the same provider. +### Audit log has no built-in archival -The OBO delegation feature addresses this for agent-initiated operations by tying the session to the user's clearance level. Full per-scope connection scoping is on the roadmap but has not been scheduled. +The audit log grows without bound. There is no TTL or archival mechanism in the Broker. Implement your own archival job. See the [Audit Log reference](audit-log.md) for the recommended approach. ### Static credential rotation requires reconnection -For `api_key` providers, if the underlying credential changes externally (the API key is rotated at the provider), there is no automated mechanism to detect the change and prompt reconnection. You update the connection manually. Automated stale credential detection for static key providers is tracked but not scheduled. +For `api_key` providers, if the credential changes at the provider, there is no automated detection. You update the connection manually via the capture flow. -### Audit log has no built-in archival +### Single-region deployment -The audit log grows without bound. There is no TTL or archival mechanism in the Broker. Teams running Nexus in production should implement their own archival job. See the [Audit Log reference](audit-log.md) for the recommended approach. +Nexus does not support multi-region active-active deployments. The `ENCRYPTION_KEY` and PostgreSQL state make cross-region replication non-trivial. Multi-region read replicas for audit log queries are feasible; write operations must route to a single Broker primary. -### Single-region deployment +### No key rotation tooling -Nexus does not currently support multi-region active-active deployments. The `ENCRYPTION_KEY` and PostgreSQL state make cross-region replication non-trivial to implement safely. Multi-region read replicas for the audit log query path are feasible today; write operations must route to a single Broker primary. +`ENCRYPTION_KEY` rotation requires decrypting and re-encrypting every token row. There is no built-in migration command for this. Implement this as an offline script against the database. --- -## Deferred features - -The following features were considered and explicitly deferred rather than forgotten. +## Deferred -**SAML provider support.** Nexus is designed around OAuth 2.0 and OIDC. SAML is a different protocol with different security properties and a different credential lifecycle. Supporting it within the current Broker architecture would require significant changes to the handshake engine. SAML support is out of scope until the core OAuth surface is stable and well-tested in production. +**SAML provider support.** SAML is a different protocol requiring significant changes to the handshake engine. Out of scope until the core OAuth surface is stable in production. -**Role-based access control for the admin API.** The Broker's admin API currently uses a single API key. Fine-grained RBAC (read-only admin, provider admin, full admin) is deferred. The immediate mitigation is to manage providers declaratively through `nexus-cli` with git-enforced review gates, which provides access control at the process level rather than the API level. +**RBAC for the admin API.** The Broker's admin API uses a single API key. Fine-grained RBAC is deferred. The immediate mitigation is declarative provider management through `nexus-cli` with git-enforced review gates. diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 141c97c..a865710 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,6 +1,5 @@ /* ============================================================ Nexus Docs — Custom Theme - Adapted from the JarvisCore docs stylesheet. ============================================================ */ /* ---------- Material Custom Palette Overrides ---------- */ @@ -8,14 +7,16 @@ --md-primary-fg-color: #0071F7; --md-primary-fg-color--light: #35B0FE; --md-primary-fg-color--dark: #0049C6; - --md-primary-bg-color: #ffffff; - --md-primary-bg-color--light: rgba(255, 255, 255, 0.7); + /* Do NOT set --md-primary-bg-color here — Material uses it as + active-tab text colour, which would render as white-on-white + in light mode. Let it fall through to Material's default (#fff + only on coloured primary backgrounds, not on our white header). */ } [data-md-color-accent="custom"] { - --md-accent-fg-color: #0CF0E3; + --md-accent-fg-color: #0CF0E3; --md-accent-fg-color--light: rgba(12, 240, 227, 0.1); - --md-accent-bg-color-light: rgba(12, 240, 227, 0.1); + --md-accent-bg-color-light: rgba(12, 240, 227, 0.1); } /* ---------- Google Fonts ---------- */ @@ -23,42 +24,68 @@ /* ---------- Design Tokens ---------- */ :root { - --nx-brand: #0071F7; + --nx-brand: #0071F7; --nx-brand-light: #35B0FE; - --nx-brand-dark: #0049C6; - --nx-accent: #0CF0E3; + --nx-brand-dark: #0049C6; + --nx-accent: #0CF0E3; + --nx-purple: #4951F3; - /* Semantic */ - --nx-green: #0CC572; + /* UI Semantic Colors */ + --nx-green: #0CC572; /* UI Green — success, active, healthy states */ --nx-green-subtle: rgba(12, 197, 114, 0.10); - --nx-yellow: #E8A302; + --nx-yellow: #E8A302; /* UI Yellow — warnings, in-progress, caution */ --nx-yellow-subtle: rgba(232, 163, 2, 0.10); - --nx-red: #EF4444; - --nx-red-subtle: rgba(239, 68, 68, 0.10); - /* Surface */ - --nx-surface: #f8fafc; - --nx-border: #e2e8f0; + --nx-surface: #f8fafc; + --nx-border: #e2e8f0; --nx-text-muted: #64748b; - --nx-gradient: linear-gradient(135deg, #35B0FE 0%, #0071F7 40%, #0049C6 100%); - --nx-gradient-subtle: linear-gradient(135deg, rgba(0, 113, 247, 0.06) 0%, rgba(12, 240, 227, 0.04) 100%); + --nx-gradient: linear-gradient(135deg, #35B0FE 0%, #2457F7 35%, #443ACC 68%, #752CEA 100%); + --nx-gradient-subtle: linear-gradient(135deg, rgba(23, 88, 245, 0.06) 0%, rgba(12, 240, 227, 0.04) 100%); + --nx-gradient-brand: linear-gradient(135deg, #0049C6 0%, #0971EE 50%, #023DF3 100%); - --nx-radius: 10px; - --nx-shadow: 0 4px 24px rgba(0, 113, 247, 0.10); - --nx-shadow-hov: 0 8px 32px rgba(0, 113, 247, 0.18); + --nx-radius: 10px; + --nx-shadow: 0 4px 24px rgba(23, 88, 245, 0.10); + --nx-shadow-hover: 0 8px 32px rgba(23, 88, 245, 0.18); --nx-transition: 0.22s cubic-bezier(0.4, 0, 0.2, 1); + /* Sidebar width — wider than Material default (12rem) so labels never truncate */ --md-sidebar-width: 15rem; } +/* ---------- Logo ---------- */ +.md-header__button.md-logo { + height: auto !important; + padding: 0.25rem 0.5rem !important; + margin: 0 0.2rem 0 0 !important; + display: flex !important; + align-items: center !important; +} + +.md-header__button.md-logo img { + height: 2.2rem !important; + width: 2.2rem !important; + max-width: none !important; + max-height: none !important; + display: block !important; + object-fit: cover !important; + border-radius: 8px !important; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15) !important; + transition: transform 0.2s ease, box-shadow 0.2s ease !important; +} + +.md-header__button.md-logo img:hover { + transform: scale(1.06); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25) !important; +} + [data-md-color-scheme="slate"] { - --nx-surface: #0f1117; - --nx-border: #1e2130; - --nx-text-muted: #94a3b8; - --nx-gradient-subtle: linear-gradient(135deg, rgba(0, 113, 247, 0.12) 0%, rgba(12, 240, 227, 0.08) 100%); - --nx-shadow: 0 4px 24px rgba(0, 0, 0, 0.40); - --nx-shadow-hov: 0 8px 40px rgba(0, 113, 247, 0.25); + --nx-surface: #0f1117; + --nx-border: #1e2130; + --nx-text-muted: #94a3b8; + --nx-gradient-subtle: linear-gradient(135deg, rgba(23, 88, 245, 0.12) 0%, rgba(12, 240, 227, 0.08) 100%); + --nx-shadow: 0 4px 24px rgba(0, 0, 0, 0.40); + --nx-shadow-hover: 0 8px 40px rgba(23, 88, 245, 0.25); } /* ---------- Base Typography ---------- */ @@ -69,12 +96,12 @@ body, text-rendering: optimizeLegibility; } -/* ── Heading scale ───────────────────────────────────────── - H1 — page title → dark/white, large - H2 — section → brand blue, left border - H3 — sub-section → brand-light - H4 — detail → muted, normal weight - ─────────────────────────────────────────────────────── */ +/* ── Heading scale & site-wide colour hierarchy ─────────────────────────── + H1 — page title → default (dark/white per scheme), large + bold + H2 — section grouper → brand blue + left border accent + H3 — sub-section → brand-light blue + H4 — individual item → slightly muted, normal weight + ─────────────────────────────────────────────────────────────────────── */ .md-typeset h1 { font-weight: 700; @@ -100,6 +127,7 @@ body, color: var(--nx-text-muted); } +/* Dark mode heading colours */ [data-md-color-scheme="slate"] .md-typeset h2 { color: var(--nx-brand-light); border-left-color: var(--nx-brand-light); @@ -145,34 +173,49 @@ body, .md-typeset table td, .md-typeset table th { - font-size: 0.75rem; + font-size: 0.72rem; line-height: 1.4; } .md-typeset table th { - font-size: 0.7rem !important; + font-size: 0.64rem !important; font-weight: 600 !important; - letter-spacing: 0.03em !important; + letter-spacing: 0.05em !important; text-transform: uppercase !important; } .md-typeset code, .md-typeset pre code { - font-family: 'JetBrains Mono', monospace; font-size: 0.72rem; line-height: 1.38; } -/* Headings stay prominent */ -.md-typeset h1 { font-size: 1.75rem; line-height: 1.2; } -.md-typeset h2 { font-size: 1.05rem; line-height: 1.25; } -.md-typeset h3 { font-size: 0.9rem; line-height: 1.3; } -.md-typeset h4 { font-size: 0.85rem; line-height: 1.35; } +/* Headings stay prominent but tighter */ +.md-typeset h1 { + font-size: 1.75rem; + line-height: 1.2; +} + +.md-typeset h2 { + font-size: 1.05rem; + line-height: 1.25; +} + +.md-typeset h3 { + font-size: 0.9rem; + line-height: 1.3; +} + +.md-typeset h4 { + font-size: 0.85rem; + line-height: 1.35; +} /* ============================================================ - HEADER + HEADER — adaptive: white in light mode, #0c0c0e in dark ============================================================ */ +/* Light mode */ .md-header { background: #ffffff !important; box-shadow: none !important; @@ -183,6 +226,7 @@ body, box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06) !important; } +/* Dark mode */ [data-md-color-scheme="slate"] .md-header { background: #0c0c0e !important; border-bottom: 1px solid rgba(255, 255, 255, 0.07); @@ -192,11 +236,13 @@ body, box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06) !important; } +/* Push theme-toggle (palette form) to the far right */ .md-header__inner { display: flex; align-items: center; } +/* Prevent title from collapsing due to flex rules */ .md-header__title { flex-grow: 0 !important; flex-shrink: 0 !important; @@ -213,45 +259,45 @@ body, color: #fff !important; } -.md-header .md-header__inner.md-grid { - position: relative !important; -} +/* Center the search bar absolutely in the header */ +@media (min-width: 768px) { + .md-header .md-header__inner.md-grid { + position: relative !important; + } -.md-header .md-header__inner .md-search, -.md-header .md-search[data-md-component="search"] { - position: absolute !important; - left: 50% !important; - transform: translateX(-50%) !important; - width: 380px !important; - z-index: 2 !important; + .md-header .md-header__inner .md-search, + .md-header .md-search[data-md-component="search"] { + position: absolute !important; + left: 50% !important; + transform: translateX(-50%) !important; + width: 380px !important; + z-index: 2 !important; + } } .md-header .md-search__form { width: 100%; } +/* Push right-side items (GH widget, palette toggle) to far right */ .nx-version-chip { margin-right: auto; } +/* Hide Material's built-in repo source link — we don't use it */ .md-header__source { display: none !important; } -.md-header__button.md-logo { - padding: 0 !important; - margin-right: 1.2rem; - display: flex; - align-items: center; - width: auto !important; +/* Hide edit/view-source icon button in header */ +[data-md-component="header"] .md-header__button[title*="Edit"], +[data-md-component="header"] .md-header__button[title*="View"] { + display: none !important; } -.md-header__button.md-logo img, -.md-header__button.md-logo svg { - height: 18px !important; - width: auto !important; -} + +/* All header icons/buttons */ .md-header .md-icon, .md-header .md-header__button { color: rgba(0, 0, 0, 0.45) !important; @@ -272,9 +318,10 @@ body, } /* ============================================================ - SEARCH + SEARCH UI (Pill & Modal) ============================================================ */ +/* 1. Idle Search Bar (Pill) */ .md-header .md-search__form { background: rgba(0, 0, 0, 0.05) !important; border-radius: 99px !important; @@ -299,6 +346,7 @@ body, color: rgba(0, 0, 0, 0.4) !important; } +/* Show the search icon */ .md-search__icon[for="__search"] { display: block !important; position: absolute; @@ -310,19 +358,21 @@ body, color: rgba(0, 0, 0, 0.4); } +/* Add the ⌘K badge */ .md-header .md-search__form::after { content: "⌘K"; position: absolute; right: 0.8rem; top: 50%; transform: translateY(-50%); - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; font-size: 0.75rem; font-weight: 500; color: rgba(0, 0, 0, 0.4); pointer-events: none; } +/* 2. Active Search State (Modal) */ [data-md-toggle="search"]:checked~.md-header .md-search { position: fixed !important; top: 0 !important; @@ -337,6 +387,7 @@ body, padding-top: 15vh; } +/* Modal Overlay (Blur + Click to close) */ [data-md-toggle="search"]:checked~.md-header .md-search__overlay { position: fixed !important; top: 0 !important; @@ -348,9 +399,11 @@ body, -webkit-backdrop-filter: blur(8px) !important; z-index: 0 !important; opacity: 1 !important; + cursor: default !important; display: block !important; } +/* Modal Box (Inner) */ [data-md-toggle="search"]:checked~.md-header .md-search__inner { position: relative !important; width: 600px !important; @@ -363,6 +416,7 @@ body, z-index: 10 !important; } +/* Active Modal Header (Form) */ [data-md-toggle="search"]:checked~.md-header .md-search__form { background: #fff !important; border-radius: 12px 12px 0 0 !important; @@ -374,8 +428,10 @@ body, [data-md-toggle="search"]:checked~.md-header .md-search__form::after { display: none !important; + /* Hide ⌘K when active */ } +/* Active Modal Body (Output/Results) */ [data-md-toggle="search"]:checked~.md-header .md-search__output { position: static !important; background: #fff !important; @@ -387,6 +443,7 @@ body, overflow: hidden !important; } +/* Dark Mode Tweaks */ [data-md-color-scheme="slate"] .md-header .md-search__form { background: rgba(255, 255, 255, 0.08) !important; } @@ -411,7 +468,7 @@ body, border-color: rgba(255, 255, 255, 0.1) !important; } -/* ── Version chip ── */ +/* ── Version chip ─────────────────────────────────────── */ .nx-version-chip { display: inline-flex; align-items: center; @@ -433,7 +490,7 @@ body, color: rgba(255, 255, 255, 0.4); } -/* ── GitHub stars widget ── */ +/* ── GitHub stars widget ──────────────────────────────── */ .nx-gh-btn { display: inline-flex; align-items: center; @@ -455,10 +512,26 @@ body, .nx-gh-btn:hover { border-color: var(--nx-brand); color: var(--nx-brand) !important; - background: rgba(0, 113, 247, 0.05); + background: rgba(23, 88, 245, 0.05); text-decoration: none !important; } +.nx-gh-repo { + font-weight: 500; + letter-spacing: -0.01em; +} + +.nx-gh-sep { + opacity: 0.4; + font-size: 0.7rem; + margin: 0 1px; +} + +.nx-stars-count { + font-weight: 600; + font-variant-numeric: tabular-nums; +} + [data-md-color-scheme="slate"] .nx-gh-btn { border-color: rgba(255, 255, 255, 0.13); color: rgba(255, 255, 255, 0.48) !important; @@ -467,11 +540,18 @@ body, [data-md-color-scheme="slate"] .nx-gh-btn:hover { border-color: var(--nx-brand-light); color: var(--nx-brand-light) !important; - background: rgba(0, 113, 247, 0.1); + background: rgba(23, 88, 245, 0.1); } + + + +/* ============================================================ + NAVIGATION TABS — adaptive: white light / dark in slate + ============================================================ */ + /* ============================================================ - NAVIGATION TABS + NAVIGATION TABS — tight bottom-hugging active underline ============================================================ */ .md-tabs { @@ -487,14 +567,17 @@ body, margin-top: 0; } +/* The tab list — zero padding so links sit flush */ .md-tabs__list { padding: 0; margin: 0; display: flex; align-items: stretch; + /* children fill full height */ } .md-tabs__item { + /* let the item height be driven by the link */ display: flex; align-items: stretch; } @@ -506,6 +589,7 @@ body, letter-spacing: 0; color: #292929 !important; opacity: 1 !important; + /* tight vertical padding — 6px top, only 4px bottom so underline is RIGHT at the bar */ padding: 6px 12px 4px; position: relative; transition: color 0.15s ease; @@ -514,6 +598,7 @@ body, align-items: center; gap: 5px; text-decoration: none; + /* no bottom gap — the 2px underline will touch the border */ box-sizing: border-box; } @@ -521,10 +606,12 @@ body, color: rgba(255, 255, 255, 0.42) !important; } +/* Active underline — pinned to very bottom of the tab row */ .md-tabs__link::after { content: ''; position: absolute; bottom: -1px; + /* sit on top of the border-bottom of .md-tabs */ left: 12px; right: 12px; height: 2px; @@ -544,28 +631,143 @@ body, color: rgba(255, 255, 255, 0.8) !important; } -.md-tabs__item--active .md-tabs__link { +/* Active tab — explicit colours that beat Material's primary-bg-color bleed */ +.md-tabs__item--active .md-tabs__link, +.md-tabs__item--active .md-tabs__link:link, +.md-tabs__item--active .md-tabs__link:visited { color: var(--nx-brand) !important; font-weight: 600 !important; } +[data-md-color-scheme="slate"] .md-tabs__item--active .md-tabs__link, +[data-md-color-scheme="slate"] .md-tabs__item--active .md-tabs__link:link, +[data-md-color-scheme="slate"] .md-tabs__item--active .md-tabs__link:visited { + color: var(--nx-brand-light) !important; + font-weight: 600 !important; +} + .md-tabs__item--active .md-tabs__link::after { transform: scaleX(1); } +/* Hover preview of underline */ .md-tabs__item:not(.md-tabs__item--active) .md-tabs__link:hover::after { transform: scaleX(0.6); opacity: 0.35; } /* ============================================================ - LEFT SIDEBAR + TAB BAR ICONS — injected for sections that link to pages + without navigation.indexes (so Material doesn't auto-render + an icon from frontmatter). We match by the tab's href. + ============================================================ */ + +/* Shared pseudo-element setup for injected tab icons */ +.md-tabs__link[href*="getting-started"]::before, +.md-tabs__link[href*="concepts/"]::before, +.md-tabs__link[href*="guides/"]::before, +.md-tabs__link[href*="reference/"]::before, +.md-tabs__link[href*="infrastructure/"]::before { + content: ''; + display: inline-block; + width: 1rem; + height: 1rem; + flex-shrink: 0; + background-color: currentColor; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; + -webkit-mask-size: contain; + mask-size: contain; + vertical-align: middle; + margin-right: 2px; + opacity: 0.85; +} + +/* Getting Started — rocket launch */ +.md-tabs__link[href*="getting-started"]::before { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M2.81 14.12L5.64 11.29L8.17 13.82C9.78 12.5 11.5 11.39 13.5 10.62L13.57 10.69C15 8.5 17.5 7 20.23 7A9.98 9.98 0 0 1 22 12C22 17.52 17.52 22 12 22C8.91 22 6.19 20.55 4.43 18.3L6.56 16.17C7.72 17.65 9.5 18.6 11.5 18.91L11.5 15.79C9.28 15.36 7.19 14.36 5.64 13L2.81 14.12M13.5 13.43V18.91C15.5 18.6 17.28 17.65 18.44 16.17L16.36 14.09C15.5 14.82 14.53 15.22 13.5 15.43M5.5 5A2 2 0 0 0 3.5 7A2 2 0 0 0 5.5 9A2 2 0 0 0 7.5 7A2 2 0 0 0 5.5 5Z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M2.81 14.12L5.64 11.29L8.17 13.82C9.78 12.5 11.5 11.39 13.5 10.62L13.57 10.69C15 8.5 17.5 7 20.23 7A9.98 9.98 0 0 1 22 12C22 17.52 17.52 22 12 22C8.91 22 6.19 20.55 4.43 18.3L6.56 16.17C7.72 17.65 9.5 18.6 11.5 18.91L11.5 15.79C9.28 15.36 7.19 14.36 5.64 13L2.81 14.12M13.5 13.43V18.91C15.5 18.6 17.28 17.65 18.44 16.17L16.36 14.09C15.5 14.82 14.53 15.22 13.5 15.43M5.5 5A2 2 0 0 0 3.5 7A2 2 0 0 0 5.5 9A2 2 0 0 0 7.5 7A2 2 0 0 0 5.5 5Z'/%3E%3C/svg%3E"); +} + +/* Concepts — lightbulb-on */ +.md-tabs__link[href*="concepts/"]::before { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2A7 7 0 0 0 5 9C5 11.38 6.19 13.47 8 14.74V17A1 1 0 0 0 9 18H15A1 1 0 0 0 16 17V14.74C17.81 13.47 19 11.38 19 9A7 7 0 0 0 12 2M9 21A1 1 0 0 0 10 22H14A1 1 0 0 0 15 21V20H9V21Z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2A7 7 0 0 0 5 9C5 11.38 6.19 13.47 8 14.74V17A1 1 0 0 0 9 18H15A1 1 0 0 0 16 17V14.74C17.81 13.47 19 11.38 19 9A7 7 0 0 0 12 2M9 21A1 1 0 0 0 10 22H14A1 1 0 0 0 15 21V20H9V21Z'/%3E%3C/svg%3E"); +} + +/* Guides — book open */ +.md-tabs__link[href*="guides/"]::before { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M17 22V20H20V17H22V20.5C22 20.89 21.84 21.24 21.54 21.54C21.24 21.84 20.89 22 20.5 22H17M7 22H3.5C3.11 22 2.76 21.84 2.46 21.54C2.16 21.24 2 20.89 2 20.5V17H4V20H7V22M17 2H20.5C20.89 2 21.24 2.16 21.54 2.46C21.84 2.76 22 3.11 22 3.5V7H20V4H17V2M7 2V4H4V7H2V3.5C2 3.11 2.16 2.76 2.46 2.46C2.76 2.16 3.11 2 3.5 2H7M13 17H11C10.45 17 10 16.55 10 16S10.45 15 11 15H13C13.55 15 14 15.45 14 16S13.55 17 13 17M17 13H7C6.45 13 6 12.55 6 12S6.45 11 7 11H17C17.55 11 18 11.45 18 12S17.55 13 17 13M17 9H7C6.45 9 6 8.55 6 8S6.45 7 7 7H17C17.55 7 18 7.45 18 8S17.55 9 17 9Z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M17 22V20H20V17H22V20.5C22 20.89 21.84 21.24 21.54 21.54C21.24 21.84 20.89 22 20.5 22H17M7 22H3.5C3.11 22 2.76 21.84 2.46 21.54C2.16 21.24 2 20.89 2 20.5V17H4V20H7V22M17 2H20.5C20.89 2 21.24 2.16 21.54 2.46C21.84 2.76 22 3.11 22 3.5V7H20V4H17V2M7 2V4H4V7H2V3.5C2 3.11 2.16 2.76 2.46 2.46C2.76 2.16 3.11 2 3.5 2H7M13 17H11C10.45 17 10 16.55 10 16S10.45 15 11 15H13C13.55 15 14 15.45 14 16S13.55 17 13 17M17 13H7C6.45 13 6 12.55 6 12S6.45 11 7 11H17C17.55 11 18 11.45 18 12S17.55 13 17 13M17 9H7C6.45 9 6 8.55 6 8S6.45 7 7 7H17C17.55 7 18 7.45 18 8S17.55 9 17 9Z'/%3E%3C/svg%3E"); +} + +/* Reference — code tags */ +.md-tabs__link[href*="reference/"]::before { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6Z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6Z'/%3E%3C/svg%3E"); +} + +/* Enterprise — office building */ +.md-tabs__link[href*="infrastructure/"]::before { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18 15H16V17H18M18 11H16V13H18M20 19H12V17H14V15H12V13H14V11H12V9H20M10 7H8V5H10M10 11H8V9H10M10 15H8V13H10M10 19H8V17H10M6 7H4V5H6M6 11H4V9H6M6 15H4V13H6M6 19H4V17H6M12 7V3H2V21H22V7H12Z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18 15H16V17H18M18 11H16V13H18M20 19H12V17H14V15H12V13H14V11H12V9H20M10 7H8V5H10M10 11H8V9H10M10 15H8V13H10M10 19H8V17H10M6 7H4V5H6M6 11H4V9H6M6 15H4V13H6M6 19H4V17H6M12 7V3H2V21H22V7H12Z'/%3E%3C/svg%3E"); +} + +/* ============================================================ + WELCOME PAGE — Website / Community / Blog sidebar icons + Injected as ::before pseudo on links matching those hrefs. + ============================================================ */ +.md-nav__link[href*="developers.prescottdata.io"]:not([href*="blog"])::before, +.md-nav__link[href*="discord.gg"]::before, +.md-nav__link[href*="blog"]::before { + content: ''; + display: inline-block; + width: 0.85rem; + height: 0.85rem; + flex-shrink: 0; + background-color: currentColor; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; + -webkit-mask-size: contain; + mask-size: contain; + margin-right: 0.45rem; + opacity: 0.6; + vertical-align: middle; +} + +/* Website — globe/web icon */ +.md-nav__link[href*="developers.prescottdata.io"]:not([href*="blog"])::before { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M16.36 14C16.44 13.34 16.5 12.68 16.5 12S16.44 10.66 16.36 10H19.74C19.9 10.64 20 11.31 20 12S19.9 13.36 19.74 14M14.59 19.56C15.19 18.45 15.65 17.25 15.97 16H18.92C17.96 17.65 16.43 18.93 14.59 19.56M14.34 14H9.66C9.56 13.34 9.5 12.68 9.5 12S9.56 10.65 9.66 10H14.34C14.43 10.65 14.5 11.32 14.5 12S14.43 13.34 14.34 14M12 19.96C11.17 18.76 10.5 17.43 10.09 16H13.91C13.5 17.43 12.83 18.76 12 19.96M8 8H5.08C6.03 6.34 7.57 5.06 9.4 4.44C8.8 5.55 8.35 6.75 8 8M5.08 16H8C8.35 17.25 8.8 18.45 9.4 19.56C7.57 18.93 6.03 17.65 5.08 16M4.26 14C4.1 13.36 4 12.69 4 12S4.1 10.64 4.26 10H7.64C7.56 10.66 7.5 11.32 7.5 12S7.56 13.34 7.64 14M12 4.03C12.83 5.23 13.5 6.57 13.91 8H10.09C10.5 6.57 11.17 5.23 12 4.03M18.92 8H15.97C15.65 6.75 15.19 5.55 14.59 4.44C16.43 5.07 17.96 6.34 18.92 8M12 2C6.47 2 2 6.5 2 12A10 10 0 0 0 12 22A10 10 0 0 0 22 12A10 10 0 0 0 12 2Z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M16.36 14C16.44 13.34 16.5 12.68 16.5 12S16.44 10.66 16.36 10H19.74C19.9 10.64 20 11.31 20 12S19.9 13.36 19.74 14M14.59 19.56C15.19 18.45 15.65 17.25 15.97 16H18.92C17.96 17.65 16.43 18.93 14.59 19.56M14.34 14H9.66C9.56 13.34 9.5 12.68 9.5 12S9.56 10.65 9.66 10H14.34C14.43 10.65 14.5 11.32 14.5 12S14.43 13.34 14.34 14M12 19.96C11.17 18.76 10.5 17.43 10.09 16H13.91C13.5 17.43 12.83 18.76 12 19.96M8 8H5.08C6.03 6.34 7.57 5.06 9.4 4.44C8.8 5.55 8.35 6.75 8 8M5.08 16H8C8.35 17.25 8.8 18.45 9.4 19.56C7.57 18.93 6.03 17.65 5.08 16M4.26 14C4.1 13.36 4 12.69 4 12S4.1 10.64 4.26 10H7.64C7.56 10.66 7.5 11.32 7.5 12S7.56 13.34 7.64 14M12 4.03C12.83 5.23 13.5 6.57 13.91 8H10.09C10.5 6.57 11.17 5.23 12 4.03M18.92 8H15.97C15.65 6.75 15.19 5.55 14.59 4.44C16.43 5.07 17.96 6.34 18.92 8M12 2C6.47 2 2 6.5 2 12A10 10 0 0 0 12 22A10 10 0 0 0 22 12A10 10 0 0 0 12 2Z'/%3E%3C/svg%3E"); +} + +/* Community — Discord bubble */ +.md-nav__link[href*="discord.gg"]::before { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.492c-1.53-.69-3.17-1.2-4.885-1.49a.075.075 0 0 0-.079.036c-.21.369-.444.85-.608 1.23a18.566 18.566 0 0 0-5.487 0 12.36 12.36 0 0 0-.617-1.23A.077.077 0 0 0 8.562 3c-1.714.29-3.354.8-4.885 1.491a.07.07 0 0 0-.032.027C.533 9.093-.32 13.555.099 17.961a.08.08 0 0 0 .031.055 20.03 20.03 0 0 0 5.993 2.98.078.078 0 0 0 .084-.026c.462-.62.874-1.275 1.226-1.963.021-.04.001-.088-.041-.104a13.201 13.201 0 0 1-1.872-.878.075.075 0 0 1-.008-.125c.126-.093.252-.19.372-.287a.075.075 0 0 1 .078-.01c3.927 1.764 8.18 1.764 12.061 0a.075.075 0 0 1 .079.009c.12.098.245.195.372.288a.075.075 0 0 1-.006.125c-.598.344-1.22.635-1.873.877a.075.075 0 0 0-.041.105c.36.687.772 1.341 1.225 1.962a.077.077 0 0 0 .084.028 19.963 19.963 0 0 0 6.002-2.981.076.076 0 0 0 .032-.054c.5-5.094-.838-9.52-3.549-13.442a.06.06 0 0 0-.031-.028zM8.02 15.278c-1.182 0-2.157-1.069-2.157-2.38 0-1.312.956-2.38 2.157-2.38 1.21 0 2.176 1.077 2.157 2.38 0 1.312-.956 2.38-2.157 2.38zm7.975 0c-1.183 0-2.157-1.069-2.157-2.38 0-1.312.955-2.38 2.157-2.38 1.21 0 2.176 1.077 2.157 2.38 0 1.312-.946 2.38-2.157 2.38z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.492c-1.53-.69-3.17-1.2-4.885-1.49a.075.075 0 0 0-.079.036c-.21.369-.444.85-.608 1.23a18.566 18.566 0 0 0-5.487 0 12.36 12.36 0 0 0-.617-1.23A.077.077 0 0 0 8.562 3c-1.714.29-3.354.8-4.885 1.491a.07.07 0 0 0-.032.027C.533 9.093-.32 13.555.099 17.961a.08.08 0 0 0 .031.055 20.03 20.03 0 0 0 5.993 2.98.078.078 0 0 0 .084-.026c.462-.62.874-1.275 1.226-1.963.021-.04.001-.088-.041-.104a13.201 13.201 0 0 1-1.872-.878.075.075 0 0 1-.008-.125c.126-.093.252-.19.372-.287a.075.075 0 0 1 .078-.01c3.927 1.764 8.18 1.764 12.061 0a.075.075 0 0 1 .079.009c.12.098.245.195.372.288a.075.075 0 0 1-.006.125c-.598.344-1.22.635-1.873.877a.075.075 0 0 0-.041.105c.36.687.772 1.341 1.225 1.962a.077.077 0 0 0 .084.028 19.963 19.963 0 0 0 6.002-2.981.076.076 0 0 0 .032-.054c.5-5.094-.838-9.52-3.549-13.442a.06.06 0 0 0-.031-.028zM8.02 15.278c-1.182 0-2.157-1.069-2.157-2.38 0-1.312.956-2.38 2.157-2.38 1.21 0 2.176 1.077 2.157 2.38 0 1.312-.956 2.38-2.157 2.38zm7.975 0c-1.183 0-2.157-1.069-2.157-2.38 0-1.312.955-2.38 2.157-2.38 1.21 0 2.176 1.077 2.157 2.38 0 1.312-.946 2.38-2.157 2.38z'/%3E%3C/svg%3E"); +} + +/* Blog — RSS feed */ +.md-nav__link[href*="blog"]::before { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.18 15.64A2.18 2.18 0 0 1 8.36 17.82C8.36 19 7.38 20 6.18 20C4.98 20 4 19 4 17.82A2.18 2.18 0 0 1 6.18 15.64M4 4.44A15.56 15.56 0 0 1 19.56 20H16.73A12.73 12.73 0 0 0 4 7.27V4.44M4 10.1A9.9 9.9 0 0 1 13.9 20H11.07A7.07 7.07 0 0 0 4 12.93V10.1Z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.18 15.64A2.18 2.18 0 0 1 8.36 17.82C8.36 19 7.38 20 6.18 20C4.98 20 4 19 4 17.82A2.18 2.18 0 0 1 6.18 15.64M4 4.44A15.56 15.56 0 0 1 19.56 20H16.73A12.73 12.73 0 0 0 4 7.27V4.44M4 10.1A9.9 9.9 0 0 1 13.9 20H11.07A7.07 7.07 0 0 0 4 12.93V10.1Z'/%3E%3C/svg%3E"); +} + + +/* ============================================================ + LEFT SIDEBAR — premium redesign ============================================================ */ +/* Sidebar container */ .md-sidebar--primary .md-sidebar__scrollwrap { padding: 0.15rem 0 2rem; } +/* Top-level section labels (nav titles like "Getting Started") */ .md-nav--primary>.md-nav__list>.md-nav__item>.md-nav__link, .md-nav__title { font-family: 'Inter', sans-serif; @@ -580,6 +782,7 @@ body, pointer-events: none; } +/* All nav links */ .md-nav__link { font-family: 'Inter', sans-serif; font-size: 0.65rem; @@ -594,166 +797,1470 @@ body, transition: background 0.13s ease, color 0.13s ease, opacity 0.13s ease; position: relative; text-decoration: none !important; + /* Allow text to wrap — never clip or ellipsis */ white-space: normal; overflow: visible; word-break: break-word; } .md-nav__link:hover { - background: rgba(0, 113, 247, 0.07); + background: rgba(23, 88, 245, 0.07); color: var(--nx-brand) !important; opacity: 1; text-decoration: none !important; } [data-md-color-scheme="slate"] .md-nav__link:hover { - background: rgba(0, 113, 247, 0.12); + background: rgba(23, 88, 245, 0.12); color: var(--nx-brand-light) !important; } +/* Active left-bar indicator */ .md-nav__link--active { - background: rgba(0, 113, 247, 0.08) !important; + font-weight: 600; color: var(--nx-brand) !important; - font-weight: 600 !important; - opacity: 1 !important; - border-left: 2px solid var(--nx-brand); - padding-left: calc(0.6rem - 2px); + opacity: 1; + background: rgba(23, 88, 245, 0.08); +} + +.md-nav__link--active::before { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 3px; + background: var(--nx-brand); + border-radius: 0 2px 2px 0; } [data-md-color-scheme="slate"] .md-nav__link--active { - background: rgba(0, 113, 247, 0.14) !important; color: var(--nx-brand-light) !important; - border-left-color: var(--nx-brand-light); + background: rgba(23, 88, 245, 0.15); } -/* Nested nav items — indented children */ -.md-nav__item .md-nav .md-nav__link { +/* Nested sub-items — indented, slightly smaller */ +.md-nav--secondary .md-nav__link, +.md-nav__item--nested .md-nav .md-nav__link { font-size: 0.63rem; - padding: 0.2rem 0.6rem 0.2rem 1rem; + opacity: 0.75; + padding-left: 1rem; + white-space: normal; + overflow: visible; + word-break: break-word; } -/* ============================================================ - CODE BLOCKS - ============================================================ */ +.md-nav--secondary .md-nav__link:hover, +.md-nav__item--nested .md-nav .md-nav__link:hover { + opacity: 1; +} -.md-typeset pre { - border-radius: var(--nx-radius); +/* Sidebar section dividers */ +.md-nav__item+.md-nav__item { + margin-top: 0; } -.md-typeset code { - border-radius: 4px; +/* Remove default Material nav item bullet */ +.md-nav__item { + list-style: none; +} + +/* ---------- Custom Scrollbar ---------- */ +::-webkit-scrollbar { + width: 3px; + height: 3px; } -/* Copy button */ -.md-clipboard { - color: rgba(255, 255, 255, 0.35); - transition: color 0.15s; +::-webkit-scrollbar-track { + background: transparent; } -.md-clipboard:hover { - color: rgba(255, 255, 255, 0.8); +::-webkit-scrollbar-thumb { + background: var(--nx-brand); + border-radius: 99px; + opacity: 0.5; } /* ============================================================ - TABLES + HERO SECTION ============================================================ */ -.md-typeset table:not([class]) { - border: 1px solid var(--nx-border); - border-radius: var(--nx-radius); +.nx-hero { + text-align: center; + padding: 1.75rem 1.5rem 1.25rem; + position: relative; overflow: hidden; - font-size: 0.75rem; + clear: both; } -.md-typeset table:not([class]) th { - background: var(--nx-surface); - font-family: 'Inter', sans-serif; - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.06em; - text-transform: uppercase; +.nx-hero::before { + content: ''; + position: absolute; + inset: 0; + background: var(--nx-gradient-subtle); + z-index: 0; +} + +.nx-hero>* { + position: relative; + z-index: 1; +} + +/* Hide the ugly ¶ anchor inside hero heading */ +.nx-hero h1 .headerlink, +.nx-hero h1 a.headerlink { + display: none !important; +} + +.nx-hero-logo { + display: block; + margin: 0 auto 1.5rem !important; + height: 90px !important; + width: auto !important; +} + + + +.nx-hero h1 { + font-size: clamp(1.35rem, 3.5vw, 1.85rem) !important; + font-weight: 800; + letter-spacing: -0.04em; + line-height: 1.1; + margin-bottom: 0.5rem !important; + margin-top: 0 !important; + color: var(--md-default-fg-color); +} + +.nx-hero p { + font-size: 0.74rem !important; color: var(--nx-text-muted); - border-bottom: 1px solid var(--nx-border); + max-width: 480px; + margin: 0 auto 0.85rem !important; + line-height: 1.5; + font-weight: 400; } -.md-typeset table:not([class]) td { - border-bottom: 1px solid var(--nx-border); - vertical-align: top; +/* Hero code block — compact, inline-ish */ +.nx-hero .highlight, +.nx-hero pre { + max-width: 420px; + margin: 0 auto !important; + border-radius: 6px !important; + box-shadow: none !important; + border: 1px solid var(--nx-border) !important; } -.md-typeset table:not([class]) tr:last-child td { - border-bottom: none; +.nx-hero .highlight pre code { + font-size: 0.8rem !important; + padding: 0.8rem 1.2rem !important; } -/* ============================================================ - ADMONITIONS — minimal, not decorative - ============================================================ */ +/* --- CTA Text Links --- */ +.nx-cta-text { + margin-bottom: 1.2rem; + font-family: 'Inter', sans-serif; + font-size: 0.82rem; + font-weight: 500; +} -.md-typeset .admonition, -.md-typeset details { - border-left-width: 3px; - border-radius: 0 var(--nx-radius) var(--nx-radius) 0; - font-size: 0.75rem; +.nx-cta-text p { + display: flex; + gap: 1.25rem; + justify-content: center; + flex-wrap: wrap; + margin: 0; +} + +.nx-cta-text a { + color: var(--md-default-fg-color) !important; + opacity: 0.7; + text-decoration: none !important; + transition: opacity 0.15s ease, color 0.15s ease; + display: inline-flex; + align-items: center; + gap: 0.3rem; } -.md-typeset .admonition-title, -.md-typeset summary { +.nx-cta-text a:first-child { + color: var(--nx-brand) !important; + opacity: 1; font-weight: 600; +} + +.nx-cta-text a:first-child::after { + content: "→"; + margin-left: 2px; +} + +.nx-cta-text a:hover { + opacity: 1; + color: var(--nx-brand) !important; +} + +/* --- CTA Buttons --- */ +.nx-cta { + display: flex; + gap: 0.4rem; + justify-content: center; + flex-wrap: wrap; + margin-bottom: 0.6rem; +} + +.nx-btn { + display: inline-flex; + align-items: center; + gap: 0.3rem; + padding: 0.32rem 0.75rem; + border-radius: 5px; font-size: 0.72rem; - letter-spacing: 0.02em; + font-weight: 500; + text-decoration: none !important; + transition: opacity 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; + cursor: pointer; + letter-spacing: 0; + white-space: nowrap; +} + +.nx-btn:hover { + text-decoration: none !important; + transform: translateY(-1px); +} + +.nx-btn-primary { + background: var(--nx-gradient); + color: #fff !important; + box-shadow: 0 3px 12px rgba(23, 88, 245, 0.28); +} + +.nx-btn-primary:hover { + box-shadow: 0 6px 22px rgba(23, 88, 245, 0.38); + color: #fff !important; } -/* Warning — genuinely red */ -.md-typeset .admonition.warning, -.md-typeset details.warning { - border-color: var(--nx-red); - background: var(--nx-red-subtle); +.nx-btn-secondary { + border: 1px solid var(--nx-border); + color: var(--md-default-fg-color) !important; + background: var(--md-default-bg-color); } -/* Note — brand blue */ -.md-typeset .admonition.note, -.md-typeset details.note { +.nx-btn-secondary:hover { border-color: var(--nx-brand); - background: rgba(0, 113, 247, 0.06); + color: var(--nx-brand) !important; + box-shadow: var(--nx-shadow); } -/* Tip — green */ -.md-typeset .admonition.tip, -.md-typeset details.tip { - border-color: var(--nx-green); - background: var(--nx-green-subtle); +/* GitHub CTA button */ +.nx-btn-github { + background: #0c0c0e; + color: #fff !important; + border: 1px solid #0c0c0e; +} + +.nx-btn-github:hover { + background: #1a1a1e; + color: #fff !important; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18); +} + +[data-md-color-scheme="slate"] .nx-btn-github { + background: rgba(255, 255, 255, 0.1); + border-color: rgba(255, 255, 255, 0.2); + color: #fff !important; +} + +/* Discord CTA button */ +.nx-btn-discord { + background: #5865f2; + color: #fff !important; + border: 1px solid #5865f2; +} + +.nx-btn-discord:hover { + background: #4752c4; + color: #fff !important; + box-shadow: 0 4px 16px rgba(23, 88, 245, 0.3); } /* ============================================================ - FOOTER + FEATURE CARDS GRID ============================================================ */ -.md-footer { - background: #0c0c0e; +.nx-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); + gap: 1.25rem; + margin: 2.5rem 0; } -.md-footer-meta { - background: #0c0c0e; - border-top: 1px solid rgba(255, 255, 255, 0.07); +.nx-card { + background: var(--md-default-bg-color); + border: 1px solid var(--nx-border); + border-radius: var(--nx-radius); + padding: 1.6rem 1.5rem; + transition: transform var(--nx-transition), box-shadow var(--nx-transition), border-color var(--nx-transition); + position: relative; + overflow: hidden; } -.md-footer-meta__inner { - font-family: 'Inter', sans-serif; - font-size: 0.68rem; - color: rgba(255, 255, 255, 0.35); +.nx-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 3px; + height: 100%; + background: var(--nx-gradient); + opacity: 0; + transition: opacity var(--nx-transition); +} + +.nx-card:hover { + transform: translateY(-4px); + box-shadow: var(--nx-shadow-hover); + border-color: var(--nx-brand); +} + +.nx-card:hover::before { + opacity: 1; +} + +.nx-card-label { + display: inline-block; + font-size: 0.7rem; + font-weight: 600; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--nx-brand); + margin-bottom: 0.85rem; +} + +.nx-card h3 { + font-size: 0.88rem; + font-weight: 700; + margin: 0 0 0.35rem; + letter-spacing: -0.01em; + color: var(--md-default-fg-color); +} + +.nx-card p { + font-size: 0.76rem; + color: var(--nx-text-muted); + line-height: 1.5; + margin: 0; } /* ============================================================ - CONTENT AREA + STAT ROW ============================================================ */ -.md-content__inner { - max-width: 780px; - padding-top: 1.5rem; +.nx-stats { + display: flex; + gap: 0; + border: 1px solid var(--nx-border); + border-radius: 6px; + overflow: hidden; + margin: 1rem 0; + background: var(--md-default-bg-color); } -/* Horizontal rule — light separator */ -.md-typeset hr { - border-color: var(--nx-border); - margin: 2rem 0; +.nx-stat { + flex: 1; + text-align: center; + padding: 0.6rem 0.5rem; + border-right: 1px solid var(--nx-border); } + +.nx-stat:last-child { + border-right: none; +} + +.nx-stat-value { + display: block; + font-size: 0.95rem; + font-weight: 800; + background: var(--nx-gradient); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + letter-spacing: -0.03em; + line-height: 1.2; +} + +.nx-stat-label { + font-size: 0.6rem; + color: var(--nx-text-muted); + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.06em; + margin-top: 0.1rem; +} + +/* ============================================================ + ECOSYSTEM / COMMUNITY CTA SECTION + ============================================================ */ + +.nx-ecosystem { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1.5rem; + margin: 3rem 0 1.5rem; + padding: 2.5rem; + background: var(--nx-gradient-subtle); + border: 1px solid var(--nx-border); + border-radius: var(--nx-radius); + position: relative; + overflow: hidden; +} + +.nx-ecosystem::before { + content: ''; + position: absolute; + inset: 0; + background: radial-gradient(ellipse at 30% 50%, rgba(23, 88, 245, 0.07) 0%, transparent 60%), + radial-gradient(ellipse at 70% 50%, rgba(23, 88, 245, 0.07) 0%, transparent 60%); + pointer-events: none; +} + +.nx-ecosystem-card { + text-align: center; + padding: 1.75rem 1.5rem; + background: var(--md-default-bg-color); + border: 1px solid var(--nx-border); + border-radius: calc(var(--nx-radius) - 2px); + position: relative; + z-index: 1; +} + +.nx-ecosystem-card h3 { + font-size: 0.85rem; + font-weight: 700; + margin: 0 0 0.4rem !important; + letter-spacing: -0.02em; +} + +.nx-ecosystem-card p { + font-size: 0.78rem; + color: var(--nx-text-muted); + line-height: 1.5; + margin: 0 0 1rem !important; +} + +/* ============================================================ + CODE BLOCKS + ============================================================ */ + +.md-typeset pre>code { + font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace; + font-size: 0.74rem; + line-height: 1.55; + font-feature-settings: "liga" 1, "calt" 1; +} + +.md-typeset .highlight { + border-radius: var(--nx-radius); + overflow: hidden; + border: 1px solid var(--nx-border); + box-shadow: var(--nx-shadow); +} + +[data-md-color-scheme="slate"] .md-typeset .highlight { + border-color: #2a2d3e; +} + +.md-typeset .highlight .filename { + font-family: 'Inter', sans-serif; + font-size: 0.75rem; + font-weight: 600; + letter-spacing: 0.04em; +} + +/* ============================================================ + TABLES + ============================================================ */ + +.md-typeset table:not([class]) { + border-collapse: collapse; + border-radius: var(--nx-radius); + overflow: hidden; + border: 1px solid var(--nx-border); + font-size: 0.72rem; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); + /* auto-fit: columns size to content, table expands to content not container */ + table-layout: auto; + width: auto; + max-width: 100%; + display: block; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +.md-typeset table:not([class]) th { + background: var(--nx-gradient-subtle); + font-weight: 600 !important; + font-size: 0.62rem !important; + letter-spacing: 0.06em !important; + text-transform: uppercase !important; + padding: 0.4rem 0.75rem !important; + border-bottom: 1.5px solid var(--nx-border); + white-space: nowrap; + color: var(--nx-text-muted); +} + +.md-typeset table:not([class]) td { + padding: 0.45rem 0.75rem; + border-bottom: 1px solid var(--nx-border); + vertical-align: middle; + word-break: break-word; + min-width: 80px; +} + +.md-typeset table:not([class]) td code { + font-size: 0.68rem; + white-space: nowrap; +} + +.md-typeset table:not([class]) tr:last-child td { + border-bottom: none; +} + +.md-typeset table:not([class]) tr:hover td { + background: var(--nx-gradient-subtle); + transition: background var(--nx-transition); +} + +/* ============================================================ + ADMONITIONS + ============================================================ */ + +.md-typeset .admonition, +.md-typeset details { + border-radius: var(--nx-radius); + border-left-width: 3px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); +} + +/* ============================================================ + INLINE CODE + ============================================================ */ + +.md-typeset code:not([class]) { + font-family: 'JetBrains Mono', monospace; + font-size: 0.83em; + padding: 0.15em 0.45em; + border-radius: 5px; + font-weight: 500; +} + +/* ============================================================ + CONTENT AREA — light mode subtle gradient wash + ============================================================ */ + +.md-content__inner { + padding-bottom: 3rem; +} + +/* Subtle page-level background wash in light mode */ +.md-main { + background: linear-gradient(180deg, #fafbff 0%, #ffffff 120px) !important; +} + +[data-md-color-scheme="slate"] .md-main { + background: none !important; +} + +.md-typeset h2 { + padding-top: 0.5rem; + padding-bottom: 0.3rem; + border-bottom: 1.5px solid var(--nx-border); + margin-top: 2.5rem; +} + +/* ============================================================ + FOOTER + ============================================================ */ + +.md-footer { + border-top: 1px solid var(--nx-border); +} + +/* ── Footer nav (prev/next arrows) ── */ +.md-footer__inner { + background: transparent !important; + box-shadow: none !important; +} + +.md-footer-nav, +.md-footer__link { + background: transparent !important; +} + +/* Prev/next title typography */ +.md-footer__title { + font-family: 'Inter', sans-serif; + font-size: 0.8rem; + font-weight: 500; + opacity: 0.7; +} + +.md-footer__direction { + font-size: 0.68rem; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + opacity: 0.45; +} + +/* Divider between nav and meta */ +.md-footer__inner { + border-top: 1px solid var(--nx-border); +} + +/* ── Footer meta (social icons + Made with...) ── */ +.md-footer-meta { + background: transparent !important; + border-top: 1px solid var(--nx-border); +} + +.md-footer-meta__inner { + background: transparent !important; +} + +/* Social icons */ +.md-social { + gap: 4px; + padding: 0.6rem 0; +} + +.md-social__link { + color: var(--nx-text-muted) !important; + opacity: 0.6; + transition: color 0.2s ease, opacity 0.2s ease; + width: 28px; + height: 28px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 6px; +} + +.md-social__link:hover { + color: var(--nx-brand) !important; + opacity: 1; + background: var(--nx-gradient-subtle); +} + +.md-social__link svg { + width: 15px; + height: 15px; +} + +/* ── Footer copyright — explicit per-scheme to beat Material's footer fg vars ── */ + +/* Light mode: slate grey, visible on white bg */ +[data-md-color-scheme="default"] .md-copyright, +[data-md-color-scheme="default"] .md-copyright__highlight, +[data-md-color-scheme="default"] .md-copyright a, +[data-md-color-scheme="default"] .md-copyright span { + font-family: 'Inter', sans-serif; + font-size: 0.72rem; + color: #64748b !important; + opacity: 1 !important; +} + +[data-md-color-scheme="default"] .md-copyright a:hover { + color: #0071F7 !important; +} + +/* Dark mode: lighter muted grey, visible on dark bg */ +[data-md-color-scheme="slate"] .md-copyright, +[data-md-color-scheme="slate"] .md-copyright__highlight, +[data-md-color-scheme="slate"] .md-copyright a, +[data-md-color-scheme="slate"] .md-copyright span { + font-family: 'Inter', sans-serif; + font-size: 0.72rem; + color: #94a3b8 !important; + opacity: 1 !important; +} + +[data-md-color-scheme="slate"] .md-copyright a:hover { + color: #35B0FE !important; +} + +/* ── Light mode footer backgrounds ── */ +[data-md-color-scheme="default"] .md-footer, +[data-md-color-scheme="default"] .md-footer__inner, +[data-md-color-scheme="default"] .md-footer-nav, +[data-md-color-scheme="default"] .md-footer-meta, +[data-md-color-scheme="default"] .md-footer-meta__inner { + background: var(--md-default-bg-color) !important; + color: var(--md-default-fg-color) !important; +} + +[data-md-color-scheme="default"] .md-footer__link:hover { + background: var(--nx-gradient-subtle) !important; +} + +/* ── Dark mode footer backgrounds ── */ +[data-md-color-scheme="slate"] .md-footer, +[data-md-color-scheme="slate"] .md-footer__inner, +[data-md-color-scheme="slate"] .md-footer-nav, +[data-md-color-scheme="slate"] .md-footer-meta, +[data-md-color-scheme="slate"] .md-footer-meta__inner { + background: var(--md-default-bg-color) !important; +} + + + +/* ============================================================ + INLINE BADGES / CHIPS + Use in markdown as: Primary + ============================================================ */ + +.nx-badge { + display: inline-flex; + align-items: center; + padding: 0.18em 0.6em; + border-radius: 5px; + font-family: 'Inter', sans-serif; + font-size: 0.68rem; + font-weight: 600; + letter-spacing: 0.03em; + text-transform: uppercase; + line-height: 1.4; + white-space: nowrap; + vertical-align: middle; + margin-left: 0.4rem; + position: relative; + top: -1px; +} + +/* Green — primary / recommended */ +.nx-badge-primary { + background: var(--nx-green-subtle); + color: #0a9957; + border: 1px solid rgba(12, 197, 114, 0.25); +} + +[data-md-color-scheme="slate"] .nx-badge-primary { + background: rgba(12, 197, 114, 0.15); + color: #2de68a; + border-color: rgba(12, 197, 114, 0.3); +} + +/* Blue — required / key */ +.nx-badge-required { + background: rgba(23, 88, 245, 0.08); + color: #0071F7; + border: 1px solid rgba(23, 88, 245, 0.2); +} + +[data-md-color-scheme="slate"] .nx-badge-required { + background: rgba(53, 176, 254, 0.12); + color: #35B0FE; + border-color: rgba(53, 176, 254, 0.25); +} + +/* Grey — optional / secondary */ +.nx-badge-optional { + background: rgba(100, 116, 139, 0.08); + color: #64748b; + border: 1px solid rgba(100, 116, 139, 0.2); +} + +[data-md-color-scheme="slate"] .nx-badge-optional { + background: rgba(148, 163, 184, 0.1); + color: #94a3b8; + border-color: rgba(148, 163, 184, 0.2); +} + +/* Teal/accent — free / no config */ +.nx-badge-free { + background: rgba(12, 240, 227, 0.08); + color: #0891b2; + border: 1px solid rgba(12, 240, 227, 0.2); +} + +[data-md-color-scheme="slate"] .nx-badge-free { + background: rgba(12, 240, 227, 0.1); + color: #22d3ee; + border-color: rgba(12, 240, 227, 0.2); +} + +/* Yellow — beta / experimental */ +.nx-badge-beta { + background: var(--nx-yellow-subtle); + color: #b45309; + border: 1px solid rgba(232, 163, 2, 0.25); +} + +[data-md-color-scheme="slate"] .nx-badge-beta { + background: rgba(232, 163, 2, 0.12); + color: #fbbf24; + border-color: rgba(232, 163, 2, 0.3); +} + +/* ============================================================ + RIGHT SIDEBAR — Table of Contents + ============================================================ */ + +.md-sidebar--secondary .md-sidebar__scrollwrap { + padding: 0.75rem 0 2rem; + padding-left: 1.5rem; /* gap between main content and TOC */ +} + +/* TOC header label */ +.md-nav--secondary .md-nav__title { + font-size: 0.65rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--nx-text-muted) !important; + opacity: 0.6; + padding: 0 0 0.5rem 0; + pointer-events: none; + cursor: default; +} + +/* TOC links */ +.md-nav--secondary .md-nav__link { + font-family: 'Inter', sans-serif; + font-size: 0.68rem; + font-weight: 400; + color: var(--md-default-fg-color) !important; + opacity: 0.55; + padding: 0.18rem 0; + border-left: 2px solid transparent; + padding-left: 0.75rem; + margin: 0; + border-radius: 0; + transition: opacity 0.13s ease, border-color 0.13s ease, color 0.13s ease; + background: transparent !important; +} + +.md-nav--secondary .md-nav__link::before { + display: none; +} + +.md-nav--secondary .md-nav__link:hover { + opacity: 1; + color: var(--nx-brand) !important; + border-left-color: rgba(23, 88, 245, 0.35); + background: transparent !important; +} + +.md-nav--secondary .md-nav__link--active { + color: var(--nx-brand) !important; + font-weight: 600; + opacity: 1; + border-left-color: var(--nx-brand); + background: transparent !important; +} + +[data-md-color-scheme="slate"] .md-nav--secondary .md-nav__link--active { + color: var(--nx-brand-light) !important; + border-left-color: var(--nx-brand-light); +} + +/* Nested TOC (h3 etc) */ +.md-nav--secondary .md-nav__item .md-nav .md-nav__link { + font-size: 0.645rem; + padding-left: 1.25rem; + opacity: 0.45; +} + +.md-nav--secondary .md-nav__item .md-nav .md-nav__link:hover, +.md-nav--secondary .md-nav__item .md-nav .md-nav__link.md-nav__link--active { + opacity: 1; +} + +/* ============================================================ + CHANGELOG PAGE + ============================================================ */ + +/* ── Release card ── */ +.changelog-release { + position: relative; + padding: 1.5rem 1.75rem 1.25rem; + margin: 0.5rem 0 1rem; + border-radius: var(--nx-radius); + background: var(--nx-gradient-subtle); + border: 1px solid var(--nx-border); + border-left: 3px solid var(--nx-brand); + transition: border-color var(--nx-transition), box-shadow var(--nx-transition); +} + +.changelog-release:hover { + border-left-color: var(--nx-accent); + box-shadow: var(--nx-shadow); +} + +/* Version heading inside card */ +.changelog-release h2 { + margin-top: 0 !important; + margin-bottom: 0.25rem !important; + font-size: 1.35rem !important; + display: flex; + align-items: baseline; + gap: 0.75rem; +} + +/* Date chip */ +.changelog-date { + font-size: 0.7rem; + font-weight: 500; + color: var(--nx-text-muted); + background: rgba(23, 88, 245, 0.08); + padding: 0.15rem 0.6rem; + border-radius: 99px; + letter-spacing: 0.02em; + vertical-align: middle; + white-space: nowrap; +} + +[data-md-color-scheme="slate"] .changelog-date { + background: rgba(23, 88, 245, 0.15); +} + +/* ── Meta row: contributors + release link ── */ +.changelog-meta { + display: flex; + align-items: center; + justify-content: space-between; + margin: 0.75rem 0 1rem; + padding-bottom: 0.75rem; + border-bottom: 1px solid var(--nx-border); +} + +/* Contributor avatars — overlapping stack */ +.changelog-contributors { + display: flex; + align-items: center; +} + +.changelog-contributors a { + display: inline-block; + line-height: 0; + border-radius: 50%; + margin-right: -6px; + position: relative; + transition: transform var(--nx-transition), box-shadow var(--nx-transition), z-index 0s; +} + +.changelog-contributors a:last-child { + margin-right: 0; +} + +.changelog-contributors a:hover { + transform: scale(1.15); + box-shadow: 0 0 0 2px var(--nx-brand-light); + z-index: 2; +} + +.changelog-contributors img { + width: 28px; + height: 28px; + border-radius: 50%; + border: 2px solid var(--nx-surface); + object-fit: cover; + background: var(--nx-surface); +} + +/* GitHub release CTA */ +.changelog-release-link { + font-size: 0.7rem; + font-weight: 500; + color: var(--nx-brand) !important; + border: 1px solid rgba(23, 88, 245, 0.25); + padding: 0.3rem 0.8rem; + border-radius: 99px; + text-decoration: none !important; + transition: all var(--nx-transition); + white-space: nowrap; +} + +.changelog-release-link:hover { + background: rgba(23, 88, 245, 0.08); + border-color: var(--nx-brand); + color: var(--nx-brand-dark) !important; +} + +/* Category labels (bold text in changelog) */ +.changelog-release strong { + color: var(--nx-brand); + font-size: 0.65rem; + letter-spacing: 0.03em; + text-transform: uppercase; +} + +/* Tighten paragraph spacing inside cards */ +.changelog-release p { + margin-top: 0.35em; + margin-bottom: 0.45em; +} + +/* Lists inside cards */ +.changelog-release ul { + margin-top: 0.25em; + margin-bottom: 0.5em; +} + +.changelog-release li { + margin-bottom: 0.15em; +} + +/* Code blocks inside cards — compact */ +.changelog-release .highlight { + margin-top: 0.4em; + margin-bottom: 0.6em; +} + +/* ── Hide the right-hand TOC on the changelog page ── */ +.md-content[data-md-component="content"] .md-sidebar--secondary { + /* Fallback: handled by front matter hide: toc */ +} + +/* ============================================================ + SEARCH + ============================================================ */ + +.md-search__form { + border-radius: 99px; +} + +/* ============================================================ + RESPONSIVE + ============================================================ */ + +@media (max-width: 600px) { + .nx-stats { + flex-direction: column; + } + + .nx-stat { + border-right: none; + border-bottom: 1px solid var(--nx-border); + } + + .nx-stat:last-child { + border-bottom: none; + } + + .nx-ecosystem { + grid-template-columns: 1fr; + padding: 1.5rem; + } + + .nx-gh-btn { + display: none; + } + + .nx-version-chip { + display: none; + } + + .nx-grid { + grid-template-columns: 1fr; + } + + .changelog-meta { + flex-direction: column; + gap: 0.5rem; + align-items: flex-start; + } + + .changelog-release { + padding: 1rem 1.25rem; + } +} + +@media (max-width: 960px) and (min-width: 601px) { + .nx-grid { + grid-template-columns: repeat(2, 1fr); + } +} + + +/* Suppress Material's sidebar nav tooltips — labels are now fully visible. + Target only Material's .md-tooltip component, NOT arbitrary [title] elements + (the broad [title] selector was killing pointer-events on changelog links). */ +.md-tooltip, +.md-nav__link[title]::after, +.md-nav__item .md-tooltip { + display: none !important; + visibility: hidden !important; + pointer-events: none !important; +} + +/* ============================================================ + LLM ASSIST WIDGET + ============================================================ */ +.nx-llm-widget { + position: relative; + display: inline-block; + font-family: 'Inter', sans-serif; +} + +.nx-llm-trigger { + display: flex; + align-items: stretch; + background: #ffffff; + border: 1px solid var(--nx-border); + border-radius: 8px; + font-size: 0.8rem; + font-weight: 500; + color: var(--nx-text); + cursor: pointer; + transition: all 0.2s ease; + box-shadow: 0 1px 2px rgba(0,0,0,0.03); +} + +.nx-llm-trigger:hover { + border-color: var(--nx-brand-light); + box-shadow: 0 2px 4px rgba(0,0,0,0.05); +} + +.nx-llm-btn-main { + display: flex; + align-items: center; + justify-content: center; + padding: 6px 10px; + transition: background 0.15s; + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; + color: var(--nx-text-muted); +} + +.nx-llm-btn-main:hover { + background: #f8fafc; + color: var(--nx-text); +} + +.nx-llm-btn-chev { + display: flex; + align-items: center; + justify-content: center; + padding: 6px 8px; + border-left: 1px solid var(--nx-border); + color: var(--nx-text-muted); + transition: background 0.15s; + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; +} + +.nx-llm-btn-chev:hover { + background: #f8fafc; + color: var(--nx-text); +} + +[data-md-color-scheme="slate"] .nx-llm-trigger { + background: #1e2130; + border-color: rgba(255,255,255,0.1); +} +[data-md-color-scheme="slate"] .nx-llm-btn-main:hover, +[data-md-color-scheme="slate"] .nx-llm-btn-chev:hover { + background: rgba(255,255,255,0.05); + color: #fff; +} +[data-md-color-scheme="slate"] .nx-llm-btn-chev { + border-left-color: rgba(255,255,255,0.1); +} + +.nx-llm-dropdown { + position: absolute; + top: calc(100% + 6px); + right: 0; + width: 250px; + background: #ffffff; + border: 1px solid var(--nx-border); + border-radius: 12px; + box-shadow: 0 10px 40px rgba(0,0,0,0.12); + opacity: 0; + visibility: hidden; + transform: translateY(-5px); + transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1); + z-index: 100; + display: flex; + flex-direction: column; + padding: 8px; +} + +.nx-llm-dropdown.open { + opacity: 1; + visibility: visible; + transform: translateY(0); +} + +[data-md-color-scheme="slate"] .nx-llm-dropdown { + background: #1e2130; + border-color: rgba(255,255,255,0.1); + box-shadow: 0 10px 40px rgba(0,0,0,0.5); +} + +.nx-llm-item { + display: flex; + align-items: center; + gap: 12px; + padding: 10px; + border-radius: 8px; + text-decoration: none !important; + color: var(--md-default-fg-color) !important; + transition: background 0.15s ease; + cursor: pointer; +} + +.nx-llm-item:hover { + background: #f8fafc; +} + +[data-md-color-scheme="slate"] .nx-llm-item:hover { + background: rgba(255,255,255,0.06); +} + +.nx-llm-icon-box { + display: flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + border: 1px solid var(--nx-border); + border-radius: 8px; + color: var(--nx-text-muted); + flex-shrink: 0; +} + +[data-md-color-scheme="slate"] .nx-llm-icon-box { + border-color: rgba(255,255,255,0.1); +} + +.nx-llm-item:hover .nx-llm-icon-box { + border-color: var(--nx-brand-light); + color: var(--nx-brand); +} + +.nx-llm-text { + display: flex; + flex-direction: column; + gap: 3px; +} + +.nx-llm-text strong { + font-size: 0.75rem; + font-weight: 500; + line-height: 1.1; +} + +.nx-llm-text span { + font-size: 0.65rem; + color: var(--nx-text-muted); + line-height: 1.2; +} + +/* ============================================================ + PAGE ICONS — Material `icon:` front-matter rendering + Material for MkDocs injects an before the nav link + text when a page has an icon: metadata key. + ============================================================ */ + +/* Icon SVG inline in left sidebar nav items */ +.md-nav--primary .md-nav__link .md-icon, +.md-nav--primary .md-nav__link > svg { + width: 1rem; + height: 1rem; + flex-shrink: 0; + margin-right: 0.5rem; + opacity: 0.55; + transition: opacity 0.13s ease, color 0.13s ease; + color: inherit; + vertical-align: middle; + display: inline-flex; + align-items: center; +} + +.md-nav--primary .md-nav__link:hover .md-icon, +.md-nav--primary .md-nav__link:hover > svg { + opacity: 1; + color: var(--nx-brand); +} + +[data-md-color-scheme="slate"] .md-nav--primary .md-nav__link:hover .md-icon, +[data-md-color-scheme="slate"] .md-nav--primary .md-nav__link:hover > svg { + color: var(--nx-brand-light); +} + +.md-nav--primary .md-nav__link--active .md-icon, +.md-nav--primary .md-nav__link--active > svg { + opacity: 1; + color: var(--nx-brand); +} + +[data-md-color-scheme="slate"] .md-nav--primary .md-nav__link--active .md-icon, +[data-md-color-scheme="slate"] .md-nav--primary .md-nav__link--active > svg { + color: var(--nx-brand-light); +} + +/* ============================================================ + LEFT vs RIGHT SIDEBAR — structural differentiation + Left (primary) = nav tree with a subtle background tint and + right-border. Right (secondary / TOC) = pure left-border + inline style with no background. + ============================================================ */ + +/* Primary sidebar — subtle background tint to distinguish from content */ +.md-sidebar--primary { + border-right: 1px solid rgba(0, 0, 0, 0.06); +} + +[data-md-color-scheme="slate"] .md-sidebar--primary { + border-right-color: rgba(255, 255, 255, 0.06); +} + +/* Ensure TOC sidebar has NO background tint — it should float */ +.md-sidebar--secondary { + border-left: none; + background: transparent; +} + +/* Section group header in left nav — add a top hairline separator + between major nav groups for scannability */ +.md-nav--primary > .md-nav__list > .md-nav__item + .md-nav__item { + padding-top: 0.5rem; +} + +/* Nav section label treatment — pill-style group label */ +.md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link { + font-size: 0.625rem; + letter-spacing: 0.12em; + padding-top: 0.85rem; + border-top: 1px solid rgba(0, 0, 0, 0.055); + margin-top: 0.4rem; +} + +[data-md-color-scheme="slate"] .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link { + border-top-color: rgba(255, 255, 255, 0.07); +} + +/* ============================================================ + SIDEBAR WIDTH ENFORCEMENT + Override Material's default ~12rem with 15rem so all nav + labels have room to display without truncation or ellipsis. + ============================================================ */ +.md-sidebar--primary { + min-width: var(--md-sidebar-width, 15rem); + width: var(--md-sidebar-width, 15rem); +} + +.md-sidebar--primary .md-nav { + width: 100%; +} + +/* Belt-and-braces tooltip suppression for Material's ellipsis tooltip */ +.md-nav__link .md-ellipsis ~ .md-tooltip, +.md-tooltip--active { + display: none !important; + opacity: 0 !important; + visibility: hidden !important; + pointer-events: none !important; +} + +/* ============================================================ + HTTP METHOD BADGES — Chat API & any endpoint reference page + Use in markdown as: POST + or wrap the heading: ## GET /chat/stream/{workflow_id} + ============================================================ */ + +.nx-http-get, +.nx-http-post, +.nx-http-put, +.nx-http-patch, +.nx-http-delete { + display: inline-block; + font-family: 'JetBrains Mono', 'Fira Code', monospace; + font-size: 0.65rem; + font-weight: 700; + letter-spacing: 0.04em; + padding: 0.15rem 0.45rem; + border-radius: 4px; + vertical-align: middle; + line-height: 1.5; + position: relative; + top: -1px; +} + +.nx-http-get { background: rgba(12, 197, 114, 0.12); color: #0a9e5c; border: 1px solid rgba(12, 197, 114, 0.30); } +.nx-http-post { background: rgba(23, 88, 245, 0.10); color: var(--nx-brand); border: 1px solid rgba(23, 88, 245, 0.25); } +.nx-http-put { background: rgba(232, 163, 2, 0.12); color: #b07d00; border: 1px solid rgba(232, 163, 2, 0.30); } +.nx-http-patch { background: rgba(73, 81, 243, 0.10); color: var(--nx-purple); border: 1px solid rgba(73, 81, 243, 0.25); } +.nx-http-delete { background: rgba(220, 38, 38, 0.10); color: #b91c1c; border: 1px solid rgba(220, 38, 38, 0.25); } + +[data-md-color-scheme="slate"] .nx-http-get { background: rgba(12, 197, 114, 0.15); color: #34d27a; border-color: rgba(12, 197, 114, 0.25); } +[data-md-color-scheme="slate"] .nx-http-post { background: rgba(23, 88, 245, 0.15); color: var(--nx-brand-light); border-color: rgba(53, 176, 254, 0.25); } +[data-md-color-scheme="slate"] .nx-http-put { background: rgba(232, 163, 2, 0.15); color: #f0b429; border-color: rgba(232, 163, 2, 0.25); } +[data-md-color-scheme="slate"] .nx-http-patch { background: rgba(73, 81, 243, 0.15); color: #818cf8; border-color: rgba(73, 81, 243, 0.25); } +[data-md-color-scheme="slate"] .nx-http-delete { background: rgba(220, 38, 38, 0.15); color: #f87171; border-color: rgba(220, 38, 38, 0.25); } + +/* ============================================================ + SIDEBAR SCROLL FIX + + Root cause: Material's sticky sidebar labels use + var(--md-default-bg-color) for background + box-shadow halo. + Our custom palette never defines that variable, so it resolves + transparent and items bleed through the sticky labels. + + Left sidebar (GUIDES): + Selector: .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link + This is a
+ +--- + +
+ +## 0.2.0 2026-05-05 + + + +**Added** + +- **Security-as-Code CLI** (`nexus-cli`): Terraform-style `plan → confirm → apply` workflow for declarative provider management via YAML manifest. PATCH-based reconciliation (no accidental overwrites), concurrent profile fetching with bounded worker pool, field-level diff output with secret masking, fail-fast on unresolved env vars, non-zero exit on partial apply failure. +- **Audit subsystem** (`audit.Service`): structured event logging to `audit_events` table with IP validation, User-Agent capture, and `audit.Logger` interface for test mocking. Events: `provider.created`, `provider.updated`, `provider.deleted`, `connection.created`, `token.retrieved`, `token.refresh_fatal`. +- **`GET /audit` endpoint**: queryable audit log with `event_type`, `resource_id`, `since`, `until`, `limit`, and `offset` filters. +- **Credential redaction**: `PATCH` audit payloads redact `client_secret` and `client_id` before writing to the audit log. +- **Provider `category` field**: `category` added to provider profiles with migration. Gateway `MetadataResponse` patched to include `category` in the OpenAPI-generated response. +- **`capture-schema` and `capture-credential` endpoints**: Gateway proxies for static credential capture flow, enabling API key and basic auth connections without OAuth redirects. + +**Fixed** + +- Gateway: manually patched `MetadataResponse` to include `category` field, avoiding `oapi-codegen` version mismatch. +- Documentation: all examples standardized to `localhost:8090` — internal Azure URLs removed. +- OpenAPI: `description` and `category` added to `MetadataResponse` and `ProviderProfile` schemas; gateway broker client regenerated. + +
+ +--- + +
+ +## 0.1.5 2026-04-13 + + + +**Changed** + +- Bridge: replaced `goto Retry` with `for`-loop in `MaintainGRPCConnection` — cleaner control flow, no goto jumps. ([@ashioyajotham](https://github.com/ashioyajotham)) +- Broker: replaced streaming `json.Encoder` with marshal-then-write pattern — eliminates partial-write race on slow connections. ([@ashioyajotham](https://github.com/ashioyajotham)) +- Security documentation hardened: shared secrets, key rotation, and deployment guidance expanded. + +**Fixed** + +- Broker: handle SQL `NULL` values for non-OAuth2 provider profiles — `api_key` and `basic_auth` providers no longer cause null pointer panics in the profile store. + +
+ +--- + +
+ +## 0.1.4 2026-04-01 + + + +**Added** + +- Broker: `skip_scope_on_auth` provider parameter — bypasses strict scope validation on the authorization URL for providers that reject scope in the initial redirect (Salesforce). + +
+ +--- + +
+ +## 0.1.3 2026-04-01 + + + +**Added** + +- Broker: validate `api_key` and `basic_auth` credentials before storing — rejects malformed or empty credentials at capture time rather than at retrieval. + +**Fixed** + +- Broker: enforce one token row per connection via upsert — eliminates duplicate token rows on reconnect. ([@ashioyajotham](https://github.com/ashioyajotham)) +- Security: `ENCRYPTION_KEY` and `STATE_KEY` are now required at startup — Broker and Gateway fatal-exit with a clear message if either is absent. ([@ashioyajotham](https://github.com/ashioyajotham)) +- Tests: `TestMain` used for binary lifecycle management; assertions refined. +- Gateway: `gofmt` formatting applied to main files. + +
+ +--- + +
+ +## 0.1.2 2026-04-01 + + + +**Fixed** + +- Docker: corrected image names to `nexus-broker` and `nexus-gateway` — was using incorrect names that broke `docker pull` and Compose service references. + +
+ +--- + +
+ +## 0.1.1 2026-04-01 + + + +**Added** + +- Docker Hub publishing GitHub Actions workflow. +- Gateway: `capture-schema` and `capture-credential` proxy endpoints for static credential flows. ([@Abdullahi254](https://github.com/Abdullahi254)) +- Open-core refactor: internal packages made public to support the OSS consumption model. + +**Fixed** + +- Go module paths updated to `github.com/Prescott-Data/nexus-framework` throughout. +- Broken database migration corrected. + +
+ +--- + +
+ +## 0.1.0 2026-02-19 + + + +Initial public release. + +**Added** + +- **Nexus Broker**: OAuth 2.0 and OIDC connection management — token storage (AES-GCM 256-bit at rest), background refresh loop, OIDC discovery with JWKS caching, nonce/id_token verification, Prometheus metrics. +- **Nexus Gateway**: public-facing API for agents and backends. Versioned at `/v1`. gRPC-first communication to Broker with REST fallback. +- **Nexus Bridge**: Go library for embedding in agent processes — `MaintainWebSocket` and `MaintainGRPCConnection` with automatic credential injection, token refresh, exponential backoff reconnection, and Prometheus metrics. +- **Go SDK** (`nexus-sdk`): zero-dependency HTTP client for the Gateway API. +- **Provider support**: Google (OIDC discovery), Azure AD (common tenant), GitHub, Salesforce, and arbitrary OAuth2 providers with manual endpoint configuration. +- **Security guardrails**: IP allowlisting (`ALLOWED_CIDRS`), allowed return domain validation, API key enforcement. +- **Docker Compose**: single `make up` command runs Broker, Gateway, PostgreSQL, and Redis. +- **Bitbucket Pipelines**: initial CI/CD configuration. + +
diff --git a/docs/concepts/agent-identity.md b/docs/concepts/agent-identity.md index 52de358..80df694 100644 --- a/docs/concepts/agent-identity.md +++ b/docs/concepts/agent-identity.md @@ -1,3 +1,7 @@ +--- +icon: material/badge-account-outline +--- + # Agent Identity The base Nexus connection model is anonymous: any process that holds a `connection_id` can retrieve tokens from it. There is no record of which agent is which, what it is allowed to do, or how long its authorization should last. diff --git a/docs/concepts/architecture.md b/docs/concepts/architecture.md index 1c53aee..a9ebde5 100644 --- a/docs/concepts/architecture.md +++ b/docs/concepts/architecture.md @@ -1,3 +1,7 @@ +--- +icon: material/layers-triple +--- + # Architecture Nexus is split into a control plane and a data plane. The control plane manages the lifecycle of credentials: registering providers, completing OAuth handshakes, storing tokens, and refreshing them before they expire. The data plane serves credentials to agents when they need them and injects those credentials into outgoing requests. diff --git a/docs/concepts/auth-strategies.md b/docs/concepts/auth-strategies.md index 5fd2ba8..323982e 100644 --- a/docs/concepts/auth-strategies.md +++ b/docs/concepts/auth-strategies.md @@ -1,3 +1,7 @@ +--- +icon: material/shield-key-outline +--- + # Authentication Strategies An authentication strategy defines how the Bridge applies a connection's credentials to an outgoing request. The strategy is stored on the provider profile and returned as part of every token response. Your agent code does not select or configure strategies at runtime — the Bridge reads and applies them automatically. diff --git a/docs/concepts/bridge.md b/docs/concepts/bridge.md index 3814342..1eeac2c 100644 --- a/docs/concepts/bridge.md +++ b/docs/concepts/bridge.md @@ -1,3 +1,7 @@ +--- +icon: material/transit-connection-variant +--- + # The Bridge The Bridge is a Go library you embed in your agent process. It maintains an authenticated connection, fetching tokens, injecting credentials into requests, and refreshing tokens before expiry, so your agent code handles only application logic. diff --git a/docs/concepts/broker.md b/docs/concepts/broker.md index 840cf17..43677d2 100644 --- a/docs/concepts/broker.md +++ b/docs/concepts/broker.md @@ -1,3 +1,7 @@ +--- +icon: material/database-lock-outline +--- + # The Broker The Broker is the only service in a Nexus deployment that holds durable credential material. No other service receives a refresh token, client secret, or plaintext key. diff --git a/docs/concepts/client-libraries.md b/docs/concepts/client-libraries.md new file mode 100644 index 0000000..e4fc73b --- /dev/null +++ b/docs/concepts/client-libraries.md @@ -0,0 +1,48 @@ +--- +icon: material/code-braces +--- + +# Client Libraries + +Nexus ships three client libraries for agents: the Bridge (Go), and SDKs for Go, TypeScript, and Python. They all talk to the same Gateway API. The difference is what they manage for you. + +## The Bridge + +The Bridge is a Go library that runs inside your agent process and manages the full lifecycle of a persistent connection. You call `MaintainWebSocket` or `MaintainGRPCConnection`, hand it a handler, and the Bridge handles everything: token fetch, credential injection, in-place token refresh before expiry, reconnection with exponential backoff, and Prometheus metrics. + +Use the Bridge when your agent holds a long-lived WebSocket or gRPC connection to a provider service and you want the connection to stay authenticated automatically across token rotations. + +See [The Bridge](bridge.md) for the full API and configuration options. + +## The SDKs + +The SDKs are thin HTTP clients for the Gateway API. They expose `GetToken`, `ResolveToken`, `RequestConnection`, and related methods. You call them explicitly when you need a credential and apply it yourself. There is no automatic injection or connection management. + +Three SDKs ship with Nexus, all with the same method surface: + +| Language | Package | Install | +|---|---|---| +| Go | `nexus-sdk` | `go get github.com/Prescott-Data/nexus-framework/nexus-sdk` | +| TypeScript | `nexus-sdk` | `npm install nexus-sdk` | +| Python | `nexus-sdk` | `pip install nexus-sdk` | + +Use an SDK when your agent makes discrete HTTP calls rather than holding a persistent connection, when you are building an MCP server, or when your agent is written in TypeScript or Python. + +## MCP servers + +Both the Go and TypeScript SDKs include a `ResolveToken` method designed for MCP server integration. An MCP server receives a workspace ID and provider name, calls `ResolveToken` to get the current credential, and injects it into the outgoing request to the provider. The SDK handles token caching and expiry internally. + +See [MCP Server Integration](../guides/mcp-integration.md) for complete examples in all three languages. + +## Choosing between Bridge and SDK + +| | Bridge | SDK | +|---|---|---| +| Connection type | Persistent WebSocket or gRPC | Discrete HTTP calls | +| Credential injection | Automatic | Manual | +| Token refresh | In-place, transparent | Caller responsibility | +| Reconnection | Built-in with backoff | Not applicable | +| Languages | Go only | Go, TypeScript, Python | +| MCP servers | Not the right tool | Designed for this | + +If your agent is Go and holds a persistent connection, use the Bridge. In all other cases, use an SDK. diff --git a/docs/concepts/connections.md b/docs/concepts/connections.md index 32b9ce5..8c56f7e 100644 --- a/docs/concepts/connections.md +++ b/docs/concepts/connections.md @@ -1,3 +1,7 @@ +--- +icon: material/link-variant +--- + # Connections A connection represents a user's authorization grant to a specific provider. Every token fetch and audit event is tied to a connection ID. diff --git a/docs/concepts/gateway.md b/docs/concepts/gateway.md index d49d664..2e6c5b6 100644 --- a/docs/concepts/gateway.md +++ b/docs/concepts/gateway.md @@ -1,3 +1,7 @@ +--- +icon: material/api +--- + # The Gateway The Gateway is the public API for Nexus. Your application backend and agents communicate exclusively with the Gateway. The Broker is unreachable from outside. diff --git a/docs/concepts/provider-types.md b/docs/concepts/provider-types.md index 6727281..334c866 100644 --- a/docs/concepts/provider-types.md +++ b/docs/concepts/provider-types.md @@ -1,3 +1,7 @@ +--- +icon: material/puzzle-outline +--- + # Provider Types A provider profile tells Nexus how to authenticate users against a third-party service. The provider type determines the authorization flow and the shape of stored credentials. diff --git a/docs/concepts/security-model.md b/docs/concepts/security-model.md index 106d3e4..df48d8f 100644 --- a/docs/concepts/security-model.md +++ b/docs/concepts/security-model.md @@ -1,3 +1,7 @@ +--- +icon: material/shield-lock-outline +--- + # Security Model Nexus is built on one rule: agents never hold durable secrets. An access token expires within hours. A refresh token, API key, or client secret does not. Nexus ensures agents receive only the former. diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md index af1fdcb..05a39ff 100644 --- a/docs/getting-started/configuration.md +++ b/docs/getting-started/configuration.md @@ -1,3 +1,7 @@ +--- +icon: material/cog-outline +--- + # Environment Variables This page documents every environment variable accepted by the Broker and Gateway. Variables marked **Required** will cause the service to refuse to start if absent. diff --git a/docs/getting-started/first-connection.md b/docs/getting-started/first-connection.md index 3e57a29..fffb029 100644 --- a/docs/getting-started/first-connection.md +++ b/docs/getting-started/first-connection.md @@ -1,50 +1,59 @@ +--- +icon: material/lan-connect +--- + # Your First Connection -This walkthrough takes you from a running Nexus stack and a registered provider to a working credential retrieval. It uses the Google provider registered in the [quickstart](quickstart.md) and walks through each step of the OAuth handshake and the subsequent credential fetch. +This walkthrough takes you from a running Nexus stack with a registered provider to a working credential retrieval. It uses the Google provider registered in the [quickstart](quickstart.md) and covers each step of the OAuth handshake through to the first token fetch. -By the end you will have a `connection_id` and know how to use it to retrieve credentials from your application or agent. +By the end you will have a `connection_id` and know exactly how to use it to retrieve credentials from your application or agent. --- -## What your application stores +## What your application is responsible for -Before walking through the flow, clarify what your application's responsibility is. Nexus stores OAuth tokens. Your application stores a `connection_id`, an opaque string that references a user's authorized connection with a specific provider. You persist the `connection_id` in your own database, associated with your user. When your agent needs credentials, it presents the `connection_id` to the Gateway. +Before walking through the flow, establish the division of responsibility. Nexus stores OAuth tokens, manages refresh, and handles the provider handshake. Your application stores exactly one thing: a `connection_id`. -Your application never sees a refresh token. It never handles token expiry. Those are Nexus's responsibilities. +The `connection_id` is an opaque string that references a user's authorized connection with a specific provider. You persist it in your own database, associated with your user record. When your agent needs credentials, it presents the `connection_id` to the Gateway and receives a short-lived access token. That is the full integration surface. + +Your application never sees a refresh token. It never handles token expiry. It never implements provider-specific auth logic. --- ## Step 1: Initiate the connection -Your backend calls the Gateway to create a pending connection. Pass the user's identifier, the provider name, the scopes needed, and a `return_url` on your frontend where Nexus will redirect the user after consent. +Your backend calls the Gateway to create a pending connection. Pass the workspace identifier for the user, the provider name, the scopes needed, and a `return_url` on your frontend where Nexus will redirect the user after consent. ```bash curl -s -X POST http://localhost:8090/v1/request-connection \ -H "Content-Type: application/json" \ + -H "X-API-Key: " \ -d '{ - "user_id": "user_abc123", + "workspace_id": "user_abc123", "provider_name": "google", "scopes": ["openid", "email", "profile"], "return_url": "https://app.example.com/oauth/return" - }' + }' | jq . ``` -The response includes two fields: +The response: ```json { - "authUrl": "https://accounts.google.com/o/oauth2/auth?client_id=...&state=...", + "auth_url": "https://accounts.google.com/o/oauth2/auth?client_id=...&state=...", "connection_id": "conn_01HXYZ..." } ``` -Store the `connection_id` immediately, associated with `user_abc123`. Then redirect the user's browser to `authUrl`. +Store the `connection_id` immediately, associated with `user_abc123`. Then redirect the user's browser to `auth_url`. --- ## Step 2: The user completes consent -The user lands on Google's consent screen, selects the account they want to connect, and grants the requested permissions. Google redirects to the Broker's callback URL. The Broker validates the `state` parameter, exchanges the authorization code for tokens, encrypts the tokens, and stores them. +The user lands on Google's consent screen, selects the account they want to connect, and grants the requested permissions. Google redirects the browser to the Broker's callback endpoint (`BASE_URL/auth/callback`). + +The Broker validates the `state` parameter against the signed value it issued in step 1, exchanges the authorization code for access and refresh tokens, encrypts the tokens with `ENCRYPTION_KEY`, and stores them in PostgreSQL. The Broker then redirects the user's browser to your `return_url` with query parameters: @@ -52,19 +61,19 @@ The Broker then redirects the user's browser to your `return_url` with query par https://app.example.com/oauth/return?status=success&connection_id=conn_01HXYZ... ``` -Your frontend extracts the `connection_id` from the query string and sends it to your backend for persistence if you have not already stored it from step 1. +Your frontend extracts `connection_id` from the query string and confirms it against what your backend stored in step 1. --- ## Step 3: Verify the connection is active -You can poll the connection status before using it, particularly if your backend needs to confirm the handshake completed successfully: +Check the connection status to confirm the handshake completed successfully before presenting the connection to the user as ready: ```bash -curl -s http://localhost:8090/v1/check-connection/conn_01HXYZ... +curl -s http://localhost:8090/v1/check-connection/conn_01HXYZ... | jq . ``` -A successful connection returns: +Response when active: ```json { @@ -72,19 +81,25 @@ A successful connection returns: } ``` -If the status is `pending`, the user has not yet completed consent. If it is `failed`, the token exchange did not succeed and the user will need to reconnect. +| Status | Meaning | +|---|---| +| `pending` | User has not yet completed consent | +| `active` | Tokens stored, connection is usable | +| `attention_required` | Refresh failed — user must reconnect | +| `failed` | Initial token exchange failed | --- ## Step 4: Retrieve credentials -Once the connection is active, your agent retrieves credentials by calling the Gateway with the `connection_id`: +Once the connection is active, retrieve credentials by calling the Gateway: ```bash -curl -s http://localhost:8090/v1/token/conn_01HXYZ... +curl -s http://localhost:8090/v1/token/conn_01HXYZ... \ + -H "X-API-Key: " | jq . ``` -The response: +Response: ```json { @@ -97,12 +112,21 @@ The response: } ``` -Inspect `strategy.type` to know how to use the credentials. For `oauth2`, inject the `access_token` as a `Bearer` token in the `Authorization` header of your API calls to the provider. For `api_key` or `basic_auth`, the `credentials` object will contain the fields appropriate for that scheme. +Inspect `strategy.type` to know how to apply the credentials: -The Bridge handles this step and the header injection automatically. See the [Integrating Agents](../guides/integrating-agents.md) guide if your agent is written in Go. +| Strategy type | How to use | +|---|---| +| `oauth2` | `Authorization: Bearer ` header | +| `api_key` | Header or query param as defined in the provider's `credential_schema` | +| `basic_auth` | `Authorization: Basic ` | +| `aws_sigv4` | AWS Signature Version 4 — the Bridge handles this automatically | + +The Bridge and all three SDKs handle strategy interpretation and credential injection automatically. See [Integrating Agents](../guides/integrating-agents.md) for implementation examples in Go, TypeScript, and Python. --- -## Checking connection status in production +## Handling attention_required in production + +If `/v1/token/{connection_id}` returns a non-200 response with `"status": "attention_required"`, the provider rejected the last refresh attempt — typically because the user revoked the application's access. Your application should surface this to the user and prompt them to go through the consent flow again. The new flow creates a fresh connection with a new `connection_id`. -In production, surface connection status to your users. If a call to `/v1/token/{connection_id}` returns a non-200 response, it typically means the connection has moved to `attention_required` because the user revoked access or the provider expired the refresh token. Your application should handle this by asking the user to go through the consent flow again, which will create a new connection and update the `connection_id` you store for that user. +Do not retry automatically. A provider rejection is not a transient error. diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md index a4a85b3..38960cf 100644 --- a/docs/getting-started/quickstart.md +++ b/docs/getting-started/quickstart.md @@ -1,49 +1,55 @@ +--- +icon: material/rocket-launch-outline +--- + # Deploy in Five Minutes -This guide gets a Nexus stack running locally. By the end you will have a Broker, a Gateway, and a PostgreSQL database running in Docker, with the admin API accessible and ready to accept provider registrations. +This guide gets a Nexus stack running locally. By the end you will have a Broker, a Gateway, PostgreSQL, and Redis running in Docker, with the admin API accessible and ready to accept provider registrations. --- ## Prerequisites -You need Docker and Docker Compose installed. You also need `openssl` available on your PATH to generate the required keys. +- Docker and Docker Compose installed +- `openssl` on your PATH --- -## Generate the required secrets +## Step 1: Generate secrets -Nexus requires two symmetric keys before it will start. Generate them now and keep them safe. +Nexus requires two symmetric keys before it will start. Generate them now. ```bash openssl rand -base64 32 # ENCRYPTION_KEY -openssl rand -base64 32 # STATE_KEY +openssl rand -base64 32 # STATE_KEY — run separately, do not reuse the same value ``` -The `ENCRYPTION_KEY` encrypts all stored tokens. If you lose it, all existing connections become permanently unreadable. The `STATE_KEY` signs OAuth state parameters. Both the Broker and the Gateway must receive the same `STATE_KEY` value or every OAuth callback will fail. +**ENCRYPTION_KEY** encrypts all stored tokens using AES-GCM 256-bit. If this key is lost or rotated while connections exist, every stored token becomes permanently unreadable. Treat it like a master key and back it up accordingly. ---- +**STATE_KEY** signs OAuth state parameters to prevent CSRF attacks. Both the Broker and the Gateway must receive the same value, or every OAuth callback will fail with a state mismatch. -## Configure the environment +--- -Copy the example environment file and fill in the values you just generated. +## Step 2: Configure the environment ```bash cp .env.example .env ``` -Open `.env` and set: +Open `.env` and set the following fields: ```bash ENCRYPTION_KEY= STATE_KEY= -API_KEY= +API_KEY= +BROKER_API_KEY= ``` -The other variables in `.env.example` have sensible defaults for local development. +The remaining variables in `.env.example` have sensible defaults for local development. `BASE_URL` defaults to `http://localhost:8080`, which means the OAuth callback URL is `http://localhost:8080/auth/callback`. Register that URI in your provider's developer console. --- -## Start the stack +## Step 3: Start the stack ```bash make up @@ -55,25 +61,30 @@ If you do not have `make` installed: docker-compose up -d --build ``` -This starts the Broker on port 8080 and the Gateway on port 8090. PostgreSQL and Redis start as dependencies of the Broker. The Gateway connects to the Broker automatically using the `BROKER_API_KEY` you set. +This builds and starts four containers: + +| Container | Port | Purpose | +|---|---|---| +| `nexus-broker` | 8080 | Stores tokens, runs OAuth flows, background refresh | +| `nexus-gateway` | 8090 | Public API — your agents and backend call this | +| `nexus-postgres` | 5432 | Encrypted token storage | +| `nexus-redis` | 6379 | Caching and state | -Wait a few seconds for the database migrations to complete, then verify both services are healthy: +Wait for migrations to complete (a few seconds), then verify both services are healthy: ```bash -curl http://localhost:8080/health -curl http://localhost:8090/health +curl http://localhost:8080/health # {"status": "ok"} +curl http://localhost:8090/health # {"status": "ok"} ``` -Both should return `{"status": "ok"}`. - --- -## Register your first provider +## Step 4: Register your first provider -With the stack running, register a provider. This example uses Google with OIDC discovery: +Provider registration goes through the **Gateway** at port 8090. This example registers Google with OIDC discovery: ```bash -curl -s -X POST http://localhost:8080/providers \ +curl -s -X POST http://localhost:8090/v1/providers \ -H "Content-Type: application/json" \ -H "X-API-Key: " \ -d '{ @@ -84,15 +95,15 @@ curl -s -X POST http://localhost:8080/providers \ "issuer": "https://accounts.google.com", "enable_discovery": true, "scopes": ["openid", "email", "profile", "offline_access"] - }' + }' | jq . ``` -A successful registration returns the provider object with a UUID. Save the `name` field. That is the alias you use in all subsequent operations. +A successful registration returns the provider object with a UUID. The `name` field (`google`) is the alias you use in all subsequent operations. --- ## What is next -Your stack is running and you have a provider registered. The [Environment Variables](configuration.md) page documents every configuration option the Broker and Gateway accept. The [Your First Connection](first-connection.md) page walks through completing an OAuth handshake and retrieving a credential from an agent. +Your stack is running and you have a provider registered. Continue to [Your First Connection](first-connection.md) to walk through the full OAuth handshake and retrieve your first credential. -For production deployment on Azure Container Apps, see the Production Deployment section of the [Environment Variables](configuration.md) page. +For all configuration options, see [Configuration](configuration.md). For production deployment on Docker, Kubernetes, or Azure Container Apps, see [Deploying Nexus](../infrastructure/deploying-nexus.md). diff --git a/docs/guides/agent-sessions.md b/docs/guides/agent-sessions.md index 8e31e87..8ec3908 100644 --- a/docs/guides/agent-sessions.md +++ b/docs/guides/agent-sessions.md @@ -1,15 +1,14 @@ +--- +icon: material/account-key-outline +--- + # Agent Sessions This guide covers the complete developer journey for building an agent that uses Nexus for authentication — from registering providers and agents to making scoped requests and handling the full OBO flow. ## What you are building -An agent that: -- Calls Salesforce with read-only access -- Calls Google Calendar with read-only access -- Executes internal business operations only when a human user with the right permission triggers them - -No OAuth code in the agent. No credentials in environment variables. No refresh token logic. Nexus handles all of it. +An agent that calls Salesforce with read-only access, calls Google Calendar with read-only access, and executes internal business operations only when a human user with the right permission triggers them. No OAuth code in the agent. No credentials in environment variables. No refresh token logic. Nexus handles all of it. ## Step 1 — Register your providers (one-time admin) @@ -186,16 +185,16 @@ If either check fails, the request returns `403`. ## What the agent never wrote -``` -OAuth implementation broker handles it -Refresh token logic broker handles it -Token storage broker handles it -Scope enforcement broker enforces at session request time -JWT validation for OBO broker calls your backend, extracts claims -User context stamping broker stamps acting_for, tenant_id, clearance_level -Credential rotation broker handles it -Token expiry session has explicit expires_at, broker enforces -``` +| Responsibility | Who handles it | +|---|---| +| OAuth implementation | Broker | +| Refresh token logic | Broker | +| Token storage | Broker | +| Scope enforcement | Broker — at session request time | +| JWT validation for OBO | Broker — calls your backend, extracts claims | +| User context stamping | Broker — stamps `acting_for`, `tenant_id`, `clearance_level` | +| Credential rotation | Broker | +| Token expiry | Broker — session has explicit `expires_at` | ## Session vs connection — when to use which diff --git a/docs/guides/attention-state.md b/docs/guides/attention-state.md index ebd328f..4cb6eef 100644 --- a/docs/guides/attention-state.md +++ b/docs/guides/attention-state.md @@ -1,3 +1,7 @@ +--- +icon: material/alert-circle-outline +--- + # Handling Attention State A connection enters `attention` state when the Broker attempts to refresh the access token and the provider responds with a `4xx` error. This indicates the user's authorization grant has been revoked, the refresh token has expired, or the provider requires the user to re-authorize. diff --git a/docs/guides/integrating-agents.md b/docs/guides/integrating-agents.md index 04dec10..f997bf6 100644 --- a/docs/guides/integrating-agents.md +++ b/docs/guides/integrating-agents.md @@ -1,3 +1,7 @@ +--- +icon: material/robot-love-outline +--- + # Integrating Agents This guide covers the two ways an agent retrieves credentials from Nexus at runtime: the Bridge library for Go agents, and the manual HTTP flow for agents written in other languages or for cases where you want direct control over credential retrieval. @@ -101,7 +105,7 @@ if err != nil { strategyType := payload.Strategy["type"] ``` -Inspect `strategyType` and use the `payload.Credentials` map to extract the values you need. See [The SDK](../concepts/sdk.md) for the full method reference. +Inspect `strategyType` and use the `payload.Credentials` map to extract the values you need. See [Client Libraries](../concepts/client-libraries.md) for the full SDK method reference. ### Using the TypeScript SDK diff --git a/docs/guides/managing-providers.md b/docs/guides/managing-providers.md index 712a851..610f6eb 100644 --- a/docs/guides/managing-providers.md +++ b/docs/guides/managing-providers.md @@ -1,6 +1,10 @@ +--- +icon: material/puzzle-edit-outline +--- + # Managing Providers -A provider in Nexus represents the configuration for a third-party service your agents connect to. This guide covers how to register, update, and delete providers through the Broker's REST API, and how to list the providers available in your workspace. +A provider in Nexus represents the configuration for a third-party service your agents connect to. This guide covers how to register, update, and delete providers through the Gateway's REST API, and how to list the providers available in your workspace. For declarative provider management using `nexus-cli`, see the [Security-as-Code](security-as-code.md) guide. For production environments where provider configuration is sensitive infrastructure, the declarative approach is preferred. @@ -8,14 +12,14 @@ For declarative provider management using `nexus-cli`, see the [Security-as-Code ## Registering an OAuth 2.0 provider -POST to `/providers` on the Broker with the provider configuration. The `X-API-Key` header must carry the Broker's `API_KEY`. +POST to `/v1/providers` on the Gateway with the provider configuration. The `X-API-Key` header must carry your `API_KEY`. ### Discovery-based provider For providers that support OIDC discovery, set `enable_discovery: true` and supply the `issuer` URL. Nexus fetches the authorization endpoint, token endpoint, and JWKS URI from the discovery document automatically. ```bash -curl -s -X POST http://localhost:8080/providers \ +curl -s -X POST http://localhost:8090/v1/providers \ -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{ @@ -34,7 +38,7 @@ curl -s -X POST http://localhost:8080/providers \ For providers without OIDC discovery, supply the `auth_url` and `token_url` explicitly: ```bash -curl -s -X POST http://localhost:8080/providers \ +curl -s -X POST http://localhost:8090/v1/providers \ -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{ @@ -57,7 +61,7 @@ curl -s -X POST http://localhost:8080/providers \ For providers that use API keys rather than OAuth, set `auth_type` to `api_key` and define a `credential_schema` that describes the shape of the credential: ```bash -curl -s -X POST http://localhost:8080/providers \ +curl -s -X POST http://localhost:8090/v1/providers \ -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{ @@ -100,14 +104,14 @@ When a connection is established for this provider, the user supplies values for To see all registered providers in a workspace: ```bash -curl -s http://localhost:8080/providers \ +curl -s http://localhost:8090/v1/providers \ -H "X-API-Key: your-api-key" | jq . ``` -To retrieve grouped metadata (a condensed view suitable for frontend integration logic): +To retrieve grouped metadata: ```bash -curl -s http://localhost:8080/providers/metadata \ +curl -s http://localhost:8090/v1/providers/metadata \ -H "X-API-Key: your-api-key" | jq . ``` @@ -120,7 +124,7 @@ The metadata endpoint returns providers grouped by `auth_type`, with only the fi Updating a provider's `client_secret` or `scopes` is a PATCH operation. Only the fields you include in the request body are changed. ```bash -curl -s -X PATCH http://localhost:8080/providers/google-workspace \ +curl -s -X PATCH http://localhost:8090/v1/providers/google-workspace \ -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{"client_secret": "NEW_SECRET"}' @@ -135,7 +139,7 @@ Every update is recorded in the [audit log](../reference/audit-log.md). Deleting a provider removes its configuration from the Broker. Existing connections that reference the provider will fail credential retrieval after deletion because the client credentials are gone. ```bash -curl -s -X DELETE http://localhost:8080/providers/google-workspace \ +curl -s -X DELETE http://localhost:8090/v1/providers/google-workspace \ -H "X-API-Key: your-api-key" ``` diff --git a/docs/guides/mcp-integration.md b/docs/guides/mcp-integration.md index db08625..1636126 100644 --- a/docs/guides/mcp-integration.md +++ b/docs/guides/mcp-integration.md @@ -1,3 +1,7 @@ +--- +icon: material/server-network-outline +--- + # MCP Server Integration This guide shows how to build a **Model Context Protocol (MCP) server** that uses the Nexus SDK to make authorized API calls on behalf of a workspace/tenant — in TypeScript, Go, and Python. diff --git a/docs/guides/obo-delegation.md b/docs/guides/obo-delegation.md index f8cc350..e05d25e 100644 --- a/docs/guides/obo-delegation.md +++ b/docs/guides/obo-delegation.md @@ -1,3 +1,7 @@ +--- +icon: material/account-arrow-right-outline +--- + # OBO Delegation On Behalf Of (OBO) delegation is a session pattern for multi-agent systems where an agent needs to act with a specific user's authorization rather than with system-level access. OBO sessions tie the agent's credentials to the identity and permission tier of the user who initiated the operation. diff --git a/docs/guides/registering-a-provider.md b/docs/guides/registering-a-provider.md index 5078c9c..e90c96d 100644 --- a/docs/guides/registering-a-provider.md +++ b/docs/guides/registering-a-provider.md @@ -1,10 +1,18 @@ -# Registering a Provider +--- +icon: material/plus-network-outline +--- -Before you can create connections, you need a provider profile in Nexus. This guide covers the two steps involved: setting up the OAuth application in the provider's developer console, then registering it in Nexus. +# Providers + +A provider profile tells Nexus how to authenticate users against a third-party service and how to apply those credentials to outgoing requests. This guide covers registering new providers, the full range of auth types Nexus supports, and how to list, update, and delete providers after they are registered. + +For declarative provider management in production, see [Security-as-Code](security-as-code.md). + +--- ## Step 1 — Set up the OAuth app in the provider console -Every OAuth2 provider requires you to register an application in their developer portal before issuing credentials. The terminology varies — "OAuth Apps", "API Credentials", "Integrations" — but the process is the same. +Every OAuth2 provider requires you to register an application in their developer portal before issuing credentials. The terminology varies — "OAuth Apps", "API Credentials", "Integrations" — but the process is the same: create an app, collect the client ID and secret, and register the Broker's callback URI. ### What you need from the provider @@ -18,7 +26,7 @@ Every OAuth2 provider requires you to register an application in their developer ### The redirect URI -Every provider console requires a redirect URI. This must be set to your Broker's callback endpoint: +Register the Broker's callback endpoint as the redirect URI in the provider console: ``` https://your-broker.example.com/auth/callback @@ -34,7 +42,7 @@ The Broker's `BASE_URL` + `/auth/callback` must match this exactly. Most provide ### Compliance fields -Most providers sandbox your app in "Development Mode" until you fill in compliance metadata. This limits you to a small number of test users and blocks production use. +Most providers sandbox new apps in "Development Mode" until compliance metadata is filled in. This limits you to a small number of test users and blocks production access. | Field | What to provide | |---|---| @@ -47,16 +55,20 @@ Most providers sandbox your app in "Development Mode" until you fill in complian Fill these in before requesting production access from the provider. +--- + ## Step 2 — Register the provider in Nexus +All provider registration goes through `POST /v1/providers` on the Gateway. The `X-API-Key` header must carry your `API_KEY`. + ### OAuth2 with OIDC discovery -Use OIDC discovery when the provider supports it (Google, Microsoft Entra, Okta, Auth0). Nexus fetches the authorization and token endpoints automatically from `{issuer}/.well-known/openid-configuration`. +Use OIDC discovery when the provider supports it (Google, Microsoft Entra, Okta, Auth0). Nexus fetches the authorization endpoint, token endpoint, and JWKS URI automatically from `{issuer}/.well-known/openid-configuration`. ```bash curl -s -X POST https://your-gateway.example.com/v1/providers \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "name": "google-workspace", "auth_type": "oauth2", @@ -70,12 +82,12 @@ curl -s -X POST https://your-gateway.example.com/v1/providers \ ### OAuth2 with manual endpoints -Use manual configuration for providers without OIDC discovery (GitHub, Slack, Stripe). +Use manual configuration for providers without OIDC discovery (GitHub, Slack, Stripe, Salesforce). ```bash curl -s -X POST https://your-gateway.example.com/v1/providers \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "name": "github", "auth_type": "oauth2", @@ -89,12 +101,12 @@ curl -s -X POST https://your-gateway.example.com/v1/providers \ ### API key provider -Static credential providers do not use a redirect flow. The `params.credential_schema` field defines the form your application presents to the user to collect credentials. +Static credential providers do not use a redirect flow. The `credential_schema` defines the form your application presents to collect the credential from the user. ```bash curl -s -X POST https://your-gateway.example.com/v1/providers \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "name": "airtable", "auth_type": "api_key", @@ -117,7 +129,7 @@ Username and password credentials. The Bridge encodes them as Base64 and sets th ```bash curl -s -X POST https://your-gateway.example.com/v1/providers \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "name": "jira-basic", "auth_type": "basic_auth", @@ -136,12 +148,12 @@ curl -s -X POST https://your-gateway.example.com/v1/providers \ ### AWS SigV4 provider -For services that use AWS Signature Version 4 request signing. The `params.service` and `params.region` fields configure the signing scope. +For services that use AWS Signature Version 4 request signing. `params.service` and `params.region` configure the signing scope. ```bash curl -s -X POST https://your-gateway.example.com/v1/providers \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "name": "bedrock-us-east", "auth_type": "aws_sigv4", @@ -162,12 +174,12 @@ curl -s -X POST https://your-gateway.example.com/v1/providers \ ### Query param provider -Injects the API key into the URL query string instead of a header. The `params.param_name` field sets the query parameter name. +Injects the API key into the URL query string instead of a header. `params.param_name` sets the query parameter name. ```bash curl -s -X POST https://your-gateway.example.com/v1/providers \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "name": "weatherapi", "auth_type": "query_param", @@ -186,12 +198,12 @@ curl -s -X POST https://your-gateway.example.com/v1/providers \ ### HMAC signature provider -For APIs that require request signing with a shared secret. The `params.header_name`, `params.algo`, and `params.encoding` fields configure the signature format. +For APIs that require request signing with a shared secret. `params.header_name`, `params.algo`, and `params.encoding` configure the signature format. ```bash curl -s -X POST https://your-gateway.example.com/v1/providers \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "name": "webhook-hmac", "auth_type": "hmac_payload", @@ -210,6 +222,22 @@ curl -s -X POST https://your-gateway.example.com/v1/providers \ }' | jq . ``` +### Provider field reference + +| Field | Type | Description | +|---|---|---| +| `name` | string | Unique alias. Used in all subsequent operations. | +| `auth_type` | string | `oauth2`, `api_key`, `basic_auth`, `aws_sigv4`, `query_param`, `hmac_payload` | +| `client_id` | string | OAuth 2.0 client ID | +| `client_secret` | string | OAuth 2.0 client secret | +| `issuer` | string | OIDC issuer URL — required when `enable_discovery: true` | +| `auth_url` | string | Authorization endpoint — required when `enable_discovery: false` | +| `token_url` | string | Token endpoint — required when `enable_discovery: false` | +| `api_base_url` | string | Provider API root URL | +| `enable_discovery` | boolean | Fetch endpoints from OIDC discovery document | +| `scopes` | array | Default scopes to request during the OAuth handshake | +| `params` | object | Provider-specific configuration (schemas, signing params, quirks) | + ### Provider-specific quirks Some providers deviate from the OAuth2 spec in ways that require additional params: @@ -221,6 +249,8 @@ Some providers deviate from the OAuth2 spec in ways that require additional para | Twitter/X | Requires Basic Auth for token exchange | `"auth_header": "client_secret_basic"` | | Microsoft Entra | Requires `scope` on the token exchange | Default behaviour — no change needed | +--- + ## Step 3 — Verify the registration Test an OAuth2 provider by requesting a connection URL and completing the flow in your browser: @@ -228,7 +258,7 @@ Test an OAuth2 provider by requesting a connection URL and completing the flow i ```bash curl -s -X POST https://your-gateway.example.com/v1/request-connection \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "workspace_id": "test-user-001", "provider_id": "PROVIDER_UUID_FROM_REGISTRATION", @@ -239,15 +269,50 @@ curl -s -X POST https://your-gateway.example.com/v1/request-connection \ Open the `auth_url` from the response in a browser. After authorizing, you should be redirected to `httpbin.org/get` with `connection_id` and `status=success` as query parameters. -## Updating a registered provider +--- + +## Listing providers + +```bash +curl -s https://your-gateway.example.com/v1/providers \ + -H "X-API-Key: your-api-key" | jq . +``` + +To retrieve a condensed metadata view (useful for rendering a connection UI): -Use `PATCH` to update specific fields. Do not delete and recreate a provider — this orphans every active connection. +```bash +curl -s https://your-gateway.example.com/v1/providers/metadata \ + -H "X-API-Key: your-api-key" | jq . +``` + +The metadata endpoint returns providers grouped by `auth_type`, with only the fields needed for connection UI rendering: `api_base_url`, `user_info_endpoint`, and `scopes`. + +--- + +## Updating a provider + +Use `PATCH` to update specific fields. Do not delete and recreate a provider — this orphans every active connection that references it. ```bash curl -s -X PATCH https://your-gateway.example.com/v1/providers/PROVIDER_ID \ -H "Content-Type: application/json" \ - -H "X-API-Key: your-gateway-api-key" \ + -H "X-API-Key: your-api-key" \ -d '{ "client_secret": "ROTATED_SECRET" }' | jq . ``` + +Every update is recorded in the [audit log](../reference/audit-log.md). + +--- + +## Deleting a provider + +Deleting a provider removes its configuration. Existing connections that reference the provider will fail credential retrieval immediately because the client credentials are gone. Verify you have migrated or decommissioned all dependent connections before deleting. + +```bash +curl -s -X DELETE https://your-gateway.example.com/v1/providers/PROVIDER_ID \ + -H "X-API-Key: your-api-key" +``` + +Delete operations are audit-logged with the caller IP and timestamp. diff --git a/docs/guides/security-as-code.md b/docs/guides/security-as-code.md index 27b9581..ad96f97 100644 --- a/docs/guides/security-as-code.md +++ b/docs/guides/security-as-code.md @@ -1,3 +1,7 @@ +--- +icon: material/file-code-outline +--- + # Security-as-Code with nexus-cli `nexus-cli` is a command-line tool that applies a GitOps workflow to Nexus provider configuration. Instead of making ad-hoc API calls to register and update providers, you declare the desired state in a YAML manifest, commit it to your repository, and use `nexus-cli` to reconcile the live Broker against that manifest. diff --git a/docs/guides/static-credentials.md b/docs/guides/static-credentials.md index e788955..ecacbd1 100644 --- a/docs/guides/static-credentials.md +++ b/docs/guides/static-credentials.md @@ -1,3 +1,7 @@ +--- +icon: material/key-outline +--- + # Static Credential Flow OAuth2 providers redirect users to an authorization page. Static credential providers — `api_key` and `basic_auth` — do not. Instead, your application presents a form, the user fills it in, and you submit the credentials directly to Nexus. diff --git a/docs/guides/troubleshooting.md b/docs/guides/troubleshooting.md new file mode 100644 index 0000000..a87fef2 --- /dev/null +++ b/docs/guides/troubleshooting.md @@ -0,0 +1,142 @@ +--- +icon: material/lifebuoy +--- + +# Troubleshooting + +Common issues and how to resolve them. + +--- + +## Stack won't start + +### Services exit immediately after `make up` + +Check the logs: + +```bash +docker-compose logs broker +docker-compose logs gateway +``` + +**`FATAL: STATE_KEY environment variable is required`** + +Both the Broker and Gateway require `STATE_KEY` to be set and identical. Copy your `.env.example` to `.env` and fill in `STATE_KEY` with the output of `openssl rand -base64 32`. See [Configuration](../getting-started/configuration.md). + +**`DATABASE_URL connection refused`** + +PostgreSQL is not healthy yet. Wait for the healthcheck to pass: + +```bash +docker-compose ps # check "healthy" status for nexus-postgres +``` + +If it never reaches healthy, check that port 5432 is not occupied by another process. + +--- + +## OAuth handshake fails + +### Redirect URI mismatch + +The provider returns a redirect URI mismatch error during consent. + +The provider's developer console has a registered redirect URI that does not match the Broker's callback endpoint. The Broker's callback is: + +``` +{BASE_URL}/auth/callback +``` + +Check what `BASE_URL` is set to in your `.env`, construct the callback URL, and verify it is registered exactly in the provider console. Common causes: `http` vs `https`, trailing slash, or wrong port. + +### `invalid state` on callback + +The Broker logs `invalid or expired state parameter` and redirects to your `return_url` with `status=failed`. + +This happens when `STATE_KEY` differs between the Broker and Gateway, or when the state token expires before the user completes consent (15-minute TTL). Verify `STATE_KEY` is identical in both services: + +```bash +docker-compose exec broker env | grep STATE_KEY +docker-compose exec gateway env | grep STATE_KEY +``` + +### OAuth callback returns `failed` + +Check the Broker logs for the token exchange error. The most common causes: + +| Error | Cause | Fix | +|---|---|---| +| `invalid_grant` | Authorization code already used or expired | The user must restart the consent flow | +| `invalid_client` | Wrong `client_id` or `client_secret` | Verify credentials in the provider console | +| `redirect_uri_mismatch` | Redirect URI not registered | Register `{BASE_URL}/auth/callback` in provider console | +| `access_denied` | User declined consent | Expected — surface a retry to the user | + +--- + +## Credential retrieval fails + +### `GET /v1/token/{id}` returns 404 + +The `connection_id` does not exist in the Broker's database. Verify the connection completed successfully with `GET /v1/check-connection/{id}` first. + +### Token returns 200 but the provider API returns 401 + +The access token is valid according to the Broker but the provider has already invalidated it. Force a refresh: + +```bash +curl -s -X POST https://your-gateway.example.com/v1/refresh/CONN_ID \ + -H "X-API-Key: your-api-key" +``` + +If the refresh returns `attention_required`, the user must reconnect. See [Handling Attention State](attention-state.md). + +--- + +## Agent session errors + +### `403 scope_not_permitted_for_agent` + +The agent's registered `allowed_scopes` does not include the requested scope. Update the agent's allowed scopes via `PATCH /admin/v1/agents/{id}` on the Broker, or register the agent with the correct scopes from the start. + +### `503 backend_auth_unavailable` + +The Broker cannot reach `BACKEND_AUTH_URL` to validate the user context token for an OBO session. Verify `BACKEND_AUTH_URL` is set correctly on the Broker and that the endpoint is reachable from within the Docker network. + +--- + +## nexus-cli issues + +### `plan` shows all providers as CREATE even after apply + +The `name` field in the manifest does not match the `name` stored on the Broker. `nexus-cli` uses `name` as the reconciliation key — it must match exactly. Check the live state: + +```bash +curl -s http://localhost:8090/v1/providers \ + -H "X-API-Key: your-api-key" | jq '.[].name' +``` + +### `apply` fails with `connection refused` + +`BROKER_BASE_URL` is set incorrectly or the Broker is not running. Verify: + +```bash +curl http://localhost:8080/health +``` + +--- + +## Encryption key issues + +### All connections return errors after a restart + +`ENCRYPTION_KEY` changed between restarts. All stored tokens are encrypted with the original key — a different key makes them permanently unreadable. Restore the original `ENCRYPTION_KEY` value. If it is lost, all connections must be re-established by users going through the consent flow again. + +`ENCRYPTION_KEY` must be stored as a managed secret, not in source control. Use your cloud provider's secret manager (AWS Secrets Manager, GCP Secret Manager, Azure Key Vault). + +--- + +## Getting more help + +- **GitHub Issues**: [github.com/Prescott-Data/nexus-framework/issues](https://github.com/Prescott-Data/nexus-framework/issues) +- **Discord**: [discord.gg/nexus-framework](https://discord.gg/nexus-framework) +- **Audit Log**: Run `GET /audit` on the Broker to see the event trail for any connection or provider operation. See [Audit Log](../reference/audit-log.md). diff --git a/docs/index.md b/docs/index.md index db8c576..3454e22 100644 --- a/docs/index.md +++ b/docs/index.md @@ -8,13 +8,10 @@ icon: material/home # Nexus -Credential brokering for autonomous agents. Nexus sits between your agents and every third-party service they reach, managing the full credential lifecycle so your agents never hold OAuth tokens, API keys, or refresh tokens directly. +### Auth infrastructure for autonomous agents. -
+One authority for every service your agents touch. Nexus orchestrates provider connections, token lifecycle, agent identity, scoped sessions, and on-behalf-of delegation — your agents never write auth code or hold a raw secret. -[Architecture](concepts/architecture.md)  ·  [Deploy in five minutes](getting-started/quickstart.md)  ·  [GitHub](https://github.com/Prescott-Data/nexus-framework){ target="_blank" rel="noopener" } - -
@@ -29,9 +26,11 @@ Credential brokering for autonomous agents. Nexus sits between your agents and e ## What Nexus does -When an agent needs to call Salesforce, Google Drive, or any other provider, it asks the Nexus Gateway for a session. The Gateway forwards the request to the Broker, which decrypts the stored refresh token, fetches a fresh access token from the provider, and returns only that short-lived token. The agent uses it and discards it. If the agent is compromised, the attacker has nothing durable. +Every agent that connects to an external service hits the same wall. OAuth flows, token refresh loops, credential rotation, per-provider auth implementations — all of it written from scratch, per integration, per team. Nexus eliminates that wall entirely. + +Register a provider once. Every agent in your fleet connects to it through a single authority. The Broker handles the OAuth handshake, encrypts the token at rest, runs the refresh loop, and issues only a short-lived credential when an agent asks. The agent uses it and discards it. If the agent is compromised, the attacker has nothing durable. -Nexus handles token storage, refresh scheduling, OAuth handshakes, and audit logging as infrastructure. You configure providers once. Your agents authenticate against them through a single API surface. +Beyond the OAuth layer, Nexus covers the full auth surface that production agent systems require. Agents are registered principals with declared scope ceilings — a `crm-agent` registered with `crm:contacts:read` cannot request `crm:delete`, even if the underlying connection has that scope. When a human user triggers an agent mission, the Broker validates the user's permission, stamps the session with their identity and tenant context, and enforces data isolation across every downstream operation. Internal business operations — `acme:gliding`, `pipeline:trigger` — are first-class scopes enforced at the same authority as OAuth tokens. Every credential request, session open, and session close is logged in a tamper-evident audit trail.
@@ -77,7 +76,7 @@ Broker runs on `localhost:8080`. Gateway runs on `localhost:8090`. ## Where to start -Read [Architecture](concepts/architecture.md) first. It establishes the control plane and data plane split, the OAuth handshake flow, and the credential retrieval model. Every other page assumes that mental model. +Start with [Architecture](concepts/architecture.md) under the Concepts tab. It establishes the control plane and data plane split, the OAuth handshake flow, and the credential retrieval model. Every other page assumes that mental model. Then follow [Deploy in Five Minutes](getting-started/quickstart.md) to run a stack and make your first connection. After that, the [Guides](guides/integrating-agents.md) cover the operational tasks you return to repeatedly. diff --git a/docs/infrastructure/deploying-nexus.md b/docs/infrastructure/deploying-nexus.md index 3c3bd53..7ebac70 100644 --- a/docs/infrastructure/deploying-nexus.md +++ b/docs/infrastructure/deploying-nexus.md @@ -1,3 +1,7 @@ +--- +icon: material/cloud-upload-outline +--- + # Deploying Nexus This guide covers deploying the Broker and Gateway to a production environment. For local development setup, see [Deploy in Five Minutes](../getting-started/quickstart.md). diff --git a/docs/javascripts/header.js b/docs/javascripts/header.js index 72f14d0..daa0f56 100644 --- a/docs/javascripts/header.js +++ b/docs/javascripts/header.js @@ -1,31 +1,40 @@ /* Nexus Docs — Header enhancements - - Injects version chip after site title - - Injects GitHub repo + stars widget + - Injects version chip after site title (live from GitHub tags) + - Injects GitHub repo + stars widget (Prescott-Data/nexus ★ N) - Moves theme palette toggle to far-right - Opens external tabs in new window */ document.addEventListener('DOMContentLoaded', function () { - /* ── 1. Version chip ─────────────────────────────────── */ + /* ── 1. Version chip — live from GitHub API ─────────── */ var title = document.querySelector('.md-header__title'); - var fallbackVersion = 'v0.4.0'; var chip; if (title) { chip = document.createElement('span'); chip.className = 'nx-version-chip'; - chip.textContent = fallbackVersion; + chip.textContent = '…'; title.insertAdjacentElement('afterend', chip); } - /* Fetch live version from GitHub tags */ + /* Fetch the LATEST tag from GitHub — single source of truth */ fetch('https://api.github.com/repos/Prescott-Data/nexus-framework/tags') .then(function (r) { return r.json(); }) .then(function (tags) { if (Array.isArray(tags) && tags.length > 0) { - if (chip) chip.textContent = tags[0].name; + var latestVersion = tags[0].name; + if (chip) chip.textContent = latestVersion; + + /* Also update hero badge if present */ + var heroBadge = document.getElementById('nx-hero-version-badge'); + if (heroBadge) { + heroBadge.innerHTML = latestVersion + ' · Apache 2.0 · Production Ready'; + } } }) - .catch(function () {}); + .catch(function () { + /* On network failure, hide chip entirely rather than showing stale data */ + if (chip) chip.style.display = 'none'; + }); /* ── 2. GitHub stars widget ─────────────────────────── */ var inner = document.querySelector('.md-header__inner'); diff --git a/docs/javascripts/llm-assist.js b/docs/javascripts/llm-assist.js new file mode 100644 index 0000000..4a944cd --- /dev/null +++ b/docs/javascripts/llm-assist.js @@ -0,0 +1,178 @@ +function initLLMWidget() { + var contentInner = document.querySelector('.md-content__inner'); + if (!contentInner) return; + + // Skip if already injected (instant navigation guard) + if (contentInner.querySelector('.nx-llm-widget')) return; + + // Hide ALL existing MkDocs action buttons (edit + view source) + var allButtons = contentInner.querySelectorAll('.md-content__button'); + var rawUrl = null; // resolved below — never default to the HTML page URL + allButtons.forEach(function(btn) { + if (btn.tagName === 'A' && btn.href) { + // Prefer the edit button URL for raw markdown (GitHub-hosted docs) + var u = btn.href + .replace('github.com', 'raw.githubusercontent.com') + .replace('/edit/', '/') + .replace('/blob/', '/'); + if (u !== btn.href) rawUrl = u; + } + btn.style.display = 'none'; + }); + + // Local dev fallback: derive the .md source path from the current URL. + // MkDocs serves /foo/bar/ from docs/foo/bar.md (or docs/foo/bar/index.md). + if (!rawUrl && window.location.hostname === 'localhost') { + var pathname = window.location.pathname.replace(/\/$/, '') || '/index'; + rawUrl = '/docs' + pathname + '.md'; + window._nxMdPathBase = pathname; + } + + var icons = { + copy: '', + check: '', + markdown: '', + chevron: '', + external: '' + }; + + var menuItems = [ + { id: 'copy', icon: icons.copy, title: 'Copy page', sub: 'Copy page as Markdown for LLMs' }, + { id: 'markdown', icon: icons.markdown, title: 'View as Markdown', sub: 'View this page as plain text' } + ]; + + var container = document.createElement('div'); + container.className = 'nx-llm-widget'; + + var trigger = document.createElement('div'); + trigger.className = 'nx-llm-trigger'; + + var triggerMain = document.createElement('div'); + triggerMain.className = 'nx-llm-btn-main'; + triggerMain.innerHTML = icons.copy; + triggerMain.title = 'Copy page'; + + var triggerChev = document.createElement('div'); + triggerChev.className = 'nx-llm-btn-chev'; + triggerChev.innerHTML = icons.chevron; + triggerChev.title = 'More options'; + + trigger.appendChild(triggerMain); + trigger.appendChild(triggerChev); + + var dropdown = document.createElement('div'); + dropdown.className = 'nx-llm-dropdown'; + + menuItems.forEach(function(item) { + var el = document.createElement('div'); + el.className = 'nx-llm-item'; + var textHtml = '
' + item.title + '' + item.sub + '
'; + el.innerHTML = '
' + item.icon + '
' + textHtml + (item.id === 'markdown' ? icons.external : ''); + + el.addEventListener('click', function(e) { + e.preventDefault(); + dropdown.classList.remove('open'); + if (item.id === 'copy') fetchAndCopy(); + if (item.id === 'markdown') viewAsMarkdown(); + }); + + dropdown.appendChild(el); + }); + + container.appendChild(trigger); + container.appendChild(dropdown); + + function getText(callback) { + // Primary: read from the raw markdown embedded by a MkDocs hook (if present) + var embedded = document.getElementById('nx-page-source'); + if (embedded) { + var src = embedded.textContent || embedded.innerHTML || ''; + if (src.trim()) { + callback(src); + return; + } + } + + // Fallback: fetch from GitHub raw source or local docs + if (!rawUrl) { + var article = document.querySelector('article') || document.querySelector('.md-content'); + callback(article ? article.innerText : '(no content)'); + return; + } + + var candidates = [rawUrl]; + if (window.location.hostname === 'localhost' && window._nxMdPathBase) { + candidates.push('/docs' + window._nxMdPathBase + '/index.md'); + } + + function tryNext(urls) { + if (!urls.length) { + var article = document.querySelector('article') || document.querySelector('.md-content'); + callback(article ? article.innerText : '(no content)'); + return; + } + var url = urls.shift(); + fetch(url).then(function(r) { + if (!r.ok) throw new Error('not ok'); + return r.text(); + }).then(function(text) { + if (text.trimStart().startsWith('' + icons.check + ''; + getText(function(text) { + navigator.clipboard.writeText(text); + setTimeout(function() { triggerMain.innerHTML = icons.copy; }, 2000); + }); + } + + function viewAsMarkdown() { + getText(function(text) { + var win = window.open('', '_blank'); + if (win) { + win.document.write('
' + text.replace(//g, '>') + '
'); + win.document.close(); + } + }); + } + + // Inject widget — prepend to content area + var wrapper = document.createElement('div'); + wrapper.className = 'md-content__button'; + wrapper.style.cssText = 'position:relative;z-index:1;'; + wrapper.appendChild(container); + contentInner.insertBefore(wrapper, contentInner.firstChild); + + // Split-button event handlers + triggerChev.addEventListener('click', function(e) { + e.stopPropagation(); + dropdown.classList.toggle('open'); + }); + + triggerMain.addEventListener('click', function(e) { + e.stopPropagation(); + dropdown.classList.remove('open'); + fetchAndCopy(); + }); + + document.addEventListener('click', function(e) { + if (!container.contains(e.target)) dropdown.classList.remove('open'); + }); +} + +// Run on first load +document.addEventListener('DOMContentLoaded', initLLMWidget); + +// Re-run on every instant navigation (Material for MkDocs SPA mode) +if (typeof document$ !== 'undefined') { + document$.subscribe(initLLMWidget); +} diff --git a/docs/reference/api.md b/docs/reference/api.md index c772d4e..23f1b34 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -1,3 +1,7 @@ +--- +icon: material/code-json +--- + # API Reference Nexus exposes two API surfaces: the **Gateway API**, which agents and applications call, and the **Broker API**, which is internal and used only by the Gateway and administrative tooling. diff --git a/docs/reference/audit-log.md b/docs/reference/audit-log.md index 8f6fe83..a489a53 100644 --- a/docs/reference/audit-log.md +++ b/docs/reference/audit-log.md @@ -1,3 +1,7 @@ +--- +icon: material/clipboard-text-clock-outline +--- + # Audit Log The Nexus Broker maintains a tamper-evident audit log of every control-plane mutation. The log is written to the `audit_events` table in PostgreSQL and is queryable through the Broker's REST API. diff --git a/docs/reference/cli.md b/docs/reference/cli.md index 56cf9d7..d3042af 100644 --- a/docs/reference/cli.md +++ b/docs/reference/cli.md @@ -1,3 +1,7 @@ +--- +icon: material/console +--- + # CLI Reference `nexus-cli` is a command-line tool for managing Nexus provider configuration declaratively. It reads a YAML manifest, compares it against the live Broker state, and applies changes. diff --git a/docs/reference/security-model.md b/docs/reference/security-model.md index 1d6584e..56ef7fd 100644 --- a/docs/reference/security-model.md +++ b/docs/reference/security-model.md @@ -1,3 +1,7 @@ +--- +icon: material/shield-check-outline +--- + # Security Model The Nexus Framework is built on the principle of **Least Privilege for Agents**. Agents should never hold the "keys to the kingdom" (Refresh Tokens); they should only hold short-lived "Usage Secrets." diff --git a/docs/sdks/go.md b/docs/sdks/go.md index 67e0d55..310a237 100644 --- a/docs/sdks/go.md +++ b/docs/sdks/go.md @@ -1,3 +1,7 @@ +--- +icon: material/language-go +--- + # Go SDK The `nexus-sdk` Go package is a zero-dependency client for the Nexus Gateway. It supports both standard OAuth connection management and MCP server token injection. diff --git a/docs/sdks/index.md b/docs/sdks/index.md index 6c11a9f..306af86 100644 --- a/docs/sdks/index.md +++ b/docs/sdks/index.md @@ -1,3 +1,7 @@ +--- +icon: material/package-variant-closed +--- + # SDK Overview Nexus ships three first-class client SDKs. Each provides identical functionality — choose the one that matches your application's language. diff --git a/docs/sdks/python.md b/docs/sdks/python.md index dffd7df..d02a597 100644 --- a/docs/sdks/python.md +++ b/docs/sdks/python.md @@ -1,3 +1,7 @@ +--- +icon: material/language-python +--- + # Python SDK The `nexus-sdk` Python package is a zero-dependency client for the Nexus Gateway supporting both standard OAuth connection management and MCP server token injection. diff --git a/docs/sdks/typescript.md b/docs/sdks/typescript.md index 9561062..f627d7a 100644 --- a/docs/sdks/typescript.md +++ b/docs/sdks/typescript.md @@ -1,3 +1,7 @@ +--- +icon: material/language-typescript +--- + # TypeScript SDK The `@dromos/nexus-sdk` package is a TypeScript/JavaScript client for the Nexus Gateway supporting both standard OAuth connection management and MCP server token injection. diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index a865710..2038ecd 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -255,12 +255,26 @@ body, margin-left: 0.45rem; } +/* On mobile the title must shrink to fit next to hamburger + logo */ +@media screen and (max-width: 76.1875em) { + .md-header__title { + min-width: 0 !important; + flex-shrink: 1 !important; + font-size: 0.8rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} + [data-md-color-scheme="slate"] .md-header__title { color: #fff !important; } -/* Center the search bar absolutely in the header */ -@media (min-width: 768px) { +/* Center the search bar absolutely in the header — desktop only. + On mobile Material hides the pill behind a magnifying glass icon + button that opens a full-screen modal. */ +@media screen and (min-width: 76.25em) { .md-header .md-header__inner.md-grid { position: relative !important; } @@ -767,8 +781,30 @@ body, padding: 0.15rem 0 2rem; } -/* Top-level section labels (nav titles like "Getting Started") */ -.md-nav--primary>.md-nav__list>.md-nav__item>.md-nav__link, +/* Top-level section labels — desktop only. + On desktop with navigation.tabs these are just visual labels in the + sidebar (e.g. "GUIDES") that should not be clickable. + On mobile these same elements become the ACTUAL nav items in the + drawer (Home, Concepts, Guides, etc.) and MUST be clickable. + So we scope pointer-events:none to desktop only. */ +@media screen and (min-width: 76.25em) { + .md-nav--primary>.md-nav__list>.md-nav__item>.md-nav__link { + font-family: 'Inter', sans-serif; + font-size: 0.62rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--nx-text-muted) !important; + padding: 0.9rem 0.75rem 0.3rem; + opacity: 0.7; + cursor: default; + pointer-events: none; + white-space: nowrap; + } +} + +/* .md-nav__title — on desktop it's a static label, on mobile it's the + drawer back button. Scope the non-interactive styling to desktop. */ .md-nav__title { font-family: 'Inter', sans-serif; font-size: 0.62rem; @@ -778,8 +814,14 @@ body, color: var(--nx-text-muted) !important; padding: 0.9rem 0.75rem 0.3rem; opacity: 0.7; - cursor: default; - pointer-events: none; + white-space: nowrap; +} + +@media screen and (min-width: 76.25em) { + .md-nav__title { + cursor: default; + pointer-events: none; + } } /* All nav links */ @@ -1000,25 +1042,29 @@ body, /* --- CTA Buttons --- */ .nx-cta { display: flex; - gap: 0.4rem; + align-items: center; + gap: 0.6rem; justify-content: center; flex-wrap: wrap; - margin-bottom: 0.6rem; + margin-bottom: 0.8rem; } .nx-btn { display: inline-flex; align-items: center; - gap: 0.3rem; - padding: 0.32rem 0.75rem; - border-radius: 5px; - font-size: 0.72rem; - font-weight: 500; + justify-content: center; + gap: 0.4rem; + padding: 0.5rem 1.1rem; + border-radius: 6px; + font-size: 0.8rem; + font-weight: 600; + line-height: 1; text-decoration: none !important; - transition: opacity 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; + transition: background 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; cursor: pointer; - letter-spacing: 0; + letter-spacing: 0.01em; white-space: nowrap; + vertical-align: middle; } .nx-btn:hover { @@ -1027,13 +1073,14 @@ body, } .nx-btn-primary { - background: var(--nx-gradient); + background: #0071F7; color: #fff !important; - box-shadow: 0 3px 12px rgba(23, 88, 245, 0.28); + box-shadow: 0 3px 12px rgba(0, 113, 247, 0.28); } .nx-btn-primary:hover { - box-shadow: 0 6px 22px rgba(23, 88, 245, 0.38); + background: #0060d6; + box-shadow: 0 6px 22px rgba(0, 113, 247, 0.38); color: #fff !important; } @@ -1054,6 +1101,18 @@ body, background: #0c0c0e; color: #fff !important; border: 1px solid #0c0c0e; + gap: 0.4rem; +} + +.nx-btn-github::before { + content: ''; + display: inline-block; + width: 1rem; + height: 1rem; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-size: contain; + flex-shrink: 0; } .nx-btn-github:hover { @@ -1832,6 +1891,7 @@ body, ============================================================ */ @media (max-width: 600px) { + /* --- Stats strip --- */ .nx-stats { flex-direction: column; } @@ -1845,23 +1905,41 @@ body, border-bottom: none; } + /* --- Grids --- */ .nx-ecosystem { grid-template-columns: 1fr; padding: 1.5rem; } - .nx-gh-btn { - display: none; + .nx-grid { + grid-template-columns: 1fr; + } + + /* --- Hero CTAs: stack vertically and full-width --- */ + .nx-cta { + flex-direction: column; + align-items: stretch; + gap: 0.75rem; } + .nx-cta-btn { + width: 100%; + justify-content: center; + } + + /* --- Hide decorative chips in header on tiny screens --- */ + .nx-gh-btn, .nx-version-chip { display: none; } - .nx-grid { - grid-template-columns: 1fr; + /* --- Code blocks: scroll don't overflow --- */ + .md-content pre { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } + /* --- Changelog --- */ .changelog-meta { flex-direction: column; gap: 0.5rem; @@ -1871,14 +1949,88 @@ body, .changelog-release { padding: 1rem 1.25rem; } + + /* --- Tables: scroll horizontally --- */ + .md-typeset table { + display: block; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } } +/* --- Tablet (601–960px): 2-col grids --- */ @media (max-width: 960px) and (min-width: 601px) { .nx-grid { grid-template-columns: repeat(2, 1fr); } + + .nx-cta { + flex-wrap: wrap; + gap: 0.75rem; + } + + .md-content pre { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } } +/* ============================================================ + MOBILE DRAWER — full interactivity + On mobile (< 76.25em) Material collapses navigation.tabs + into a full-width overlay drawer. Every item must be + tappable, the back button must work, and touch targets + must be at least 44px. + ============================================================ */ + +@media screen and (max-width: 76.1875em) { + + /* Back button / section title — fully interactive */ + .md-nav__title { + pointer-events: auto !important; + cursor: pointer !important; + opacity: 1 !important; + font-size: 0.8rem !important; + padding: 0.75rem 1rem !important; + letter-spacing: 0 !important; + text-transform: none !important; + font-weight: 600 !important; + color: var(--md-default-fg-color) !important; + } + + /* ALL nav links in drawer — interactive with 44px touch targets. + This includes top-level items (Home, Concepts, Guides, etc.) + which are the primary navigation on mobile. */ + .md-nav__link { + pointer-events: auto !important; + cursor: pointer !important; + min-height: 44px !important; + display: flex !important; + align-items: center !important; + padding: 0.6rem 1rem !important; + font-size: 0.875rem !important; + opacity: 1 !important; + border-radius: 0 !important; + margin: 0 !important; + } + + /* Remove active left-bar indicator in drawer — looks odd */ + .md-nav__link--active::before { + display: none !important; + } + + /* Drawer overlay — captures taps to close */ + .md-overlay { + pointer-events: auto !important; + } + + /* Hide right TOC sidebar on mobile — no room */ + .md-sidebar--secondary { + display: none !important; + } +} + + /* Suppress Material's sidebar nav tooltips — labels are now fully visible. Target only Material's .md-tooltip component, NOT arbitrary [title] elements @@ -2144,13 +2296,17 @@ body, Override Material's default ~12rem with 15rem so all nav labels have room to display without truncation or ellipsis. ============================================================ */ -.md-sidebar--primary { - min-width: var(--md-sidebar-width, 15rem); - width: var(--md-sidebar-width, 15rem); -} +/* Sidebar width: only enforce on desktop. On mobile Material uses a + full-width overlay drawer — forcing 15rem breaks it completely. */ +@media screen and (min-width: 76.25em) { + .md-sidebar--primary { + min-width: var(--md-sidebar-width, 15rem); + width: var(--md-sidebar-width, 15rem); + } -.md-sidebar--primary .md-nav { - width: 100%; + .md-sidebar--primary .md-nav { + width: 100%; + } } /* Belt-and-braces tooltip suppression for Material's ellipsis tooltip */ diff --git a/mkdocs.yml b/mkdocs.yml index 7f606db..d79e53e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -35,7 +35,6 @@ theme: - navigation.tabs - navigation.tabs.sticky - navigation.sections - - navigation.expand - navigation.top - navigation.indexes - navigation.path @@ -53,6 +52,7 @@ extra_css: extra_javascript: - javascripts/header.js + - javascripts/llm-assist.js plugins: - search @@ -83,47 +83,60 @@ nav: - Home: - Overview: index.md - Website: https://developers.prescottdata.io - - Community: https://discord.gg/nexus-framework + - Community: https://discord.gg/AbskSXypq - Blog: https://developers.prescottdata.io/blog - Concepts: - Architecture: concepts/architecture.md + - The Broker: concepts/broker.md + - The Gateway: concepts/gateway.md + - The Bridge: concepts/bridge.md - Connections: concepts/connections.md - - Agent Identity: concepts/agent-identity.md - - Auth Strategies: concepts/auth-strategies.md - Provider Types: concepts/provider-types.md + - Auth Strategies: concepts/auth-strategies.md + - Agent Identity: concepts/agent-identity.md - Security Model: concepts/security-model.md - - The Bridge: concepts/bridge.md - - The Broker: concepts/broker.md - - The Gateway: concepts/gateway.md + - Client Libraries: concepts/client-libraries.md - Getting Started: - Deploy in Five Minutes: getting-started/quickstart.md - - Environment Variables: getting-started/configuration.md + - Configuration: getting-started/configuration.md - Your First Connection: getting-started/first-connection.md - Guides: - - Registering a Provider: guides/registering-a-provider.md + - Providers: guides/registering-a-provider.md - Integrating Agents: guides/integrating-agents.md - - MCP Server Integration: guides/mcp-integration.md + - Go SDK: sdks/go.md + - TypeScript SDK: sdks/typescript.md + - Python SDK: sdks/python.md - Agent Sessions: guides/agent-sessions.md - Static Credential Flow: guides/static-credentials.md - - Handling Attention State: guides/attention-state.md - OBO Delegation: guides/obo-delegation.md - - Managing Providers: guides/managing-providers.md + - MCP Server Integration: guides/mcp-integration.md + - Handling Attention State: guides/attention-state.md + - Troubleshooting: guides/troubleshooting.md - Security-as-Code: guides/security-as-code.md - Deploying Nexus: infrastructure/deploying-nexus.md - Reference: - API Reference: reference/api.md - CLI Reference: reference/cli.md - Audit Log: reference/audit-log.md - - SDKs: - - Overview: sdks/index.md - - Go SDK: sdks/go.md - - TypeScript SDK: sdks/typescript.md - - Python SDK: sdks/python.md + - Security Model: reference/security-model.md + - Changelog: CHANGELOG.md extra: - version: "0.4.0" + version: "0.2.3" social: + - icon: material/web + link: https://developers.prescottdata.io + name: Prescott Data Developer Hub + - icon: fontawesome/brands/x-twitter + link: https://x.com/prescottdata + name: Prescott Data on X + - icon: fontawesome/brands/linkedin + link: https://linkedin.com/company/jarviscore + name: JarvisCore on LinkedIn - icon: fontawesome/brands/github link: https://github.com/Prescott-Data/nexus-framework name: nexus-framework on GitHub + - icon: fontawesome/brands/discord + link: https://discord.gg/AbskSXypq + name: Join our Discord From bfdd6dbce3d973e53b0694d76314278d0b230bb2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 14 May 2026 21:52:06 +0000 Subject: [PATCH 08/16] Fix LinkedIn footer link to Prescott Data company page Agent-Logs-Url: https://github.com/Prescott-Data/nexus-framework/sessions/c05359bf-1a4d-4618-a5aa-df9731a928b5 Co-authored-by: ekizito96 <87319861+ekizito96@users.noreply.github.com> --- mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index d79e53e..833382b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -132,8 +132,8 @@ extra: link: https://x.com/prescottdata name: Prescott Data on X - icon: fontawesome/brands/linkedin - link: https://linkedin.com/company/jarviscore - name: JarvisCore on LinkedIn + link: https://www.linkedin.com/company/prescott-data/ + name: Prescott Data on LinkedIn - icon: fontawesome/brands/github link: https://github.com/Prescott-Data/nexus-framework name: nexus-framework on GitHub From 98a074f1794458e0a81f8dfe27e74972e9396322 Mon Sep 17 00:00:00 2001 From: Muyukani Kizito Date: Fri, 15 May 2026 00:52:26 +0300 Subject: [PATCH 09/16] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/concepts/client-libraries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/client-libraries.md b/docs/concepts/client-libraries.md index e4fc73b..a6ac382 100644 --- a/docs/concepts/client-libraries.md +++ b/docs/concepts/client-libraries.md @@ -23,7 +23,7 @@ Three SDKs ship with Nexus, all with the same method surface: | Language | Package | Install | |---|---|---| | Go | `nexus-sdk` | `go get github.com/Prescott-Data/nexus-framework/nexus-sdk` | -| TypeScript | `nexus-sdk` | `npm install nexus-sdk` | +| TypeScript | `@dromos/nexus-sdk` | `npm install @dromos/nexus-sdk` | | Python | `nexus-sdk` | `pip install nexus-sdk` | Use an SDK when your agent makes discrete HTTP calls rather than holding a persistent connection, when you are building an MCP server, or when your agent is written in TypeScript or Python. From 496a2eb54bf3c51907de05069cb1939155c0eff9 Mon Sep 17 00:00:00 2001 From: Muyukani Kizito Date: Fri, 15 May 2026 00:53:06 +0300 Subject: [PATCH 10/16] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/guides/integrating-agents.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/integrating-agents.md b/docs/guides/integrating-agents.md index f997bf6..90453b7 100644 --- a/docs/guides/integrating-agents.md +++ b/docs/guides/integrating-agents.md @@ -110,7 +110,7 @@ Inspect `strategyType` and use the `payload.Credentials` map to extract the valu ### Using the TypeScript SDK ```typescript -import { NexusClient } from '@prescott/nexus-sdk'; +import { NexusClient } from '@dromos/nexus-sdk'; const client = new NexusClient({ gatewayUrl: 'https://nexus-gateway.example.com' }); From fb8690ff5ddb64ca2684a276cb0738377e714553 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 14 May 2026 21:53:32 +0000 Subject: [PATCH 11/16] Fix Discord invite URL consistency across docs Agent-Logs-Url: https://github.com/Prescott-Data/nexus-framework/sessions/dd4fcd81-77f7-4e35-8190-f7d47fa78223 Co-authored-by: ekizito96 <87319861+ekizito96@users.noreply.github.com> --- docs/guides/troubleshooting.md | 2 +- docs/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guides/troubleshooting.md b/docs/guides/troubleshooting.md index a87fef2..561348c 100644 --- a/docs/guides/troubleshooting.md +++ b/docs/guides/troubleshooting.md @@ -138,5 +138,5 @@ curl http://localhost:8080/health ## Getting more help - **GitHub Issues**: [github.com/Prescott-Data/nexus-framework/issues](https://github.com/Prescott-Data/nexus-framework/issues) -- **Discord**: [discord.gg/nexus-framework](https://discord.gg/nexus-framework) +- **Discord**: [discord.gg/AbskSXypq](https://discord.gg/AbskSXypq) - **Audit Log**: Run `GET /audit` on the Broker to see the event trail for any connection or provider operation. See [Audit Log](../reference/audit-log.md). diff --git a/docs/index.md b/docs/index.md index 3454e22..be9df52 100644 --- a/docs/index.md +++ b/docs/index.md @@ -88,5 +88,5 @@ Then follow [Deploy in Five Minutes](getting-started/quickstart.md) to run a sta |---|---| | **Source** | Browse the code, open issues, and submit PRs — [GitHub](https://github.com/Prescott-Data/nexus-framework){ target="_blank" rel="noopener" } | | **OpenAPI** | The full Gateway v1 contract — [openapi.yaml](https://github.com/Prescott-Data/nexus-framework/blob/main/openapi.yaml){ target="_blank" rel="noopener" } | -| **Community** | Questions, showcases, and early feature previews — [Discord](https://discord.gg/nexus-framework){ target="_blank" rel="noopener" } | +| **Community** | Questions, showcases, and early feature previews — [Discord](https://discord.gg/AbskSXypq){ target="_blank" rel="noopener" } | | **Blog** | Engineering deep-dives and architecture walkthroughs — [read the blog](https://developers.prescottdata.io/blog){ target="_blank" rel="noopener" } | \ No newline at end of file From 7503d4ae016a3027c740d8e847ba0fe5effe5a3f Mon Sep 17 00:00:00 2001 From: Muyukani Kizito Date: Fri, 15 May 2026 00:54:37 +0300 Subject: [PATCH 12/16] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/concepts/architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/architecture.md b/docs/concepts/architecture.md index a9ebde5..0752971 100644 --- a/docs/concepts/architecture.md +++ b/docs/concepts/architecture.md @@ -40,7 +40,7 @@ See [The Bridge](bridge.md) for transport details, the authentication engine, an The SDKs are thin HTTP clients for the Gateway API. They expose `GetToken()`, `ResolveToken()`, and related methods, giving you direct control over credential retrieval without the connection management logic the Bridge provides. Use an SDK when you want to fetch credentials explicitly, when you are building an MCP server, or when your agent is written in TypeScript or Python. -Nexus ships three SDKs with full feature parity: Go, TypeScript, and Python. See the [SDK Reference](../reference/api.md) for the full method surface. +Nexus ships three SDKs with full feature parity: Go, TypeScript, and Python. See the [SDK Reference](client-libraries.md) for the full method surface. --- From a1411b5a409c118decd4a00f8a3e7e6b4d5c216d Mon Sep 17 00:00:00 2001 From: Muyukani Kizito Date: Fri, 15 May 2026 00:55:14 +0300 Subject: [PATCH 13/16] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/getting-started/quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md index 38960cf..a052eff 100644 --- a/docs/getting-started/quickstart.md +++ b/docs/getting-started/quickstart.md @@ -42,7 +42,7 @@ Open `.env` and set the following fields: ENCRYPTION_KEY= STATE_KEY= API_KEY=
-BROKER_API_KEY= +BROKER_API_KEY= ``` The remaining variables in `.env.example` have sensible defaults for local development. `BASE_URL` defaults to `http://localhost:8080`, which means the OAuth callback URL is `http://localhost:8080/auth/callback`. Register that URI in your provider's developer console. From 75e6352ff37b92b7c20610b8b29dd5de2060ac95 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 14 May 2026 21:55:52 +0000 Subject: [PATCH 14/16] Remove roadmap.md and fix header.js instant navigation Agent-Logs-Url: https://github.com/Prescott-Data/nexus-framework/sessions/cf0c72d4-33bf-4cdc-a755-2386d8a83d1c Co-authored-by: ekizito96 <87319861+ekizito96@users.noreply.github.com> --- docs/javascripts/header.js | 57 +++++++++++++++++---------- docs/reference/roadmap.md | 79 -------------------------------------- 2 files changed, 36 insertions(+), 100 deletions(-) delete mode 100644 docs/reference/roadmap.md diff --git a/docs/javascripts/header.js b/docs/javascripts/header.js index daa0f56..23703f2 100644 --- a/docs/javascripts/header.js +++ b/docs/javascripts/header.js @@ -4,12 +4,14 @@ - Moves theme palette toggle to far-right - Opens external tabs in new window */ -document.addEventListener('DOMContentLoaded', function () { +function initHeader() { /* ── 1. Version chip — live from GitHub API ─────────── */ var title = document.querySelector('.md-header__title'); - var chip; - if (title) { + var chip = document.querySelector('.nx-version-chip'); + + // Skip if already injected (instant navigation guard) + if (!chip && title) { chip = document.createElement('span'); chip.className = 'nx-version-chip'; chip.textContent = '…'; @@ -17,29 +19,34 @@ document.addEventListener('DOMContentLoaded', function () { } /* Fetch the LATEST tag from GitHub — single source of truth */ - fetch('https://api.github.com/repos/Prescott-Data/nexus-framework/tags') - .then(function (r) { return r.json(); }) - .then(function (tags) { - if (Array.isArray(tags) && tags.length > 0) { - var latestVersion = tags[0].name; - if (chip) chip.textContent = latestVersion; + if (chip) { + fetch('https://api.github.com/repos/Prescott-Data/nexus-framework/tags') + .then(function (r) { return r.json(); }) + .then(function (tags) { + if (Array.isArray(tags) && tags.length > 0) { + var latestVersion = tags[0].name; + if (chip) chip.textContent = latestVersion; - /* Also update hero badge if present */ - var heroBadge = document.getElementById('nx-hero-version-badge'); - if (heroBadge) { - heroBadge.innerHTML = latestVersion + ' · Apache 2.0 · Production Ready'; + /* Also update hero badge if present */ + var heroBadge = document.getElementById('nx-hero-version-badge'); + if (heroBadge) { + heroBadge.innerHTML = latestVersion + ' · Apache 2.0 · Production Ready'; + } } - } - }) - .catch(function () { - /* On network failure, hide chip entirely rather than showing stale data */ - if (chip) chip.style.display = 'none'; - }); + }) + .catch(function () { + /* On network failure, hide chip entirely rather than showing stale data */ + if (chip) chip.style.display = 'none'; + }); + } /* ── 2. GitHub stars widget ─────────────────────────── */ var inner = document.querySelector('.md-header__inner'); var palette = document.querySelector('form[data-md-component="palette"]'); - if (inner && palette) { + var existingGhBtn = document.querySelector('.nx-gh-btn'); + + // Skip if already injected (instant navigation guard) + if (inner && palette && !existingGhBtn) { var ghBtn = document.createElement('a'); ghBtn.href = 'https://github.com/Prescott-Data/nexus-framework'; ghBtn.target = '_blank'; @@ -77,4 +84,12 @@ document.addEventListener('DOMContentLoaded', function () { } }); -}); +} + +// Run on first load +document.addEventListener('DOMContentLoaded', initHeader); + +// Re-run on every instant navigation (Material for MkDocs SPA mode) +if (typeof document$ !== 'undefined') { + document$.subscribe(initHeader); +} diff --git a/docs/reference/roadmap.md b/docs/reference/roadmap.md deleted file mode 100644 index b10dd2d..0000000 --- a/docs/reference/roadmap.md +++ /dev/null @@ -1,79 +0,0 @@ -# Roadmap - -This page documents what is actively being built, what has been intentionally deferred, and the known limitations of the current implementation. It is kept here rather than only in GitHub Issues so that developers integrating with Nexus can plan their own work against it. - -## Active development - -### Agent identity and sessions - -The core agent auth surface is in development. This includes the agent registry, scoped agent sessions, and OBO delegation. - -| Work item | Priority | Description | -|---|---|---| -| Broker: `POST /admin/v1/agents` + agent registry table | High | Register agents with `allowed_scopes`, list and manage the registry | -| Broker: `POST /v1/agent-sessions` + enforcement | High | Short-lived scoped sessions with two-gate scope validation | -| Broker: `POST /v1/agent-sessions/obo` + JWT validation | High | OBO sessions tied to user identity and permission tier | -| Go SDK: `RequestAgentSession`, `RequestOBOSession`, `CloseAgentSession` | Medium | Extend `nexus-sdk/client.go` with agent session methods | -| CLI: `nexus agents list`, `nexus agents register`, `nexus sessions list` | Medium | CLI surface for agent management | -| OpenAPI spec: all new agent endpoints | Low | Document in `openapi.yaml` for SDK generation | - -### Python SDK - -The Python SDK exists inside `jarviscore` as `jarviscore.nexus.NexusClient`. It is being extracted into a standalone `nexus-sdk` package and published to PyPI. Once published, it will include the agent session methods (`request_agent_session`, `request_obo_session`, `close_agent_session`). - -### TypeScript SDK - -New package. Same REST API surface as the Go and Python SDKs, TypeScript ergonomics. Will be published to npm as `nexus-sdk` and include agent session support from the initial release. - -### Vault backend integration - -The Broker currently stores OAuth `client_id` and `client_secret` in PostgreSQL. A `SECRET_BACKEND` configuration option is in development that will allow the Broker to read credentials from external secret managers instead: - -| Backend | Config value | -|---|---| -| Internal PostgreSQL (current default) | `SECRET_BACKEND=internal` | -| HashiCorp Vault | `SECRET_BACKEND=hashicorp-vault` | -| AWS Secrets Manager | `SECRET_BACKEND=aws-secrets-manager` | -| GCP Secret Manager | `SECRET_BACKEND=gcp-secret-manager` | - -When an external backend is configured, provider registration stores only metadata in PostgreSQL (auth URLs, scopes) — not credentials. Credentials are written to and read from the vault at OAuth flow time. Nexus becomes a pure orchestration layer over your existing secret infrastructure. - -### mTLS between Gateway and Broker - -The current security model uses an API key for Gateway-to-Broker authentication. Mutual TLS will replace this, providing cryptographically enforced identity at the transport layer. Design is complete. Implementation is in progress. - -### OBO session webhooks - -When an OBO session is created, closed, or expires, Nexus will emit a webhook event. This allows streaming delegation activity to a SIEM, audit store, or observability pipeline without polling the audit log. - -### Sidecar deployment model - -For environments requiring zero in-process secret exposure, a Nexus sidecar will intercept outgoing agent requests on `localhost`, fetch credentials from the Gateway, sign the request, and forward it. The agent process holds no credential material. Design phase. - ---- - -## Known limitations - -### Audit log has no built-in archival - -The audit log grows without bound. There is no TTL or archival mechanism in the Broker. Implement your own archival job. See the [Audit Log reference](audit-log.md) for the recommended approach. - -### Static credential rotation requires reconnection - -For `api_key` providers, if the credential changes at the provider, there is no automated detection. You update the connection manually via the capture flow. - -### Single-region deployment - -Nexus does not support multi-region active-active deployments. The `ENCRYPTION_KEY` and PostgreSQL state make cross-region replication non-trivial. Multi-region read replicas for audit log queries are feasible; write operations must route to a single Broker primary. - -### No key rotation tooling - -`ENCRYPTION_KEY` rotation requires decrypting and re-encrypting every token row. There is no built-in migration command for this. Implement this as an offline script against the database. - ---- - -## Deferred - -**SAML provider support.** SAML is a different protocol requiring significant changes to the handshake engine. Out of scope until the core OAuth surface is stable in production. - -**RBAC for the admin API.** The Broker's admin API uses a single API key. Fine-grained RBAC is deferred. The immediate mitigation is declarative provider management through `nexus-cli` with git-enforced review gates. From 6aa2474791373c40d2f8d69ab2f2efa2deed5d2a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 14 May 2026 21:59:44 +0000 Subject: [PATCH 15/16] Remove orphaned doc files not in nav Agent-Logs-Url: https://github.com/Prescott-Data/nexus-framework/sessions/d1245265-d54d-4860-a245-fccc1535d478 Co-authored-by: ekizito96 <87319861+ekizito96@users.noreply.github.com> --- docs/concepts/how-nexus-works.md | 69 -------------- docs/concepts/sdk.md | 152 ------------------------------- 2 files changed, 221 deletions(-) delete mode 100644 docs/concepts/how-nexus-works.md delete mode 100644 docs/concepts/sdk.md diff --git a/docs/concepts/how-nexus-works.md b/docs/concepts/how-nexus-works.md deleted file mode 100644 index c1cd033..0000000 --- a/docs/concepts/how-nexus-works.md +++ /dev/null @@ -1,69 +0,0 @@ -# How Nexus Works - -Nexus is split into a control plane and a data plane. The control plane manages the lifecycle of credentials: registering providers, completing OAuth handshakes, storing tokens, and refreshing them before they expire. The data plane serves credentials to agents when they need them and injects those credentials into outgoing requests. - -Understanding this separation is the mental model for everything else in this documentation. - ---- - -## The four components - -### The Broker - -The Broker is the most sensitive component in the system. It is the only service that ever holds refresh tokens or provider API keys. Everything it stores is encrypted at rest using AES-GCM 256-bit with a key you supply and manage. The Broker never sends a refresh token to any other service. When the Gateway asks for credentials, the Broker decrypts the stored token, fetches a fresh access token from the provider, and returns only that. - -The Broker runs a background refresh loop. Before any stored token expires, the Broker fetches a new one using the stored refresh token. If a provider rejects the refresh (for example, because a user revoked access), the Broker transitions that connection to `attention_required` and records the failure in the audit log. The agent does not need to handle this case; it will simply receive an error on the next credential request and can surface it to the user. - -### The Gateway - -The Gateway is the public-facing API that agents call. It accepts REST and gRPC requests, proxies them to the Broker using an internal API key, and returns the response. Agents never reach the Broker directly. This decoupling means you can expose the Gateway to agents running outside your network without exposing the Broker. - -The Gateway handles CORS, request validation, and API versioning. From an agent's perspective, the Gateway is Nexus. - -### The Bridge - -The Bridge is a Go library that runs inside your agent process. You instantiate it with a Gateway client, and it handles credential retrieval and request signing automatically. For a persistent WebSocket or gRPC connection, you call `bridge.MaintainWebSocket()` or the gRPC equivalent and the Bridge keeps the connection authenticated through token rotations, including exponential backoff on failures. It also exposes a Prometheus `/metrics` endpoint for operational visibility. - -Use the Bridge when your agent is written in Go and makes ongoing connections to provider services. - -### The SDK - -The SDK is a thin Go client for the Gateway API. It exposes `GetToken()` and related methods, giving you direct control over credential retrieval without the connection management logic the Bridge provides. Use the SDK when you want to fetch credentials explicitly rather than having them injected automatically, or when you are implementing a non-persistent integration pattern. - ---- - -## The OAuth handshake flow - -When a user connects a new provider account, the flow runs as follows. - -Your application backend calls `POST /v1/request-connection` on the Gateway, passing the user identifier, the provider name, the requested scopes, and a return URL. The Gateway forwards this to the Broker, which generates a unique `state` parameter signed with the `STATE_KEY` and returns an authorization URL and a `connection_id`. - -Your application redirects the user's browser to the authorization URL. The user authenticates with the provider and grants consent. The provider redirects back to the Broker's callback endpoint, which validates the `state` parameter, exchanges the authorization code for tokens, encrypts the tokens, and stores them in PostgreSQL. - -The Broker then redirects the user's browser to your `return_url` with the `connection_id` and a `status=success` parameter. Your application captures the `connection_id` and stores it. That is the only thing your application needs to hold. The actual tokens stay in the Broker. - ---- - -## The credential retrieval flow - -When your agent needs to call a provider, the flow is simpler. - -Your agent calls `GET /v1/token/{connection_id}` on the Gateway. The Gateway forwards the request to the Broker, which retrieves the stored tokens, decrypts them in RAM, and returns a credential payload to the Gateway. The payload contains a `strategy` field that describes how to use the credentials and a `credentials` object with the actual values. - -The `strategy` field exists because Nexus supports multiple credential types. An OAuth2 connection returns `{"type": "oauth2"}` with an `access_token`. An API key connection returns `{"type": "api_key"}` with the key value in a field matching the provider's schema. The Bridge handles strategy interpretation automatically. If you are making direct HTTP calls, you inspect `strategy.type` and apply the credentials accordingly. - ---- - -## Connection states - -A connection moves through a small set of states during its lifetime. - -`pending` is the initial state after `request-connection` returns but before the user has completed consent. `active` is the normal operating state: tokens are valid and the background refresh loop is keeping them current. `attention_required` means the last refresh attempt failed with a provider error that cannot be retried, typically because the user revoked the application's access. `failed` means the initial token exchange failed. - -Your application should surface `attention_required` to the user so they can reconnect the provider account. - ---- - -## What Nexus does not do - -Nexus does not make API calls to providers on behalf of agents. It provides credentials; agents make the calls. Nexus does not manage authorization within your own application (which users can access which connections). It manages authentication with external providers. Nexus does not run inside your agent. The Bridge is an in-process library, but the Broker and Gateway are network services that you deploy separately. diff --git a/docs/concepts/sdk.md b/docs/concepts/sdk.md deleted file mode 100644 index 58d5731..0000000 --- a/docs/concepts/sdk.md +++ /dev/null @@ -1,152 +0,0 @@ -# The SDK - -The Nexus SDK is a Go HTTP client that wraps the Gateway's REST API. The Bridge uses it internally. Use it directly when you want explicit control over credential fetches rather than the Bridge's automatic lifecycle management. - -## Install - -```bash -go get github.com/Prescott-Data/nexus-framework/nexus-sdk@v0.1.1 -``` - -## When to use the SDK - -- Your agent makes discrete outgoing HTTP calls rather than holding a persistent connection. -- You are building orchestration logic — waiting for a user to complete a consent flow before proceeding. -- You are implementing Nexus in a language without a Bridge. The REST API is accessible from any HTTP client; the SDK is the Go reference implementation. - -## Client setup - -```go -client := oauthsdk.New( - "https://your-gateway.internal", - oauthsdk.WithRetry(oauthsdk.RetryPolicy{ - Retries: 3, - MinDelay: 200 * time.Millisecond, - MaxDelay: 5 * time.Second, - RetryOn429: true, - }), - oauthsdk.WithLogger(yourLogger), -) -``` - -The SDK never logs token bodies. - -Retries use exponential backoff with jitter. Retryable statuses: `502`, `503`, `504`, and optionally `429`. - -## The agent credential lifecycle - -Whether you use the SDK directly or via the Bridge, a Nexus-integrated agent follows five phases: - -**1. Resolution** — Fetch the strategy and credentials from the Gateway using the `connection_id`. The response tells you both the credentials and exactly how to apply them to a request. - -```go -token, err := client.GetToken(ctx, connectionID) -strategyType := token.Strategy["type"].(string) // "oauth2", "header", "hmac_payload", etc. -``` - -**2. Configuration** — Apply the strategy to your transport layer. For HTTP, inject the appropriate header or query parameter. For gRPC, inject metadata. The Bridge does this automatically; with the SDK you do it manually using the `strategy` and `credentials` fields. - -**3. Maintenance** — Cache the token locally and monitor `ExpiresAt`. Refresh proactively before expiry to avoid latency spikes during active work. Do not wait for a `401` to refresh. - -```go -if time.Until(expiresAt) < refreshBuffer { - token, err = client.RefreshConnection(ctx, connectionID) -} -``` - -**4. Rotation** — If you receive a `401` from an upstream provider despite a valid token (configuration drift), invalidate your local cache and call `GetToken` again to re-resolve. - -**5. Intervention** — If `RefreshConnection` returns `attention_required`, the provider rejected the refresh. The user must re-authorize. Do not retry — surface the need for re-delegation to your application layer. - -```go -var e oauthsdk.ErrorEnvelope -if errors.As(err, &e) && e.Code == "attention_required" { - // initiate a new consent flow for this workspace + provider -} -``` - -## Methods - -| Method | Gateway call | Returns | -|---|---|---| -| `RequestConnection(ctx, input)` | `POST /v1/request-connection` | `auth_url`, `connection_id` | -| `CheckConnection(ctx, id)` | `GET /v1/check-connection/{id}` | Status string | -| `WaitForActive(ctx, id, interval)` | Polls `CheckConnection` | `"active"` or `"failed"` | -| `GetToken(ctx, id)` | `GET /v1/token/{id}` | `TokenResponse` | -| `RefreshConnection(ctx, id)` | `POST /v1/refresh/{id}` | `TokenResponse` | - -`WaitForActive` defaults to 1500ms polling interval. Pass zero to use the default. - -## TokenResponse fields - -| Field | Type | Description | -|---|---|---| -| `AccessToken` | `string` | Short-lived access token (OAuth2 convenience field) | -| `ExpiresAt` | varies | Token expiry — Unix timestamp or RFC3339 depending on provider | -| `Scope` | `*string` | Scope string as returned by the provider | -| `Strategy` | `map[string]interface{}` | How to apply this token to an outgoing request | -| `Credentials` | `map[string]interface{}` | Full credential map — `access_token`, and optionally `refresh_token` | -| `Raw` | `map[string]any` | Raw Gateway JSON — for provider-specific fields not in typed fields | - -## Leased identity model - -The SDK enforces a strict separation between master secrets and usage secrets. Your agent receives only usage secrets — short-lived access tokens or API keys — never the refresh tokens, client secrets, or signing keys that are held in the Broker's encrypted vault. - -If your agent process is compromised, the attacker gets a usage secret valid for at most the remaining token lifetime. They cannot renew it. Once it expires, it is useless. - -This is the fundamental difference from static `.env` files: a leaked access token has a bounded blast radius. A leaked refresh token or client secret does not. - -## Sidecar model - -For environments requiring zero in-process secret exposure, the sidecar deployment model removes credentials from the agent process entirely. The agent sends unauthenticated requests to a local Nexus sidecar on `localhost`. The sidecar fetches credentials from the Gateway, signs the request, and forwards it. The agent process never holds any credential material. This is in development. - -## Agent session methods - -The following methods are being added to the SDK to support the agent identity model. See [Agent Sessions](../guides/agent-sessions.md) for the full guide. - -**Go:** - -```go -// Register is done via admin API, not SDK. -// These methods are used at agent runtime: -func (c *Client) RequestAgentSession(ctx context.Context, in AgentSessionInput) (*AgentSession, error) -func (c *Client) RequestOBOSession(ctx context.Context, in OBOSessionInput) (*OBOSession, error) -func (c *Client) CloseAgentSession(ctx context.Context, sessionID string) error -func (c *Client) GetAgentSession(ctx context.Context, sessionID string) (*AgentSession, error) -``` - -**Python:** - -```python -# pip install nexus-sdk -from nexus import NexusClient - -nexus = NexusClient(gateway_url="https://your-gateway.example.com") -session = nexus.request_agent_session(agent_id="crm-agent", provider="salesforce", scopes=["crm:contacts:read"]) -obo = nexus.request_obo_session(agent_id="ops-agent", provider="internal-ops", scopes=["acme:gliding"], user_context_token=token) -nexus.close_agent_session(session.session_id) -``` - -The Python SDK exists today inside `jarviscore` as `jarviscore.nexus.NexusClient`. It is being extracted into a standalone `nexus-sdk` package and published to PyPI. - -**TypeScript:** - -```typescript -// npm install nexus-sdk -import { NexusClient } from 'nexus-sdk' - -const nexus = new NexusClient({ gatewayUrl: 'https://your-gateway.example.com' }) -const session = await nexus.requestAgentSession({ agentId: 'crm-agent', provider: 'salesforce', scopes: ['crm:contacts:read'] }) -const obo = await nexus.requestOBOSession({ agentId: 'ops-agent', provider: 'internal-ops', scopes: ['acme:gliding'], userContextToken: token }) -await nexus.closeAgentSession(session.sessionId) -``` - -## Language availability - -| Language | Package | Status | -|---|---|---| -| Go | `github.com/Prescott-Data/nexus-framework/nexus-sdk` | Available | -| Python | `nexus-sdk` on PyPI | Extracting from jarviscore — in development | -| TypeScript | `nexus-sdk` on npm | In development | - -The REST API is stable and language-agnostic. Any HTTP client works against the Gateway's v1 endpoints. From ef9c8a4c96e417cc88047c55289752527b29d337 Mon Sep 17 00:00:00 2001 From: Muyukani Kizito Date: Fri, 15 May 2026 01:00:03 +0300 Subject: [PATCH 16/16] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/guides/integrating-agents.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/integrating-agents.md b/docs/guides/integrating-agents.md index 90453b7..f997bf6 100644 --- a/docs/guides/integrating-agents.md +++ b/docs/guides/integrating-agents.md @@ -110,7 +110,7 @@ Inspect `strategyType` and use the `payload.Credentials` map to extract the valu ### Using the TypeScript SDK ```typescript -import { NexusClient } from '@dromos/nexus-sdk'; +import { NexusClient } from '@prescott/nexus-sdk'; const client = new NexusClient({ gatewayUrl: 'https://nexus-gateway.example.com' });
+ +## Unreleased 2026-05-14 + + + +**Added** + +- **Python SDK** (`nexus-sdk-python`): full-feature-parity Python client — `get_token_by_connection_id`, `resolve_token`, `request_connection`, `check_connection`. Zero external dependencies. +- **TypeScript SDK** (`@dromos/nexus-sdk`): evolved from `nexus-mcp-adapter`. MCP token resolution, in-memory caching, authenticated transport, and `resolveToken` for stateless MCP clients. Built to `dist/`, ESM imports hardened. +- **Go SDK MCP integration**: `ResolveToken` endpoint for stateless MCP clients — workspace and provider-scoped token resolution with TTL caching. +- **Multi-strategy credential support** across all three SDKs: handles `oauth2`, `api_key`, `basic_auth`, `aws_sigv4`, `query_param`, and `hmac_payload` strategies without caller-side branching. +- **Automated release workflow**: GitHub Actions CI/CD pipeline, bumped `VERSION` to `0.2.3`. +- **Agent auth proposal** (`AGENT_AUTH_PROPOSAL.md`): full design document for agent identity, OBO sessions, scoped session TTLs, and custom scope enforcement. +- **SDK documentation**: comprehensive reference pages for Go, TypeScript, and Python SDKs including install, method signatures, MCP integration examples, and error handling. + +**Fixed** + +- TypeScript SDK: `Bearer` token type normalized to RFC 6750 capitalization (was `bearer`). +- TypeScript SDK: package entry pointed at compiled `dist/`, not `.ts` source. +- Gateway: `resolve` route wired; ESM import errors resolved in adapter. +- Adapter/Gateway: token TTL hardened, stdio safety improved, error handling tightened. +- MCP adapter smoke test added against live Gateway. + +

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ⅇ(W2U4tyx!|yXbMI4^YmE# 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