Přeskočit obsah

Middleware Channel Frame v1

Source schema: doc/schemas/middleware-channel-frame.v1.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.v1
schema/v yes const: 1
session/id yes ref: #/$defs/id
session/epoch yes integer
frame/seq yes integer
message/kind yes enum: request, response, event, control
operation yes enum: middleware.init, middleware.invoke, middleware.observe, module-http.invoke, request.cancel, host-capability.invoke, heartbeat, session.shutdown
request/id no ref: #/$defs/id
reply/to no ref: #/$defs/id
deadline/at no string
trace/correlation-id no ref: #/$defs/id
payload/schema yes ref: #/$defs/schemaName
payload yes object

Definitions

Definition Shape Description
id string
schemaName string

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": {
      "const": "middleware.observe"
    }
  }
}

Rule 4

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 5

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.v1"
    }
  }
}

Rule 6

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 7

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 8

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 9

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 10

When:

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

Then:

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

Rule 11

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.v1

schema/v

  • Required: yes
  • Shape: const: 1

session/id

  • Required: yes
  • Shape: ref: #/$defs/id

session/epoch

  • Required: yes
  • Shape: integer

frame/seq

  • Required: yes
  • Shape: integer

message/kind

  • Required: yes
  • Shape: enum: request, response, event, control

operation

  • Required: yes
  • Shape: enum: middleware.init, middleware.invoke, middleware.observe, module-http.invoke, request.cancel, host-capability.invoke, heartbeat, session.shutdown

request/id

  • Required: no
  • Shape: ref: #/$defs/id

reply/to

  • Required: no
  • Shape: ref: #/$defs/id

deadline/at

  • Required: no
  • Shape: string

trace/correlation-id

  • Required: no
  • Shape: ref: #/$defs/id

payload/schema

  • Required: yes
  • Shape: ref: #/$defs/schemaName

payload

  • Required: yes
  • Shape: object

Definition Semantics

$defs.id

  • Shape: string

$defs.schemaName

  • Shape: string