{
  "id": "type-n29",
  "revision": "61b71779bd3dd5344243dc28655dd6a9794f0be3cf080c8d0030377c34cc98ab",
  "regions": [
    {
      "id": "mobile",
      "label": "Mobile",
      "parent": null
    },
    {
      "id": "server",
      "label": "Server",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "route",
      "label": "Conversation routes",
      "kind": "N12",
      "region": "mobile",
      "ports": [
        {
          "id": "open",
          "profile": "P02",
          "contract": "OpenConversationActivationV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "factory",
      "label": "Conversation actor factory",
      "kind": "N29",
      "region": "server",
      "ports": [
        {
          "id": "open",
          "profile": "P02",
          "contract": "OpenConversationActivationV1",
          "polarity": "Offer"
        },
        {
          "id": "lease",
          "profile": "P09",
          "contract": "ConversationActivationLeaseV1",
          "polarity": "Require"
        },
        {
          "id": "create",
          "profile": "P21",
          "contract": "ConversationActorInstanceV1",
          "polarity": "Neutral"
        },
        {
          "id": "expire",
          "profile": "P15",
          "contract": "ConversationIdleCandidateV1",
          "polarity": "Require"
        },
        {
          "id": "drain",
          "profile": "P21",
          "contract": "DrainConversationActivationV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "registry",
      "label": "Activation lease registry",
      "kind": "N21",
      "region": "server",
      "ports": [
        {
          "id": "lease",
          "profile": "P09",
          "contract": "ConversationActivationLeaseV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "actor",
      "label": "Conversation actor instance",
      "kind": "N05",
      "region": "server",
      "ports": [
        {
          "id": "lifecycle",
          "profile": "P21",
          "contract": "ConversationActorInstanceV1",
          "polarity": "Neutral"
        },
        {
          "id": "drain",
          "profile": "P21",
          "contract": "DrainConversationActivationV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "idle",
      "label": "Idle deadline",
      "kind": "N09",
      "region": "server",
      "ports": [
        {
          "id": "tick",
          "profile": "P15",
          "contract": "ConversationIdleCandidateV1",
          "polarity": "Offer"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "open",
      "kind": "H05",
      "incidences": [
        {
          "node": "route",
          "port": "open",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "factory",
          "port": "open",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "lease",
      "kind": "H05",
      "incidences": [
        {
          "node": "factory",
          "port": "lease",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "registry",
          "port": "lease",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "instantiate",
      "kind": "H20",
      "incidences": [
        {
          "node": "factory",
          "port": "create",
          "role": "factory",
          "ordinal": 0
        },
        {
          "node": "actor",
          "port": "lifecycle",
          "role": "instance",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "idle",
      "kind": "H04",
      "incidences": [
        {
          "node": "idle",
          "port": "tick",
          "role": "publisher",
          "ordinal": 0
        },
        {
          "node": "factory",
          "port": "expire",
          "role": "subscriber",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "drain",
      "kind": "H03",
      "incidences": [
        {
          "node": "factory",
          "port": "drain",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "actor",
          "port": "drain",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
