{
  "id": "type-n17",
  "revision": "1afc887b1dd627e39e9debbcb7ffc8fd385e8166e2107c281e785bb77642b9a8",
  "regions": [
    {
      "id": "storage",
      "label": "Storage",
      "parent": null
    },
    {
      "id": "native",
      "label": "Native",
      "parent": null
    },
    {
      "id": "server",
      "label": "Server",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "source",
      "label": "Uploaded original",
      "kind": "N26",
      "region": "storage",
      "ports": [
        {
          "id": "read",
          "profile": "P02",
          "contract": "GetImageBytesV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "transform",
      "label": "Image variant transform",
      "kind": "N17",
      "region": "native",
      "ports": [
        {
          "id": "original",
          "profile": "P02",
          "contract": "GetImageBytesV1",
          "polarity": "Require"
        },
        {
          "id": "thumbnail",
          "profile": "P16",
          "contract": "OwnedThumbnailBytesV1",
          "polarity": "Offer"
        },
        {
          "id": "preview",
          "profile": "P16",
          "contract": "OwnedPreviewBytesV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "thumb",
      "label": "Thumbnail upload",
      "kind": "N02",
      "region": "server",
      "ports": [
        {
          "id": "bytes",
          "profile": "P16",
          "contract": "OwnedThumbnailBytesV1",
          "polarity": "Require"
        },
        {
          "id": "receipt",
          "profile": "P13",
          "contract": "PersistedImageVariantsV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "preview",
      "label": "Preview upload",
      "kind": "N02",
      "region": "server",
      "ports": [
        {
          "id": "bytes",
          "profile": "P16",
          "contract": "OwnedPreviewBytesV1",
          "polarity": "Require"
        },
        {
          "id": "receipt",
          "profile": "P13",
          "contract": "PersistedImageVariantsV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "manifest",
      "label": "Asset manifest authority",
      "kind": "N21",
      "region": "storage",
      "ports": [
        {
          "id": "variants",
          "profile": "P13",
          "contract": "PersistedImageVariantsV1",
          "polarity": "Require"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "original",
      "kind": "H05",
      "incidences": [
        {
          "node": "transform",
          "port": "original",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "source",
          "port": "read",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "thumbnail",
      "kind": "H02",
      "incidences": [
        {
          "node": "transform",
          "port": "thumbnail",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "thumb",
          "port": "bytes",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "preview",
      "kind": "H02",
      "incidences": [
        {
          "node": "transform",
          "port": "preview",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "preview",
          "port": "bytes",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "manifest",
      "kind": "H09",
      "incidences": [
        {
          "node": "thumb",
          "port": "receipt",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "preview",
          "port": "receipt",
          "role": "source",
          "ordinal": 1
        },
        {
          "node": "manifest",
          "port": "variants",
          "role": "result",
          "ordinal": 0
        }
      ]
    }
  ]
}
