at.happyproto.plugin.v1

happyproto.at

Documentation

A HappyView plugin, as one entry in a software.release.manifest's `artifacts`. It carries the module and its manifest.json as blobs, so they are verified by their CIDs, and the manifest's facts in the signed record, so a consent screen renders without downloading the module. Those facts are not trusted: the loader checks them against the module itself and refuses a plugin that misstates what it does. The registry refuses a manifest whose artifact breaks a rule stated here, including the ones a lexicon cannot express.

main object

A HappyView plugin, as one entry in a software.release.manifest's `artifacts`. It carries the module and its manifest.json as blobs, so they are verified by their CIDs, and the manifest's facts in the signed record, so a consent screen renders without downloading the module. Those facts are not trusted: the loader checks them against the module itself and refuses a plugin that misstates what it does. The registry refuses a manifest whose artifact breaks a rule stated here, including the ones a lexicon cannot express.

Properties

allowedHosts array of string Optional

Hosts the module's outbound requests may reach.

apiVersion string Required

The plugin API version the module targets. Its major version must be 2 or later.

maxLength: 16 bytes
banner ref #image Optional

A wide image shown at the top of the plugin's page.

capabilities array of string Required

What the module may do. The loader checks it against the module's imports, so a plugin cannot import what this does not cover.

fileExtensions array of string Optional

Required for an interpreter: the file extensions of the scripts it runs, without the dot. Each is 1 to 16 lowercase letters or digits, none is `json`, and none repeats.

maxLength: 8 itemsminLength: 1 items
languageId string Optional

Required for an interpreter: the script type it runs.

maxLength: 64 bytes
license string Required

An SPDX expression, or `proprietary`.

maxLength: 256 bytes
manifest blob Required

The module's manifest.json. A module stored as a blob has no directory beside it to hold a sibling file, so this is what says how to load it.

maxSize: 1.0 MB
namespace string Optional

Required for a library: the name scripts load it by, which is unique across a HappyView's installed plugins.

maxLength: 256 bytes
package blob Required

The WASM module.

maxSize: 16.8 MB
pluginType string Required

What the plugin is. Any other value is refused.

Known values: auth, library, interpreter
requires unknown Optional

Dependencies, as a map a lexicon cannot type. Each key is `env:<name>`, such as `env:happyview`, or the at-uri of a software.release.project; each value is a Cargo version requirement, such as `>=3.0.0` or `^1.0`, without `||`.

screenshots array of ref#image Optional

No description available.

maxLength: 8 items
sections ref #sections Required

No description available.

View raw schema
{
  "description": "A HappyView plugin, as one entry in a software.release.manifest's `artifacts`. It carries the module and its manifest.json as blobs, so they are verified by their CIDs, and the manifest's facts in the signed record, so a consent screen renders without downloading the module. Those facts are not trusted: the loader checks them against the module itself and refuses a plugin that misstates what it does. The registry refuses a manifest whose artifact breaks a rule stated here, including the ones a lexicon cannot express.",
  "properties": {
    "allowedHosts": {
      "description": "Hosts the module's outbound requests may reach.",
      "items": {
        "maxLength": 256,
        "type": "string"
      },
      "type": "array"
    },
    "apiVersion": {
      "description": "The plugin API version the module targets. Its major version must be 2 or later.",
      "maxLength": 16,
      "type": "string"
    },
    "banner": {
      "description": "A wide image shown at the top of the plugin's page.",
      "ref": "#image",
      "type": "ref"
    },
    "capabilities": {
      "description": "What the module may do. The loader checks it against the module's imports, so a plugin cannot import what this does not cover.",
      "items": {
        "maxLength": 128,
        "type": "string"
      },
      "type": "array"
    },
    "fileExtensions": {
      "description": "Required for an interpreter: the file extensions of the scripts it runs, without the dot. Each is 1 to 16 lowercase letters or digits, none is `json`, and none repeats.",
      "items": {
        "maxLength": 16,
        "minLength": 1,
        "type": "string"
      },
      "maxLength": 8,
      "minLength": 1,
      "type": "array"
    },
    "languageId": {
      "description": "Required for an interpreter: the script type it runs.",
      "maxLength": 64,
      "type": "string"
    },
    "license": {
      "description": "An SPDX expression, or `proprietary`.",
      "maxLength": 256,
      "type": "string"
    },
    "manifest": {
      "accept": [
        "application/json"
      ],
      "description": "The module's manifest.json. A module stored as a blob has no directory beside it to hold a sibling file, so this is what says how to load it.",
      "maxSize": 1000000,
      "type": "blob"
    },
    "namespace": {
      "description": "Required for a library: the name scripts load it by, which is unique across a HappyView's installed plugins.",
      "maxLength": 256,
      "type": "string"
    },
    "package": {
      "accept": [
        "application/wasm"
      ],
      "description": "The WASM module.",
      "maxSize": 16777216,
      "type": "blob"
    },
    "pluginType": {
      "description": "What the plugin is. Any other value is refused.",
      "knownValues": [
        "auth",
        "library",
        "interpreter"
      ],
      "type": "string"
    },
    "requires": {
      "description": "Dependencies, as a map a lexicon cannot type. Each key is `env:<name>`, such as `env:happyview`, or the at-uri of a software.release.project; each value is a Cargo version requirement, such as `>=3.0.0` or `^1.0`, without `||`.",
      "type": "unknown"
    },
    "screenshots": {
      "items": {
        "ref": "#image",
        "type": "ref"
      },
      "maxLength": 8,
      "type": "array"
    },
    "sections": {
      "ref": "#sections",
      "type": "ref"
    }
  },
  "required": [
    "package",
    "manifest",
    "pluginType",
    "apiVersion",
    "capabilities",
    "license",
    "sections"
  ],
  "type": "object"
}
image object

A presentation image. SVG is not accepted, because it can carry script and renders in an operator's dashboard.

Properties

alt string Optional

A description of the image for people who cannot see it.

maxLength: 3000 bytesmaxGraphemes: 300 graphemes
height integer Required

No description available.

minimum: 1
image blob Required

No description available.

maxSize: 1.0 MB
width integer Required

No description available.

minimum: 1
View raw schema
{
  "description": "A presentation image. SVG is not accepted, because it can carry script and renders in an operator's dashboard.",
  "properties": {
    "alt": {
      "description": "A description of the image for people who cannot see it.",
      "maxGraphemes": 300,
      "maxLength": 3000,
      "type": "string"
    },
    "height": {
      "minimum": 1,
      "type": "integer"
    },
    "image": {
      "accept": [
        "image/png",
        "image/jpeg",
        "image/webp",
        "image/gif",
        "image/avif"
      ],
      "maxSize": 1000000,
      "type": "blob"
    },
    "width": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "image",
    "width",
    "height"
  ],
  "type": "object"
}
sections object

Long-form CommonMark shown on the plugin's page. It is rendered as untrusted input, with raw HTML stripped.

Properties

description string Required

No description available.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
installation string Optional

No description available.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
security string Optional

No description available.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
View raw schema
{
  "description": "Long-form CommonMark shown on the plugin's page. It is rendered as untrusted input, with raw HTML stripped.",
  "properties": {
    "description": {
      "maxGraphemes": 2000,
      "maxLength": 20000,
      "type": "string"
    },
    "installation": {
      "maxGraphemes": 2000,
      "maxLength": 20000,
      "type": "string"
    },
    "security": {
      "maxGraphemes": 2000,
      "maxLength": 20000,
      "type": "string"
    }
  },
  "required": [
    "description"
  ],
  "type": "object"
}

Lexicon Garden

@