Skip to main content

NODE_PROTOCOL_SCHEMA

Constant NODE_PROTOCOL_SCHEMA 

Source
pub const NODE_PROTOCOL_SCHEMA: &str = "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"urn:mhome:core-api:interaction-flow-node:v1\",\n  \"title\": \"MeowCore Interaction Flow Node protocol v1\",\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\"definitionRequest\", \"definitionResponse\", \"executeRequest\", \"executeResponse\", \"closeRequest\", \"closeResponse\"],\n  \"properties\": {\n    \"definitionRequest\": { \"$ref\": \"#/$defs/definitionRequest\" },\n    \"definitionResponse\": { \"$ref\": \"#/$defs/definitionResponse\" },\n    \"executeRequest\": { \"$ref\": \"#/$defs/executeRequest\" },\n    \"executeResponse\": { \"$ref\": \"#/$defs/executeResponse\" },\n    \"closeRequest\": { \"$ref\": \"#/$defs/closeRequest\" },\n    \"closeResponse\": { \"$ref\": \"#/$defs/closeResponse\" }\n  },\n  \"$defs\": {\n    \"nonEmpty\": { \"type\": \"string\", \"minLength\": 1, \"maxLength\": 128 },\n    \"identifier\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 128,\n      \"pattern\": \"^[A-Za-z0-9_.\\\\/-]+$\"\n    },\n    \"variable\": { \"type\": \"string\", \"pattern\": \"^\\\\$[A-Za-z_][A-Za-z0-9_]{0,126}$\" },\n    \"valueRef\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"root\"],\n      \"properties\": {\n        \"root\": { \"$ref\": \"#/$defs/variable\" },\n        \"path\": {\n          \"type\": \"array\",\n          \"items\": { \"type\": \"string\", \"pattern\": \"^[A-Za-z_][A-Za-z0-9_]{0,127}$\" },\n          \"maxItems\": 32\n        }\n      }\n    },\n    \"argument\": {\n      \"oneOf\": [\n        {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\"type\", \"value\"],\n          \"properties\": { \"type\": { \"const\": \"value\" }, \"value\": true }\n        },\n        {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\"type\", \"valueRef\"],\n          \"properties\": {\n            \"type\": { \"const\": \"ref\" },\n            \"valueRef\": { \"$ref\": \"#/$defs/valueRef\" }\n          }\n        }\n      ]\n    },\n    \"handler\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"operation\"],\n      \"properties\": {\n        \"operation\": { \"$ref\": \"#/$defs/identifier\" },\n        \"args\": { \"type\": \"array\", \"items\": { \"$ref\": \"#/$defs/argument\" }, \"maxItems\": 128 }\n      }\n    },\n    \"presentation\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"renderer\"],\n      \"properties\": {\n        \"renderer\": { \"const\": \"typedForm\" },\n        \"title\": { \"type\": \"string\", \"maxLength\": 1024 },\n        \"description\": { \"type\": \"string\", \"maxLength\": 16384 },\n        \"content\": { \"type\": \"string\", \"maxLength\": 65536 }\n      }\n    },\n    \"field\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"var\", \"valueType\", \"control\"],\n      \"properties\": {\n        \"var\": { \"$ref\": \"#/$defs/variable\" },\n        \"valueType\": { \"enum\": [\"string\", \"boolean\"] },\n        \"control\": { \"enum\": [\"text\", \"password\", \"longText\", \"select\", \"boolean\"] },\n        \"required\": { \"type\": \"boolean\" },\n        \"repeat\": { \"type\": \"boolean\" },\n        \"label\": { \"type\": \"string\", \"maxLength\": 1024 },\n        \"defaultValue\": true,\n        \"defaultValueRef\": { \"$ref\": \"#/$defs/valueRef\" },\n        \"options\": { \"type\": \"array\", \"maxItems\": 1024 },\n        \"optionsRef\": { \"$ref\": \"#/$defs/valueRef\" },\n        \"optionUnavailableText\": { \"type\": \"string\", \"maxLength\": 4096 },\n        \"readOnly\": { \"type\": \"boolean\" },\n        \"minRows\": { \"type\": \"integer\", \"minimum\": 1, \"maximum\": 100 }\n      },\n      \"allOf\": [\n        {\n          \"if\": {\n            \"properties\": { \"control\": { \"const\": \"password\" } },\n            \"required\": [\"control\"]\n          },\n          \"then\": {\n            \"not\": {\n              \"anyOf\": [\n                { \"required\": [\"defaultValue\"] },\n                { \"required\": [\"defaultValueRef\"] },\n                {\n                  \"properties\": { \"readOnly\": { \"const\": true } },\n                  \"required\": [\"readOnly\"]\n                }\n              ]\n            }\n          }\n        }\n      ]\n    },\n    \"form\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"fields\": { \"type\": \"array\", \"items\": { \"$ref\": \"#/$defs/field\" }, \"maxItems\": 64 }\n      }\n    },\n    \"stepContent\": {\n      \"oneOf\": [\n        {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\"type\", \"presentation\", \"form\"],\n          \"properties\": {\n            \"type\": { \"const\": \"form\" },\n            \"presentation\": { \"$ref\": \"#/$defs/presentation\" },\n            \"form\": { \"$ref\": \"#/$defs/form\" },\n            \"renderRefs\": { \"type\": \"array\", \"items\": { \"$ref\": \"#/$defs/valueRef\" } }\n          }\n        },\n        {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\"type\", \"presentation\", \"authorizationUrlRef\", \"completionMode\"],\n          \"properties\": {\n            \"type\": { \"const\": \"externalAuth\" },\n            \"presentation\": { \"$ref\": \"#/$defs/presentation\" },\n            \"authorizationUrlRef\": { \"$ref\": \"#/$defs/valueRef\" },\n            \"completionMode\": { \"enum\": [\"callback\", \"poll\"] },\n            \"pollAfterMs\": { \"type\": \"integer\", \"minimum\": 250, \"maximum\": 60000 }\n          }\n        }\n      ]\n    },\n    \"transition\": {\n      \"oneOf\": [\n        {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\"type\", \"stepId\"],\n          \"properties\": { \"type\": { \"const\": \"step\" }, \"stepId\": { \"$ref\": \"#/$defs/identifier\" } }\n        },\n        {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\"type\", \"valueRef\"],\n          \"properties\": { \"type\": { \"const\": \"dynamic\" }, \"valueRef\": { \"$ref\": \"#/$defs/valueRef\" } }\n        },\n        {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\"type\"],\n          \"properties\": { \"type\": { \"const\": \"finish\" } }\n        }\n      ]\n    },\n    \"step\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"id\", \"content\", \"transition\"],\n      \"properties\": {\n        \"id\": { \"$ref\": \"#/$defs/identifier\" },\n        \"content\": { \"$ref\": \"#/$defs/stepContent\" },\n        \"transition\": { \"$ref\": \"#/$defs/transition\" }\n      }\n    },\n    \"resolver\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"outputVar\", \"handler\"],\n      \"properties\": {\n        \"outputVar\": { \"$ref\": \"#/$defs/variable\" },\n        \"handler\": { \"$ref\": \"#/$defs/handler\" }\n      }\n    },\n    \"definition\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"protocolVersion\", \"flowId\", \"startStepId\", \"steps\"],\n      \"properties\": {\n        \"protocolVersion\": { \"const\": 1 },\n        \"flowId\": { \"$ref\": \"#/$defs/identifier\" },\n        \"startStepId\": { \"$ref\": \"#/$defs/identifier\" },\n        \"steps\": {\n          \"type\": \"object\",\n          \"minProperties\": 1,\n          \"maxProperties\": 64,\n          \"additionalProperties\": { \"$ref\": \"#/$defs/step\" }\n        },\n        \"resolvers\": {\n          \"type\": \"object\",\n          \"maxProperties\": 128,\n          \"additionalProperties\": { \"$ref\": \"#/$defs/resolver\" }\n        },\n        \"lifecycle\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"properties\": {\n            \"complete\": { \"$ref\": \"#/$defs/handler\" },\n            \"cancel\": { \"$ref\": \"#/$defs/handler\" },\n            \"expire\": { \"$ref\": \"#/$defs/handler\" }\n          }\n        }\n      }\n    },\n    \"definitionRequest\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"flowId\"],\n      \"properties\": {\n        \"flowId\": { \"$ref\": \"#/$defs/identifier\" },\n        \"subjectId\": { \"$ref\": \"#/$defs/nonEmpty\" }\n      }\n    },\n    \"definitionResponse\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"definitionRevision\", \"sourceSessionId\", \"definition\"],\n      \"properties\": {\n        \"definitionRevision\": { \"$ref\": \"#/$defs/nonEmpty\" },\n        \"sourceSessionId\": { \"$ref\": \"#/$defs/nonEmpty\" },\n        \"definition\": { \"$ref\": \"#/$defs/definition\" }\n      }\n    },\n    \"executeRequest\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"flowId\", \"sourceSessionId\", \"definitionRevision\", \"operation\", \"operationId\"],\n      \"properties\": {\n        \"flowId\": { \"$ref\": \"#/$defs/identifier\" },\n        \"sourceSessionId\": { \"$ref\": \"#/$defs/nonEmpty\" },\n        \"definitionRevision\": { \"$ref\": \"#/$defs/nonEmpty\" },\n        \"operation\": { \"$ref\": \"#/$defs/nonEmpty\" },\n        \"operationId\": { \"$ref\": \"#/$defs/nonEmpty\" },\n        \"args\": { \"type\": \"array\", \"maxItems\": 128 }\n      }\n    },\n    \"executeResponse\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"required\": [\"data\"],\n      \"properties\": { \"data\": true }\n    },\n    \"closeRequest\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"flowId\", \"sourceSessionId\", \"operationId\", \"reason\"],\n      \"properties\": {\n        \"flowId\": { \"$ref\": \"#/$defs/identifier\" },\n        \"sourceSessionId\": { \"$ref\": \"#/$defs/nonEmpty\" },\n        \"operationId\": { \"$ref\": \"#/$defs/nonEmpty\" },\n        \"reason\": { \"enum\": [\"completed\", \"cancelled\", \"expired\", \"startFailed\"] }\n      }\n    },\n    \"closeResponse\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"required\": [\"closed\"],\n      \"properties\": { \"closed\": { \"type\": \"boolean\" } }\n    }\n  }\n}\n";