Přeskočit obsah

Middleware Channel Frame v2

Source schema: doc/schemas/middleware-channel-frame.v2.schema.json

Strict outer application frame for one accepted middleware channel session.

Governing Basis

Project Lineage

Fields

Field Required Shape Description
schema yes const: middleware-channel-frame.v2
schema/v yes const: 2
session/id yes ref: middleware-channel-frame.v1.schema.json#/properties/session~1id
session/epoch yes ref: middleware-channel-frame.v1.schema.json#/properties/session~1epoch
frame/seq yes ref: middleware-channel-frame.v1.schema.json#/properties/frame~1seq
message/kind yes ref: middleware-channel-frame.v1.schema.json#/properties/message~1kind
operation yes ref: middleware-channel-frame.v1.schema.json#/properties/operation
request/id no ref: middleware-channel-frame.v1.schema.json#/properties/request~1id
reply/to no ref: middleware-channel-frame.v1.schema.json#/properties/reply~1to
deadline/at no ref: middleware-channel-frame.v1.schema.json#/properties/deadline~1at
trace/correlation-id no ref: middleware-channel-frame.v1.schema.json#/properties/trace~1correlation-id
payload/schema yes ref: middleware-channel-frame.v1.schema.json#/properties/payload~1schema
payload yes ref: middleware-channel-frame.v1.schema.json#/properties/payload

Definitions

Definition Shape Description
id ref: middleware-channel-frame.v1.schema.json#/$defs/id
schemaName ref: middleware-channel-frame.v1.schema.json#/$defs/schemaName

Conditional Rules

Rule 1

When:

{
  "properties": {
    "message/kind": {
      "const": "request"
    }
  },
  "required": [
    "message/kind"
  ]
}

Then:

{
  "required": [
    "request/id",
    "deadline/at"
  ],
  "not": {
    "required": [
      "reply/to"
    ]
  },
  "properties": {
    "operation": {
      "enum": [
        "middleware.init",
        "middleware.invoke",
        "module-http.invoke",
        "host-capability.invoke"
      ]
    }
  }
}

Rule 2

When:

{
  "properties": {
    "message/kind": {
      "const": "response"
    }
  },
  "required": [
    "message/kind"
  ]
}

Then:

{
  "required": [
    "reply/to"
  ],
  "not": {
    "anyOf": [
      {
        "required": [
          "request/id"
        ]
      },
      {
        "required": [
          "deadline/at"
        ]
      }
    ]
  },
  "properties": {
    "operation": {
      "enum": [
        "middleware.init",
        "middleware.invoke",
        "module-http.invoke",
        "host-capability.invoke"
      ]
    }
  }
}

Rule 3

When:

{
  "properties": {
    "message/kind": {
      "const": "event"
    }
  },
  "required": [
    "message/kind"
  ]
}

Then:

{
  "not": {
    "anyOf": [
      {
        "required": [
          "request/id"
        ]
      },
      {
        "required": [
          "reply/to"
        ]
      },
      {
        "required": [
          "deadline/at"
        ]
      }
    ]
  },
  "properties": {
    "operation": {
      "enum": [
        "middleware.observe",
        "middleware.trace.report"
      ]
    }
  }
}

Rule 4

When:

{
  "properties": {
    "message/kind": {
      "const": "event"
    },
    "operation": {
      "const": "middleware.trace.report"
    }
  },
  "required": [
    "message/kind",
    "operation"
  ]
}

Then:

{
  "properties": {
    "payload/schema": {
      "const": "component-communication-report.v1"
    }
  }
}

Rule 5

When:

{
  "properties": {
    "message/kind": {
      "const": "control"
    }
  },
  "required": [
    "message/kind"
  ]
}

Then:

{
  "not": {
    "anyOf": [
      {
        "required": [
          "request/id"
        ]
      },
      {
        "required": [
          "reply/to"
        ]
      },
      {
        "required": [
          "deadline/at"
        ]
      }
    ]
  },
  "properties": {
    "operation": {
      "enum": [
        "request.cancel",
        "heartbeat",
        "session.shutdown"
      ]
    }
  }
}

Rule 6

When:

{
  "properties": {
    "message/kind": {
      "const": "request"
    },
    "operation": {
      "const": "host-capability.invoke"
    }
  },
  "required": [
    "message/kind",
    "operation"
  ]
}

Then:

{
  "properties": {
    "payload/schema": {
      "const": "middleware-channel-host-capability-call.v2"
    }
  }
}

Rule 7

When:

{
  "properties": {
    "message/kind": {
      "const": "response"
    },
    "operation": {
      "const": "host-capability.invoke"
    }
  },
  "required": [
    "message/kind",
    "operation"
  ]
}

Then:

{
  "properties": {
    "payload/schema": {
      "const": "middleware-channel-call-result.v1"
    }
  }
}

Rule 8

When:

{
  "properties": {
    "message/kind": {
      "const": "request"
    },
    "operation": {
      "const": "module-http.invoke"
    }
  },
  "required": [
    "message/kind",
    "operation"
  ]
}

Then:

{
  "properties": {
    "payload/schema": {
      "const": "middleware-module-http-request.v1"
    }
  }
}

Rule 9

When:

{
  "properties": {
    "message/kind": {
      "const": "response"
    },
    "operation": {
      "const": "module-http.invoke"
    }
  },
  "required": [
    "message/kind",
    "operation"
  ]
}

Then:

{
  "properties": {
    "payload/schema": {
      "const": "middleware-module-http-response.v1"
    }
  }
}

Rule 10

When:

{
  "properties": {
    "message/kind": {
      "const": "control"
    },
    "operation": {
      "const": "request.cancel"
    }
  },
  "required": [
    "message/kind",
    "operation"
  ]
}

Then:

{
  "properties": {
    "payload/schema": {
      "const": "middleware-channel-request-cancel.v1"
    }
  }
}

Rule 11

When:

{
  "properties": {
    "message/kind": {
      "const": "control"
    },
    "operation": {
      "const": "heartbeat"
    }
  },
  "required": [
    "message/kind",
    "operation"
  ]
}

Then:

{
  "properties": {
    "payload/schema": {
      "const": "middleware-channel-heartbeat.v1"
    }
  }
}

Rule 12

When:

{
  "properties": {
    "message/kind": {
      "const": "control"
    },
    "operation": {
      "const": "session.shutdown"
    }
  },
  "required": [
    "message/kind",
    "operation"
  ]
}

Then:

{
  "properties": {
    "payload/schema": {
      "const": "middleware-channel-session-shutdown.v1"
    }
  }
}

Field Semantics

schema

  • Required: yes
  • Shape: const: middleware-channel-frame.v2

schema/v

  • Required: yes
  • Shape: const: 2

session/id

  • Required: yes
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/session~1id

session/epoch

  • Required: yes
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/session~1epoch

frame/seq

  • Required: yes
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/frame~1seq

message/kind

  • Required: yes
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/message~1kind

operation

  • Required: yes
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/operation

request/id

  • Required: no
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/request~1id

reply/to

  • Required: no
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/reply~1to

deadline/at

  • Required: no
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/deadline~1at

trace/correlation-id

  • Required: no
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/trace~1correlation-id

payload/schema

  • Required: yes
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/payload~1schema

payload

  • Required: yes
  • Shape: ref: middleware-channel-frame.v1.schema.json#/properties/payload

Definition Semantics

$defs.id

  • Shape: ref: middleware-channel-frame.v1.schema.json#/$defs/id

$defs.schemaName

  • Shape: ref: middleware-channel-frame.v1.schema.json#/$defs/schemaName