open-index/open-npm huggingface dataset:
npm package: @highway1/adapter-anp
Description: ANP (Agent Network Protocol) adapter for Clawiverse
Latest version: 0.1.0

# ANP Adapter for Clawiverse

This adapter bridges the current Highway 1 relay-based network with Web-based ANP / `did:wba` agents.

## Features

- Resolve `did:wba` identifiers through `/.well-known/clawiverse`
- Convert between Highway 1 Agent Cards and WBA-flavored JSON-LD
- Send messages to Web-based agents over HTTP
- Route non-`did:wba` traffic back through your existing Highway 1 transport

## Installation

```bash
npm install @clawiverse/adapter-anp
```

## Usage

### Create a bridge

`createANPBridge()` accepts an optional transport adapter with a single method:

```typescript
type ClawiverseNode = {
  sendMessage: (to: string, message: unknown) => Promise<unknown>;
};
```

```typescript
import { createANPBridge } from '@clawiverse/adapter-anp';

const relayBackedTransport = {
  async sendMessage(to: string, message: unknown) {
    return { to, message };
  },
};

const bridge = createANPBridge(relayBackedTransport);
```

There is currently no `createNode()` helper in `@highway1/core`; pass your own relay-backed transport adapter instead.

### Resolve `did:wba`

```typescript
const card = await bridge.resolveDIDWba('did:wba:example.com');

console.log(card.did);
console.log(card.name);
console.log(card.endpoints);
```

### Publish to `.well-known`

```typescript
import type { AuthToken } from '@clawiverse/adapter-anp';

const auth: AuthToken = {
  token: 'your-api-token',
  type: 'Bearer',
};

await bridge.publishWellKnown(myAgentCard, 'example.com', auth);
```

### Route messages

```typescript
await bridge.routeMessage({
  id: 'msg-123',
  from: 'did:clawiverse:z6Mk...',
  to: 'did:wba:example.com',
  protocol: '/clawiverse/msg/1.0.0',
  payload: { text: 'Hello!' },
  timestamp: Date.now(),
  signature: '...',
});
```

If `to` starts with `did:wba:`, the bridge resolves `.well-known` endpoints and uses HTTP. Otherwise it calls the transport adapter you passed in.

### Convert formats

```typescript
const wbaCard = bridge.convertToWba(myAgentCard, 'example.com');
const clawiverseCard = bridge.convertFromWba(wbaCard);
const jsonld = bridge.exportAsJSONLD(clawiverseCard);
```

## Architecture

```
Highway 1 (relay)        ANP / Web
       ↓                     ↓
did:clawiverse          did:wba
       ↓                     ↓
 WebSocket relay     /.well-known/clawiverse
       ↓                     ↓
       └────── ANP Bridge ───┘
```

## API Reference

### `createANPBridge(node?)`

Creates an `ANPBridge`.

- `node.sendMessage(to, message)` is optional, but required if you want `routeMessage()` to hand non-`did:wba` traffic back to Highway 1.

### `ANPBridge`

- `resolveDIDWba(did)`
- `publishWellKnown(card, domain, auth)`
- `routeMessage(envelope)`
- `convertToWba(card, domain)`
- `convertFromWba(wbaCard)`
- `exportAsJSONLD(card)`
- `checkDomain(domain)`
- `discoverFromDomains(domains)`

## License

MIT