at.happyproto.registry.putProject

happyproto.at

Documentation

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.

main procedure

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.

Input

Encodingapplication/json
name string Required

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

maxLength: 64 bytesminLength: 1 bytes
project ref#project Required

No description available.

publication ref#publication Required

No description available.

swapCid stringcid Optional

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

validateOnly boolean Optional

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.

Output

Encodingapplication/json
created boolean Optional

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

valid boolean Required

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.
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.
Try It

Requests are sent directly from your browser. Some servers may block requests due to CORS.

Base URL for XRPC calls (e.g., https://bsky.social)
Enter valid JSON for the request body
View raw schema
{
  "description": "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.",
  "errors": [
    {
      "description": "The caller's identity could not be determined, so there is no repo to write to.",
      "name": "AuthRequired"
    },
    {
      "description": "The registry has no identity configured. An operator problem, not a caller's.",
      "name": "NotConfigured"
    },
    {
      "description": "The input breaks a rule the registry applies, so it would refuse the records. The message names the field.",
      "name": "InvalidRecord"
    },
    {
      "description": "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.",
      "name": "Upstream"
    },
    {
      "description": "The caller's at.happyproto.registry.project record no longer has the CID given in swapCid.",
      "name": "InvalidSwap"
    }
  ],
  "input": {
    "encoding": "application/json",
    "schema": {
      "properties": {
        "name": {
          "description": "The project's name, which is the record key of its software.release.project: 1 to 64 lowercase letters, digits and interior hyphens.",
          "maxLength": 64,
          "minLength": 1,
          "type": "string"
        },
        "project": {
          "ref": "#project",
          "type": "ref"
        },
        "publication": {
          "ref": "#publication",
          "type": "ref"
        },
        "swapCid": {
          "description": "Update only if the caller's at.happyproto.registry.project record still has this CID, so a concurrent update is not silently overwritten.",
          "format": "cid",
          "type": "string"
        },
        "validateOnly": {
          "default": false,
          "description": "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.",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "publication",
        "project"
      ],
      "type": "object"
    }
  },
  "output": {
    "encoding": "application/json",
    "schema": {
      "properties": {
        "created": {
          "description": "True when this call created the project. Absent when validateOnly was set.",
          "type": "boolean"
        },
        "project": {
          "description": "The software.release.project. Absent when validateOnly was set.",
          "ref": "at.happyproto.registry.defs#ref",
          "type": "ref"
        },
        "publication": {
          "description": "The site.standard.publication. Absent when validateOnly was set.",
          "ref": "at.happyproto.registry.defs#ref",
          "type": "ref"
        },
        "sidecar": {
          "description": "The at.happyproto.registry.project. Absent when validateOnly was set.",
          "ref": "at.happyproto.registry.defs#ref",
          "type": "ref"
        },
        "valid": {
          "description": "Always true; invalid input is an error, not a result.",
          "type": "boolean"
        }
      },
      "required": [
        "valid"
      ],
      "type": "object"
    }
  },
  "type": "procedure"
}
project object

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

Properties

keywords array of string Optional

No description available.

maxLength: 20 items
pluginType string Required

No description available.

Known values: auth, library, interpreter
View raw schema
{
  "description": "What the registry writes to the project's at.happyproto.registry.project.",
  "properties": {
    "authors": {
      "items": {
        "ref": "at.happyproto.registry.project#author",
        "type": "ref"
      },
      "minLength": 1,
      "type": "array"
    },
    "keywords": {
      "items": {
        "maxGraphemes": 32,
        "maxLength": 320,
        "type": "string"
      },
      "maxLength": 20,
      "type": "array"
    },
    "pluginType": {
      "knownValues": [
        "auth",
        "library",
        "interpreter"
      ],
      "type": "string"
    },
    "security": {
      "items": {
        "ref": "at.happyproto.registry.project#contact",
        "type": "ref"
      },
      "minLength": 1,
      "type": "array"
    }
  },
  "required": [
    "pluginType",
    "authors",
    "security"
  ],
  "type": "object"
}
publication object

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

Properties

description string Optional

No description available.

maxLength: 3000 bytesmaxGraphemes: 300 graphemes
icon blob Optional

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: 1.0 MB
name string Required

The plugin's display name.

maxLength: 640 bytesminLength: 1 bytesmaxGraphemes: 64 graphemes
View raw schema
{
  "description": "What the registry writes to the project's site.standard.publication.",
  "properties": {
    "description": {
      "maxGraphemes": 300,
      "maxLength": 3000,
      "type": "string"
    },
    "icon": {
      "accept": [
        "image/png",
        "image/jpeg",
        "image/webp",
        "image/gif",
        "image/avif"
      ],
      "description": "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,
      "type": "blob"
    },
    "name": {
      "description": "The plugin's display name.",
      "maxGraphemes": 64,
      "maxLength": 640,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "type": "object"
}

Lexicon Garden

@