# at.happyproto.plugin.profile

> Published by [happyproto.at](https://lexicon.garden/identity/did:plc:mo7vq4jbioxwafy5zkcc3eux)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:mo7vq4jbioxwafy5zkcc3eux/at.happyproto.plugin.profile)
- [Documentation](https://lexicon.garden/lexicon/did:plc:mo7vq4jbioxwafy5zkcc3eux/at.happyproto.plugin.profile/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:mo7vq4jbioxwafy5zkcc3eux/at.happyproto.plugin.profile/examples)

## Definitions

### `at.happyproto.plugin.profile#author`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `email` | `string` | No |  |
| `name` | `string` | Yes |  |
| `url` | `string` (uri) | No |  |

### `at.happyproto.plugin.profile#contact`

**Type**: `object`

A security contact. Either field satisfies it, but an entry with neither says nothing.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `email` | `string` | No |  |
| `url` | `string` (uri) | No |  |

### `at.happyproto.plugin.profile`

**Type**: `record`

A HappyView plugin package, in its publisher's repo. The record key is the package slug, so the slug is immutable: changing it means a different package.

**Key**: `any`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `authors` | `array` | Yes |  |
| `description` | `string` | No | One line, 140 graphemes or fewer recommended. |
| `keywords` | `array` | No | Five or fewer recommended. |
| `lastUpdated` | `string` (datetime) | No |  |
| `license` | `string` | Yes | An SPDX expression, or the literal 'proprietary'. |
| `name` | `string` | No | Display name. The slug is used when absent. |
| `sections` | `ref` → `#sections` | No |  |
| `security` | `array` | Yes | Where to report a vulnerability. At least one, because a plugin runs as native code in an operator's process. |
| `type` | `string` | Yes | Names the ecosystem. A client that does not understand the value refuses the package rather than guessing. |

### `at.happyproto.plugin.profile#sections`

**Type**: `object`

Long-form CommonMark, rendered as untrusted input with raw HTML stripped.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `changelog` | `string` | No |  |
| `description` | `string` | No |  |
| `installation` | `string` | No |  |
| `security` | `string` | No |  |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "author": {
      "properties": {
        "email": {
          "maxLength": 320,
          "type": "string"
        },
        "name": {
          "maxGraphemes": 64,
          "maxLength": 640,
          "type": "string"
        },
        "url": {
          "format": "uri",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "contact": {
      "description": "A security contact. Either field satisfies it, but an entry with neither says nothing.",
      "properties": {
        "email": {
          "maxLength": 320,
          "type": "string"
        },
        "url": {
          "format": "uri",
          "type": "string"
        }
      },
      "type": "object"
    },
    "main": {
      "description": "A HappyView plugin package, in its publisher's repo. The record key is the package slug, so the slug is immutable: changing it means a different package.",
      "key": "any",
      "record": {
        "properties": {
          "authors": {
            "items": {
              "ref": "#author",
              "type": "ref"
            },
            "minLength": 1,
            "type": "array"
          },
          "description": {
            "description": "One line, 140 graphemes or fewer recommended.",
            "maxGraphemes": 300,
            "maxLength": 3000,
            "type": "string"
          },
          "keywords": {
            "description": "Five or fewer recommended.",
            "items": {
              "maxGraphemes": 32,
              "maxLength": 320,
              "type": "string"
            },
            "maxLength": 20,
            "type": "array"
          },
          "lastUpdated": {
            "format": "datetime",
            "type": "string"
          },
          "license": {
            "description": "An SPDX expression, or the literal 'proprietary'.",
            "maxLength": 256,
            "type": "string"
          },
          "name": {
            "description": "Display name. The slug is used when absent.",
            "maxGraphemes": 64,
            "maxLength": 640,
            "type": "string"
          },
          "sections": {
            "ref": "#sections",
            "type": "ref"
          },
          "security": {
            "description": "Where to report a vulnerability. At least one, because a plugin runs as native code in an operator's process.",
            "items": {
              "ref": "#contact",
              "type": "ref"
            },
            "minLength": 1,
            "type": "array"
          },
          "type": {
            "const": "happyview-plugin",
            "description": "Names the ecosystem. A client that does not understand the value refuses the package rather than guessing.",
            "type": "string"
          }
        },
        "required": [
          "type",
          "license",
          "authors",
          "security"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "sections": {
      "description": "Long-form CommonMark, rendered as untrusted input with raw HTML stripped.",
      "properties": {
        "changelog": {
          "maxGraphemes": 2000,
          "maxLength": 20000,
          "type": "string"
        },
        "description": {
          "maxGraphemes": 2000,
          "maxLength": 20000,
          "type": "string"
        },
        "installation": {
          "maxGraphemes": 2000,
          "maxLength": 20000,
          "type": "string"
        },
        "security": {
          "maxGraphemes": 2000,
          "maxLength": 20000,
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "id": "at.happyproto.plugin.profile",
  "lexicon": 1
}
```
