macro-agent 0.0.13 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +59 -0
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js +10 -4
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/cli/acp.d.ts +6 -0
- package/dist/cli/acp.d.ts.map +1 -1
- package/dist/cli/acp.js +16 -2
- package/dist/cli/acp.js.map +1 -1
- package/dist/map/adapter/index.d.ts +1 -1
- package/dist/map/adapter/index.d.ts.map +1 -1
- package/dist/map/adapter/index.js +1 -1
- package/dist/map/adapter/index.js.map +1 -1
- package/dist/map/utils/address-translation.d.ts +99 -0
- package/dist/map/utils/address-translation.d.ts.map +1 -0
- package/dist/map/utils/address-translation.js +285 -0
- package/dist/map/utils/address-translation.js.map +1 -0
- package/dist/map/utils/index.d.ts +7 -0
- package/dist/map/utils/index.d.ts.map +1 -0
- package/dist/map/utils/index.js +7 -0
- package/dist/map/utils/index.js.map +1 -0
- package/dist/server/combined-server.d.ts.map +1 -1
- package/dist/server/combined-server.js +8 -1
- package/dist/server/combined-server.js.map +1 -1
- package/dist/store/event-store.js +9 -2
- package/dist/store/event-store.js.map +1 -1
- package/dist/store/types/agents.d.ts +2 -0
- package/dist/store/types/agents.d.ts.map +1 -1
- package/package.json +4 -4
- package/references/acp-factory-ref/CHANGELOG.md +33 -0
- package/references/acp-factory-ref/LICENSE +21 -0
- package/references/acp-factory-ref/README.md +341 -0
- package/references/acp-factory-ref/package-lock.json +3102 -0
- package/references/acp-factory-ref/package.json +96 -0
- package/references/acp-factory-ref/python/CHANGELOG.md +33 -0
- package/references/acp-factory-ref/python/LICENSE +21 -0
- package/references/acp-factory-ref/python/Makefile +57 -0
- package/references/acp-factory-ref/python/README.md +253 -0
- package/references/acp-factory-ref/python/pyproject.toml +73 -0
- package/references/acp-factory-ref/python/tests/__init__.py +0 -0
- package/references/acp-factory-ref/python/tests/e2e/__init__.py +1 -0
- package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +349 -0
- package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +165 -0
- package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +296 -0
- package/references/acp-factory-ref/python/tests/test_client_handler.py +543 -0
- package/references/acp-factory-ref/python/tests/test_pushable.py +199 -0
- package/references/claude-code-acp/.github/workflows/ci.yml +45 -0
- package/references/claude-code-acp/.github/workflows/publish.yml +34 -0
- package/references/claude-code-acp/.prettierrc.json +4 -0
- package/references/claude-code-acp/CHANGELOG.md +249 -0
- package/references/claude-code-acp/LICENSE +222 -0
- package/references/claude-code-acp/README.md +53 -0
- package/references/claude-code-acp/docs/RELEASES.md +24 -0
- package/references/claude-code-acp/eslint.config.js +48 -0
- package/references/claude-code-acp/package-lock.json +4570 -0
- package/references/claude-code-acp/package.json +88 -0
- package/references/claude-code-acp/scripts/release.sh +119 -0
- package/references/claude-code-acp/src/acp-agent.ts +2079 -0
- package/references/claude-code-acp/src/index.ts +26 -0
- package/references/claude-code-acp/src/lib.ts +38 -0
- package/references/claude-code-acp/src/mcp-server.ts +911 -0
- package/references/claude-code-acp/src/settings.ts +522 -0
- package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +5 -0
- package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +6 -0
- package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +479 -0
- package/references/claude-code-acp/src/tests/acp-agent.test.ts +1502 -0
- package/references/claude-code-acp/src/tests/extract-lines.test.ts +103 -0
- package/references/claude-code-acp/src/tests/fork-session.test.ts +335 -0
- package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +334 -0
- package/references/claude-code-acp/src/tests/settings.test.ts +617 -0
- package/references/claude-code-acp/src/tests/skills-options.test.ts +187 -0
- package/references/claude-code-acp/src/tests/tools.test.ts +318 -0
- package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +558 -0
- package/references/claude-code-acp/src/tools.ts +819 -0
- package/references/claude-code-acp/src/utils.ts +171 -0
- package/references/claude-code-acp/tsconfig.json +18 -0
- package/references/claude-code-acp/vitest.config.ts +19 -0
- package/references/multi-agent-protocol/.sudocode/issues.jsonl +111 -0
- package/references/multi-agent-protocol/.sudocode/specs.jsonl +13 -0
- package/references/multi-agent-protocol/LICENSE +21 -0
- package/references/multi-agent-protocol/README.md +113 -0
- package/references/multi-agent-protocol/docs/00-design-specification.md +496 -0
- package/references/multi-agent-protocol/docs/01-open-questions.md +1050 -0
- package/references/multi-agent-protocol/docs/02-wire-protocol.md +296 -0
- package/references/multi-agent-protocol/docs/03-streaming-semantics.md +252 -0
- package/references/multi-agent-protocol/docs/04-error-handling.md +231 -0
- package/references/multi-agent-protocol/docs/05-connection-model.md +244 -0
- package/references/multi-agent-protocol/docs/06-visibility-permissions.md +243 -0
- package/references/multi-agent-protocol/docs/07-federation.md +259 -0
- package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +253 -0
- package/references/multi-agent-protocol/docs/09-authentication.md +680 -0
- package/references/multi-agent-protocol/docs/10-mail-protocol.md +553 -0
- package/references/multi-agent-protocol/docs/agent-iam-integration.md +877 -0
- package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +459 -0
- package/references/multi-agent-protocol/docs/git-transport-draft.md +251 -0
- package/references/multi-agent-protocol/docs-site/Gemfile +22 -0
- package/references/multi-agent-protocol/docs-site/README.md +82 -0
- package/references/multi-agent-protocol/docs-site/_config.yml +91 -0
- package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +20 -0
- package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +42 -0
- package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +34 -0
- package/references/multi-agent-protocol/docs-site/examples/full-integration.md +510 -0
- package/references/multi-agent-protocol/docs-site/examples/index.md +138 -0
- package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +282 -0
- package/references/multi-agent-protocol/docs-site/examples/task-queue.md +399 -0
- package/references/multi-agent-protocol/docs-site/getting-started/index.md +98 -0
- package/references/multi-agent-protocol/docs-site/getting-started/installation.md +219 -0
- package/references/multi-agent-protocol/docs-site/getting-started/overview.md +172 -0
- package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +237 -0
- package/references/multi-agent-protocol/docs-site/index.md +136 -0
- package/references/multi-agent-protocol/docs-site/protocol/authentication.md +391 -0
- package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +376 -0
- package/references/multi-agent-protocol/docs-site/protocol/design.md +284 -0
- package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +312 -0
- package/references/multi-agent-protocol/docs-site/protocol/federation.md +449 -0
- package/references/multi-agent-protocol/docs-site/protocol/index.md +129 -0
- package/references/multi-agent-protocol/docs-site/protocol/permissions.md +398 -0
- package/references/multi-agent-protocol/docs-site/protocol/streaming.md +353 -0
- package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +369 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +357 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/client.md +380 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/index.md +62 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/server.md +453 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/types.md +468 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +375 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +405 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +352 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +89 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +360 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +446 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +363 -0
- package/references/multi-agent-protocol/docs-site/sdk/index.md +206 -0
- package/references/multi-agent-protocol/package-lock.json +3886 -0
- package/references/multi-agent-protocol/package.json +56 -0
- package/references/multi-agent-protocol/schema/meta.json +467 -0
- package/references/multi-agent-protocol/schema/schema.json +2558 -0
- package/src/agent/__tests__/agent-manager.test.ts +67 -1
- package/src/agent/agent-manager.ts +10 -4
- package/src/cli/__tests__/stable-instance-id.test.ts +57 -0
- package/src/cli/acp.ts +17 -2
- package/src/map/adapter/index.ts +3 -0
- package/src/server/combined-server.ts +10 -0
- package/src/store/event-store.ts +10 -3
- package/src/store/types/agents.ts +2 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Home
|
|
3
|
+
layout: home
|
|
4
|
+
nav_order: 1
|
|
5
|
+
description: "Multi-Agent Protocol (MAP) - A JSON-RPC based protocol for observing, coordinating, and routing messages within multi-agent AI systems."
|
|
6
|
+
permalink: /
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Multi-Agent Protocol (MAP)
|
|
10
|
+
{: .fs-9 }
|
|
11
|
+
|
|
12
|
+
A JSON-RPC based protocol for observing, coordinating, and routing messages within multi-agent AI systems.
|
|
13
|
+
{: .fs-6 .fw-300 }
|
|
14
|
+
|
|
15
|
+
[Get Started](/multi-agent-protocol/getting-started/){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }
|
|
16
|
+
[View on GitHub](https://github.com/multi-agent-protocol/multi-agent-protocol){: .btn .fs-5 .mb-4 .mb-md-0 }
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Why MAP?
|
|
21
|
+
|
|
22
|
+
Unlike protocols designed for single-agent interaction (ACP) or peer-to-peer agent delegation (A2A), MAP provides a **window into** a multi-agent system with visibility into its internal structure, agent relationships, and message flows.
|
|
23
|
+
|
|
24
|
+
{: .highlight }
|
|
25
|
+
MAP is the protocol for building **observable, coordinated** multi-agent systems.
|
|
26
|
+
|
|
27
|
+
### Key Features
|
|
28
|
+
|
|
29
|
+
| Feature | Description |
|
|
30
|
+
|:--------|:------------|
|
|
31
|
+
| **Real-time Streaming** | Subscribe to events with backpressure support |
|
|
32
|
+
| **Auto-reconnection** | Exponential backoff with subscription restoration |
|
|
33
|
+
| **Permission System** | 4-layer access control (system, participant, scope, agent) |
|
|
34
|
+
| **Federation** | Connect multiple MAP systems with envelope-based routing |
|
|
35
|
+
| **Causal Ordering** | Events released in dependency order |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Protocol Landscape
|
|
40
|
+
|
|
41
|
+
| Protocol | Relationship | Visibility | Primary Use |
|
|
42
|
+
|:---------|:-------------|:-----------|:------------|
|
|
43
|
+
| MCP | Agent → Tool | N/A | Tool invocation |
|
|
44
|
+
| ACP | Client → Agent | Opaque | Single-agent sessions |
|
|
45
|
+
| A2A | Agent → Agent (peer) | Opaque | Cross-org delegation |
|
|
46
|
+
| **MAP** | Client → System | **Transparent** | Internal orchestration |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Quick Example
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
import { MAPServer } from "@multi-agent-protocol/sdk/server";
|
|
54
|
+
import { ClientConnection, AgentConnection } from "@multi-agent-protocol/sdk";
|
|
55
|
+
|
|
56
|
+
// Create a MAP server
|
|
57
|
+
const server = new MAPServer({ name: "MyServer" });
|
|
58
|
+
|
|
59
|
+
// Register an agent
|
|
60
|
+
const agent = new AgentConnection(stream, {
|
|
61
|
+
name: "Worker",
|
|
62
|
+
role: "processor"
|
|
63
|
+
});
|
|
64
|
+
await agent.connect();
|
|
65
|
+
|
|
66
|
+
// Subscribe to events from a client
|
|
67
|
+
const client = new ClientConnection(stream, { name: "Dashboard" });
|
|
68
|
+
await client.connect();
|
|
69
|
+
|
|
70
|
+
const subscription = await client.subscribe({
|
|
71
|
+
eventTypes: ["agent.*"]
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
for await (const event of subscription) {
|
|
75
|
+
console.log(event.type, event.data);
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Three Participant Types
|
|
82
|
+
|
|
83
|
+
```mermaid
|
|
84
|
+
flowchart TB
|
|
85
|
+
subgraph Server["MAP Server"]
|
|
86
|
+
EventBus["EventBus"]
|
|
87
|
+
Agents["Agents"]
|
|
88
|
+
Scopes["Scopes"]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
Agent1["Agent"] --> Server
|
|
92
|
+
Client["Client"] --> Server
|
|
93
|
+
Agent2["Agent"] --> Server
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
| Type | Role | Capabilities |
|
|
97
|
+
|:-----|:-----|:-------------|
|
|
98
|
+
| **Agent** | Worker that processes tasks | Register, join scopes, send/receive messages |
|
|
99
|
+
| **Client** | Observer and requester | Subscribe to events, query state, send messages |
|
|
100
|
+
| **Gateway** | Federation bridge | Route between MAP systems |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Protocol Methods
|
|
105
|
+
|
|
106
|
+
The protocol defines **27 methods** across three tiers:
|
|
107
|
+
|
|
108
|
+
### Core (Required)
|
|
109
|
+
`map/connect`, `map/disconnect`, `map/send`, `map/subscribe`, `map/unsubscribe`, `map/agents/list`, `map/agents/get`
|
|
110
|
+
|
|
111
|
+
### Structure (Recommended)
|
|
112
|
+
Agent lifecycle (`register`, `spawn`, `unregister`, `update`, `stop`, `suspend`, `resume`), scope management (`scopes/create`, `join`, `leave`), and structure queries
|
|
113
|
+
|
|
114
|
+
### Extensions (Optional)
|
|
115
|
+
Federation (`federation/connect`, `federation/route`), session management, and steering (`map/inject`)
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Getting Started
|
|
120
|
+
|
|
121
|
+
<div class="code-example" markdown="1">
|
|
122
|
+
**Installation**
|
|
123
|
+
```bash
|
|
124
|
+
npm install @multi-agent-protocol/sdk
|
|
125
|
+
```
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
Ready to build? Check out the [Getting Started Guide](/multi-agent-protocol/getting-started/) to run your first MAP server in 5 minutes.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## About
|
|
133
|
+
|
|
134
|
+
Multi-Agent Protocol is open source and available under the [MIT License](https://github.com/multi-agent-protocol/multi-agent-protocol/blob/main/LICENSE).
|
|
135
|
+
|
|
136
|
+
Created and maintained by the [sudocode](https://github.com/sudocode-ai) team.
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Authentication
|
|
3
|
+
parent: Protocol
|
|
4
|
+
nav_order: 6
|
|
5
|
+
description: "Authentication methods and flows"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Authentication
|
|
9
|
+
{: .no_toc }
|
|
10
|
+
|
|
11
|
+
Authentication methods, negotiation flows, and security considerations.
|
|
12
|
+
{: .fs-6 .fw-300 }
|
|
13
|
+
|
|
14
|
+
## Table of contents
|
|
15
|
+
{: .no_toc .text-delta }
|
|
16
|
+
|
|
17
|
+
1. TOC
|
|
18
|
+
{:toc}
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Design Principles
|
|
23
|
+
|
|
24
|
+
1. **Pluggable mechanisms** - Support multiple auth methods with a standard negotiation flow
|
|
25
|
+
2. **Sensible defaults** - Built-in support for common methods (bearer tokens, API keys)
|
|
26
|
+
3. **Transport-aware** - Acknowledge that some auth happens at transport layer (mTLS)
|
|
27
|
+
4. **Optional for local** - No auth overhead for trusted local connections (stdio)
|
|
28
|
+
5. **Federation-ready** - Credentials can carry claims for cross-server authentication
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Authentication Methods
|
|
33
|
+
|
|
34
|
+
| Method | Description | Use Case |
|
|
35
|
+
|:-------|:------------|:---------|
|
|
36
|
+
| `none` | No authentication | Local subprocess agents, development |
|
|
37
|
+
| `bearer` | Bearer token (JWT or opaque) | OAuth2, IdP integration, M2M tokens |
|
|
38
|
+
| `api-key` | Simple API key | Simple integrations, internal services |
|
|
39
|
+
| `mtls` | Mutual TLS (transport layer) | High-security service-to-service |
|
|
40
|
+
|
|
41
|
+
### Extension Methods
|
|
42
|
+
|
|
43
|
+
Custom authentication methods use the `x-` prefix:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
x-custom-auth
|
|
47
|
+
x-kerberos
|
|
48
|
+
x-saml
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Servers MUST reject unknown methods without the `x-` prefix.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Wire Protocol
|
|
56
|
+
|
|
57
|
+
### Server Authentication Capabilities
|
|
58
|
+
|
|
59
|
+
Servers advertise requirements in the connect response:
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
interface ServerAuthCapabilities {
|
|
63
|
+
/** Supported authentication methods (in preference order) */
|
|
64
|
+
methods: AuthMethod[];
|
|
65
|
+
|
|
66
|
+
/** Is authentication required to proceed? */
|
|
67
|
+
required: boolean;
|
|
68
|
+
|
|
69
|
+
/** OAuth2 authorization server metadata URL */
|
|
70
|
+
oauth2MetadataUrl?: string;
|
|
71
|
+
|
|
72
|
+
/** JWKS URL for local JWT verification */
|
|
73
|
+
jwksUrl?: string;
|
|
74
|
+
|
|
75
|
+
/** Realm identifier for this server */
|
|
76
|
+
realm?: string;
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Client Credentials
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
interface AuthCredentials {
|
|
84
|
+
/** The authentication method being used */
|
|
85
|
+
method: AuthMethod;
|
|
86
|
+
|
|
87
|
+
/** The credential value (token, API key, etc.) */
|
|
88
|
+
credential?: string;
|
|
89
|
+
|
|
90
|
+
/** Method-specific additional data */
|
|
91
|
+
metadata?: Record<string, unknown>;
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Authentication Result
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
interface AuthResult {
|
|
99
|
+
success: boolean;
|
|
100
|
+
|
|
101
|
+
principal?: {
|
|
102
|
+
id: string;
|
|
103
|
+
issuer?: string;
|
|
104
|
+
claims?: Record<string, unknown>;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
error?: {
|
|
108
|
+
code: AuthErrorCode;
|
|
109
|
+
message: string;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
type AuthErrorCode =
|
|
114
|
+
| 'invalid_credentials'
|
|
115
|
+
| 'expired'
|
|
116
|
+
| 'insufficient_scope'
|
|
117
|
+
| 'method_not_supported'
|
|
118
|
+
| 'auth_required';
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Connection Flows
|
|
124
|
+
|
|
125
|
+
### Flow 1: Auth Provided Upfront (Recommended)
|
|
126
|
+
|
|
127
|
+
When the client knows the server's auth requirements:
|
|
128
|
+
|
|
129
|
+
```mermaid
|
|
130
|
+
sequenceDiagram
|
|
131
|
+
participant Client
|
|
132
|
+
participant Server
|
|
133
|
+
|
|
134
|
+
Client->>Server: map/connect {participantType, auth}
|
|
135
|
+
Server-->>Client: connect response {session, principal}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
// Request
|
|
140
|
+
{
|
|
141
|
+
"jsonrpc": "2.0",
|
|
142
|
+
"id": 1,
|
|
143
|
+
"method": "map/connect",
|
|
144
|
+
"params": {
|
|
145
|
+
"protocolVersion": 1,
|
|
146
|
+
"participantType": "client",
|
|
147
|
+
"name": "my-client",
|
|
148
|
+
"auth": {
|
|
149
|
+
"method": "bearer",
|
|
150
|
+
"credential": "eyJhbGciOiJSUzI1NiIs..."
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Response (success)
|
|
156
|
+
{
|
|
157
|
+
"jsonrpc": "2.0",
|
|
158
|
+
"id": 1,
|
|
159
|
+
"result": {
|
|
160
|
+
"sessionId": "session_01ABC",
|
|
161
|
+
"participantId": "client_01XYZ",
|
|
162
|
+
"principal": {
|
|
163
|
+
"id": "user_123",
|
|
164
|
+
"issuer": "https://auth.example.com",
|
|
165
|
+
"claims": { "scope": "read write" }
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Flow 2: Auth Negotiation
|
|
172
|
+
|
|
173
|
+
When the client doesn't know auth requirements:
|
|
174
|
+
|
|
175
|
+
```mermaid
|
|
176
|
+
sequenceDiagram
|
|
177
|
+
participant Client
|
|
178
|
+
participant Server
|
|
179
|
+
|
|
180
|
+
Client->>Server: map/connect {participantType}
|
|
181
|
+
Server-->>Client: auth_required {methods, required}
|
|
182
|
+
Client->>Server: map/authenticate {method, credential}
|
|
183
|
+
Server-->>Client: auth result {success, session, principal}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Flow 3: No Authentication
|
|
187
|
+
|
|
188
|
+
For trusted local connections:
|
|
189
|
+
|
|
190
|
+
```mermaid
|
|
191
|
+
sequenceDiagram
|
|
192
|
+
participant Client
|
|
193
|
+
participant Server
|
|
194
|
+
|
|
195
|
+
Client->>Server: map/connect {participantType}
|
|
196
|
+
Server-->>Client: connect response {session}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Method-Specific Details
|
|
202
|
+
|
|
203
|
+
### Bearer Tokens (JWT)
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
// Standard JWT claims used by MAP
|
|
207
|
+
interface MAPJWTClaims {
|
|
208
|
+
sub: string; // Subject (principal ID)
|
|
209
|
+
iss: string; // Issuer
|
|
210
|
+
aud: string | string[];// Audience (MAP server ID)
|
|
211
|
+
exp: number; // Expiration
|
|
212
|
+
iat: number; // Issued at
|
|
213
|
+
nbf?: number; // Not before
|
|
214
|
+
|
|
215
|
+
// MAP-specific claims
|
|
216
|
+
"map:permissions"?: MAPPermissions;
|
|
217
|
+
"map:roles"?: string[];
|
|
218
|
+
"map:scopes"?: string[];
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### API Keys
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
// API key format
|
|
226
|
+
interface MAPApiKey {
|
|
227
|
+
prefix: string; // e.g., "map_"
|
|
228
|
+
keyId: string; // Key identifier
|
|
229
|
+
secret: string; // Secret portion
|
|
230
|
+
|
|
231
|
+
// Combined format: map_keyId_secret
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Header format
|
|
235
|
+
Authorization: ApiKey map_abc123_secretxyz
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Mutual TLS
|
|
239
|
+
|
|
240
|
+
Authentication happens at transport layer:
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
interface MTLSAuth {
|
|
244
|
+
method: "mtls";
|
|
245
|
+
metadata: {
|
|
246
|
+
clientCertificate: {
|
|
247
|
+
subject: string;
|
|
248
|
+
issuer: string;
|
|
249
|
+
fingerprint: string;
|
|
250
|
+
validFrom: string;
|
|
251
|
+
validTo: string;
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Token Refresh
|
|
260
|
+
|
|
261
|
+
### Proactive Refresh
|
|
262
|
+
|
|
263
|
+
Client refreshes before expiration:
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
{
|
|
267
|
+
"method": "map/authenticate",
|
|
268
|
+
"params": {
|
|
269
|
+
"method": "bearer",
|
|
270
|
+
"credential": "new_access_token",
|
|
271
|
+
"refresh": true
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Server-Initiated Refresh
|
|
277
|
+
|
|
278
|
+
Server can request reauthentication:
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
// Server notification
|
|
282
|
+
{
|
|
283
|
+
"method": "map/auth.expiring",
|
|
284
|
+
"params": {
|
|
285
|
+
"expiresIn": 300, // seconds
|
|
286
|
+
"reason": "token_expiring"
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// Client responds with new credentials
|
|
291
|
+
{
|
|
292
|
+
"method": "map/authenticate",
|
|
293
|
+
"params": {
|
|
294
|
+
"method": "bearer",
|
|
295
|
+
"credential": "refreshed_token"
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Federation Authentication
|
|
303
|
+
|
|
304
|
+
### Trust Establishment
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
interface FederationAuth {
|
|
308
|
+
// Peer identification
|
|
309
|
+
peerId: string;
|
|
310
|
+
peerCertificate?: string;
|
|
311
|
+
|
|
312
|
+
// Trust method
|
|
313
|
+
trustMethod: "mtls" | "signed_tokens" | "shared_secret";
|
|
314
|
+
|
|
315
|
+
// Token signing for cross-system calls
|
|
316
|
+
tokenSigning?: {
|
|
317
|
+
algorithm: string;
|
|
318
|
+
keyId: string;
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Cross-System Token Propagation
|
|
324
|
+
|
|
325
|
+
```typescript
|
|
326
|
+
// Message with propagated auth context
|
|
327
|
+
{
|
|
328
|
+
"method": "map/federation/send",
|
|
329
|
+
"params": {
|
|
330
|
+
"peerId": "system_beta",
|
|
331
|
+
"message": { ... },
|
|
332
|
+
"authContext": {
|
|
333
|
+
"originalPrincipal": "user_123",
|
|
334
|
+
"originalIssuer": "system_alpha",
|
|
335
|
+
"delegationChain": ["system_alpha"],
|
|
336
|
+
"signature": "..."
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Error Handling
|
|
345
|
+
|
|
346
|
+
### Authentication Errors
|
|
347
|
+
|
|
348
|
+
| Code | Error | Recovery |
|
|
349
|
+
|:-----|:------|:---------|
|
|
350
|
+
| 1000 | AUTH_REQUIRED | Provide credentials |
|
|
351
|
+
| 1001 | AUTH_FAILED | Check credentials |
|
|
352
|
+
| 1002 | AUTH_EXPIRED | Refresh token |
|
|
353
|
+
| 1003 | PERMISSION_DENIED | Request additional scope |
|
|
354
|
+
|
|
355
|
+
### Error Response
|
|
356
|
+
|
|
357
|
+
```typescript
|
|
358
|
+
{
|
|
359
|
+
"error": {
|
|
360
|
+
"code": 1001,
|
|
361
|
+
"message": "Authentication failed",
|
|
362
|
+
"data": {
|
|
363
|
+
"category": "auth",
|
|
364
|
+
"reason": "invalid_signature",
|
|
365
|
+
"hint": "Token signature verification failed"
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Security Considerations
|
|
374
|
+
|
|
375
|
+
{: .warning }
|
|
376
|
+
> Always use TLS in production environments. Never transmit credentials over unencrypted connections.
|
|
377
|
+
|
|
378
|
+
### Best Practices
|
|
379
|
+
|
|
380
|
+
1. **Short-lived tokens** - Use access tokens with short expiration
|
|
381
|
+
2. **Secure storage** - Never log or store credentials in plain text
|
|
382
|
+
3. **Scope limitation** - Request minimum necessary permissions
|
|
383
|
+
4. **Token rotation** - Rotate API keys and refresh tokens regularly
|
|
384
|
+
5. **Audit logging** - Log authentication events for security monitoring
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## Next Steps
|
|
389
|
+
|
|
390
|
+
- [Permissions](./permissions.html) - 4-layer permission model
|
|
391
|
+
- [Federation](./federation.html) - Cross-system authentication
|