{
  "id": "type-n15",
  "revision": "db06cfadee312866ac1bd2bd5757f4611bcf92f2992160807aaf63c7283c9977",
  "regions": [
    {
      "id": "common-logic",
      "label": "Common logic",
      "parent": null
    },
    {
      "id": "mobile",
      "label": "Mobile",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "controller",
      "label": "Photo capture controller",
      "kind": "N05",
      "region": "common-logic",
      "ports": [
        {
          "id": "permission",
          "profile": "P02",
          "contract": "CameraPermissionOutcomeV1",
          "polarity": "Require"
        },
        {
          "id": "outcome",
          "profile": "P01",
          "contract": "CameraPermissionOutcomeV1",
          "polarity": "Offer"
        },
        {
          "id": "capture",
          "profile": "P12",
          "contract": "BeginCameraCaptureV1",
          "polarity": "Require"
        },
        {
          "id": "photo",
          "profile": "P02",
          "contract": "CapturePhotoOutcomeV1",
          "polarity": "Require"
        },
        {
          "id": "state",
          "profile": "P08",
          "contract": "CaptureStateV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "camera",
      "label": "Device camera adapter",
      "kind": "N15",
      "region": "mobile",
      "ports": [
        {
          "id": "permission",
          "profile": "P02",
          "contract": "CameraPermissionOutcomeV1",
          "polarity": "Offer"
        },
        {
          "id": "capture",
          "profile": "P02",
          "contract": "CapturePhotoOutcomeV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "permission",
      "label": "Permission decision",
      "kind": "N03",
      "region": "common-logic",
      "ports": [
        {
          "id": "outcome",
          "profile": "P01",
          "contract": "CameraPermissionOutcomeV1",
          "polarity": "Require"
        },
        {
          "id": "allowed",
          "profile": "P12",
          "contract": "BeginCameraCaptureV1",
          "polarity": "Offer"
        },
        {
          "id": "pick",
          "profile": "P02",
          "contract": "PickImageOutcomeV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "picker",
      "label": "File picker fallback",
      "kind": "N15",
      "region": "mobile",
      "ports": [
        {
          "id": "pick",
          "profile": "P02",
          "contract": "PickImageOutcomeV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "ui",
      "label": "Capture Surface",
      "kind": "N11",
      "region": "mobile",
      "ports": [
        {
          "id": "state",
          "profile": "P08",
          "contract": "CaptureStateV1",
          "polarity": "Require"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "permission",
      "kind": "H05",
      "incidences": [
        {
          "node": "controller",
          "port": "permission",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "camera",
          "port": "permission",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "decide",
      "kind": "H02",
      "incidences": [
        {
          "node": "controller",
          "port": "outcome",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "permission",
          "port": "outcome",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "capture",
      "kind": "H03",
      "incidences": [
        {
          "node": "permission",
          "port": "allowed",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "controller",
          "port": "capture",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "photo",
      "kind": "H05",
      "incidences": [
        {
          "node": "controller",
          "port": "photo",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "camera",
          "port": "capture",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "fallback",
      "kind": "H05",
      "incidences": [
        {
          "node": "permission",
          "port": "pick",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "picker",
          "port": "pick",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "display",
      "kind": "H02",
      "incidences": [
        {
          "node": "controller",
          "port": "state",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "ui",
          "port": "state",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
