tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

sync_ping_schema.json (7557B)


      1 {
      2  "$schema": "http://json-schema.org/draft-07/schema#",
      3  "description": "schema for Sync pings, documentation avaliable in toolkit/components/telemetry/docs/sync-ping.rst",
      4  "type": "object",
      5  "additionalProperties": false,
      6  "required": ["version", "syncs", "why", "uid"],
      7  "properties": {
      8    "version": { "type": "integer", "minimum": 0 },
      9    "os": { "type": "object" },
     10    "discarded": { "type": "integer", "minimum": 1 },
     11    "why": { "enum": ["shutdown", "schedule", "idchange"] },
     12    "uid": {
     13      "type": "string",
     14      "pattern": "^[0-9a-f]{32}$"
     15    },
     16    "deviceID": {
     17      "type": "string",
     18      "pattern": "^[0-9a-f]{64}$"
     19    },
     20    "devices": {
     21      "type": "array",
     22      "items": { "$ref": "#/definitions/device" }
     23    },
     24    "sessionStartDate": { "type": "string" },
     25    "syncs": {
     26      "type": "array",
     27      "minItems": 0,
     28      "items": { "$ref": "#/definitions/payload" }
     29    },
     30    "syncNodeType": {
     31      "type": "string"
     32    },
     33    "events": {
     34      "type": "array",
     35      "minItems": 1,
     36      "items": { "$ref": "#/definitions/event" }
     37    },
     38    "migrations": {
     39      "type": "array",
     40      "minItems": 1,
     41      "items": { "$ref": "#/definitions/migration" }
     42    },
     43    "histograms": {
     44      "type": "object",
     45      "additionalProperties": {
     46        "type": "object",
     47        "properties": {
     48          "min": { "type": "integer" },
     49          "max": { "type": "integer" },
     50          "histogram_type": { "type": "integer" },
     51          "sum": { "type": "integer" },
     52          "ranges": { "type": "array" },
     53          "counts": { "type": "array" }
     54        }
     55      }
     56    }
     57  },
     58  "definitions": {
     59    "payload": {
     60      "type": "object",
     61      "additionalProperties": false,
     62      "required": ["when", "took"],
     63      "properties": {
     64        "didLogin": { "type": "boolean" },
     65        "when": { "type": "integer" },
     66        "status": {
     67          "type": "object",
     68          "anyOf": [{ "required": ["sync"] }, { "required": ["service"] }],
     69          "additionalProperties": false,
     70          "properties": {
     71            "sync": { "type": "string" },
     72            "service": { "type": "string" }
     73          }
     74        },
     75        "why": { "type": "string" },
     76        "took": { "type": "integer", "minimum": -1 },
     77        "failureReason": { "$ref": "#/definitions/error" },
     78        "engines": {
     79          "type": "array",
     80          "minItems": 1,
     81          "items": { "$ref": "#/definitions/engine" }
     82        }
     83      }
     84    },
     85    "device": {
     86      "required": ["id"],
     87      "additionalProperties": false,
     88      "type": "object",
     89      "properties": {
     90        "id": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
     91        "os": { "type": "string" },
     92        "version": { "type": "string" },
     93        "type": { "type": "string" },
     94        "syncID": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
     95      }
     96    },
     97    "engine": {
     98      "required": ["name"],
     99      "additionalProperties": false,
    100      "properties": {
    101        "failureReason": { "$ref": "#/definitions/error" },
    102        "name": { "type": "string" },
    103        "took": { "type": "integer", "minimum": 0 },
    104        "status": { "type": "string" },
    105        "incoming": {
    106          "type": "object",
    107          "additionalProperties": false,
    108          "anyOf": [{ "required": ["applied"] }, { "required": ["failed"] }],
    109          "properties": {
    110            "applied": { "type": "integer", "minimum": 1 },
    111            "failed": { "type": "integer", "minimum": 1 },
    112            "failedReasons": {
    113              "type": "array",
    114              "minItems": 1,
    115              "$ref": "#/definitions/namedCount"
    116            }
    117          }
    118        },
    119        "outgoing": {
    120          "type": "array",
    121          "minItems": 1,
    122          "items": { "$ref": "#/definitions/outgoingBatch" }
    123        },
    124        "steps": {
    125          "type": "array",
    126          "minItems": 1,
    127          "$ref": "#/definitions/step"
    128        },
    129        "validation": {
    130          "type": "object",
    131          "additionalProperties": false,
    132          "anyOf": [
    133            { "required": ["checked"] },
    134            { "required": ["failureReason"] }
    135          ],
    136          "properties": {
    137            "checked": { "type": "integer", "minimum": 0 },
    138            "failureReason": { "$ref": "#/definitions/error" },
    139            "took": { "type": "integer" },
    140            "version": { "type": "integer" },
    141            "problems": {
    142              "type": "array",
    143              "minItems": 1,
    144              "$ref": "#/definitions/namedCount"
    145            }
    146          }
    147        }
    148      }
    149    },
    150    "outgoingBatch": {
    151      "type": "object",
    152      "additionalProperties": false,
    153      "anyOf": [{ "required": ["sent"] }, { "required": ["failed"] }],
    154      "properties": {
    155        "sent": { "type": "integer", "minimum": 1 },
    156        "failed": { "type": "integer", "minimum": 1 },
    157        "failedReasons": {
    158          "type": "array",
    159          "minItems": 1,
    160          "$ref": "#/definitions/namedCount"
    161        }
    162      }
    163    },
    164    "event": {
    165      "type": "array",
    166      "minItems": 4,
    167      "maxItems": 6
    168    },
    169    "migration": {
    170      "oneOf": [{ "$ref": "#/definitions/webextMigration" }]
    171    },
    172    "webextMigration": {
    173      "required": ["type"],
    174      "properties": {
    175        "type": { "enum": ["webext-storage"] },
    176        "entries": { "type": "integer" },
    177        "entriesSuccessful": { "type": "integer" },
    178        "extensions": { "type": "integer" },
    179        "extensionsSuccessful": { "type": "integer" },
    180        "openFailure": { "type": "boolean" }
    181      }
    182    },
    183    "error": {
    184      "oneOf": [
    185        { "$ref": "#/definitions/httpError" },
    186        { "$ref": "#/definitions/nsError" },
    187        { "$ref": "#/definitions/shutdownError" },
    188        { "$ref": "#/definitions/authError" },
    189        { "$ref": "#/definitions/otherError" },
    190        { "$ref": "#/definitions/unexpectedError" },
    191        { "$ref": "#/definitions/sqlError" }
    192      ]
    193    },
    194    "httpError": {
    195      "required": ["name", "code"],
    196      "properties": {
    197        "name": { "enum": ["httperror"] },
    198        "code": { "type": "integer" }
    199      }
    200    },
    201    "nsError": {
    202      "required": ["name", "code"],
    203      "properties": {
    204        "name": { "enum": ["nserror"] },
    205        "code": { "type": "integer" }
    206      }
    207    },
    208    "shutdownError": {
    209      "required": ["name"],
    210      "properties": {
    211        "name": { "enum": ["shutdownerror"] }
    212      }
    213    },
    214    "authError": {
    215      "required": ["name"],
    216      "properties": {
    217        "name": { "enum": ["autherror"] },
    218        "from": { "enum": ["tokenserver", "fxaccounts", "hawkclient"] }
    219      }
    220    },
    221    "otherError": {
    222      "required": ["name"],
    223      "properties": {
    224        "name": { "enum": ["othererror"] },
    225        "error": { "type": "string" }
    226      }
    227    },
    228    "unexpectedError": {
    229      "required": ["name"],
    230      "properties": {
    231        "name": { "enum": ["unexpectederror"] },
    232        "error": { "type": "string" }
    233      }
    234    },
    235    "sqlError": {
    236      "required": ["name"],
    237      "properties": {
    238        "name": { "enum": ["sqlerror"] },
    239        "code": { "type": "integer" }
    240      }
    241    },
    242    "step": {
    243      "required": ["name"],
    244      "properties": {
    245        "name": { "type": "string" },
    246        "took": { "type": "integer", "minimum": 0 },
    247        "counts": {
    248          "type": "array",
    249          "minItems": 1,
    250          "$ref": "#/definitions/namedCount"
    251        }
    252      }
    253    },
    254    "namedCount": {
    255      "required": ["name", "count"],
    256      "properties": {
    257        "name": { "type": "string" },
    258        "count": { "type": "integer" }
    259      }
    260    }
    261  }
    262 }