|
22 | 22 | }, |
23 | 23 | "subscription": { |
24 | 24 | "enabled": true, |
25 | | - "url": { "staticVariableContent": "http://accounts:4001/graphql" } |
| 25 | + "url": { "staticVariableContent": "http://accounts:4001/graphql" }, |
| 26 | + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", |
| 27 | + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" |
26 | 28 | }, |
27 | 29 | "federation": { |
28 | 30 | "enabled": true, |
29 | | - "serviceSdl": "extend type Query {\n me: User\n user(id: ID!): User\n users: [User]\n}\n\ntype User @key(fields: \"id\") {\n id: ID!\n name: String\n username: String\n birthday: Int\n}\n\ndirective @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT" |
| 31 | + "serviceSdl": "extend type Query {\n me: User\n user(id: ID!): User\n users: [User]\n}\n\ntype User @key(fields: \"id\") {\n id: ID!\n name: String\n username: String\n birthday: Int\n}\n\ndirective @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n" |
30 | 32 | }, |
31 | 33 | "upstreamSchema": { |
32 | | - "key": "c2e480f6edc1b5c9dac001c3b73eba82222cf3c3" |
| 34 | + "key": "db37a1abd369d6fee0ca43d7134e3998f9feba01" |
33 | 35 | } |
34 | 36 | }, |
35 | 37 | "requestTimeoutSeconds": "10", |
36 | | - "id": "http://accounts:4001/graphql", |
| 38 | + "id": "0", |
37 | 39 | "keys": [{ "typeName": "User", "selectionSet": "id" }] |
38 | 40 | }, |
39 | 41 | { |
40 | 42 | "kind": "GRAPHQL", |
41 | 43 | "rootNodes": [ |
42 | 44 | { |
43 | 45 | "typeName": "Product", |
44 | | - "fieldNames": ["inStock", "shippingEstimate", "upc"] |
| 46 | + "fieldNames": ["inStock", "shippingEstimate", "upc"], |
| 47 | + "externalFieldNames": ["upc", "weight", "price"] |
45 | 48 | } |
46 | 49 | ], |
47 | 50 | "overrideFieldPathFromAlias": true, |
|
55 | 58 | }, |
56 | 59 | "subscription": { |
57 | 60 | "enabled": true, |
58 | | - "url": { "staticVariableContent": "http://inventory:4002/graphql" } |
| 61 | + "url": { "staticVariableContent": "http://inventory:4002/graphql" }, |
| 62 | + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", |
| 63 | + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" |
59 | 64 | }, |
60 | 65 | "federation": { |
61 | 66 | "enabled": true, |
62 | | - "serviceSdl": "extend type Product @key(fields: \"upc\") {\n upc: String! @external\n weight: Int @external\n price: Int @external\n inStock: Boolean\n shippingEstimate: Int @requires(fields: \"price weight\")\n}\n\ndirective @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT" |
| 67 | + "serviceSdl": "extend type Product @key(fields: \"upc\") {\n upc: String! @external\n weight: Int @external\n price: Int @external\n inStock: Boolean\n shippingEstimate: Int @requires(fields: \"price weight\")\n}\n\ndirective @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n" |
63 | 68 | }, |
64 | 69 | "upstreamSchema": { |
65 | | - "key": "f7b11b1cff74e3cd6b2d8492d52a8f98b77b155d" |
| 70 | + "key": "64a29f293bb6d35526ce51e1715b8032cdfb31bf" |
66 | 71 | } |
67 | 72 | }, |
68 | 73 | "requestTimeoutSeconds": "10", |
69 | | - "id": "http://inventory:4002/graphql", |
| 74 | + "id": "1", |
70 | 75 | "keys": [{ "typeName": "Product", "selectionSet": "upc" }], |
71 | 76 | "requires": [ |
72 | 77 | { |
|
79 | 84 | { |
80 | 85 | "kind": "GRAPHQL", |
81 | 86 | "rootNodes": [ |
82 | | - { "typeName": "Query", "fieldNames": ["topProducts"] }, |
83 | 87 | { |
84 | 88 | "typeName": "Product", |
85 | 89 | "fieldNames": ["upc", "name", "price", "weight"] |
86 | | - } |
| 90 | + }, |
| 91 | + { "typeName": "Query", "fieldNames": ["topProducts"] } |
87 | 92 | ], |
88 | 93 | "overrideFieldPathFromAlias": true, |
89 | 94 | "customGraphql": { |
|
96 | 101 | }, |
97 | 102 | "subscription": { |
98 | 103 | "enabled": true, |
99 | | - "url": { "staticVariableContent": "http://products:4003/graphql" } |
| 104 | + "url": { "staticVariableContent": "http://products:4003/graphql" }, |
| 105 | + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", |
| 106 | + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" |
100 | 107 | }, |
101 | 108 | "federation": { |
102 | 109 | "enabled": true, |
103 | | - "serviceSdl": "type Product @key(fields: \"upc\") {\n upc: String!\n name: String\n price: Int\n weight: Int\n}\n\nextend type Query {\n topProducts(first: Int = 5): [Product]\n}\n\ndirective @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT" |
| 110 | + "serviceSdl": "type Product @key(fields: \"upc\") {\n upc: String!\n name: String\n price: Int\n weight: Int\n}\n\nextend type Query {\n topProducts(first: Int = 5): [Product]\n}\n\ndirective @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n" |
104 | 111 | }, |
105 | 112 | "upstreamSchema": { |
106 | | - "key": "bc383e3c6e7d1172a4ff9e785fe3958a08289d5f" |
| 113 | + "key": "1afef6ee5330df98b15899d48b7d738c0f43f429" |
107 | 114 | } |
108 | 115 | }, |
109 | 116 | "requestTimeoutSeconds": "10", |
110 | | - "id": "http://products:4003/graphql", |
| 117 | + "id": "2", |
111 | 118 | "keys": [{ "typeName": "Product", "selectionSet": "upc" }] |
112 | 119 | }, |
113 | 120 | { |
114 | 121 | "kind": "GRAPHQL", |
115 | 122 | "rootNodes": [ |
116 | | - { "typeName": "Product", "fieldNames": ["reviews", "upc"] }, |
117 | | - { "typeName": "User", "fieldNames": ["reviews", "id"] }, |
| 123 | + { |
| 124 | + "typeName": "Product", |
| 125 | + "fieldNames": ["reviews", "upc"], |
| 126 | + "externalFieldNames": ["upc"] |
| 127 | + }, |
118 | 128 | { |
119 | 129 | "typeName": "Review", |
120 | 130 | "fieldNames": ["id", "body", "product", "author"] |
| 131 | + }, |
| 132 | + { |
| 133 | + "typeName": "User", |
| 134 | + "fieldNames": ["reviews", "id"], |
| 135 | + "externalFieldNames": ["id", "username"] |
121 | 136 | } |
122 | 137 | ], |
123 | 138 | "overrideFieldPathFromAlias": true, |
|
131 | 146 | }, |
132 | 147 | "subscription": { |
133 | 148 | "enabled": true, |
134 | | - "url": { "staticVariableContent": "http://reviews:4004/graphql" } |
| 149 | + "url": { "staticVariableContent": "http://reviews:4004/graphql" }, |
| 150 | + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", |
| 151 | + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" |
135 | 152 | }, |
136 | 153 | "federation": { |
137 | 154 | "enabled": true, |
138 | | - "serviceSdl": "extend type Product @key(fields: \"upc\") {\n upc: String! @external\n reviews: [Review]\n}\n\ntype Review @key(fields: \"id\") {\n id: ID!\n body: String\n product: Product\n author: User @provides(fields: \"username\")\n}\n\nextend type User @key(fields: \"id\") {\n id: ID! @external\n username: String @external\n reviews: [Review]\n}\n\ndirective @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT" |
| 155 | + "serviceSdl": "extend type Product @key(fields: \"upc\") {\n upc: String! @external\n reviews: [Review]\n}\n\ntype Review @key(fields: \"id\") {\n id: ID!\n body: String\n product: Product\n author: User @provides(fields: \"username\")\n}\n\nextend type User @key(fields: \"id\") {\n id: ID! @external\n username: String @external\n reviews: [Review]\n}\n\ndirective @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT\n" |
139 | 156 | }, |
140 | 157 | "upstreamSchema": { |
141 | | - "key": "b3067d38a59b838d3702985e3a302b725bcb4c2d" |
| 158 | + "key": "1b9a4a72484d26b758d37d3884812af6affbc02f" |
142 | 159 | } |
143 | 160 | }, |
144 | 161 | "requestTimeoutSeconds": "10", |
145 | | - "id": "http://reviews:4004/graphql", |
| 162 | + "id": "3", |
146 | 163 | "keys": [ |
147 | 164 | { "typeName": "Product", "selectionSet": "upc" }, |
148 | | - { "typeName": "User", "selectionSet": "id" }, |
149 | | - { "typeName": "Review", "selectionSet": "id" } |
| 165 | + { "typeName": "Review", "selectionSet": "id" }, |
| 166 | + { "typeName": "User", "selectionSet": "id" } |
150 | 167 | ], |
151 | 168 | "provides": [ |
152 | 169 | { |
|
173 | 190 | ] |
174 | 191 | } |
175 | 192 | ], |
176 | | - "graphqlSchema": "directive @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype User {\n id: ID!\n name: String\n username: String\n birthday: Int\n reviews: [Review]\n}\n\ntype Product {\n upc: String!\n name: String\n price: Int\n weight: Int\n inStock: Boolean\n shippingEstimate: Int\n reviews: [Review]\n}\n\ntype Review {\n id: ID!\n body: String\n product: Product\n author: User\n}\n\ntype Query {\n me: User\n user(id: ID!): User\n users: [User]\n topProducts(first: Int = 5): [Product]\n}", |
| 193 | + "graphqlSchema": "schema {\n query: Query\n}\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Query {\n me: User\n user(id: ID!): User\n users: [User]\n topProducts(first: Int = 5): [Product]\n}\n\ntype User {\n id: ID!\n name: String\n username: String\n birthday: Int\n reviews: [Review]\n}\n\ntype Product {\n upc: String!\n weight: Int\n price: Int\n inStock: Boolean\n shippingEstimate: Int\n name: String\n reviews: [Review]\n}\n\ntype Review {\n id: ID!\n body: String\n product: Product\n author: User\n}", |
177 | 194 | "stringStorage": { |
178 | | - "c2e480f6edc1b5c9dac001c3b73eba82222cf3c3": "schema {\n query: Query\n}\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on OBJECT\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Query {\n me: User\n user(id: ID!): User\n users: [User]\n}\n\ntype User @key(fields: \"id\") {\n birthday: Int\n id: ID!\n name: String\n username: String\n}\n\nscalar openfed__FieldSet", |
179 | | - "f7b11b1cff74e3cd6b2d8492d52a8f98b77b155d": "directive @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on OBJECT\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Product @key(fields: \"upc\") {\n inStock: Boolean\n price: Int @external\n shippingEstimate: Int @requires(fields: \"price weight\")\n upc: String! @external\n weight: Int @external\n}\n\nscalar openfed__FieldSet", |
180 | | - "bc383e3c6e7d1172a4ff9e785fe3958a08289d5f": "schema {\n query: Query\n}\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on OBJECT\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Product @key(fields: \"upc\") {\n name: String\n price: Int\n upc: String!\n weight: Int\n}\n\ntype Query {\n topProducts(first: Int = 5): [Product]\n}\n\nscalar openfed__FieldSet", |
181 | | - "b3067d38a59b838d3702985e3a302b725bcb4c2d": "directive @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on OBJECT\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Product @key(fields: \"upc\") {\n reviews: [Review]\n upc: String! @external\n}\n\ntype Review @key(fields: \"id\") {\n author: User @provides(fields: \"username\")\n body: String\n id: ID!\n product: Product\n}\n\ntype User @key(fields: \"id\") {\n id: ID! @external\n reviews: [Review]\n username: String @external\n}\n\nscalar openfed__FieldSet" |
| 195 | + "db37a1abd369d6fee0ca43d7134e3998f9feba01": "schema {\n query: Query\n}\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Query {\n me: User\n user(id: ID!): User\n users: [User]\n}\n\ntype User @key(fields: \"id\") {\n birthday: Int\n id: ID!\n name: String\n username: String\n}\n\nscalar openfed__FieldSet", |
| 196 | + "64a29f293bb6d35526ce51e1715b8032cdfb31bf": "directive @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Product @key(fields: \"upc\") {\n inStock: Boolean\n price: Int @external\n shippingEstimate: Int @requires(fields: \"price weight\")\n upc: String! @external\n weight: Int @external\n}\n\nscalar openfed__FieldSet", |
| 197 | + "1afef6ee5330df98b15899d48b7d738c0f43f429": "schema {\n query: Query\n}\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Product @key(fields: \"upc\") {\n name: String\n price: Int\n upc: String!\n weight: Int\n}\n\ntype Query {\n topProducts(first: Int = 5): [Product]\n}\n\nscalar openfed__FieldSet", |
| 198 | + "1b9a4a72484d26b758d37d3884812af6affbc02f": "directive @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Product @key(fields: \"upc\") {\n reviews: [Review]\n upc: String! @external\n}\n\ntype Review @key(fields: \"id\") {\n author: User @provides(fields: \"username\")\n body: String\n id: ID!\n product: Product\n}\n\ntype User @key(fields: \"id\") {\n id: ID! @external\n reviews: [Review]\n username: String @external\n}\n\nscalar openfed__FieldSet" |
182 | 199 | } |
183 | 200 | }, |
| 201 | + "version": "6e9dbed6-ec25-44f1-8693-4d44274fe9a6", |
184 | 202 | "subgraphs": [ |
185 | 203 | { |
186 | 204 | "id": "0", |
|
0 commit comments