Commit acd1acc5 authored by jaywink's avatar jaywink

Merge branch 'serviceinfo' into 'master'

Rename to ServiceInfo and other major changes

See merge request !2
parents 8a8f2135 afffe165
# ServerInfo
# ServiceInfo
Serverinfo is an effort to create a standardized way of exposing metadata about a server. This might be necessary to expose ownership and organization details, usage statistics and protocol capabilities.
ServiceInfo is an effort to create a standardized way of exposing metadata about a server. This might be necessary to expose ownership and organization details, usage statistics and protocol capabilities.
## Specification
......@@ -30,6 +30,8 @@ All content in this repository is under [CC0](http://creativecommons.org/publicd
Please open issues and pull requests if you want to suggest a change. If you open a pull request you agree for your work to be released under CC0.
We have a [forum for discussion](https://talk.feneas.org/t/serviceinfo-specification-for-service-metadata/99).
## History
ServerInfo is a fork of [NodeInfo2](https://git.feneas.org/jaywink/nodeinfo2) which itself is a fork of [NodeInfo](https://nodeinfo.diaspora.software/) which was the successor of `statistics.json` in Diaspora.
ServiceInfo is a fork of [NodeInfo2](https://git.feneas.org/jaywink/nodeinfo2) which itself is a fork of [NodeInfo](https://nodeinfo.diaspora.software/) which was the successor of `statistics.json` in Diaspora.
# ServerInfo specification 1.0
# ServiceInfo specification 1.0
## Status
......@@ -14,11 +14,11 @@ The term "schema" refers to a schema definition provided in the schemas subdirec
## Document location
A server SHOULD provide a ServerInfo document at the endpoint `/.well-known/x-serverinfo`.
A server SHOULD provide a ServiceInfo document at the endpoint `/.well-known/x-serviceinfo`.
### ActivityPub
Actor's in ActivityPub MAY have an additional `endpoint` called `serverinfo`, pointing to the location of the serverinfo document.
Actor's in ActivityPub MAY have an additional `endpoint` called `serviceInfo`, pointing to the location of the ServiceInfo document.
## Retrieval
......@@ -30,4 +30,4 @@ A server SHOULD set a Content-Type of `application/json`.
See the latest [schema](/schemas/1.0/schema.json).
Clients SHOULD verify the serverinfo document against the schema.
Clients SHOULD verify the ServiceInfo document against the schema.
{
"version": "1.0",
"server": {
"id": "https://example.com/.well-known/x-serverinfo",
"id": "https://example.com/.well-known/x-serviceinfo",
"name": "Example server",
"software": "example",
"version": "0.5.0"
......
{
"definitions": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"id": "https://feneas.org/specs/serverinfo",
"title": "ServerInfo schema version 1.0.",
"id": "https://feneas.org/ns/serviceinfo",
"title": "ServiceInfo schema version 1.0.",
"type": "object",
"required": [
"version",
"server",
"publicRegistrations"
"id",
"software",
"signups"
],
"properties": {
"version": {
......@@ -16,52 +17,80 @@
"1.0"
]
},
"server": {
"title": "Metadata about server in use.",
"id": {
"title": "URL ID of the service. This should be the full base URL to the service, including protocol.",
"type": "string",
"examples": [
"https://domain.tld",
"https://domain.tld/social"
]
},
"name": {
"title": "Name of the service.",
"type": "string",
"examples": [
"Awesome Social Network",
"Chat for techies"
]
},
"software": {
"title": "Metadata about software in use.",
"type": "object",
"required": [
"id",
"name",
"software",
"version"
],
"properties": {
"id": {
"title": "URI ID of the server.",
"type": "string"
},
"name": {
"title": "The display name of the server or service.",
"type": "string"
},
"software": {
"title": "The name of the server software.",
"type": "string"
"title": "Name of the software used.",
"type": "string",
"examples": [
"Mastodon",
"Synapse",
"diaspora*",
"Socialhome"
]
},
"version": {
"title": "The version of this server software.",
"title": "The version of the software.",
"type": "string",
"examples": [
"1.0.0",
"0.0.1-dev.1"
]
},
"repository": {
"title": "URL to the repository of the software.",
"type": "string"
}
}
},
"organization": {
"title": "Metadata about the owner of this server.",
"title": "Metadata about the owner of this service.",
"type": "object",
"name": {
"title": "The name of the organization or person.",
"type": "string"
},
"contact": {
"title": "Contact information for the organization or person.",
"type": "string"
},
"account": {
"title": "URL of admin or info account on this server.",
"type": "string"
"properties": {
"name": {
"title": "The name of the organization or person.",
"type": "string",
"examples": [
"Monty Python",
"Acme Inc."
]
},
"contact": {
"title": "Preferred contact information for the organization or person. Should include protocol where necessary.",
"type": "string",
"examples": [
"mailto:admin@domain.tld",
"https://domain.tld/contact",
"mxid:@admin:domain.tld",
"Phone +358123456789"
]
}
}
},
"protocols": {
"title": "The protocols supported on this server.",
"title": "The protocols supported by this service.",
"type": "array",
"minItems": 0,
"items": {
......@@ -70,61 +99,120 @@
"required": [
"name"
],
"name": {
"title": "Name of the protocol",
"type": "string",
"examples": [
"activitypub",
"diaspora",
"dfrn",
"libertree",
"matrix",
"ostatus",
"pumpio",
"webmention",
"zot"
]
},
"capabilities": {
"title": "List of capabilities offered by this server",
"type": "array",
"minItems": 0,
"items": {
"title": "Information about the capability",
"type": "object"
"properties": {
"name": {
"title": "Name of the protocol",
"type": "string",
"examples": [
"activitypub",
"diaspora",
"dfrn",
"libertree",
"matrix",
"ostatus",
"pumpio",
"webmention",
"xmpp",
"zot"
]
},
"capabilities": {
"title": "List of capabilities offered by this server",
"type": "array",
"minItems": 0,
"items": {
"title": "Information about the capability",
"type": "object"
}
},
"version": {
"title": "Version of the protocol implemented",
"type": "string",
"examples": [
"1.0",
"0.0.1-dev.1"
]
}
},
"version": {
"title": "Version of the protocol implemented",
"type": "string"
}
"examples": [
{
"name": "activitypub",
"capabilities": {
"contexts": [
"http://joinmastodon.org/ns#",
"https://forgefed.peers.community"
]
}
},
{
"name": "matrix",
"version": "0.1.2",
"capabilities": {
"presence": true
}
},
{
"name": "diaspora",
"version": "0.2.6",
"capabilities": {
"events": false
}
}
]
}
},
"externalServices": {
"title": "The third party sites this server can connect to via their application API.",
"otherServices": {
"title": "Other services this service can connect to via their application API.",
"type": "object",
"properties": {
"inbound": {
"title": "The third party sites this server can retrieve messages from on behalf of a user.",
"title": "Other service this service can retrieve messages from on behalf of a user.",
"type": "array",
"minItems": 0,
"items": {
"type": "string"
"type": "string",
"examples": [
"twitter",
"tumbrl"
]
}
},
"outbound": {
"title": "The third party sites this server can publish messages to on the behalf of a user.",
"title": "Other services this service can publish messages to on the behalf of a user.",
"type": "array",
"minItems": 0,
"items": {
"type": "string"
"type": "string",
"examples": [
"twitter",
"tumbrl"
]
}
}
}
},
"publicRegistrations": {
"title": "Whether this server has public registrations.",
"type": "boolean"
"signups": {
"title": "Information about signups status for this service.",
"type": "string",
"enum": [
"open",
"inviteonly",
"closed"
]
},
"visibilityPreferences": {
"title": "The visibility preferences of this service. Can be used to indicate desire not to be crawled or listed",
"type": "object",
"properties": {
"allowCrawling": {
"title": "Indicate whether the service wants to not be crawled.",
"type": "boolean"
},
"preferUnlisted": {
"title": "Indicate whether service wants to be unlisted from public lists.",
"type": "boolean"
}
}
},
"metrics": {
"title": "Metrics for this server.",
......@@ -133,23 +221,10 @@
"title": "Information about the metric.",
"type": "object",
"required": [
"periodLength",
"type",
"value"
],
"properties": {
"periodLength": {
"title": "Period length for the metric in seconds.",
"description": "Common good values are for example a day (86400), a week (604800) or a month (2592000).",
"type": "integer",
"examples": [
60,
3600,
86400,
604800,
2592000
]
},
"type": {
"title": "Type of metric.",
"type": "string",
......@@ -164,6 +239,18 @@
"type": "integer",
"default": 0
},
"periodLength": {
"title": "Period length for the metric in seconds.",
"description": "Common good values are for example a day (86400), a week (604800) or a month (2592000).",
"type": "integer",
"examples": [
60,
3600,
86400,
604800,
2592000
]
},
"startTime": {
"title": "Start time of the period ISO-8601 UTC time",
"type": "string",
......@@ -176,7 +263,7 @@
},
"features": {
"title": "Other features of the server.",
"description": "Free form object for describing other features of the server which might only be relevant within the same software stack.",
"description": "Free form object for describing other features of the service which might only be relevant within the same software stack.",
"type": "array",
"minItems": 0,
"items": {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment