diff --git a/.gitignore b/.gitignore index f7c6f2aa..ff22fc64 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,7 @@ js/app/src/build-info.json *.env muxl.wasm /moderation +lexicons/app +lexicons/com +lexicons/tools +lexicons/games diff --git a/go.mod b/go.mod index daac183d..a2d72e0e 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,8 @@ replace github.com/bluesky-social/indigo => github.com/streamplace/indigo v0.0.0 tool github.com/bluesky-social/indigo/cmd/lexgen +tool github.com/streamplace/glex/cmd/glex + require ( firebase.google.com/go/v4 v4.14.1 github.com/99designs/gqlgen v0.17.64 @@ -67,7 +69,7 @@ require ( github.com/starttoaster/prometheus-exporter-scraper v0.0.1 github.com/streamplace/atmoq-go v0.0.2 github.com/streamplace/atproto-oauth-golang v0.0.0-20260413212710-98956064d06c - github.com/streamplace/glex v0.0.0-20260710214555-331335123ed9 + github.com/streamplace/glex v0.0.0-20260712172208-84746cabd547 github.com/streamplace/muxl/go v0.3.4 github.com/streamplace/oatproxy v0.0.0-20260710202406-60d97b9d780b github.com/stretchr/testify v1.11.1 diff --git a/go.sum b/go.sum index a20f7887..70816d5f 100644 --- a/go.sum +++ b/go.sum @@ -1376,6 +1376,8 @@ github.com/streamplace/atproto-oauth-golang v0.0.0-20250619231223-a9c04fb888ac h github.com/streamplace/atproto-oauth-golang v0.0.0-20250619231223-a9c04fb888ac/go.mod h1:9LlKkqciiO5lRfbX0n4Wn5KNY9nvFb4R3by8FdW2TWc= github.com/streamplace/glex v0.0.0-20260710214555-331335123ed9 h1:mf+7iVPnlVBMlsPeRWCG0c4gREd6qOvSeg42dEMF/OE= github.com/streamplace/glex v0.0.0-20260710214555-331335123ed9/go.mod h1:33czt2ilG9oouO8fq1GzfwMr4QE278Of3ptNx6/28mw= +github.com/streamplace/glex v0.0.0-20260712172208-84746cabd547 h1:qxRoLqHc/KJedqV1iNQ41CWv/n4+kmUzV5lyBE6ScI8= +github.com/streamplace/glex v0.0.0-20260712172208-84746cabd547/go.mod h1:LRaoeSMvSgOrhFX8s7ygjRlyka7wXdDa1s7JJ9o1IzY= github.com/streamplace/go-dpop v0.0.0-20250510031900-c897158a8ad4 h1:L1fS4HJSaAyNnkwfuZubgfeZy8rkWmA0cMtH5Z0HqNc= github.com/streamplace/go-dpop v0.0.0-20250510031900-c897158a8ad4/go.mod h1:bGUXY9Wd4mnd+XUrOYZr358J2f6z9QO/dLhL1SsiD+0= github.com/streamplace/indigo v0.0.0-20260218231908-939cdaf0c507 h1:e8M3qPLr37NxEjlr18TaAwGP+OVyherVjgUG5VVmgWI= diff --git a/lexicons.json b/lexicons.json new file mode 100644 index 00000000..02e1d115 --- /dev/null +++ b/lexicons.json @@ -0,0 +1,84 @@ +{ + "version": 1, + "lexicons": [ + "app.bsky.actor.defs" + ], + "resolutions": { + "app.bsky.actor.defs": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.actor.defs", + "cid": "bafyreiel3mr6hz7g4wy5l6pkrwqh7affgluhfszvrrduc7p66os5cfkqdq" + }, + "app.bsky.actor.status": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.actor.status", + "cid": "bafyreifdg4b64wohpwkh5lydc6tckvol2rspnpni6dec6recy2rhvlnz4a" + }, + "app.bsky.embed.defs": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.embed.defs", + "cid": "bafyreia42uud4qil67wknywzbxfyxc3b7woewsii54cakq2ould3ldetei" + }, + "app.bsky.embed.external": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.embed.external", + "cid": "bafyreiblxmpzgwg4fbr45b4xzts3h4k72k7cdnrxy2ub2w5d7mnwzznkwi" + }, + "app.bsky.embed.images": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.embed.images", + "cid": "bafyreifw77mkqkzlvm5csjwutkrnaivsjvlhg2qxdlwwabqpahlyyjrpwi" + }, + "app.bsky.embed.record": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.embed.record", + "cid": "bafyreigdtmu53blwxoygphg5zh5zpmlftz64c3jyqpv2yqpx3nrichkyla" + }, + "app.bsky.embed.recordWithMedia": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.embed.recordWithMedia", + "cid": "bafyreia7jrw2p73egm7vrunssgzeyj2rwmk3s4dymfhgzcavxjfaje3qfi" + }, + "app.bsky.embed.video": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.embed.video", + "cid": "bafyreie3nug4ezpwodl6yrpgv5edkazzn22t7ea4yaeuun4rctyekkngai" + }, + "app.bsky.feed.defs": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.feed.defs", + "cid": "bafyreiadwvxawxifsnm7ae6l56aq23qs7ndih7npgs6pxmkoin7gi3k6pu" + }, + "app.bsky.feed.postgate": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.feed.postgate", + "cid": "bafyreiai5efexyluyptv5tbl6kqbqlnneczqzexcqnxmitmulyjfaftgva" + }, + "app.bsky.feed.threadgate": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.feed.threadgate", + "cid": "bafyreiht77wd6duduz4yqp62m6dwma5dy7gdihps4g2nd73acfzqlglvdi" + }, + "app.bsky.graph.defs": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.defs", + "cid": "bafyreifcipomli7yggtl46xufgxlnrw7se6xmsdxmzgfcz2tiu76ljatxm" + }, + "app.bsky.labeler.defs": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.labeler.defs", + "cid": "bafyreicxx5i36v5dbqk5vvfzhnta5gajrvc544mnepux4wksrkid7mw3q4" + }, + "app.bsky.notification.defs": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.notification.defs", + "cid": "bafyreickbpnayydlyfakliahgf23jjuesllh6qrslyofk5yz5xizjavhui" + }, + "app.bsky.richtext.facet": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.richtext.facet", + "cid": "bafyreidg56eo7zynf6ihz4xb627vwoqf5idnevkmwp7sxc4tijg6xngbu4" + }, + "com.atproto.label.defs": { + "uri": "at://did:plc:6msi3pj7krzih5qxqtryxlzw/com.atproto.lexicon.schema/com.atproto.label.defs", + "cid": "bafyreidp2wpcbzl2qiob2uwoc7lhntojx3tjcr553mmahw2f5cumtm3wpm" + }, + "com.atproto.moderation.defs": { + "uri": "at://did:plc:6msi3pj7krzih5qxqtryxlzw/com.atproto.lexicon.schema/com.atproto.moderation.defs", + "cid": "bafyreideawy4rlpgces2oebk5q4kpurbonhb5qtl4pes7dvxsc5osaiksy" + }, + "com.atproto.repo.strongRef": { + "uri": "at://did:plc:6msi3pj7krzih5qxqtryxlzw/com.atproto.lexicon.schema/com.atproto.repo.strongRef", + "cid": "bafyreifrkdbnkvfjujntdaeigolnrjj3srrs53tfixjhmacclps72qlov4" + }, + "tools.ozone.report.defs": { + "uri": "at://did:plc:33dt5kftu3jq2h5h4jjlqezt/com.atproto.lexicon.schema/tools.ozone.report.defs", + "cid": "bafyreic3l2rmh2ugirt3jz372wcvy333m7t2ynlyzj2k54oshijs6lxdfu" + } + } +} \ No newline at end of file diff --git a/lexicons/app/bsky/actor/getProfile.json b/lexicons/app/bsky/actor/getProfile.json deleted file mode 100644 index 15b0fcc2..00000000 --- a/lexicons/app/bsky/actor/getProfile.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "lexicon": 1, - "id": "app.bsky.actor.getProfile", - "defs": { - "main": { - "type": "query", - "description": "Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.", - "parameters": { - "type": "params", - "required": ["actor"], - "properties": { - "actor": { - "type": "string", - "format": "at-identifier", - "description": "Handle or DID of account to fetch profile of." - } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "ref", - "ref": "app.bsky.actor.defs#profileViewDetailed" - } - } - } - } -} diff --git a/lexicons/app/bsky/feed/getFeedSkeleton.json b/lexicons/app/bsky/feed/getFeedSkeleton.json deleted file mode 100644 index 2bcaa13d..00000000 --- a/lexicons/app/bsky/feed/getFeedSkeleton.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "lexicon": 1, - "id": "app.bsky.feed.getFeedSkeleton", - "defs": { - "main": { - "type": "query", - "description": "Get a skeleton of a feed provided by a feed generator. Auth is optional, depending on provider requirements, and provides the DID of the requester. Implemented by Feed Generator Service.", - "parameters": { - "type": "params", - "required": ["feed"], - "properties": { - "feed": { - "type": "string", - "format": "at-uri", - "description": "Reference to feed generator record describing the specific feed being requested." - }, - "limit": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "default": 50 - }, - "cursor": { "type": "string" } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["feed"], - "properties": { - "cursor": { "type": "string" }, - "feed": { - "type": "array", - "items": { - "type": "ref", - "ref": "app.bsky.feed.defs#skeletonFeedPost" - } - } - } - } - }, - "errors": [{ "name": "UnknownFeed" }] - } - } -} diff --git a/lexicons/com/atproto/identity/refreshIdentity.json b/lexicons/com/atproto/identity/refreshIdentity.json deleted file mode 100644 index 4c56084b..00000000 --- a/lexicons/com/atproto/identity/refreshIdentity.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.identity.refreshIdentity", - "defs": { - "main": { - "type": "procedure", - "description": "Request that the server re-resolve an identity (DID and handle). The server may ignore this request, or require authentication, depending on the role, implementation, and policy of the server.", - "input": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["identifier"], - "properties": { - "identifier": { - "type": "string", - "format": "at-identifier" - } - } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "ref", - "ref": "com.atproto.identity.defs#identityInfo" - } - }, - "errors": [ - { - "name": "HandleNotFound", - "description": "The resolution process confirmed that the handle does not resolve to any DID." - }, - { - "name": "DidNotFound", - "description": "The DID resolution process confirmed that there is no current DID." - }, - { - "name": "DidDeactivated", - "description": "The DID previously existed, but has been deactivated." - } - ] - } - } -} diff --git a/lexicons/com/atproto/identity/resolveHandle.json b/lexicons/com/atproto/identity/resolveHandle.json deleted file mode 100644 index 69751a52..00000000 --- a/lexicons/com/atproto/identity/resolveHandle.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.identity.resolveHandle", - "defs": { - "main": { - "type": "query", - "description": "Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.", - "parameters": { - "type": "params", - "required": ["handle"], - "properties": { - "handle": { - "type": "string", - "format": "handle", - "description": "The handle to resolve." - } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["did"], - "properties": { - "did": { "type": "string", "format": "did" } - } - } - }, - "errors": [ - { - "name": "HandleNotFound", - "description": "The resolution process confirmed that the handle does not resolve to any DID." - } - ] - } - } -} diff --git a/lexicons/com/atproto/moderation/createReport.json b/lexicons/com/atproto/moderation/createReport.json deleted file mode 100644 index 2b8fc740..00000000 --- a/lexicons/com/atproto/moderation/createReport.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.moderation.createReport", - "defs": { - "main": { - "type": "procedure", - "description": "Submit a moderation report regarding an atproto account or record. Implemented by moderation services (with PDS proxying), and requires auth.", - "input": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["reasonType", "subject"], - "properties": { - "reasonType": { - "type": "ref", - "description": "Indicates the broad category of violation the report is for.", - "ref": "com.atproto.moderation.defs#reasonType" - }, - "reason": { - "type": "string", - "maxGraphemes": 2000, - "maxLength": 20000, - "description": "Additional context about the content and violation." - }, - "subject": { - "type": "union", - "refs": [ - "com.atproto.admin.defs#repoRef", - "com.atproto.repo.strongRef" - ] - }, - "modTool": { - "type": "ref", - "ref": "#modTool" - } - } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": [ - "id", - "reasonType", - "subject", - "reportedBy", - "createdAt" - ], - "properties": { - "id": { "type": "integer" }, - "reasonType": { - "type": "ref", - "ref": "com.atproto.moderation.defs#reasonType" - }, - "reason": { - "type": "string", - "maxGraphemes": 2000, - "maxLength": 20000 - }, - "subject": { - "type": "union", - "refs": [ - "com.atproto.admin.defs#repoRef", - "com.atproto.repo.strongRef" - ] - }, - "reportedBy": { "type": "string", "format": "did" }, - "createdAt": { "type": "string", "format": "datetime" } - } - } - } - }, - "modTool": { - "type": "object", - "description": "Moderation tool information for tracing the source of the action", - "required": ["name"], - "properties": { - "name": { - "type": "string", - "description": "Name/identifier of the source (e.g., 'bsky-app/android', 'bsky-web/chrome')" - }, - "meta": { - "type": "unknown", - "description": "Additional arbitrary metadata about the source" - } - } - } - } -} diff --git a/lexicons/com/atproto/repo/describeRepo.json b/lexicons/com/atproto/repo/describeRepo.json deleted file mode 100644 index b1ce2b6c..00000000 --- a/lexicons/com/atproto/repo/describeRepo.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.repo.describeRepo", - "defs": { - "main": { - "type": "query", - "description": "Get information about an account and repository, including the list of collections. Does not require auth.", - "parameters": { - "type": "params", - "required": ["repo"], - "properties": { - "repo": { - "type": "string", - "format": "at-identifier", - "description": "The handle or DID of the repo." - } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": [ - "handle", - "did", - "didDoc", - "collections", - "handleIsCorrect" - ], - "properties": { - "handle": { "type": "string", "format": "handle" }, - "did": { "type": "string", "format": "did" }, - "didDoc": { - "type": "unknown", - "description": "The complete DID document for this account." - }, - "collections": { - "type": "array", - "description": "List of all the collections (NSIDs) for which this repo contains at least one record.", - "items": { "type": "string", "format": "nsid" } - }, - "handleIsCorrect": { - "type": "boolean", - "description": "Indicates if handle is currently valid (resolves bi-directionally)" - } - } - } - } - } - } -} diff --git a/lexicons/com/atproto/repo/getRecord.json b/lexicons/com/atproto/repo/getRecord.json deleted file mode 100644 index 388b9c5a..00000000 --- a/lexicons/com/atproto/repo/getRecord.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.repo.getRecord", - "defs": { - "main": { - "type": "query", - "description": "Get a single record from a repository. Does not require auth.", - "parameters": { - "type": "params", - "required": ["repo", "collection", "rkey"], - "properties": { - "repo": { - "type": "string", - "format": "at-identifier", - "description": "The handle or DID of the repo." - }, - "collection": { - "type": "string", - "format": "nsid", - "description": "The NSID of the record collection." - }, - "rkey": { - "type": "string", - "description": "The Record Key.", - "format": "record-key" - }, - "cid": { - "type": "string", - "format": "cid", - "description": "The CID of the version of the record. If not specified, then return the most recent version." - } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["uri", "value"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "cid": { "type": "string", "format": "cid" }, - "value": { "type": "unknown" } - } - } - }, - "errors": [{ "name": "RecordNotFound" }] - } - } -} diff --git a/lexicons/com/atproto/repo/listRecords.json b/lexicons/com/atproto/repo/listRecords.json deleted file mode 100644 index 3d43ff40..00000000 --- a/lexicons/com/atproto/repo/listRecords.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.repo.listRecords", - "defs": { - "main": { - "type": "query", - "description": "List a range of records in a repository, matching a specific collection. Does not require auth.", - "parameters": { - "type": "params", - "required": ["repo", "collection"], - "properties": { - "repo": { - "type": "string", - "format": "at-identifier", - "description": "The handle or DID of the repo." - }, - "collection": { - "type": "string", - "format": "nsid", - "description": "The NSID of the record type." - }, - "limit": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "default": 50, - "description": "The number of records to return." - }, - "cursor": { "type": "string" }, - "reverse": { - "type": "boolean", - "description": "Flag to reverse the order of the returned records." - } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["records"], - "properties": { - "cursor": { "type": "string" }, - "records": { - "type": "array", - "items": { "type": "ref", "ref": "#record" } - } - } - } - } - }, - "record": { - "type": "object", - "required": ["uri", "cid", "value"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "cid": { "type": "string", "format": "cid" }, - "value": { "type": "unknown" } - } - } - } -} diff --git a/lexicons/com/atproto/repo/uploadBlob.json b/lexicons/com/atproto/repo/uploadBlob.json deleted file mode 100644 index 547a995a..00000000 --- a/lexicons/com/atproto/repo/uploadBlob.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.repo.uploadBlob", - "defs": { - "main": { - "type": "procedure", - "description": "Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.", - "input": { - "encoding": "*/*" - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["blob"], - "properties": { - "blob": { "type": "blob" } - } - } - } - } - } -} diff --git a/lexicons/com/atproto/server/describeServer.json b/lexicons/com/atproto/server/describeServer.json deleted file mode 100644 index bbecf651..00000000 --- a/lexicons/com/atproto/server/describeServer.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.server.describeServer", - "defs": { - "main": { - "type": "query", - "description": "Describes the server's account creation requirements and capabilities. Implemented by PDS.", - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["did", "availableUserDomains"], - "properties": { - "inviteCodeRequired": { - "type": "boolean", - "description": "If true, an invite code must be supplied to create an account on this instance." - }, - "phoneVerificationRequired": { - "type": "boolean", - "description": "If true, a phone verification token must be supplied to create an account on this instance." - }, - "availableUserDomains": { - "type": "array", - "description": "List of domain suffixes that can be used in account handles.", - "items": { "type": "string" } - }, - "links": { - "type": "ref", - "description": "URLs of service policy documents.", - "ref": "#links" - }, - "contact": { - "type": "ref", - "description": "Contact information", - "ref": "#contact" - }, - "did": { - "type": "string", - "format": "did" - } - } - } - } - }, - "links": { - "type": "object", - "properties": { - "privacyPolicy": { "type": "string", "format": "uri" }, - "termsOfService": { "type": "string", "format": "uri" } - } - }, - "contact": { - "type": "object", - "properties": { - "email": { "type": "string" } - } - } - } -} diff --git a/lexicons/com/atproto/sync/getRecord.json b/lexicons/com/atproto/sync/getRecord.json deleted file mode 100644 index ecfc5acc..00000000 --- a/lexicons/com/atproto/sync/getRecord.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.sync.getRecord", - "defs": { - "main": { - "type": "query", - "description": "Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.", - "parameters": { - "type": "params", - "required": ["did", "collection", "rkey"], - "properties": { - "did": { - "type": "string", - "format": "did", - "description": "The DID of the repo." - }, - "collection": { "type": "string", "format": "nsid" }, - "rkey": { - "type": "string", - "description": "Record Key", - "format": "record-key" - } - } - }, - "output": { - "encoding": "application/vnd.ipld.car" - }, - "errors": [ - { "name": "RecordNotFound" }, - { "name": "RepoNotFound" }, - { "name": "RepoTakendown" }, - { "name": "RepoSuspended" }, - { "name": "RepoDeactivated" } - ] - } - } -} diff --git a/lexicons/com/atproto/sync/getRepo.json b/lexicons/com/atproto/sync/getRepo.json deleted file mode 100644 index 307202c2..00000000 --- a/lexicons/com/atproto/sync/getRepo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.sync.getRepo", - "defs": { - "main": { - "type": "query", - "description": "Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.", - "parameters": { - "type": "params", - "required": ["did"], - "properties": { - "did": { - "type": "string", - "format": "did", - "description": "The DID of the repo." - }, - "since": { - "type": "string", - "format": "tid", - "description": "The revision ('rev') of the repo to create a diff from." - } - } - }, - "output": { - "encoding": "application/vnd.ipld.car" - }, - "errors": [ - { "name": "RepoNotFound" }, - { "name": "RepoTakendown" }, - { "name": "RepoSuspended" }, - { "name": "RepoDeactivated" } - ] - } - } -} diff --git a/lexicons/com/atproto/sync/listRepos.json b/lexicons/com/atproto/sync/listRepos.json deleted file mode 100644 index 8115bbd6..00000000 --- a/lexicons/com/atproto/sync/listRepos.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.sync.listRepos", - "defs": { - "main": { - "type": "query", - "description": "Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay.", - "parameters": { - "type": "params", - "properties": { - "limit": { - "type": "integer", - "minimum": 1, - "maximum": 1000, - "default": 500 - }, - "cursor": { "type": "string" } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["repos"], - "properties": { - "cursor": { "type": "string" }, - "repos": { - "type": "array", - "items": { "type": "ref", "ref": "#repo" } - } - } - } - } - }, - "repo": { - "type": "object", - "required": ["did", "head", "rev"], - "properties": { - "did": { "type": "string", "format": "did" }, - "head": { - "type": "string", - "format": "cid", - "description": "Current repo commit CID" - }, - "rev": { "type": "string", "format": "tid" }, - "active": { "type": "boolean" }, - "status": { - "type": "string", - "description": "If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.", - "knownValues": [ - "takendown", - "suspended", - "deleted", - "deactivated", - "desynchronized", - "throttled" - ] - } - } - } - } -} diff --git a/lexicons/com/atproto/sync/subscribeRepos.json b/lexicons/com/atproto/sync/subscribeRepos.json deleted file mode 100644 index 373b050f..00000000 --- a/lexicons/com/atproto/sync/subscribeRepos.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "lexicon": 1, - "id": "com.atproto.sync.subscribeRepos", - "defs": { - "main": { - "type": "subscription", - "description": "Repository event stream, aka Firehose endpoint. Outputs repo commits with diff data, and identity update events, for all repositories on the current server. See the atproto specifications for details around stream sequencing, repo versioning, CAR diff format, and more. Public and does not require auth; implemented by PDS and Relay.", - "parameters": { - "type": "params", - "properties": { - "cursor": { - "type": "integer", - "description": "The last known event seq number to backfill from." - } - } - }, - "message": { - "schema": { - "type": "union", - "refs": ["#commit", "#sync", "#identity", "#account", "#info"] - } - }, - "errors": [ - { "name": "FutureCursor" }, - { - "name": "ConsumerTooSlow", - "description": "If the consumer of the stream can not keep up with events, and a backlog gets too large, the server will drop the connection." - } - ] - }, - "commit": { - "type": "object", - "description": "Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature.", - "required": [ - "seq", - "rebase", - "tooBig", - "repo", - "commit", - "rev", - "since", - "blocks", - "ops", - "blobs", - "time" - ], - "nullable": ["since"], - "properties": { - "seq": { - "type": "integer", - "description": "The stream sequence number of this message." - }, - "rebase": { "type": "boolean", "description": "DEPRECATED -- unused" }, - "tooBig": { - "type": "boolean", - "description": "DEPRECATED -- replaced by #sync event and data limits. Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data." - }, - "repo": { - "type": "string", - "format": "did", - "description": "The repo this event comes from. Note that all other message types name this field 'did'." - }, - "commit": { - "type": "cid-link", - "description": "Repo commit object CID." - }, - "rev": { - "type": "string", - "format": "tid", - "description": "The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event." - }, - "since": { - "type": "string", - "format": "tid", - "description": "The rev of the last emitted commit from this repo (if any)." - }, - "blocks": { - "type": "bytes", - "description": "CAR file containing relevant blocks, as a diff since the previous repo state. The commit must be included as a block, and the commit block CID must be the first entry in the CAR header 'roots' list.", - "maxLength": 2000000 - }, - "ops": { - "type": "array", - "items": { - "type": "ref", - "ref": "#repoOp", - "description": "List of repo mutation operations in this commit (eg, records created, updated, or deleted)." - }, - "maxLength": 200 - }, - "blobs": { - "type": "array", - "items": { - "type": "cid-link", - "description": "DEPRECATED -- will soon always be empty. List of new blobs (by CID) referenced by records in this commit." - } - }, - "prevData": { - "type": "cid-link", - "description": "The root CID of the MST tree for the previous commit from this repo (indicated by the 'since' revision field in this message). Corresponds to the 'data' field in the repo commit object. NOTE: this field is effectively required for the 'inductive' version of firehose." - }, - "time": { - "type": "string", - "format": "datetime", - "description": "Timestamp of when this message was originally broadcast." - } - } - }, - "sync": { - "type": "object", - "description": "Updates the repo to a new state, without necessarily including that state on the firehose. Used to recover from broken commit streams, data loss incidents, or in situations where upstream host does not know recent state of the repository.", - "required": ["seq", "did", "blocks", "rev", "time"], - "properties": { - "seq": { - "type": "integer", - "description": "The stream sequence number of this message." - }, - "did": { - "type": "string", - "format": "did", - "description": "The account this repo event corresponds to. Must match that in the commit object." - }, - "blocks": { - "type": "bytes", - "description": "CAR file containing the commit, as a block. The CAR header must include the commit block CID as the first 'root'.", - "maxLength": 10000 - }, - "rev": { - "type": "string", - "description": "The rev of the commit. This value must match that in the commit object." - }, - "time": { - "type": "string", - "format": "datetime", - "description": "Timestamp of when this message was originally broadcast." - } - } - }, - "identity": { - "type": "object", - "description": "Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache.", - "required": ["seq", "did", "time"], - "properties": { - "seq": { "type": "integer" }, - "did": { "type": "string", "format": "did" }, - "time": { "type": "string", "format": "datetime" }, - "handle": { - "type": "string", - "format": "handle", - "description": "The current handle for the account, or 'handle.invalid' if validation fails. This field is optional, might have been validated or passed-through from an upstream source. Semantics and behaviors for PDS vs Relay may evolve in the future; see atproto specs for more details." - } - } - }, - "account": { - "type": "object", - "description": "Represents a change to an account's status on a host (eg, PDS or Relay). The semantics of this event are that the status is at the host which emitted the event, not necessarily that at the currently active PDS. Eg, a Relay takedown would emit a takedown with active=false, even if the PDS is still active.", - "required": ["seq", "did", "time", "active"], - "properties": { - "seq": { "type": "integer" }, - "did": { "type": "string", "format": "did" }, - "time": { "type": "string", "format": "datetime" }, - "active": { - "type": "boolean", - "description": "Indicates that the account has a repository which can be fetched from the host that emitted this event." - }, - "status": { - "type": "string", - "description": "If active=false, this optional field indicates a reason for why the account is not active.", - "knownValues": [ - "takendown", - "suspended", - "deleted", - "deactivated", - "desynchronized", - "throttled" - ] - } - } - }, - "info": { - "type": "object", - "required": ["name"], - "properties": { - "name": { - "type": "string", - "knownValues": ["OutdatedCursor"] - }, - "message": { - "type": "string" - } - } - }, - "repoOp": { - "type": "object", - "description": "A repo operation, ie a mutation of a single record.", - "required": ["action", "path", "cid"], - "nullable": ["cid"], - "properties": { - "action": { - "type": "string", - "knownValues": ["create", "update", "delete"] - }, - "path": { "type": "string" }, - "cid": { - "type": "cid-link", - "description": "For creates and updates, the new record CID. For deletions, null." - }, - "prev": { - "type": "cid-link", - "description": "For updates and deletes, the previous record CID (required for inductive firehose). For creations, field should not be defined." - } - } - } - } -} diff --git a/lexicons/games/gamesgamesgamesgames/defs.json b/lexicons/games/gamesgamesgamesgames/defs.json deleted file mode 100644 index c985538c..00000000 --- a/lexicons/games/gamesgamesgamesgames/defs.json +++ /dev/null @@ -1,1000 +0,0 @@ -{ - "lexicon": 1, - "id": "games.gamesgamesgamesgames.defs", - "defs": { - "applicationType": { - "type": "string", - "enum": [ - "addon", - "bundle", - "dlc", - "episode", - "expandedGame", - "expansion", - "fork", - "game", - "mod", - "port", - "remake", - "remaster", - "season", - "standaloneExpansion", - "update" - ] - }, - - "genre": { - "type": "string", - "knownValues": [ - "fighting", - "music", - "platform", - "pointAndClick", - "puzzle", - "racing", - "rpg", - "rts", - "shooter", - "simulator" - ] - }, - - "mediaItem": { - "type": "object", - "properties": { - "blob": { - "type": "blob", - "accept": ["image/*", "video/*"], - "maxSize": 200000000 - }, - "description": { "type": "string" }, - "height": { "type": "integer" }, - "locale": { "type": "string" }, - "mediaType": { - "type": "string", - "enum": [ - "accoladesTrailer", - "announcementTrailer", - "artwork", - "cinematicTrailer", - "conceptArt", - "cover", - "coverAlt", - "coverHistorical", - "coverSquare", - "cutscene", - "devDiary", - "gameplayImage", - "gameplayTrailer", - "icon", - "infographic", - "intro", - "keyArt", - "keyArtLogo", - "launchTrailer", - "logoBlack", - "logoColor", - "logoWhite", - "releaseDateTrailer", - "screenshot", - "teaser", - "trailer" - ] - }, - "title": { "type": "string" }, - "width": { "type": "integer" } - } - }, - - "mode": { - "type": "string", - "knownValues": [ - "battleRoyale", - "cooperative", - "mmo", - "multiplayer", - "singlePlayer", - "splitScreen" - ] - }, - - "playerPerspective": { - "type": "string", - "knownValues": [ - "auditory", - "firstPerson", - "isometric", - "sideView", - "text", - "thirdPerson", - "topDown", - "vr" - ] - }, - - "theme": { - "type": "string", - "knownValues": [ - "4x", - "action", - "business", - "comedy", - "drama", - "educational", - "erotic", - "fantasy", - "historical", - "horror", - "kids", - "mystery", - "nonfiction", - "openWorld", - "party", - "romance", - "sandbox", - "scifi", - "stealth", - "survival", - "thriller", - "warfare" - ] - }, - - "ageRating": { - "type": "object", - "required": ["organization", "rating"], - "properties": { - "organization": { - "type": "string", - "knownValues": [ - "esrb", - "pegi", - "cero", - "usk", - "grac", - "classInd", - "acb" - ] - }, - "rating": { "type": "string" }, - "contentDescriptors": { - "type": "array", - "items": { "type": "string" } - } - } - }, - - "alternativeName": { - "type": "object", - "required": ["name"], - "properties": { - "name": { "type": "string" }, - "locale": { "type": "string" }, - "comment": { "type": "string" } - } - }, - - "companyRole": { - "type": "string", - "knownValues": ["developer", "publisher", "porter", "supporter"] - }, - - "creditEntry": { - "type": "object", - "required": ["role"], - "properties": { - "role": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#individualRole" - }, - "department": { - "type": "string", - "maxLength": 640 - } - } - }, - - "individualRole": { - "type": "string", - "knownValues": [ - "director", - "producer", - "designer", - "programmer", - "artist", - "animator", - "writer", - "composer", - "soundDesigner", - "voiceActor", - "qa", - "localization", - "communityManager", - "marketing" - ] - }, - - "itchIoId": { - "type": "object", - "required": ["developer", "game"], - "properties": { - "developer": { "type": "string" }, - "game": { "type": "string" } - } - }, - - "externalIds": { - "type": "object", - "properties": { - "igdb": { "type": "string" }, - "steam": { "type": "string" }, - "gog": { "type": "string" }, - "epicGames": { "type": "string" }, - "itchIo": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#itchIoId" - }, - "humbleBundle": { "type": "string" }, - "playStation": { "type": "string" }, - "xbox": { "type": "string" }, - "nintendoEshop": { "type": "string" }, - "appleAppStore": { "type": "string" }, - "googlePlay": { "type": "string" }, - "twitch": { "type": "string" } - } - }, - - "externalVideo": { - "type": "object", - "required": ["videoId", "platform"], - "properties": { - "videoId": { "type": "string" }, - "platform": { - "type": "string", - "knownValues": ["youtube", "twitch", "vimeo"] - }, - "title": { "type": "string" } - } - }, - - "languageSupport": { - "type": "object", - "required": ["language"], - "properties": { - "language": { "type": "string" }, - "audio": { "type": "boolean" }, - "subtitles": { "type": "boolean" }, - "interface": { "type": "boolean" } - } - }, - - "multiplayerMode": { - "type": "object", - "properties": { - "platform": { "type": "string" }, - "onlineMax": { "type": "integer" }, - "offlineMax": { "type": "integer" }, - "onlineCoopMax": { "type": "integer" }, - "offlineCoopMax": { "type": "integer" }, - "hasCampaignCoop": { "type": "boolean" }, - "hasDropIn": { "type": "boolean" }, - "hasLanCoop": { "type": "boolean" }, - "hasSplitscreen": { "type": "boolean" }, - "hasSplitscreenOnline": { "type": "boolean" } - } - }, - - "timeToBeat": { - "type": "object", - "properties": { - "hastily": { "type": "integer" }, - "normally": { "type": "integer" }, - "completely": { "type": "integer" } - } - }, - - "website": { - "type": "object", - "required": ["url"], - "properties": { - "url": { "type": "string", "format": "uri" }, - "type": { - "type": "string", - "knownValues": [ - "official", - "wiki", - "steam", - "gog", - "epicGames", - "itchIo", - "twitter", - "instagram", - "youtube", - "twitch", - "discord", - "reddit", - "facebook", - "wikipedia", - "bluesky", - "xbox", - "playstation", - "nintendo", - "meta", - "other" - ] - } - } - }, - - "skeletonGameFeedItem": { - "type": "object", - "required": ["game"], - "properties": { - "game": { "type": "string", "format": "at-uri" }, - "feedContext": { "type": "string", "maxLength": 2000 } - } - }, - - "gameView": { - "type": "object", - "required": ["uri", "name", "applicationType"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "name": { "type": "string" }, - "applicationType": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#applicationType" - }, - "summary": { "type": "string" }, - "genres": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#genre" - } - }, - "themes": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#theme" - } - }, - "media": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#mediaItem" - } - }, - "releases": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#release" - } - }, - "slug": { "type": "string" }, - "likeCount": { "type": "integer", "minimum": 0 }, - "viewer": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#viewerState" - } - } - }, - - "viewerState": { - "type": "object", - "properties": { - "like": { "type": "string", "format": "at-uri" } - } - }, - - "gameFeedViewItem": { - "type": "object", - "required": ["game"], - "properties": { - "game": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#gameView" - }, - "feedContext": { "type": "string", "maxLength": 2000 } - } - }, - - "gameDetailView": { - "type": "object", - "required": ["name", "uri", "createdAt"], - "properties": { - "applicationType": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#applicationType" - }, - "createdAt": { "type": "string", "format": "datetime" }, - "genres": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#genre" - } - }, - "media": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#mediaItem" - } - }, - "modes": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#mode" - } - }, - "name": { "type": "string" }, - "parent": { "type": "string", "format": "at-uri" }, - "playerPerspectives": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#playerPerspective" - } - }, - "publishedAt": { "type": "string", "format": "datetime" }, - "releases": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#release" - } - }, - "summary": { "type": "string" }, - "themes": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#theme" - } - }, - "uri": { "type": "string", "format": "at-uri" }, - "storyline": { "type": "string" }, - "keywords": { - "type": "array", - "items": { "type": "string" } - }, - "websites": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#website" - } - }, - "videos": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#externalVideo" - } - }, - "alternativeNames": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#alternativeName" - } - }, - "timeToBeat": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#timeToBeat" - }, - "ageRatings": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#ageRating" - } - }, - "languageSupports": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#languageSupport" - } - }, - "multiplayerModes": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#multiplayerMode" - } - }, - "collections": { - "type": "array", - "items": { "type": "string", "format": "at-uri" } - }, - "engines": { - "type": "array", - "items": { "type": "string", "format": "at-uri" } - }, - "externalIds": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#externalIds" - }, - "slug": { "type": "string" }, - "orgCredits": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#orgCreditView" - } - }, - "actorCredits": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#actorCreditView" - } - } - } - }, - - "orgCreditView": { - "type": "object", - "required": ["uri", "roles"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "orgUri": { "type": "string", "format": "at-uri" }, - "displayName": { "type": "string", "maxLength": 640 }, - "roles": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#companyRole" - } - } - } - }, - - "actorCreditView": { - "type": "object", - "required": ["uri", "credits"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "actorUri": { "type": "string", "format": "at-uri" }, - "displayName": { "type": "string", "maxLength": 640 }, - "credits": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#creditEntry" - } - } - } - }, - - "gameSummaryView": { - "type": "object", - "required": ["uri", "name"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "name": { "type": "string" }, - "summary": { "type": "string" }, - "media": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#mediaItem" - } - }, - "genres": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#genre" - } - }, - "slug": { "type": "string" }, - "applicationType": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#applicationType" - }, - "firstReleaseDate": { - "type": "integer", - "description": "Earliest release date as YYYYMMDD integer." - } - } - }, - - "profileSummaryView": { - "type": "object", - "required": ["uri", "did", "profileType"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "did": { "type": "string", "format": "did" }, - "profileType": { "type": "string", "knownValues": ["actor", "org"] }, - "displayName": { "type": "string", "maxLength": 640 }, - "avatar": { - "type": "blob", - "accept": ["image/png", "image/jpeg"], - "maxSize": 10000000 - } - } - }, - - "actorProfileDetailView": { - "type": "object", - "required": ["uri", "did"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "did": { "type": "string", "format": "did" }, - "displayName": { - "type": "string", - "maxLength": 640 - }, - "description": { - "type": "string", - "maxLength": 3000 - }, - "descriptionFacets": { - "type": "array", - "items": { "type": "ref", "ref": "app.bsky.richtext.facet" } - }, - "pronouns": { - "type": "string", - "maxLength": 200 - }, - "websites": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#website" - } - }, - "avatar": { - "type": "blob", - "accept": ["image/png", "image/jpeg"], - "maxSize": 10000000 - }, - "createdAt": { "type": "string", "format": "datetime" } - } - }, - - "actorProfileSummaryView": { - "type": "object", - "required": ["uri", "did"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "did": { "type": "string", "format": "did" }, - "displayName": { - "type": "string", - "maxLength": 640 - }, - "avatar": { - "type": "blob", - "accept": ["image/png", "image/jpeg"], - "maxSize": 10000000 - } - } - }, - - "orgProfileDetailView": { - "type": "object", - "required": ["uri", "did"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "did": { "type": "string", "format": "did" }, - "displayName": { - "type": "string", - "maxLength": 640 - }, - "description": { - "type": "string", - "maxLength": 3000 - }, - "descriptionFacets": { - "type": "array", - "items": { "type": "ref", "ref": "app.bsky.richtext.facet" } - }, - "country": { "type": "string" }, - "status": { - "type": "string", - "knownValues": ["active", "inactive", "merged", "acquired", "defunct"] - }, - "parent": { - "type": "string", - "format": "at-uri" - }, - "foundedAt": { - "type": "string", - "format": "datetime" - }, - "websites": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#website" - } - }, - "media": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#mediaItem" - } - }, - "avatar": { - "type": "blob", - "accept": ["image/png", "image/jpeg"], - "maxSize": 10000000 - }, - "createdAt": { "type": "string", "format": "datetime" } - } - }, - - "orgProfileSummaryView": { - "type": "object", - "required": ["uri", "did"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "did": { "type": "string", "format": "did" }, - "displayName": { - "type": "string", - "maxLength": 640 - }, - "avatar": { - "type": "blob", - "accept": ["image/png", "image/jpeg"], - "maxSize": 10000000 - } - } - }, - - "platformSummaryView": { - "type": "object", - "required": ["uri", "name"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "name": { "type": "string" }, - "abbreviation": { "type": "string" }, - "category": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#platformCategory" - }, - "slug": { "type": "string" } - } - }, - - "collectionSummaryView": { - "type": "object", - "required": ["uri", "name"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "name": { "type": "string" }, - "type": { - "type": "string", - "knownValues": ["franchise", "series", "curated"] - }, - "slug": { "type": "string" } - } - }, - - "engineSummaryView": { - "type": "object", - "required": ["uri", "name"], - "properties": { - "uri": { "type": "string", "format": "at-uri" }, - "name": { "type": "string" }, - "slug": { "type": "string" } - } - }, - - "release": { - "type": "object", - "properties": { - "platform": { - "type": "string", - "description": "Free-text platform name, used when no platform record exists." - }, - "platformUri": { - "type": "string", - "format": "at-uri", - "description": "AT URI of a platform record." - }, - "releaseDates": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#releaseDate" - } - } - } - }, - - "platformCategory": { - "type": "string", - "knownValues": [ - "console", - "portable", - "computer", - "arcade", - "operatingSystem" - ] - }, - - "platformVersion": { - "type": "object", - "required": ["name"], - "properties": { - "name": { "type": "string" }, - "summary": { "type": "string" }, - "cpu": { "type": "string" }, - "gpu": { "type": "string" }, - "memory": { "type": "string" }, - "storage": { "type": "string" }, - "connectivity": { "type": "string" }, - "os": { "type": "string" }, - "output": { "type": "string" }, - "maxResolution": { "type": "string" }, - "media": { - "type": "array", - "items": { - "type": "ref", - "ref": "games.gamesgamesgamesgames.defs#mediaItem" - } - } - } - }, - - "systemSpec": { - "type": "object", - "description": "Hardware/software specification for a platform.", - "properties": { - "os": { "type": "string" }, - "processor": { "type": "string" }, - "memory": { "type": "string" }, - "graphics": { "type": "string" }, - "directx": { "type": "string" }, - "storage": { "type": "string" }, - "soundCard": { "type": "string" }, - "additionalNotes": { "type": "string" } - } - }, - - "systemRequirements": { - "type": "object", - "description": "System requirements for a game on a specific platform.", - "required": ["platform"], - "properties": { - "platform": { - "type": "string", - "knownValues": ["windows", "mac", "linux"] - }, - "minimum": { "type": "ref", "ref": "#systemSpec" }, - "recommended": { "type": "ref", "ref": "#systemSpec" } - } - }, - - "platformFeatures": { - "type": "object", - "description": "Features supported by a game on a specific storefront/platform.", - "required": ["platform", "features"], - "properties": { - "platform": { - "type": "string", - "knownValues": [ - "steam", - "gog", - "epicGames", - "playStation", - "xbox", - "nintendoEshop" - ] - }, - "features": { - "type": "array", - "items": { - "type": "string", - "knownValues": [ - "achievements", - "cloudSaves", - "controllerSupport", - "controllerSupportFull", - "coop", - "coopLan", - "coopOnline", - "crossPlatformMultiplayer", - "familySharing", - "inAppPurchases", - "leaderboards", - "levelEditor", - "moddingSupport", - "multiPlayer", - "multiPlayerLan", - "multiPlayerOnline", - "pvp", - "pvpLan", - "pvpOnline", - "remotePlayPhone", - "remotePlayTablet", - "remotePlayTV", - "remotePlayTogether", - "singlePlayer", - "steamTradingCards", - "steamWorkshop", - "trackingAndManagement", - "vrSupport" - ] - } - } - } - }, - - "releaseDate": { - "type": "object", - "properties": { - "releasedAt": { - "type": "string" - }, - "releasedAtFormat": { - "type": "string", - "enum": [ - "YYYY-MM-DD", - "YYYY-MM", - "YYYY-Q1", - "YYYY-Q2", - "YYYY-Q3", - "YYYY-Q4", - "YYYY", - "TBD" - ] - }, - "region": { - "type": "string", - "knownValues": [ - "worldwide", - "europe", - "northAmerica", - "australia", - "newZealand", - "japan", - "china", - "asia", - "korea", - "brazil" - ] - }, - "status": { - "type": "string", - "knownValues": [ - "advancedAccess", - "alpha", - "beta", - "cancelled", - "digitalCompatibilityRelease", - "earlyAccess", - "nextGenOptimizationRelease", - "offline", - "release" - ] - } - } - }, - - "signature": { - "type": "object", - "description": "An inline attestation signature.", - "required": ["key", "signature"], - "properties": { - "key": { - "type": "string", - "description": "DID key reference (e.g., did:web:example.com#signing1)." - }, - "signature": { - "type": "bytes", - "description": "The signature bytes." - } - } - } - } -} diff --git a/lexicons/games/gamesgamesgamesgames/search.json b/lexicons/games/gamesgamesgamesgames/search.json deleted file mode 100644 index 48a15d2f..00000000 --- a/lexicons/games/gamesgamesgamesgames/search.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "lexicon": 1, - "id": "games.gamesgamesgamesgames.search", - "defs": { - "main": { - "type": "query", - "description": "Search across all entity types (games, profiles, platforms, collections, engines).", - "parameters": { - "type": "params", - "required": ["q"], - "properties": { - "q": { - "type": "string", - "minLength": 1, - "maxLength": 200 - }, - "limit": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "default": 20 - }, - "types": { - "type": "array", - "items": { - "type": "string", - "knownValues": [ - "game", - "profile", - "platform", - "collection", - "engine" - ] - } - }, - "applicationTypes": { - "type": "array", - "description": "Filter game results by application type (e.g. game, dlc, bundle). Only applies when types includes game.", - "items": { - "type": "string", - "knownValues": [ - "addon", - "bundle", - "dlc", - "episode", - "expandedGame", - "expansion", - "fork", - "game", - "mod", - "pack", - "port", - "remake", - "remaster", - "season", - "standaloneExpansion", - "update" - ] - } - }, - "sort": { - "type": "string", - "knownValues": [ - "name_asc", - "name_desc", - "published_asc", - "published_desc" - ] - }, - "genres": { - "type": "array", - "items": { "type": "string" } - }, - "themes": { - "type": "array", - "items": { "type": "string" } - }, - "modes": { - "type": "array", - "items": { "type": "string" } - }, - "playerPerspectives": { - "type": "array", - "items": { "type": "string" } - }, - "ageRatings": { - "type": "array", - "description": "Filter game results by age rating in 'organization:rating' format (e.g. esrb:M, pegi:Eighteen).", - "items": { "type": "string" } - }, - "includeUnrated": { - "type": "boolean", - "description": "When age rating filters are active, also include games with no age ratings.", - "default": false - }, - "includeCancelled": { - "type": "boolean", - "default": false - }, - "cursor": { - "type": "string" - } - } - }, - "output": { - "encoding": "application/json", - "schema": { - "type": "object", - "required": ["results"], - "properties": { - "cursor": { "type": "string" }, - "totalResults": { - "type": "integer", - "description": "Total number of results matching the query above the relevance threshold." - }, - "results": { - "type": "array", - "items": { - "type": "union", - "refs": [ - "games.gamesgamesgamesgames.defs#gameSummaryView", - "games.gamesgamesgamesgames.defs#profileSummaryView", - "games.gamesgamesgamesgames.defs#platformSummaryView", - "games.gamesgamesgamesgames.defs#collectionSummaryView", - "games.gamesgamesgamesgames.defs#engineSummaryView" - ] - } - } - } - } - } - } - } -}