{
  "id": "type-n16",
  "revision": "5073fc9119da7b82319f361dccab36ae8b66f7fa3195cc77dd83cfe60eed057a",
  "regions": [
    {
      "id": "mobile",
      "label": "Mobile",
      "parent": null
    },
    {
      "id": "common-logic",
      "label": "Common logic",
      "parent": null
    },
    {
      "id": "native",
      "label": "Native",
      "parent": null
    },
    {
      "id": "server",
      "label": "Server",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "camera",
      "label": "Frame source",
      "kind": "N15",
      "region": "mobile",
      "ports": [
        {
          "id": "frame",
          "profile": "P16",
          "contract": "OwnedVideoFrameV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "session",
      "label": "Encoding session",
      "kind": "N05",
      "region": "common-logic",
      "ports": [
        {
          "id": "frame",
          "profile": "P16",
          "contract": "OwnedVideoFrameV1",
          "polarity": "Require"
        },
        {
          "id": "encode",
          "profile": "P16",
          "contract": "OwnedCodecFrameV1",
          "polarity": "Require"
        },
        {
          "id": "complete",
          "profile": "P13",
          "contract": "EncoderDrainedV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "codec",
      "label": "Native codec resource",
      "kind": "N16",
      "region": "native",
      "ports": [
        {
          "id": "encode",
          "profile": "P16",
          "contract": "OwnedCodecFrameV1",
          "polarity": "Offer"
        },
        {
          "id": "chunks",
          "profile": "P06",
          "contract": "EncodedChunkCreditStreamV1",
          "polarity": "Offer"
        },
        {
          "id": "lifecycle",
          "profile": "P21",
          "contract": "CodecHandleLifecycleV1",
          "polarity": "Require"
        },
        {
          "id": "drained",
          "profile": "P13",
          "contract": "EncoderDrainedV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "upload",
      "label": "Encoded chunk upload",
      "kind": "N02",
      "region": "server",
      "ports": [
        {
          "id": "chunks",
          "profile": "P06",
          "contract": "EncodedChunkCreditStreamV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "lifecycle",
      "label": "Session lifecycle",
      "kind": "N27",
      "region": "mobile",
      "ports": [
        {
          "id": "codec",
          "profile": "P21",
          "contract": "CodecHandleLifecycleV1",
          "polarity": "Offer"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "frames",
      "kind": "H02",
      "incidences": [
        {
          "node": "camera",
          "port": "frame",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "session",
          "port": "frame",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "encode",
      "kind": "H05",
      "incidences": [
        {
          "node": "session",
          "port": "encode",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "codec",
          "port": "encode",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "chunks",
      "kind": "H04",
      "incidences": [
        {
          "node": "codec",
          "port": "chunks",
          "role": "publisher",
          "ordinal": 0
        },
        {
          "node": "upload",
          "port": "chunks",
          "role": "subscriber",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "scope",
      "kind": "H19",
      "incidences": [
        {
          "node": "lifecycle",
          "port": "codec",
          "role": "owner",
          "ordinal": 0
        },
        {
          "node": "codec",
          "port": "lifecycle",
          "role": "resource",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "drain",
      "kind": "H03",
      "incidences": [
        {
          "node": "codec",
          "port": "drained",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "session",
          "port": "complete",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
