{
  "protocol": "metadata",
  "imports": [
    {
      "path": "backend_common.avdl",
      "type": "idl"
    }
  ],
  "types": [
    {
      "type": "record",
      "name": "KeyHalf",
      "fields": [
        {
          "type": "UID",
          "name": "user"
        },
        {
          "type": "KID",
          "name": "deviceKID"
        },
        {
          "type": "bytes",
          "name": "key"
        }
      ]
    },
    {
      "type": "record",
      "name": "MDBlock",
      "fields": [
        {
          "type": "int",
          "name": "version"
        },
        {
          "type": "Time",
          "name": "timestamp"
        },
        {
          "type": "bytes",
          "name": "block"
        }
      ]
    },
    {
      "type": "record",
      "name": "KeyBundle",
      "fields": [
        {
          "type": "int",
          "name": "version"
        },
        {
          "type": "bytes",
          "name": "bundle"
        }
      ]
    },
    {
      "type": "record",
      "name": "MetadataResponse",
      "fields": [
        {
          "type": "string",
          "name": "folderID"
        },
        {
          "type": {
            "type": "array",
            "items": "MDBlock"
          },
          "name": "mdBlocks"
        }
      ]
    },
    {
      "type": "record",
      "name": "MerkleRoot",
      "fields": [
        {
          "type": "int",
          "name": "version"
        },
        {
          "type": "bytes",
          "name": "root"
        }
      ]
    },
    {
      "type": "record",
      "name": "PingResponse",
      "fields": [
        {
          "type": "Time",
          "name": "timestamp"
        }
      ]
    },
    {
      "type": "record",
      "name": "KeyBundleResponse",
      "fields": [
        {
          "type": "KeyBundle",
          "name": "WriterBundle",
          "lint": "ignore"
        },
        {
          "type": "KeyBundle",
          "name": "ReaderBundle",
          "lint": "ignore"
        }
      ]
    }
  ],
  "messages": {
    "getChallenge": {
      "request": [],
      "response": "ChallengeInfo"
    },
    "authenticate": {
      "request": [
        {
          "name": "signature",
          "type": "string"
        }
      ],
      "response": "int"
    },
    "putMetadata": {
      "request": [
        {
          "name": "mdBlock",
          "type": "MDBlock"
        },
        {
          "name": "readerKeyBundle",
          "type": "KeyBundle"
        },
        {
          "name": "writerKeyBundle",
          "type": "KeyBundle"
        },
        {
          "name": "logTags",
          "type": {
            "type": "map",
            "values": "string"
          }
        }
      ],
      "response": null
    },
    "getMetadata": {
      "request": [
        {
          "name": "folderID",
          "type": "string"
        },
        {
          "name": "folderHandle",
          "type": "bytes"
        },
        {
          "name": "branchID",
          "type": "string"
        },
        {
          "name": "unmerged",
          "type": "boolean"
        },
        {
          "name": "startRevision",
          "type": "long"
        },
        {
          "name": "stopRevision",
          "type": "long"
        },
        {
          "name": "logTags",
          "type": {
            "type": "map",
            "values": "string"
          }
        }
      ],
      "response": "MetadataResponse"
    },
    "registerForUpdates": {
      "request": [
        {
          "name": "folderID",
          "type": "string"
        },
        {
          "name": "currRevision",
          "type": "long"
        },
        {
          "name": "logTags",
          "type": {
            "type": "map",
            "values": "string"
          }
        }
      ],
      "response": null
    },
    "pruneBranch": {
      "request": [
        {
          "name": "folderID",
          "type": "string"
        },
        {
          "name": "branchID",
          "type": "string"
        },
        {
          "name": "logTags",
          "type": {
            "type": "map",
            "values": "string"
          }
        }
      ],
      "response": null
    },
    "putKeys": {
      "request": [
        {
          "name": "keyHalves",
          "type": {
            "type": "array",
            "items": "KeyHalf"
          }
        },
        {
          "name": "logTags",
          "type": {
            "type": "map",
            "values": "string"
          }
        }
      ],
      "response": null
    },
    "getKey": {
      "request": [
        {
          "name": "keyHalfID",
          "type": "bytes"
        },
        {
          "name": "deviceKID",
          "type": "string"
        },
        {
          "name": "logTags",
          "type": {
            "type": "map",
            "values": "string"
          }
        }
      ],
      "response": "bytes"
    },
    "deleteKey": {
      "request": [
        {
          "name": "uid",
          "type": "UID"
        },
        {
          "name": "deviceKID",
          "type": "KID"
        },
        {
          "name": "keyHalfID",
          "type": "bytes"
        },
        {
          "name": "logTags",
          "type": {
            "type": "map",
            "values": "string"
          }
        }
      ],
      "response": null
    },
    "truncateLock": {
      "request": [
        {
          "name": "folderID",
          "type": "string"
        }
      ],
      "response": "boolean"
    },
    "truncateUnlock": {
      "request": [
        {
          "name": "folderID",
          "type": "string"
        }
      ],
      "response": "boolean"
    },
    "getFolderHandle": {
      "request": [
        {
          "name": "folderID",
          "type": "string"
        },
        {
          "name": "signature",
          "type": "string"
        },
        {
          "name": "challenge",
          "type": "string"
        }
      ],
      "response": "bytes"
    },
    "getFoldersForRekey": {
      "request": [
        {
          "name": "deviceKID",
          "type": "KID"
        }
      ],
      "response": null
    },
    "ping": {
      "request": [],
      "response": null
    },
    "ping2": {
      "request": [],
      "response": "PingResponse"
    },
    "getLatestFolderHandle": {
      "request": [
        {
          "name": "folderID",
          "type": "string"
        }
      ],
      "response": "bytes"
    },
    "getKeyBundles": {
      "request": [
        {
          "name": "folderID",
          "type": "string"
        },
        {
          "name": "writerBundleID",
          "type": "string"
        },
        {
          "name": "readerBundleID",
          "type": "string"
        }
      ],
      "response": "KeyBundleResponse"
    },
    "getMerkleRoot": {
      "request": [
        {
          "name": "treeID",
          "type": "MerkleTreeID"
        },
        {
          "name": "seqNo",
          "type": "long"
        }
      ],
      "response": "MerkleRoot"
    },
    "getMerkleRootLatest": {
      "request": [
        {
          "name": "treeID",
          "type": "MerkleTreeID"
        }
      ],
      "response": "MerkleRoot"
    },
    "getMerkleRootSince": {
      "request": [
        {
          "name": "treeID",
          "type": "MerkleTreeID"
        },
        {
          "name": "when",
          "type": "Time"
        }
      ],
      "response": "MerkleRoot"
    },
    "getMerkleNode": {
      "request": [
        {
          "name": "hash",
          "type": "string"
        }
      ],
      "response": "bytes"
    }
  },
  "namespace": "keybase.1"
}