705 lines
18 KiB
YAML
705 lines
18 KiB
YAML
openapi: 3.0.0
|
|
info:
|
|
title: Corteza federation API
|
|
description: Corteza federation REST API definition
|
|
version: 2020.12
|
|
contact:
|
|
email: info@cortezaproject.org
|
|
license:
|
|
name: Apache 2.0
|
|
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
|
|
paths:
|
|
'/federation/nodes/{nodeID}/handshake':
|
|
post:
|
|
tags:
|
|
- Federation node handshake
|
|
summary: Initialize the handshake step with node B
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties: &ref_0
|
|
pairToken:
|
|
type: string
|
|
description: >-
|
|
Pairing token to authenticate handshake initialization
|
|
request
|
|
sharedNodeID:
|
|
type: string
|
|
description: Remote (invoker's) node ID
|
|
authToken:
|
|
type: string
|
|
description: Authentication token so that remote
|
|
required:
|
|
- pairToken
|
|
- sharedNodeID
|
|
- authToken
|
|
application/x-www-form-urlencoded:
|
|
schema:
|
|
type: object
|
|
properties: *ref_0
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: &ref_3
|
|
type: string
|
|
/federation/nodes/:
|
|
get:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Search federated nodes
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: query
|
|
name: query
|
|
description: Filter nodes by name and host
|
|
required: false
|
|
schema: &ref_1
|
|
type: string
|
|
- in: query
|
|
name: status
|
|
description: Filter by status
|
|
required: false
|
|
schema: *ref_1
|
|
post:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Create a new federation node
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties: &ref_2
|
|
baseURL:
|
|
type: string
|
|
description: Federation API base URL
|
|
name:
|
|
type: string
|
|
description: Name for this node
|
|
contact:
|
|
type: string
|
|
description: Contact email
|
|
pairingURI:
|
|
type: string
|
|
description: Pairing URI
|
|
application/x-www-form-urlencoded:
|
|
schema:
|
|
type: object
|
|
properties: *ref_2
|
|
'/federation/nodes/{nodeID}':
|
|
get:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Read a federation node
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: *ref_3
|
|
post:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Updates existing node
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: *ref_3
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties: &ref_4
|
|
name:
|
|
type: string
|
|
description: Name for this node
|
|
contact:
|
|
type: string
|
|
description: Contact email
|
|
baseURL:
|
|
type: string
|
|
description: Federation API base URL
|
|
application/x-www-form-urlencoded:
|
|
schema:
|
|
type: object
|
|
properties: *ref_4
|
|
delete:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Deletes node
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: *ref_3
|
|
'/federation/nodes/{nodeID}/uri':
|
|
post:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Creates new sharable federation URI
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: *ref_3
|
|
'/federation/nodes/{nodeID}/undelete':
|
|
post:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Undeletes a node
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: *ref_3
|
|
'/federation/nodes/{nodeID}/pair':
|
|
post:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Initialize the pairing process between the two nodes
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: *ref_3
|
|
'/federation/nodes/{nodeID}/handshake-confirm':
|
|
post:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Confirm the requested handshake
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: *ref_3
|
|
'/federation/nodes/{nodeID}/handshake-complete':
|
|
post:
|
|
tags:
|
|
- Federation nodes
|
|
summary: Complete the handshake
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: NodeID
|
|
required: true
|
|
schema: *ref_3
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties: &ref_5
|
|
authToken:
|
|
type: string
|
|
description: Node A token
|
|
required:
|
|
- authToken
|
|
application/x-www-form-urlencoded:
|
|
schema:
|
|
type: object
|
|
properties: *ref_5
|
|
'/federation/nodes/{nodeID}/modules/{moduleID}/exposed':
|
|
get:
|
|
tags:
|
|
- Manage structure
|
|
summary: Exposed settings for module
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: path
|
|
name: moduleID
|
|
description: Module ID
|
|
required: true
|
|
schema: *ref_3
|
|
post:
|
|
tags:
|
|
- Manage structure
|
|
summary: Update already exposed module
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: path
|
|
name: moduleID
|
|
description: Module ID
|
|
required: true
|
|
schema: *ref_3
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties: &ref_6
|
|
composeModuleID:
|
|
type: string
|
|
description: Compose module id
|
|
composeNamespaceID:
|
|
type: string
|
|
description: Compose namespace id
|
|
name:
|
|
type: string
|
|
description: Module name
|
|
handle:
|
|
type: string
|
|
description: Module handle
|
|
fields:
|
|
type: array
|
|
items: &ref_7
|
|
type: object
|
|
properties:
|
|
fieldID:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: string
|
|
kind:
|
|
type: string
|
|
label:
|
|
type: string
|
|
defaultValue:
|
|
type: array
|
|
items:
|
|
type: string
|
|
maxLength:
|
|
type: integer
|
|
isRequired:
|
|
type: boolean
|
|
isPrivate:
|
|
type: boolean
|
|
isMulti:
|
|
type: boolean
|
|
isSystem:
|
|
type: boolean
|
|
options:
|
|
type: object
|
|
description: Exposed module fields
|
|
required:
|
|
- composeModuleID
|
|
- composeNamespaceID
|
|
- name
|
|
- handle
|
|
application/x-www-form-urlencoded:
|
|
schema:
|
|
type: object
|
|
properties: *ref_6
|
|
delete:
|
|
tags:
|
|
- Manage structure
|
|
summary: Remove from federation
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: path
|
|
name: moduleID
|
|
description: Module ID
|
|
required: true
|
|
schema: *ref_3
|
|
'/federation/nodes/{nodeID}/modules/':
|
|
put:
|
|
tags:
|
|
- Manage structure
|
|
summary: Add module to federation
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties: &ref_8
|
|
composeModuleID:
|
|
type: string
|
|
description: Compose module id
|
|
composeNamespaceID:
|
|
type: string
|
|
description: Compose namespace id
|
|
name:
|
|
type: string
|
|
description: Module name
|
|
handle:
|
|
type: string
|
|
description: Module handle
|
|
fields:
|
|
type: array
|
|
items: *ref_7
|
|
description: Exposed module fields
|
|
required:
|
|
- composeModuleID
|
|
- composeNamespaceID
|
|
- name
|
|
- handle
|
|
application/x-www-form-urlencoded:
|
|
schema:
|
|
type: object
|
|
properties: *ref_8
|
|
get:
|
|
tags:
|
|
- Manage structure
|
|
summary: List of shared/exposed modules
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: query
|
|
name: shared
|
|
description: List shared modules
|
|
required: false
|
|
schema: &ref_9
|
|
type: boolean
|
|
- in: query
|
|
name: exposed
|
|
description: List exposed modules
|
|
required: false
|
|
schema: *ref_9
|
|
'/federation/nodes/{nodeID}/modules/{moduleID}/shared':
|
|
get:
|
|
tags:
|
|
- Manage structure
|
|
summary: Shared settings for module
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: path
|
|
name: moduleID
|
|
description: Module ID
|
|
required: true
|
|
schema: *ref_3
|
|
'/federation/nodes/{nodeID}/modules/{moduleID}/mapped':
|
|
put:
|
|
tags:
|
|
- Manage structure
|
|
summary: Add fields mappings to federated module
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: path
|
|
name: moduleID
|
|
description: Module ID
|
|
required: true
|
|
schema: *ref_3
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties: &ref_10
|
|
composeModuleID:
|
|
type: string
|
|
description: Compose module id
|
|
composeNamespaceID:
|
|
type: string
|
|
description: Compose namespace id
|
|
fields:
|
|
type: string
|
|
description: Exposed module fields
|
|
required:
|
|
- composeModuleID
|
|
- composeNamespaceID
|
|
application/x-www-form-urlencoded:
|
|
schema:
|
|
type: object
|
|
properties: *ref_10
|
|
get:
|
|
tags:
|
|
- Manage structure
|
|
summary: Fields mappings for module
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: path
|
|
name: moduleID
|
|
description: Module ID
|
|
required: true
|
|
schema: *ref_3
|
|
'/federation/nodes/{nodeID}/modules/exposed/':
|
|
get:
|
|
tags:
|
|
- Sync structure
|
|
summary: List all exposed modules changes
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: query
|
|
name: lastSync
|
|
description: Last sync timestamp
|
|
required: false
|
|
schema: *ref_3
|
|
- in: query
|
|
name: query
|
|
description: Search query
|
|
required: false
|
|
schema: *ref_1
|
|
- in: query
|
|
name: limit
|
|
description: Limit
|
|
required: false
|
|
schema: &ref_11
|
|
type: string
|
|
- in: query
|
|
name: pageCursor
|
|
description: Page cursor
|
|
required: false
|
|
schema: *ref_1
|
|
- in: query
|
|
name: sort
|
|
description: Sort items
|
|
required: false
|
|
schema: *ref_1
|
|
'/federation/nodes/{nodeID}/modules/exposed/records/':
|
|
get:
|
|
tags:
|
|
- Sync data
|
|
summary: List all record changes
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: query
|
|
name: lastSync
|
|
description: Last sync timestamp
|
|
required: false
|
|
schema: *ref_3
|
|
- in: query
|
|
name: query
|
|
description: Search query
|
|
required: false
|
|
schema: *ref_1
|
|
- in: query
|
|
name: limit
|
|
description: Limit
|
|
required: false
|
|
schema: *ref_11
|
|
- in: query
|
|
name: pageCursor
|
|
description: Page cursor
|
|
required: false
|
|
schema: *ref_1
|
|
- in: query
|
|
name: sort
|
|
description: Sort items
|
|
required: false
|
|
schema: *ref_1
|
|
'/federation/nodes/{nodeID}/modules/{moduleID}/records/':
|
|
get:
|
|
tags:
|
|
- Sync data
|
|
summary: List all records per module
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: nodeID
|
|
description: Node ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: path
|
|
name: moduleID
|
|
description: Module ID
|
|
required: true
|
|
schema: *ref_3
|
|
- in: query
|
|
name: lastSync
|
|
description: Last sync timestamp
|
|
required: false
|
|
schema: *ref_3
|
|
- in: query
|
|
name: query
|
|
description: Search query
|
|
required: false
|
|
schema: *ref_1
|
|
- in: query
|
|
name: limit
|
|
description: Limit
|
|
required: false
|
|
schema: *ref_11
|
|
- in: query
|
|
name: pageCursor
|
|
description: Page cursor
|
|
required: false
|
|
schema: *ref_1
|
|
- in: query
|
|
name: sort
|
|
description: Sort items
|
|
required: false
|
|
schema: *ref_1
|
|
/federation/permissions/:
|
|
get:
|
|
tags:
|
|
- Permissions
|
|
summary: Retrieve defined permissions
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
/federation/permissions/effective:
|
|
get:
|
|
tags:
|
|
- Permissions
|
|
summary: Effective rules for current user
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: query
|
|
name: resource
|
|
description: Show only rules for a specific resource
|
|
required: false
|
|
schema: *ref_1
|
|
'/federation/permissions/{roleID}/rules':
|
|
get:
|
|
tags:
|
|
- Permissions
|
|
summary: Retrieve role permissions
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: roleID
|
|
description: Role ID
|
|
required: true
|
|
schema: *ref_3
|
|
delete:
|
|
tags:
|
|
- Permissions
|
|
summary: Remove all defined role permissions
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: roleID
|
|
description: Role ID
|
|
required: true
|
|
schema: *ref_3
|
|
patch:
|
|
tags:
|
|
- Permissions
|
|
summary: Update permission settings
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
parameters:
|
|
- in: path
|
|
name: roleID
|
|
description: Role ID
|
|
required: true
|
|
schema: *ref_3
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties: &ref_12
|
|
rules:
|
|
type: string
|
|
description: List of permission rules to set
|
|
required:
|
|
- rules
|
|
application/x-www-form-urlencoded:
|
|
schema:
|
|
type: object
|
|
properties: *ref_12
|