diff --git a/gql.go b/gql.go
index 654a300..9e121c3 100644
--- a/gql.go
+++ b/gql.go
@@ -197,6 +197,9 @@ type GQLWSMsg struct {
func enableCORS(w *http.ResponseWriter) {
(*w).Header().Set("Access-Control-Allow-Origin", "*")
+ (*w).Header().Set("Access-Control-Allow-Credentials", "true")
+ (*w).Header().Set("Access-Control-Allow-Headers", "*")
+ (*w).Header().Set("Access-Control-Allow-Methods", "*")
}
func GQLHandler(schema graphql.Schema, ctx context.Context) func(http.ResponseWriter, *http.Request) {
@@ -241,8 +244,10 @@ func GQLHandler(schema graphql.Schema, ctx context.Context) func(http.ResponseWr
func sendOneResultAndClose(res *graphql.Result) chan *graphql.Result {
resultChannel := make(chan *graphql.Result)
- resultChannel <- res
- close(resultChannel)
+ go func() {
+ resultChannel <- res
+ close(resultChannel)
+ }()
return resultChannel
}
@@ -260,7 +265,11 @@ func getOperationTypeOfReq(p graphql.Params) string{
for _, node := range AST.Definitions {
if operationDef, ok := node.(*ast.OperationDefinition); ok {
- if operationDef.Name.Value == p.OperationName || p.OperationName == "" {
+ name := ""
+ if operationDef.Name != nil {
+ name = operationDef.Name.Value
+ }
+ if name == p.OperationName || p.OperationName == "" {
return operationDef.Operation
}
}
@@ -270,12 +279,14 @@ func getOperationTypeOfReq(p graphql.Params) string{
func GQLWSDo(p graphql.Params) chan *graphql.Result {
operation := getOperationTypeOfReq(p)
+ log.Logf("gqlws", "GQLWSDO_OPERATION: %s %+v", operation, p.RequestString)
if operation == ast.OperationTypeSubscription {
return graphql.Subscribe(p)
}
- return sendOneResultAndClose(graphql.Do(p))
+ res := graphql.Do(p)
+ return sendOneResultAndClose(res)
}
func GQLWSHandler(schema graphql.Schema, ctx context.Context) func(http.ResponseWriter, *http.Request) {
@@ -932,7 +943,7 @@ func MakeGQLHandlers(server * GQLServer) (func(http.ResponseWriter, *http.Reques
}
gql_subscriptions := graphql.Fields{
- "Update": GQLSubscriptionUpdate(),
+ "Updates": GQLSubscriptionUpdate(),
}
for key, value := range(server.extended_subscriptions) {
diff --git a/test-site/src/routes/+page.svelte b/test-site/src/routes/+page.svelte
index 1dfc8cc..a899aa7 100644
--- a/test-site/src/routes/+page.svelte
+++ b/test-site/src/routes/+page.svelte
@@ -14,25 +14,41 @@ const client = createClient({
var game_id = null
console.log("STARTING_CLIENT")
+
+
+client.subscribe({
+ query: "query { Arenas { Name Owner { ... on Match { Name, ID } } } }"
+ },
+ {
+ next: (data) => {
+ let obj = JSON.parse(data.data)
+ game_id = obj.Arenas[0].Owner.ID
+ console.log(game_id)
+ },
+ error: (err) => {
+ console.log(err)
+ },
+ complete: () => {
+ },
+});
+
client.subscribe({
- operationName: "Sub",
- query: "query GetArenas { Arenas { Name Owner { ... on Match { Name, ID } } } } subscription Sub { Update { String } }",
+ query: "subscription { Updates { String } }"
},
{
next: (data) => {
- console.log("NEXT")
console.log(data)
},
error: (err) => {
- console.log("ERROR")
console.log(err)
},
complete: () => {
- console.log("COMPLETED")
},
});
+
+
async function match_state(match_id, state) {
let url = "http://localhost:8080/gql"
let data = {
@@ -45,9 +61,9 @@ async function match_state(match_id, state) {
}
const response = await fetch(url, {
method: "POST",
- mode: "same-origin",
+ mode: "cors",
cache: "no-cache",
- credentials: "include",
+ credentials: "same-origin",
headers: {
"Content-Type": "applicaton/json",
},
@@ -60,4 +76,4 @@ async function match_state(match_id, state) {
-
+