From 454de018817c72ad2301c24975249d1eaed3db58 Mon Sep 17 00:00:00 2001 From: syui Date: Sat, 9 Nov 2024 09:50:39 +0900 Subject: [PATCH] add lexicons --- .gitignore | 2 +- at/lexicons/ai/syui/card.json | 56 ++++++++ at/lexicons/ai/syui/card/verify.json | 62 +++++++++ at/lexicons/ai/syui/o/comment.json | 30 +++++ at/lexicons/ai/syui/o/post.json | 33 +++++ at/lexicons/ai/syui/o/vote.json | 23 ++++ at/lexicons/com/atproto/repo/applyWrites.json | 126 ++++++++++++++++++ .../com/atproto/repo/createRecord.json | 72 ++++++++++ at/lexicons/com/atproto/repo/defs.json | 14 ++ .../com/atproto/repo/deleteRecord.json | 56 ++++++++ .../com/atproto/repo/describeRepo.json | 51 +++++++ at/lexicons/com/atproto/repo/getRecord.json | 45 +++++++ at/lexicons/com/atproto/repo/importRepo.json | 13 ++ .../com/atproto/repo/listMissingBlobs.json | 44 ++++++ at/lexicons/com/atproto/repo/listRecords.json | 69 ++++++++++ at/lexicons/com/atproto/repo/putRecord.json | 73 ++++++++++ at/lexicons/com/atproto/repo/strongRef.json | 15 +++ at/lexicons/com/atproto/repo/uploadBlob.json | 23 ++++ 18 files changed, 806 insertions(+), 1 deletion(-) create mode 100644 at/lexicons/ai/syui/card.json create mode 100644 at/lexicons/ai/syui/card/verify.json create mode 100644 at/lexicons/ai/syui/o/comment.json create mode 100644 at/lexicons/ai/syui/o/post.json create mode 100644 at/lexicons/ai/syui/o/vote.json create mode 100644 at/lexicons/com/atproto/repo/applyWrites.json create mode 100644 at/lexicons/com/atproto/repo/createRecord.json create mode 100644 at/lexicons/com/atproto/repo/defs.json create mode 100644 at/lexicons/com/atproto/repo/deleteRecord.json create mode 100644 at/lexicons/com/atproto/repo/describeRepo.json create mode 100644 at/lexicons/com/atproto/repo/getRecord.json create mode 100644 at/lexicons/com/atproto/repo/importRepo.json create mode 100644 at/lexicons/com/atproto/repo/listMissingBlobs.json create mode 100644 at/lexicons/com/atproto/repo/listRecords.json create mode 100644 at/lexicons/com/atproto/repo/putRecord.json create mode 100644 at/lexicons/com/atproto/repo/strongRef.json create mode 100644 at/lexicons/com/atproto/repo/uploadBlob.json diff --git a/.gitignore b/.gitignore index d122b4a..5a33697 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ Cargo.lock target -*.json +#*.json *.DS_Store **.DS_Store scpt/json/ diff --git a/at/lexicons/ai/syui/card.json b/at/lexicons/ai/syui/card.json new file mode 100644 index 0000000..b809cca --- /dev/null +++ b/at/lexicons/ai/syui/card.json @@ -0,0 +1,56 @@ +{ + "lexicon": 1, + "id": "ai.syui.card", + "defs": { + "main": { + "type": "record", + "description": "Record containing a cards box.", + "key": "tid", + "record": { + "type": "object", + "required": ["verify", "createdAt"], + "properties": { + "id":{ + "type": "integer", + "minimum": 0, + "maximum": 14, + "default": 0 + }, + "cp":{ + "type": "integer", + "minimum": 1, + "maximum": 5000, + "default": 1 + }, + "rank":{ + "type": "integer", + "minimum": 0, + "maximum": 7, + "default": 0 + }, + "rare": { + "type": "string", + "enum": ["normal", "super", "ultra", "yui", "ai"], + "default": "normal" + }, + "author": { + "type": "string", + "format": "uri", + "description": "https://verify...", + "default": "https://yui.syui.ai" + }, + "verify": { + "type": "string", + "format": "at-uri", + "description": "at://verify..." + }, + "createdAt": { + "type": "string", + "format": "datetime", + "description": "Client-declared timestamp when this post was originally created." + } + } + } + } + } +} diff --git a/at/lexicons/ai/syui/card/verify.json b/at/lexicons/ai/syui/card/verify.json new file mode 100644 index 0000000..8568d62 --- /dev/null +++ b/at/lexicons/ai/syui/card/verify.json @@ -0,0 +1,62 @@ +{ + "lexicon": 1, + "id": "ai.syui.card.verify", + "defs": { + "main": { + "type": "record", + "description": "Record containing a card verify.", + "key": "tid", + "record": { + "type": "object", + "required": ["handle", "did", "createdAt"], + "properties": { + "id":{ + "type": "integer", + "minimum": 0, + "maximum": 14, + "default": 0 + }, + "cp":{ + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 1 + }, + "rank":{ + "type": "integer", + "minimum": 0, + "maximum": 7, + "default": 0 + }, + "rare": { + "type": "string", + "enum": ["normal", "super", "ultra", "yui", "ai"], + "default": "normal" + }, + "handle": { + "type": "string", + "maxLength": 32, + "maxGraphemes": 32 + }, + "did": { + "type": "string" + }, + "embed": { + "type": "union", + "refs": [ + "app.bsky.embed.images", + "app.bsky.embed.external", + "app.bsky.embed.record", + "app.bsky.embed.recordWithMedia" + ] + }, + "createdAt": { + "type": "string", + "format": "datetime", + "description": "Client-declared timestamp when this post was originally created." + } + } + } + } + } +} diff --git a/at/lexicons/ai/syui/o/comment.json b/at/lexicons/ai/syui/o/comment.json new file mode 100644 index 0000000..c52ec9d --- /dev/null +++ b/at/lexicons/ai/syui/o/comment.json @@ -0,0 +1,30 @@ +{ + "lexicon": 1, + "id": "ai.syui.o.comment", + "defs": { + "main": { + "type": "record", + "description": "Record containing a Frontpage comment.", + "key": "tid", + "record": { + "type": "object", + "required": ["content", "createdAt", "post"], + "properties": { + "content": { + "type": "string", + "maxLength": 100000, + "maxGraphemes": 10000, + "description": "The content of the comment." + }, + "createdAt": { + "type": "string", + "format": "datetime", + "description": "Client-declared timestamp when this comment was originally created." + }, + "parent": { "type": "ref", "ref": "com.atproto.repo.strongRef" }, + "post": { "type": "ref", "ref": "com.atproto.repo.strongRef" } + } + } + } + } +} diff --git a/at/lexicons/ai/syui/o/post.json b/at/lexicons/ai/syui/o/post.json new file mode 100644 index 0000000..b18659c --- /dev/null +++ b/at/lexicons/ai/syui/o/post.json @@ -0,0 +1,33 @@ +{ + "lexicon": 1, + "id": "ai.syui.o.post", + "defs": { + "main": { + "type": "record", + "description": "Record containing a Frontpage post.", + "key": "tid", + "record": { + "type": "object", + "required": ["title", "url", "createdAt"], + "properties": { + "title": { + "type": "string", + "maxLength": 3000, + "maxGraphemes": 300, + "description": "The title of the post." + }, + "url": { + "type": "string", + "format": "uri", + "description": "The URL of the post." + }, + "createdAt": { + "type": "string", + "format": "datetime", + "description": "Client-declared timestamp when this post was originally created." + } + } + } + } + } +} diff --git a/at/lexicons/ai/syui/o/vote.json b/at/lexicons/ai/syui/o/vote.json new file mode 100644 index 0000000..0870658 --- /dev/null +++ b/at/lexicons/ai/syui/o/vote.json @@ -0,0 +1,23 @@ +{ + "lexicon": 1, + "id": "ai.syui.o.vote", + "defs": { + "main": { + "type": "record", + "description": "Record containing a Frontpage vote.", + "key": "tid", + "record": { + "type": "object", + "required": ["subject", "createdAt"], + "properties": { + "subject": { "type": "ref", "ref": "com.atproto.repo.strongRef" }, + "createdAt": { + "type": "string", + "format": "datetime", + "description": "Client-declared timestamp when this vote was originally created." + } + } + } + } + } +} diff --git a/at/lexicons/com/atproto/repo/applyWrites.json b/at/lexicons/com/atproto/repo/applyWrites.json new file mode 100644 index 0000000..26dd96c --- /dev/null +++ b/at/lexicons/com/atproto/repo/applyWrites.json @@ -0,0 +1,126 @@ +{ + "lexicon": 1, + "id": "com.atproto.repo.applyWrites", + "defs": { + "main": { + "type": "procedure", + "description": "Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["repo", "writes"], + "properties": { + "repo": { + "type": "string", + "format": "at-identifier", + "description": "The handle or DID of the repo (aka, current account)." + }, + "validate": { + "type": "boolean", + "description": "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons." + }, + "writes": { + "type": "array", + "items": { + "type": "union", + "refs": ["#create", "#update", "#delete"], + "closed": true + } + }, + "swapCommit": { + "type": "string", + "description": "If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.", + "format": "cid" + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": [], + "properties": { + "commit": { + "type": "ref", + "ref": "com.atproto.repo.defs#commitMeta" + }, + "results": { + "type": "array", + "items": { + "type": "union", + "refs": ["#createResult", "#updateResult", "#deleteResult"], + "closed": true + } + } + } + } + }, + "errors": [ + { + "name": "InvalidSwap", + "description": "Indicates that the 'swapCommit' parameter did not match current commit." + } + ] + }, + "create": { + "type": "object", + "description": "Operation which creates a new record.", + "required": ["collection", "value"], + "properties": { + "collection": { "type": "string", "format": "nsid" }, + "rkey": { "type": "string", "maxLength": 15 }, + "value": { "type": "unknown" } + } + }, + "update": { + "type": "object", + "description": "Operation which updates an existing record.", + "required": ["collection", "rkey", "value"], + "properties": { + "collection": { "type": "string", "format": "nsid" }, + "rkey": { "type": "string" }, + "value": { "type": "unknown" } + } + }, + "delete": { + "type": "object", + "description": "Operation which deletes an existing record.", + "required": ["collection", "rkey"], + "properties": { + "collection": { "type": "string", "format": "nsid" }, + "rkey": { "type": "string" } + } + }, + "createResult": { + "type": "object", + "required": ["uri", "cid"], + "properties": { + "uri": { "type": "string", "format": "at-uri" }, + "cid": { "type": "string", "format": "cid" }, + "validationStatus": { + "type": "string", + "knownValues": ["valid", "unknown"] + } + } + }, + "updateResult": { + "type": "object", + "required": ["uri", "cid"], + "properties": { + "uri": { "type": "string", "format": "at-uri" }, + "cid": { "type": "string", "format": "cid" }, + "validationStatus": { + "type": "string", + "knownValues": ["valid", "unknown"] + } + } + }, + "deleteResult": { + "type": "object", + "required": [], + "properties": {} + } + } +} diff --git a/at/lexicons/com/atproto/repo/createRecord.json b/at/lexicons/com/atproto/repo/createRecord.json new file mode 100644 index 0000000..7290085 --- /dev/null +++ b/at/lexicons/com/atproto/repo/createRecord.json @@ -0,0 +1,72 @@ +{ + "lexicon": 1, + "id": "com.atproto.repo.createRecord", + "defs": { + "main": { + "type": "procedure", + "description": "Create a single new repository record. Requires auth, implemented by PDS.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["repo", "collection", "record"], + "properties": { + "repo": { + "type": "string", + "format": "at-identifier", + "description": "The handle or DID of the repo (aka, current account)." + }, + "collection": { + "type": "string", + "format": "nsid", + "description": "The NSID of the record collection." + }, + "rkey": { + "type": "string", + "description": "The Record Key.", + "maxLength": 15 + }, + "validate": { + "type": "boolean", + "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons." + }, + "record": { + "type": "unknown", + "description": "The record itself. Must contain a $type field." + }, + "swapCommit": { + "type": "string", + "format": "cid", + "description": "Compare and swap with the previous commit by CID." + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["uri", "cid"], + "properties": { + "uri": { "type": "string", "format": "at-uri" }, + "cid": { "type": "string", "format": "cid" }, + "commit": { + "type": "ref", + "ref": "com.atproto.repo.defs#commitMeta" + }, + "validationStatus": { + "type": "string", + "knownValues": ["valid", "unknown"] + } + } + } + }, + "errors": [ + { + "name": "InvalidSwap", + "description": "Indicates that 'swapCommit' didn't match current repo commit." + } + ] + } + } +} diff --git a/at/lexicons/com/atproto/repo/defs.json b/at/lexicons/com/atproto/repo/defs.json new file mode 100644 index 0000000..0f5128f --- /dev/null +++ b/at/lexicons/com/atproto/repo/defs.json @@ -0,0 +1,14 @@ +{ + "lexicon": 1, + "id": "com.atproto.repo.defs", + "defs": { + "commitMeta": { + "type": "object", + "required": ["cid", "rev"], + "properties": { + "cid": { "type": "string", "format": "cid" }, + "rev": { "type": "string" } + } + } + } +} diff --git a/at/lexicons/com/atproto/repo/deleteRecord.json b/at/lexicons/com/atproto/repo/deleteRecord.json new file mode 100644 index 0000000..fb9b90b --- /dev/null +++ b/at/lexicons/com/atproto/repo/deleteRecord.json @@ -0,0 +1,56 @@ +{ + "lexicon": 1, + "id": "com.atproto.repo.deleteRecord", + "defs": { + "main": { + "type": "procedure", + "description": "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["repo", "collection", "rkey"], + "properties": { + "repo": { + "type": "string", + "format": "at-identifier", + "description": "The handle or DID of the repo (aka, current account)." + }, + "collection": { + "type": "string", + "format": "nsid", + "description": "The NSID of the record collection." + }, + "rkey": { + "type": "string", + "description": "The Record Key." + }, + "swapRecord": { + "type": "string", + "format": "cid", + "description": "Compare and swap with the previous record by CID." + }, + "swapCommit": { + "type": "string", + "format": "cid", + "description": "Compare and swap with the previous commit by CID." + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "properties": { + "commit": { + "type": "ref", + "ref": "com.atproto.repo.defs#commitMeta" + } + } + } + }, + "errors": [{ "name": "InvalidSwap" }] + } + } +} diff --git a/at/lexicons/com/atproto/repo/describeRepo.json b/at/lexicons/com/atproto/repo/describeRepo.json new file mode 100644 index 0000000..b1ce2b6 --- /dev/null +++ b/at/lexicons/com/atproto/repo/describeRepo.json @@ -0,0 +1,51 @@ +{ + "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/at/lexicons/com/atproto/repo/getRecord.json b/at/lexicons/com/atproto/repo/getRecord.json new file mode 100644 index 0000000..261c1cd --- /dev/null +++ b/at/lexicons/com/atproto/repo/getRecord.json @@ -0,0 +1,45 @@ +{ + "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." }, + "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/at/lexicons/com/atproto/repo/importRepo.json b/at/lexicons/com/atproto/repo/importRepo.json new file mode 100644 index 0000000..fc850b1 --- /dev/null +++ b/at/lexicons/com/atproto/repo/importRepo.json @@ -0,0 +1,13 @@ +{ + "lexicon": 1, + "id": "com.atproto.repo.importRepo", + "defs": { + "main": { + "type": "procedure", + "description": "Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.", + "input": { + "encoding": "application/vnd.ipld.car" + } + } + } +} diff --git a/at/lexicons/com/atproto/repo/listMissingBlobs.json b/at/lexicons/com/atproto/repo/listMissingBlobs.json new file mode 100644 index 0000000..c39913d --- /dev/null +++ b/at/lexicons/com/atproto/repo/listMissingBlobs.json @@ -0,0 +1,44 @@ +{ + "lexicon": 1, + "id": "com.atproto.repo.listMissingBlobs", + "defs": { + "main": { + "type": "query", + "description": "Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.", + "parameters": { + "type": "params", + "properties": { + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "default": 500 + }, + "cursor": { "type": "string" } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["blobs"], + "properties": { + "cursor": { "type": "string" }, + "blobs": { + "type": "array", + "items": { "type": "ref", "ref": "#recordBlob" } + } + } + } + } + }, + "recordBlob": { + "type": "object", + "required": ["cid", "recordUri"], + "properties": { + "cid": { "type": "string", "format": "cid" }, + "recordUri": { "type": "string", "format": "at-uri" } + } + } + } +} diff --git a/at/lexicons/com/atproto/repo/listRecords.json b/at/lexicons/com/atproto/repo/listRecords.json new file mode 100644 index 0000000..bc91c95 --- /dev/null +++ b/at/lexicons/com/atproto/repo/listRecords.json @@ -0,0 +1,69 @@ +{ + "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" }, + "rkeyStart": { + "type": "string", + "description": "DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)" + }, + "rkeyEnd": { + "type": "string", + "description": "DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)" + }, + "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/at/lexicons/com/atproto/repo/putRecord.json b/at/lexicons/com/atproto/repo/putRecord.json new file mode 100644 index 0000000..9a841f6 --- /dev/null +++ b/at/lexicons/com/atproto/repo/putRecord.json @@ -0,0 +1,73 @@ +{ + "lexicon": 1, + "id": "com.atproto.repo.putRecord", + "defs": { + "main": { + "type": "procedure", + "description": "Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["repo", "collection", "rkey", "record"], + "nullable": ["swapRecord"], + "properties": { + "repo": { + "type": "string", + "format": "at-identifier", + "description": "The handle or DID of the repo (aka, current account)." + }, + "collection": { + "type": "string", + "format": "nsid", + "description": "The NSID of the record collection." + }, + "rkey": { + "type": "string", + "description": "The Record Key.", + "maxLength": 15 + }, + "validate": { + "type": "boolean", + "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons." + }, + "record": { + "type": "unknown", + "description": "The record to write." + }, + "swapRecord": { + "type": "string", + "format": "cid", + "description": "Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation" + }, + "swapCommit": { + "type": "string", + "format": "cid", + "description": "Compare and swap with the previous commit by CID." + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["uri", "cid"], + "properties": { + "uri": { "type": "string", "format": "at-uri" }, + "cid": { "type": "string", "format": "cid" }, + "commit": { + "type": "ref", + "ref": "com.atproto.repo.defs#commitMeta" + }, + "validationStatus": { + "type": "string", + "knownValues": ["valid", "unknown"] + } + } + } + }, + "errors": [{ "name": "InvalidSwap" }] + } + } +} diff --git a/at/lexicons/com/atproto/repo/strongRef.json b/at/lexicons/com/atproto/repo/strongRef.json new file mode 100644 index 0000000..cb79625 --- /dev/null +++ b/at/lexicons/com/atproto/repo/strongRef.json @@ -0,0 +1,15 @@ +{ + "lexicon": 1, + "id": "com.atproto.repo.strongRef", + "description": "A URI with a content-hash fingerprint.", + "defs": { + "main": { + "type": "object", + "required": ["uri", "cid"], + "properties": { + "uri": { "type": "string", "format": "at-uri" }, + "cid": { "type": "string", "format": "cid" } + } + } + } +} diff --git a/at/lexicons/com/atproto/repo/uploadBlob.json b/at/lexicons/com/atproto/repo/uploadBlob.json new file mode 100644 index 0000000..547a995 --- /dev/null +++ b/at/lexicons/com/atproto/repo/uploadBlob.json @@ -0,0 +1,23 @@ +{ + "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" } + } + } + } + } + } +}