[
  {
    "namespace": "manifest",
    "types": [
      {
        "$extend": "OptionalPermission",
        "choices": [
          {
            "type": "string",
            "enum": ["pkcs11"]
          }
        ]
      }
    ]
  },
  {
    "namespace": "pkcs11",
    "description": "PKCS#11 module management API",
    "permissions": ["pkcs11"],
    "functions": [
      {
        "name": "isModuleInstalled",
        "type": "function",
        "description": "checks whether a PKCS#11 module, given by name, is installed",
        "async": true,
        "parameters": [
          {
            "name": "name",
            "type": "string"
          }
        ]
      },
      {
        "name": "installModule",
        "type": "function",
        "description": "Install a PKCS#11 module with a given name",
        "async": true,
        "parameters": [
          {
            "name": "name",
            "type": "string"
          },
          {
            "name": "flags",
            "type": "integer",
            "optional": true
          }
        ]
      },
      {
        "name": "uninstallModule",
        "type": "function",
        "description": "Remove an installed PKCS#11 module from firefox",
        "async": true,
        "parameters": [
          {
            "name": "name",
            "type": "string"
          }
        ]
      },
      {
        "name": "getModuleSlots",
        "type": "function",
        "description": "Enumerate a module's slots, each with their name and whether a token is present",
        "async": true,
        "parameters": [
          {
            "name": "name",
            "type": "string"
          }
        ]
      }
    ]
  }
]
