at.happyproto.registry.putProject

Create or update a plugin project in the caller's repo. The first call writes the site.standard.publication, the at.happyproto.registry.project and the software.release.project, in that order, so each is indexed after what it depends on. Later calls update the publication and the at.happyproto.registry.project only; the project record itself is never changed.

Repository @happyproto.at did:plc:mo7vq4jbioxwafy5zkcc3eux namespace authority
Details · procedure
Kindprocedure
Authorityregistry.happyproto.at
Indexed

Procedure

procedure · POST

Input

application/json

name

requiredstring

The project's name, which is the record key of its software.release.project: 1 to 64 lowercase letters, digits and interior hyphens.

  • minLength: 1
  • maxLength: 64

project

requiredref
Reference

publication

requiredref
Reference

swapCid

string · cid

Update only if the caller's at.happyproto.registry.project record still has this CID, so a concurrent update is not silently overwritten.

Check the input against every rule the registry applies, and write nothing. Works without authentication, but only a signed-in call is also checked against the caller's existing records.

  • default: false

Output

application/json

created

boolean

True when this call created the project. Absent when validateOnly was set.

The software.release.project. Absent when validateOnly was set.

The site.standard.publication. Absent when validateOnly was set.

The at.happyproto.registry.project. Absent when validateOnly was set.

valid

requiredboolean

Always true; invalid input is an error, not a result.

Errors

AuthRequired

The caller's identity could not be determined, so there is no repo to write to.

NotConfigured

The registry has no identity configured. An operator problem, not a caller's.

InvalidRecord

The input breaks a rule the registry applies, so it would refuse the records. The message names the field.

InvalidRequest

The input breaks the method's lexicon, such as a field of the wrong format or past its length, and HappyView refused it before the registry saw it. The message names the field.

Upstream

A record could not be written to the caller's repo. Records written before the failure stay, and the same call can be made again.

InvalidSwap

The caller's at.happyproto.registry.project record no longer has the CID given in swapCid.

#project

object

What the registry writes to the project's at.happyproto.registry.project.

Properties

authors

requiredarray
  • minLength: 1
  • maxLength: 20
itemsstring
  • maxLength: 320
  • maxGraphemes: 32

pluginType

requiredstring
  • knownValues: auth | library | interpreter

security

requiredarray
  • minLength: 1

#publication

object

What the registry writes to the project's site.standard.publication.

Properties

  • maxLength: 3000
  • maxGraphemes: 300

icon

blob

A blob already uploaded to the caller's repo: a PNG, JPEG, WebP, GIF or AVIF image, the raster types the registry copies and serves. SVG is refused, since it can carry script.

  • maxSize: 1000000
  • accept: image/png, image/jpeg, image/webp, image/gif, image/avif

name

requiredstring

The plugin's display name.

  • minLength: 1
  • maxLength: 640
  • maxGraphemes: 64

Similar lexicons

semantic match

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • The HappyView facts about a software.release.project that make it a plugin. The record key is the project's name, and the record lives in the same repo as the project. The registry indexes a project's releases only while this record exists and is valid.

  • Publish a version of a plugin to the caller's repo. Writes a software.release.manifest carrying the artifact, the changelog as a site.standard.document when one is given, the software.release.version, and the channel named by track, moved to the new version, in that order. A record is written only once everything it points at exists, so a failure part-way leaves no dangling reference. Calling again with the same input after such a failure finishes the release rather than refusing it.

  • Check a package profile against the rules the indexer applies, and optionally write it to the caller's repo. The indexer validates a record only after it is published and skips an invalid one quietly, so a publisher writing the record itself gets no feedback; this answers the same refusal before the record exists. Pass validateOnly to check a record without writing it. Like every XRPC procedure this needs an authenticated caller, so validateOnly is a dry run rather than an anonymous one.

  • Replace a package profile the caller has already published, held to the rules publishProfile applies. This is how a publisher edits a profile: it writes to the caller's own repo as them, where com.atproto.repo.putRecord sent through a HappyView instance goes wherever that instance's proxy routing points. It never creates a profile; publish a new one with publishProfile.

  • One plugin, by publisher and name.