mirror of
https://github.com/fluencelabs/registry.git
synced 2025-04-24 17:52:14 +00:00
170 lines
5.9 KiB
Markdown
170 lines
5.9 KiB
Markdown
# API Reference
|
|
|
|
- [API Reference](#api-reference)
|
|
- [Data structures](#data-structures)
|
|
- [Key](#key)
|
|
- [RecordMetadata](#recordmetadata)
|
|
- [Record](#record)
|
|
- [Tombstone](#tombstone)
|
|
- [Resources API](#resources-api)
|
|
- [Overview](#overview)
|
|
- [Return types](#return-types)
|
|
- [Methods](#methods)
|
|
- [createResource](#createresource)
|
|
- [getResource](#getresource)
|
|
- [getResourceId](#getresourceid)
|
|
- [registerService](#registerservice)
|
|
- [unregisterService](#unregisterservice)
|
|
- [resolveResource](#resolveresource)
|
|
- [executeOnResource](#executeonresource)
|
|
|
|
## Data structures
|
|
### Key
|
|
```rust
|
|
data Key {
|
|
-- base58-encoded sha256(concat(label, owner_peer_id))
|
|
id: string,
|
|
-- any unique string defined by the owner
|
|
label: string,
|
|
-- peer id in base58
|
|
owner_peer_id: string,
|
|
-- timestamp of creation in seconds
|
|
timestamp_created: u64,
|
|
-- challenge in bytes, will be used for permissions
|
|
challenge: []u8,
|
|
-- challenge type, will be used for permissions
|
|
challenge_type: string,
|
|
-- encoded and hashed previous fields signed by `owner_peer_id`
|
|
signature: []u8,
|
|
}
|
|
```
|
|
|
|
This data structure can be created via [`get_key_bytes`](#get_key_bytes) and [`register_key`](#register_key), and replicated via [`republish_key`](#republish_key). For now, there is no way to remove this structure, it can only be automatically garbage-collected via [`clear_expired`](#clear_expired). In the future updates, key tombstones will be implemented and it would be possible to remove key by an owner.
|
|
|
|
In terms of Resources API Keys are Resources.
|
|
### RecordMetadata
|
|
```rust
|
|
data RecordMetadata {
|
|
-- base58-encoded key id
|
|
key_id: string,
|
|
-- peer id of the issuer in base58
|
|
issued_by: string,
|
|
-- peer_id of hoster
|
|
peer_id: string,
|
|
-- timestamp in seconds
|
|
timestamp_issued: u64,
|
|
-- will be used for permissions
|
|
solution: []u8,
|
|
-- any user-defined string
|
|
value: string,
|
|
-- optional (length is 0 or 1), base58 relay id
|
|
relay_id: []string,
|
|
-- optional (length is 0 or 1), advertising service id
|
|
service_id: []string,
|
|
-- encoded and hashed previous fields signed by `issued_by`
|
|
issuer_signature: []u8,
|
|
}
|
|
```
|
|
|
|
Metadata is the main part of the Record created by issuer that contains routing information, such as optional relay id, peer id and optional service id. Key identifier is a deterministic hash of the `label` and the `owner_peer_id`.
|
|
|
|
### Record
|
|
```rust
|
|
data Record {
|
|
-- record metadata
|
|
metadata: RecordMetadata,
|
|
-- timestamp in seconds
|
|
timestamp_created: u64,
|
|
-- encoded and hashed previous fields signed by `metadata.peer_id`
|
|
signature: []u8,
|
|
}
|
|
```
|
|
|
|
Record is maintained by `metadata.peer_id` via renewing of `timestamp_created` field automatically with scheduled scripts for full-featured peers and manually for other peers (Note: here and below we mean Rust peers as full-featured and JS/TS as others). Record can be removed by issuing a tombstone or become expired and then garbage-collected. Record owner is `metadata.issued_by`.
|
|
|
|
### Tombstone
|
|
```rust
|
|
data Tombstone {
|
|
-- base58-encoded key id
|
|
key_id: string,
|
|
-- peer id of the issuer in base58
|
|
issued_by: string,
|
|
-- peer_id of hoster
|
|
peer_id: string,
|
|
-- timestamp in seconds
|
|
timestamp_issued: u64,
|
|
-- will be used for permissions
|
|
solution: []u8,
|
|
-- encoded and hashed previous fields signed by `issued_by`
|
|
issuer_signature: []u8,
|
|
}
|
|
```
|
|
|
|
Tombstone is a special type of record that can be issued by record owner which eventually will substitute record with lower `timestamp_issued`. Tombstones replicated alongside with keys and records and live long enough to be sure that certain records will be deleted. Tombstones are garbage-collected automatically.
|
|
|
|
In Resources API [`unregisterService`](#unregisterservice) method creates Tombstone.
|
|
|
|
## Resources API
|
|
### Overview
|
|
Resources API is a high-level API for Registry network protocol. It uses Kademlia for the discovery of resources and service records. Resource and corresponding service Records are identified by Resource ID, and can be found in Registry services on peers in the Kademlia neighborhood of this Resource ID.
|
|
|
|
### Return types
|
|
```
|
|
alias ResourceId: string
|
|
alias Resource: Key
|
|
alias Error: string
|
|
```
|
|
|
|
Notes:
|
|
- ResourceId is also an alias for key id in Resources API terminology.
|
|
- Every method (except getResourceId) returns a stream of errors from different peers but success of execution is defined by first part of returned values. Optional types should be checked against `nil` to determine success of execution.
|
|
|
|
### Methods
|
|
#### createResource
|
|
```rust
|
|
func createResource(label: string) -> ?ResourceId, *Error:
|
|
```
|
|
|
|
Creates Resource with `label` and `INIT_PEER_ID` as owner.
|
|
#### getResource
|
|
```rust
|
|
func getResource(resource_id: ResourceId) -> ?Resource, *Error:
|
|
```
|
|
Returns resource by corresponding `resource_id`.
|
|
|
|
#### getResourceId
|
|
```rust
|
|
func getResourceId(label: string, peer_id: string) -> ResourceId:
|
|
```
|
|
|
|
Returns a deterministic hash of the `label` and the `peer_id`.
|
|
#### registerService
|
|
```rust
|
|
func registerService(
|
|
resource_id: ResourceId,
|
|
value: string,
|
|
peer_id: PeerId,
|
|
service_id: ?string
|
|
) -> bool, *Error:
|
|
```
|
|
|
|
Registers Record issued by `INIT_PEER_ID` for service on `peer_id`. `value` is any user-defined string.
|
|
#### unregisterService
|
|
```rust
|
|
func unregisterService(resource_id: ResourceId, peer_id: PeerId) -> bool, *Error:
|
|
```
|
|
|
|
Prevents the record issued by `INIT_PEER_ID` from being renewed and eventually removed.
|
|
#### resolveResource
|
|
```rust
|
|
func resolveResource(resource_id: ResourceId, ack: i16) -> ?[]Record, *Error:
|
|
```
|
|
|
|
Returns all records registered by this `resource_id`. `ack` is a minimal number of polled peers.
|
|
|
|
#### executeOnResource
|
|
```rust
|
|
func executeOnResource(resource_id: ResourceId, ack: i16, call: Record -> ()) -> bool, *Error:
|
|
```
|
|
|
|
Resolves all records by given `resource_id` and execites in parallel given callback. |