-
Notifications
You must be signed in to change notification settings - Fork 20
docs: improve README with setup instructions #288
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c01dd21
b0e7b82
8dc45cb
1bcf712
3b8b4da
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,15 +1,17 @@ | ||
| <p align="center"> | ||
| <br /> | ||
| <img | ||
| alt="Hyperledger Aries logo" | ||
| src="https://raw.githubusercontent.com/hyperledger/aries-framework-javascript/aa31131825e3331dc93694bc58414d955dcb1129/images/aries-logo.png" | ||
| height="250px" | ||
| alt="CREDEBL logo" | ||
| src="https://raw.githubusercontent.com/credebl/.github/main/logo.svg" | ||
| height="150px" | ||
| /> | ||
| </p> | ||
| <h1 align="center"><b>Aries Framework JavaScript REST API</b></h1> | ||
|
|
||
| # Agent Controller REST API | ||
|
|
||
| <p align="center"> | ||
| <a | ||
| href="https://raw.githubusercontent.com/hyperledger/aries-framework-javascript-ext/main/LICENSE" | ||
| href="https://raw.githubusercontent.com/credebl/agent-controller/main/LICENSE" | ||
| ><img | ||
| alt="License" | ||
| src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" | ||
|
|
@@ -19,128 +21,241 @@ | |
| alt="typescript" | ||
| src="https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg" | ||
| /></a> | ||
| <a href="https://www.npmjs.com/package/@aries-framework/rest" | ||
| <a href="https://github.com/credebl/agent-controller" | ||
| ><img | ||
| alt="@aries-framework/rest version" | ||
| src="https://img.shields.io/npm/v/@aries-framework/rest" | ||
| alt="GitHub" | ||
| src="https://img.shields.io/github/stars/credebl/agent-controller?style=social" | ||
| /></a> | ||
|
|
||
| </p> | ||
| <br /> | ||
|
|
||
| The Aries Framework JavaScript REST API is the most convenient way for self-sovereign identity (SSI) developers to interact with SSI agents. | ||
| The Agent Controller REST API is the most convenient way for self-sovereign identity (SSI) developers to interact with SSI agents. | ||
|
|
||
| - ⭐ **Endpoints** to create connections, issue credentials, and request proofs. | ||
| - 💻 **CLI** that makes it super easy to start an instance of the REST API. | ||
| - 🌐 **Interoperable** with all major Aries implementations. | ||
|
|
||
| ### Quick start | ||
| ## Quick Start | ||
|
|
||
| The REST API provides an OpenAPI schema that can easily be viewed using the SwaggerUI that is provided with the server. The docs can be viewed on the `/docs` endpoint (e.g. http://localhost:3000/docs). | ||
| The REST API provides an OpenAPI schema that can easily be viewed using the SwaggerUI that is provided with the server. The docs can be viewed on the `/docs` endpoint (e.g. http://localhost:4001/docs, where `4001` is the admin port configured in `samples/cliConfig.json`). | ||
|
|
||
| > The OpenAPI spec is generated from the model classes used by Aries Framework JavaScript. Due to limitations in the inspection of these classes, the generated schema does not always exactly match the expected format. Keep this in mind when using this package. If you encounter any issues, feel free to open an issue. | ||
| > The OpenAPI spec is generated from the model classes used by Credo-TS. Due to limitations in the inspection of these classes, the generated schema does not always exactly match the expected format. Keep this in mind when using this package. If you encounter any issues, feel free to open an issue. | ||
|
|
||
| #### Using the CLI | ||
| ### Using the CLI | ||
|
|
||
| Using the CLI is the easiest way to get started with the REST API. | ||
|
|
||
| **With Docker (easiest)** | ||
| > **Note**: The preferred operating system for development and deployment is **Ubuntu LTS (20.04 or later)**. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- README context ---'
sed -n '40,54p' README.md
printf '%s\n' '--- repository references to Ubuntu support ---'
rg -n -i 'ubuntu|20\.04|22\.04|24\.04|operating system' README.md .github 2>/dev/null || trueRepository: credebl/agent-controller Length of output: 1647 🌐 Web query:
💡 Result: Ubuntu 20.04 LTS (Focal Fossa) reached the end of its standard security maintenance period on May 31, 2025 [1][2][3]. Current Support Status: As of today, August 13, 2026, Ubuntu 20.04 LTS is no longer receiving standard security updates [4][3]. Systems running this version are now reliant on Extended Security Maintenance (ESM), which is available through an Ubuntu Pro subscription [2][5][6]. With an active Ubuntu Pro subscription, security maintenance for Ubuntu 20.04 LTS is extended until April 2030, with an additional option for Legacy Support to extend coverage until April 2032 [2][7][6]. Ubuntu Release Cycle Overview: Ubuntu follows a strict time-based release cycle, with new versions published every six months [8]. Long Term Support (LTS) releases occur every two years (in April of even-numbered years) and are the only releases that receive extended maintenance commitments [8]. - Standard Support: LTS releases receive five years of standard security maintenance for packages in the 'main' repository [2][8]. - Extended Security Maintenance (ESM): Following the end of standard support, ESM provides continued security updates through Ubuntu Pro for both 'main' and 'universe' repository packages [7][5][8]. Citations:
Raise the minimum supported Ubuntu release. Ubuntu 20.04 is no longer under standard security maintenance. Set the minimum to an actively supported LTS, or require Ubuntu Pro/ESM for Ubuntu 20.04. Align 🤖 Prompt for AI AgentsSource: MCP tools |
||
|
|
||
| Make sure you have [Docker](https://docs.docker.com/get-docker/) installed. To get a minimal version of the agent running the following command is sufficient: | ||
| ### Clone the Repository | ||
|
|
||
| ```sh | ||
| docker run -p 5000:5000 -p 3000:3000 ghcr.io/hyperledger/afj-rest \ | ||
| --label "AFJ Rest" \ | ||
| --wallet-id "walletId" \ | ||
| --wallet-key "walletKey" \ | ||
| --endpoint http://localhost:5000 \ | ||
| --admin-port 3000 \ | ||
| --outbound-transport http \ | ||
| --inbound-transport http 5000 | ||
| git clone https://github.com/credebl/agent-controller.git | ||
| cd agent-controller | ||
| ``` | ||
|
|
||
| See the [docker-compose.yml](https://github.com/hyperledger/aries-framework-javascript-ext/tree/main/docker-compose.yml) file for an example of using the afj-rest image with Docker Compose. | ||
| ## Getting Started | ||
|
|
||
| > ⚠️ The Docker image is not optimized for ARM architectures and won't work on Apple Silicon Macs. See the **Directly on Computer** below on how to run it directly on your computer without Docker. | ||
| ### Method 1: Local Development (Recommended for Development) | ||
|
|
||
| **Directly on Computer** | ||
| <details> | ||
| <summary><strong>Local Development Setup</strong></summary> | ||
|
|
||
| To run AFJ REST API directly on your computer you need to have the indy-sdk installed. Follow the Indy [installation steps](https://github.com/hyperledger/aries-framework-javascript/tree/main/docs/libindy) for your platform and verify Indy is installed. | ||
| #### Prerequisites | ||
|
|
||
| Once you have installed Indy, you can start the REST server using the following command: | ||
| - Node.js version **20 (LTS)** (tested and recommended) | ||
| - Yarn package manager | ||
|
|
||
| ```sh | ||
| npx -p @aries-framework/rest afj-rest start \ | ||
| --label "AFJ Rest" \ | ||
| --wallet-id "walletId" \ | ||
| --wallet-key "walletKey" \ | ||
| --endpoint http://localhost:5000 \ | ||
| --admin-port 3000 \ | ||
| --outbound-transport http \ | ||
| --inbound-transport http 5000 | ||
| ``` | ||
| > **Note**: Node.js 20 (LTS) is used in CI and is the recommended version. The Docker image builds and runs on Node.js 22, so newer LTS versions should also work, but thorough testing is recommended before using them. | ||
|
|
||
| **Configuration** | ||
| #### Steps | ||
|
|
||
| To find out all available configuration options from the CLI, you can run the CLI command with `--help`. This will print a full list of all available options. | ||
| 1. **Install dependencies:** | ||
|
|
||
| ```sh | ||
| # With docker | ||
| docker run ghcr.io/hyperledger/afj-rest --help | ||
| ```sh | ||
| yarn install | ||
| ``` | ||
|
|
||
| # Directly on computer | ||
| npx -p @aries-framework/rest afj-rest start --help | ||
| ``` | ||
| 2. **Build the project:** | ||
|
|
||
| ```sh | ||
| yarn build | ||
| ``` | ||
|
|
||
| 3. **Start development server:** | ||
| ```sh | ||
| yarn dev | ||
| ``` | ||
|
|
||
| The application will start in development mode with hot reloading enabled. | ||
|
|
||
| </details> | ||
|
|
||
| ### Method 2: Build and Run Local Docker Image | ||
|
|
||
| <details> | ||
| <summary><strong>Docker Build Instructions</strong></summary> | ||
|
|
||
| If you want to build your own Docker image locally and run it: | ||
|
|
||
| #### Steps | ||
|
|
||
| 1. **Build the Docker image:** | ||
|
|
||
| ```sh | ||
| docker build -t agent-controller:local . | ||
| ``` | ||
|
|
||
| 2. **Run the container:** | ||
| ```sh | ||
| docker run --network host \ | ||
| -v "$(pwd)/samples/cliConfig.json:/app/cliConfig.json" \ | ||
| agent-controller:local --config /app/cliConfig.json | ||
| ``` | ||
|
Comment on lines
+111
to
+114
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- README.md lines 90-180 ---'
sed -n '90,180p' README.md
printf '%s\n' '--- README.md lines 200-285 ---'
sed -n '200,285p' README.md
printf '%s\n' '--- samples/cliConfig.json ---'
cat samples/cliConfig.json
printf '%s\n' '--- PostgreSQL-related repository references ---'
rg -n -i 'postgres|5432|cliConfig|fileServerToken|PolygonModule' README.md samples package.json docker-compose.yml .github 2>/dev/null || trueRepository: credebl/agent-controller Length of output: 11502 🏁 Script executed: #!/bin/bash
set -eu
python3 - <<'PY'
import json
from pathlib import Path
config = json.loads(Path("samples/cliConfig.json").read_text())
print({
"walletType": config.get("walletType"),
"walletUrl": config.get("walletUrl"),
"walletAccount": config.get("walletAccount"),
"walletAdminAccount": config.get("walletAdminAccount"),
})
PY
printf '%s\n' '--- Docker build/runtime files ---'
git ls-files | grep -E '(^|/)(Dockerfile[^/]*|docker-compose\.yml)$' | while IFS= read -r file; do
printf '%s\n' "--- $file ---"
cat "$file"
doneRepository: credebl/agent-controller Length of output: 1590 Add PostgreSQL setup to Method 2.
🤖 Prompt for AI AgentsSource: MCP tools |
||
|
|
||
| This method gives you full control over the Docker build process and allows you to customize the image as needed. | ||
|
|
||
| > **OS Compatibility**: This containerized method has been tested and works on **WSL**, **Ubuntu**, and **Fedora**. | ||
| > | ||
| > `--network host` is Linux-only. On **macOS / Windows (Docker Desktop)** use port mapping instead: | ||
| > | ||
| > ```sh | ||
| > docker run -p 4001:4001 -p 4002:4002 \ | ||
| > -v "$(pwd)/samples/cliConfig.json:/app/cliConfig.json" \ | ||
| > agent-controller:local --config /app/cliConfig.json | ||
| > ``` | ||
| > | ||
| > When using port mapping, set `walletUrl` to `host.docker.internal:5432` in the config so the container can reach a PostgreSQL instance running on your host. | ||
|
|
||
| </details> | ||
|
|
||
| ### Method 3: Using Prebuilt Docker Image with PostgreSQL | ||
|
|
||
| <details> | ||
| <summary><strong>PostgreSQL + Prebuilt Image Setup</strong></summary> | ||
|
|
||
| It is also possible to configure the REST API using a json config. When providing a lot of configuration options, this is definitely the easiest way to use configure the agent. All properties should use camelCase for the key names. See the example [CLI Config](https://github.com/hyperledger/aries-framework-javascript-ext/tree/main/packages/rest/samples/cliConfig.json) for an detailed example. | ||
| This method uses the official prebuilt Docker image with a PostgreSQL database setup. | ||
|
|
||
| #### Prerequisites | ||
|
|
||
| The `samples/cliConfig.json` file must reference a PostgreSQL wallet (it already uses `walletType: "postgres"`). Optionally, you can tune the connection pool by adding these settings: | ||
|
|
||
| ```json | ||
| { | ||
| "label": "AFJ Rest Agent", | ||
| "walletId": "walletId", | ||
| "walletKey": "walletKey" | ||
| // ... other config options ... // | ||
| "walletConnectTimeout": 30, | ||
| "walletMaxConnections": 90, | ||
| "walletIdleTimeout": 30 | ||
| } | ||
| ``` | ||
|
|
||
| As a final option it is possible to configure the agent using environment variables. All properties are prefixed by `AFJ_REST` transformed to UPPER_SNAKE_CASE. | ||
| > **Note**: These settings are optional connection-pool tunables for the PostgreSQL wallet. They map to the `wallet-connect-timeout`, `wallet-max-connections`, and `wallet-idle-timeout` CLI options, the `AFJ_REST_WALLET_CONNECT_TIMEOUT`, `AFJ_REST_WALLET_MAX_CONNECTIONS`, and `AFJ_REST_WALLET_IDLE_TIMEOUT` environment variables, or the `CONNECT_TIMEOUT`, `MAX_CONNECTIONS`, and `IDLE_TIMEOUT` environment-variable fallbacks. They are not required for the agent to start. | ||
|
|
||
| ```sh | ||
| # With docker | ||
| docker run -e AFJ_REST_WALLET_KEY=my-secret-key ghcr.io/hyperledger/afj-rest ... | ||
| #### Steps | ||
|
|
||
| # Directly on computer | ||
| AFJ_REST_WALLET_KEY="my-secret-key" npx -p @aries-framework/rest afj-rest start ... | ||
| ``` | ||
| 1. **Start PostgreSQL database:** | ||
|
|
||
| ```sh | ||
| docker run --name agent-controller-postgres -d \ | ||
| -e POSTGRES_DB=postgres \ | ||
| -e POSTGRES_USER=postgres \ | ||
| -e POSTGRES_PASSWORD=postgres \ | ||
| -p 5432:5432 \ | ||
| postgres:16 | ||
| ``` | ||
|
|
||
| 2. **Run the Agent Controller:** | ||
| ```sh | ||
| docker run --network host \ | ||
| -v "$(pwd)/samples/cliConfig.json:/app/cliConfig.json" \ | ||
| ghcr.io/credebl/credo-controller:latest \ | ||
| --config /app/cliConfig.json | ||
| ``` | ||
|
|
||
| This method uses the official prebuilt image and connects to your local PostgreSQL instance. | ||
|
|
||
| > **Note**: The Docker image is still published under the legacy name `ghcr.io/credebl/credo-controller`. The prebuilt image and `docker compose` entry points have not yet been renamed to match the new "Agent Controller" project name. | ||
| > | ||
| > **OS Compatibility**: This containerized method has been tested and works on **WSL**, **Ubuntu**, and **Fedora**. | ||
|
Comment on lines
+176
to
+178
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Remove the blank line inside the blockquote. Remove the empty quoted line at Line 177 or keep the entire note in one continuous blockquote. Static analysis reports MD028 for this block. 🧰 Tools🪛 markdownlint-cli2 (0.23.2)[warning] 177-177: Blank line inside blockquote (MD028, no-blanks-blockquote) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
| > | ||
| > `--network host` is Linux-only. On **macOS / Windows (Docker Desktop)** use port mapping instead: | ||
| > | ||
| > ```sh | ||
| > docker run -p 4001:4001 -p 4002:4002 \ | ||
| > -v "$(pwd)/samples/cliConfig.json:/app/cliConfig.json" \ | ||
| > ghcr.io/credebl/credo-controller:latest \ | ||
| > --config /app/cliConfig.json | ||
| > ``` | ||
| > | ||
| > When using port mapping, set `walletUrl` to `host.docker.internal:5432` in the config so the container can reach the PostgreSQL instance running on your host. | ||
|
|
||
| #### Alternative: Using .env File | ||
|
|
||
| The repository includes an agent environment sample file. For a quick start: | ||
|
|
||
| 1. **Rename the sample environment file:** | ||
|
|
||
| ```sh | ||
| cp .env.sample .env # (if available in the repository) | ||
| ``` | ||
|
|
||
| 2. **Run using the binary directly:** | ||
| ```sh | ||
| yarn build | ||
| ./bin/afj-rest.js --config ./samples/cliConfig.json | ||
| ``` | ||
|
|
||
| > **Note**: `afj-rest.js` is the legacy binary name, kept for backward compatibility. The CLI entrypoint is defined in the `bin` field of `package.json`. | ||
|
|
||
| </details> | ||
|
|
||
| ## Configuration | ||
|
|
||
| The agent can be configured in three ways: | ||
|
|
||
| 1. **CLI options**: Run the CLI with `--help` to print the full list of available options. | ||
|
|
||
| ```sh | ||
| # With Docker | ||
| docker run ghcr.io/credebl/credo-controller:latest --help | ||
|
|
||
| # Directly on computer | ||
| ./bin/afj-rest.js start --help | ||
| ``` | ||
|
|
||
| 2. **JSON config file**: When providing a lot of configuration options, pass a JSON file with `--config`. All properties should use camelCase for the key names. See [samples/cliConfig.json](samples/cliConfig.json) for a complete example. | ||
| 3. **Environment variables**: All properties are prefixed with `AFJ_REST` and use UPPER_SNAKE_CASE (e.g. `AFJ_REST_WALLET_KEY=my-secret-key ./bin/afj-rest.js start ...`). | ||
|
|
||
| ## Development | ||
|
|
||
| #### Starting Own Server | ||
| ### Starting Your Own Server | ||
|
|
||
| Starting your own server is more involved than using the CLI, but allows more fine-grained control over the settings and allows you to extend the REST API with custom endpoints. | ||
|
|
||
| You can create an agent instance and import the `startServer` method from the `rest` package. That's all you have to do. | ||
|
|
||
| ```ts | ||
| import { startServer } from '@aries-framework/rest' | ||
| import { Agent } from '@aries-framework/core' | ||
| import { agentDependencies } from '@aries-framework/node' | ||
| import { startServer } from '@credo-ts/rest' | ||
| import { Agent } from '@credo-ts/core' | ||
| import { agentDependencies } from '@credo-ts/node' | ||
|
|
||
| // The startServer function requires an initialized agent and a port. | ||
| // An example of how to setup an agent is located in the `samples` directory. | ||
|
coderabbitai[bot] marked this conversation as resolved.
|
||
| const run = async () => { | ||
| const agent = new Agent( | ||
| { | ||
| // ... AFJ Config ... // | ||
| // ... Agent Config ... // | ||
| }, | ||
| agentDependencies | ||
| agentDependencies, | ||
| ) | ||
| await agent.initialize() | ||
| await startServer(agent, { port: 3000 }) | ||
| } | ||
|
|
||
| // A Swagger (OpenAPI) definition is exposed on http://localhost:3000/docs | ||
| run() | ||
| ``` | ||
|
|
||
| ### WebSocket & webhooks | ||
| ### WebSocket & Webhooks | ||
|
|
||
| The REST API provides the option to connect as a client and receive events emitted from your agent using WebSocket and webhooks. | ||
|
|
||
|
|
@@ -155,7 +270,7 @@ The currently supported events are: | |
|
|
||
| When using the CLI, a webhook url can be specified using the `--webhook-url` config option. | ||
|
|
||
| When using the REST server as an library, the WebSocket server and webhook url can be configured in the `startServer` and `setupServer` methods. | ||
| When using the REST server as a library, the WebSocket server and webhook url can be configured in the `startServer` and `setupServer` methods. | ||
|
|
||
| ```ts | ||
| // You can either call startServer() or setupServer() and pass the ServerConfig interface with a webhookUrl and/or a WebSocket server | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.