{
  "id": "com.lattice.contacts",
  "name": "Contacts",
  "icon": "👤",
  "color": "#3b82f6",
  "description": "Manage contact names, email addresses, phone numbers and birthdays.",
  "requested_permissions": {
    "storage": [
      "kv",
      "sql"
    ],
    "network": {
      "allowlist": []
    },
    "events": {
      "contact-added": {
        "description": "A contact was added.",
        "schema": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "Contact ID."
            },
            "name": {
              "type": "string",
              "description": "Contact name."
            },
            "email": {
              "type": "string",
              "description": "Email address; empty means unknown."
            },
            "phone": {
              "type": "string",
              "description": "Phone number text; empty means unknown."
            },
            "birthday": {
              "type": "string",
              "description": "Birthday, YYYY-MM-DD; empty means unknown."
            },
            "notes": {
              "type": "string",
              "description": "Contact notes; empty means none."
            }
          },
          "required": [
            "id",
            "name",
            "email",
            "phone",
            "birthday",
            "notes"
          ]
        }
      },
      "contact-updated": {
        "description": "A contact was updated.",
        "schema": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "Contact ID."
            },
            "name": {
              "type": "string",
              "description": "Contact name."
            },
            "email": {
              "type": "string",
              "description": "Email address; empty means unknown."
            },
            "phone": {
              "type": "string",
              "description": "Phone number text; empty means unknown."
            },
            "birthday": {
              "type": "string",
              "description": "Birthday, YYYY-MM-DD; empty means unknown."
            },
            "notes": {
              "type": "string",
              "description": "Contact notes; empty means none."
            }
          },
          "required": [
            "id",
            "name",
            "email",
            "phone",
            "birthday",
            "notes"
          ]
        }
      },
      "contact-removed": {
        "description": "A contact was removed.",
        "schema": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "Contact ID."
            },
            "name": {
              "type": "string",
              "description": "Contact name."
            }
          },
          "required": [
            "id",
            "name"
          ]
        }
      }
    },
    "listeners": {
      "add-contact": {
        "description": "Add a contact.",
        "schema": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Nonempty contact name."
            },
            "email": {
              "type": "string",
              "description": "Email address; omitted or empty means unknown."
            },
            "phone": {
              "type": "string",
              "description": "Phone number text; omitted or empty means unknown."
            },
            "birthday": {
              "type": "string",
              "description": "Birthday, YYYY-MM-DD; omitted or empty means unknown."
            },
            "notes": {
              "type": "string",
              "description": "Contact notes; omitted or empty means none."
            }
          },
          "required": [
            "name"
          ]
        }
      }
    }
  },
  "source": {
    "assets": [
      "index.html",
      "app.js",
      "ui.css",
      "emits.js",
      "listens.js"
    ]
  }
}