ISSUE 509 - feat: Add DeDi registry plugin implementation for lookup
This commit is contained in:
153
pkg/plugin/implementation/dediregistry/README.md
Normal file
153
pkg/plugin/implementation/dediregistry/README.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# DeDi Registry Plugin
|
||||
|
||||
A Beckn-ONIX registry type plugin for integrating with DeDi registry services. Implements the `RegistryLookup` interface to provide participant information and public keys.
|
||||
|
||||
## Overview
|
||||
|
||||
The DeDi Registry plugin enables Beckn-ONIX to lookup DeDi registries for participant records, converting DeDi API responses to standard Beckn Subscription format for seamless integration with existing registry infrastructure.
|
||||
|
||||
## Features
|
||||
|
||||
- **RegistryLookup Interface**: Implements standard Beckn registry interface
|
||||
- **DeDi API Integration**: GET requests to DeDi registry endpoints with Bearer authentication
|
||||
- **Data Conversion**: Converts DeDi responses to Beckn Subscription format
|
||||
- **HTTP Retry Logic**: Built-in retry mechanism using retryablehttp client
|
||||
- **Timeout Control**: Configurable request timeouts
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
```yaml
|
||||
plugins:
|
||||
dediRegistry:
|
||||
id: dediregistry
|
||||
config:
|
||||
baseURL: "https://dedi-registry.example.com"
|
||||
apiKey: "your-api-key"
|
||||
namespaceID: "beckn-network"
|
||||
registryName: "participants"
|
||||
recordName: "participant-id"
|
||||
timeout: "30" # seconds
|
||||
```
|
||||
|
||||
### Configuration Parameters
|
||||
|
||||
| Parameter | Required | Description | Default |
|
||||
|-----------|----------|-------------|---------|
|
||||
| `baseURL` | Yes | DeDi registry API base URL | - |
|
||||
| `apiKey` | Yes | API key for authentication | - |
|
||||
| `namespaceID` | Yes | DeDi namespace identifier | - |
|
||||
| `registryName` | Yes | Registry name to query | - |
|
||||
| `recordName` | Yes | Record name/identifier | - |
|
||||
| `timeout` | No | Request timeout in seconds | 30 |
|
||||
|
||||
## Usage
|
||||
|
||||
### In Module Configuration
|
||||
|
||||
```yaml
|
||||
modules:
|
||||
- name: bapTxnReceiver
|
||||
handler:
|
||||
plugins:
|
||||
dediRegistry:
|
||||
id: dediregistry
|
||||
config:
|
||||
baseURL: "https://dedi-registry.example.com"
|
||||
apiKey: "your-api-key"
|
||||
namespaceID: "beckn-network"
|
||||
registryName: "participants"
|
||||
recordName: "participant-id"
|
||||
```
|
||||
|
||||
### In Code
|
||||
|
||||
```go
|
||||
// Load DeDi registry plugin
|
||||
dediRegistry, err := manager.Registry(ctx, &plugin.Config{
|
||||
ID: "dediregistry",
|
||||
Config: map[string]string{
|
||||
"baseURL": "https://dedi-registry.example.com",
|
||||
"apiKey": "your-api-key",
|
||||
"namespaceID": "beckn-network",
|
||||
"registryName": "participants",
|
||||
"recordName": "participant-id",
|
||||
},
|
||||
})
|
||||
|
||||
// Or use specific method
|
||||
dediRegistry, err := manager.DeDiRegistry(ctx, config)
|
||||
|
||||
// Lookup participant (returns Beckn Subscription format)
|
||||
subscription := &model.Subscription{}
|
||||
results, err := dediRegistry.Lookup(ctx, subscription)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Extract public key from first result
|
||||
if len(results) > 0 {
|
||||
publicKey := results[0].SigningPublicKey
|
||||
subscriberID := results[0].SubscriberID
|
||||
}
|
||||
```
|
||||
|
||||
## API Response Structure
|
||||
|
||||
The plugin expects DeDi registry responses in this format:
|
||||
|
||||
```json
|
||||
{
|
||||
"message": "success",
|
||||
"data": {
|
||||
"namespace": "beckn",
|
||||
"schema": {
|
||||
"entity_name": "participant.example.com",
|
||||
"entity_url": "https://participant.example.com",
|
||||
"publicKey": "base64-encoded-public-key",
|
||||
"keyType": "ed25519",
|
||||
"keyFormat": "base64"
|
||||
},
|
||||
"state": "active",
|
||||
"created_at": "2023-01-01T00:00:00Z",
|
||||
"updated_at": "2023-01-01T00:00:00Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Converted to Beckn Format
|
||||
|
||||
The plugin converts this to standard Beckn Subscription format:
|
||||
|
||||
```json
|
||||
{
|
||||
"subscriber_id": "participant.example.com",
|
||||
"url": "https://participant.example.com",
|
||||
"signing_public_key": "base64-encoded-public-key",
|
||||
"status": "active",
|
||||
"created": "2023-01-01T00:00:00Z",
|
||||
"updated": "2023-01-01T00:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run plugin tests:
|
||||
|
||||
```bash
|
||||
go test ./pkg/plugin/implementation/dediregistry -v
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
- `github.com/hashicorp/go-retryablehttp`: HTTP client with retry logic
|
||||
- Standard Go libraries for HTTP and JSON handling
|
||||
|
||||
## Integration Notes
|
||||
|
||||
- **Registry Type Plugin**: Implements `RegistryLookup` interface, not a separate plugin category
|
||||
- **Interchangeable**: Can be used alongside or instead of standard registry plugin
|
||||
- **Manager Integration**: Available via `manager.Registry()` or `manager.DeDiRegistry()` methods
|
||||
- **Data Conversion**: Automatically converts DeDi format to Beckn Subscription format
|
||||
- **Interface Compliance**: Implements `RegistryLookup` interface with `Lookup()` method only
|
||||
- **Build Integration**: Included in `build-plugins.sh` script, compiles to `dediregistry.so`
|
||||
Reference in New Issue
Block a user