@webda/graphql 3.6.2 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,14 @@
1
- # <%= name %>
1
+ # @webda/graphql
2
2
 
3
- <%= description %>
3
+ Implements the GraphQL protocol with subscriptions and mutations
4
+
5
+ ```
6
+ // Add a ping to subscription (useful for testing)
7
+ setInterval(() => this.emit("Ping", Date.now()), this.parameters.pingInterval);
8
+ subscriptions["Ping"] = {
9
+ type: GraphQLLong,
10
+ subscribe: async (source, args, context: any, info: GraphQLResolveInfo) => {
11
+ return new EventIterator(this, "Ping", "Ping", Date.now()).iterate();
12
+ }
13
+ };
14
+ ```
package/lib/graphql.d.ts CHANGED
@@ -1,7 +1,9 @@
1
- import { Application, CoreModel, CoreModelDefinition, DeepPartial, DomainService, DomainServiceParameters, ModelGraph, WebContext } from "@webda/core";
2
- import { FieldNode, GraphQLFieldConfig, GraphQLSchema, ThunkObjMap } from "graphql";
1
+ import { Application, CoreModel, CoreModelDefinition, DeepPartial, DomainService, DomainServiceParameters, ModelGraph, WebContext, WebdaQL } from "@webda/core";
2
+ import { FieldNode, GraphQLFieldConfig, GraphQLResolveInfo, GraphQLSchema, GraphQLType, ThunkObjMap } from "graphql";
3
3
  import { Handler } from "graphql-http";
4
+ import { Server as GraphQLWSServer } from "graphql-ws";
4
5
  import { JSONSchema7 } from "json-schema";
6
+ import { WebSocketServer } from "ws";
5
7
  export interface GraphQLContextExtension {
6
8
  /**
7
9
  * Get the current count of operation for this request
@@ -32,6 +34,10 @@ export declare class GraphQLParameters extends DomainServiceParameters {
32
34
  * Expose the schema
33
35
  */
34
36
  exposeGraphiQL: boolean;
37
+ /**
38
+ * Expose a aggregation of all available subscriptions
39
+ */
40
+ globalSubscription: boolean;
35
41
  constructor(params: any);
36
42
  }
37
43
  /**
@@ -47,6 +53,9 @@ export declare class GraphQLService<T extends GraphQLParameters = GraphQLParamet
47
53
  handler: Handler;
48
54
  modelsMap: {};
49
55
  app: Application;
56
+ wss: WebSocketServer;
57
+ wsHandler: GraphQLWSServer;
58
+ modelListeners: any;
50
59
  loadParameters(params: DeepPartial<T>): GraphQLParameters;
51
60
  /**
52
61
  *
@@ -54,14 +63,17 @@ export declare class GraphQLService<T extends GraphQLParameters = GraphQLParamet
54
63
  * @param definitions
55
64
  * @returns
56
65
  */
57
- getJsonSchemaDefinition(prop: JSONSchema7, definitions: any): JSONSchema7;
66
+ getJsonSchemaDefinition(prop: JSONSchema7, definitions?: {}): JSONSchema7;
58
67
  /**
59
68
  *
60
69
  * @param schema
61
70
  * @param defaultName
62
71
  * @returns
63
72
  */
64
- getGraphQLSchemaFromSchema(schema: JSONSchema7, defaultName: string): any;
73
+ getGraphQLSchemaFromSchema(schema: JSONSchema7, defaultName: string, input?: boolean): {
74
+ type: GraphQLType;
75
+ description?: string;
76
+ };
65
77
  /**
66
78
  * Add the GraphQL schema results
67
79
  * @param type
@@ -75,11 +87,19 @@ export declare class GraphQLService<T extends GraphQLParameters = GraphQLParamet
75
87
  * @param webdaGraph
76
88
  * @returns
77
89
  */
78
- getGraphQLFieldsFromSchema(schema: JSONSchema7, defaultName: string, webdaGraph?: ModelGraph): any;
90
+ getGraphQLFieldsFromSchema(schema: JSONSchema7, defaultName: string, webdaGraph?: ModelGraph, input?: boolean): any;
91
+ /**
92
+ * Load model with filter on attributes
93
+ * @param knownFieldsOrId
94
+ * @param model
95
+ * @param context
96
+ * @param info
97
+ * @returns
98
+ */
79
99
  loadModelInstance(knownFieldsOrId: string | {
80
100
  uuid: string;
81
101
  [key: string]: any;
82
- }, model: CoreModelDefinition, context: WebContext, info?: FieldNode): Promise<CoreModel | {
102
+ }, model: CoreModelDefinition, context: WebContext, info?: FieldNode, filter?: WebdaQL.PartialValidator): Promise<CoreModel | {
83
103
  [key: string]: any;
84
104
  uuid: string;
85
105
  }>;
@@ -88,17 +108,48 @@ export declare class GraphQLService<T extends GraphQLParameters = GraphQLParamet
88
108
  * @param context
89
109
  */
90
110
  countOperation(context: WebContext, increment?: number): void;
111
+ resolve(): this;
91
112
  /**
92
113
  * Generate GraphQL schema
93
114
  */
94
115
  generateSchema(): void;
116
+ /**
117
+ * Return the events to subscribe to
118
+ * @param info
119
+ * @returns
120
+ */
121
+ getSubscribedEvents(info: GraphQLResolveInfo): string[];
122
+ /**
123
+ *
124
+ * @param model
125
+ * @param arg1
126
+ * @param context
127
+ * @returns
128
+ */
129
+ registerAsyncIteratorQuery(model: CoreModelDefinition<CoreModel>, plural: string, query: string, context: any): Promise<AsyncIterator<any>>;
130
+ /**
131
+ *
132
+ * @param model
133
+ * @param uuid
134
+ * @param context
135
+ * @returns
136
+ */
137
+ registerAsyncIterator(model: CoreModelDefinition<CoreModel>, uuid: any, context: any, identifier?: string): Promise<AsyncIterator<any>>;
138
+ /**
139
+ *
140
+ * @param model
141
+ * @param uuid
142
+ * @param context
143
+ * @returns
144
+ */
145
+ registerAsyncEventIterator(model: CoreModelDefinition<CoreModel>, uuid: string | null, events: string[], context: any, identifier: string): Promise<AsyncIterator<any>>;
95
146
  /**
96
147
  *
97
148
  * @param rootFields
98
149
  * @param mutation
99
150
  * @returns
100
151
  */
101
- getGraphQLSchema(rootFields: ThunkObjMap<GraphQLFieldConfig<any, any, any>>, mutations?: ThunkObjMap<GraphQLFieldConfig<any, any, any>>): GraphQLSchema;
152
+ getGraphQLSchema(rootFields: ThunkObjMap<GraphQLFieldConfig<any, any, any>>, mutations?: ThunkObjMap<GraphQLFieldConfig<any, any, any>>, subscription?: ThunkObjMap<GraphQLFieldConfig<any, any, any>>): GraphQLSchema;
102
153
  /**
103
154
  * @override
104
155
  */
package/lib/graphql.js CHANGED
@@ -4,9 +4,16 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { DomainService, DomainServiceParameters, Route, WebdaError } from "@webda/core";
8
- import { GraphQLBoolean, GraphQLError, GraphQLInt, GraphQLList, GraphQLObjectType, GraphQLSchema, GraphQLString, printSchema } from "graphql";
7
+ import { Core, DomainService, DomainServiceParameters, Route, WebdaError, WebdaQL } from "@webda/core";
8
+ import { EventIterator, MergedIterator } from "@webda/runtime";
9
+ import { GraphQLBoolean, GraphQLError, GraphQLInputObjectType, GraphQLList, GraphQLObjectType, GraphQLSchema, GraphQLString, printSchema } from "graphql";
9
10
  import { createHandler } from "graphql-http";
11
+ import { CloseCode, makeServer } from "graphql-ws";
12
+ import { nextTick } from "process";
13
+ import { WebSocketServer } from "ws";
14
+ import { AnyScalarType } from "./types/any.js";
15
+ import { DateScalar } from "./types/date.js";
16
+ import { GraphQLLong } from "./types/long.js";
10
17
  const GraphIQL = `
11
18
  <!doctype html>
12
19
  <html lang="en">
@@ -56,7 +63,10 @@ const GraphIQL = `
56
63
  src="https://unpkg.com/@graphiql/plugin-explorer/dist/index.umd.js"
57
64
  crossorigin
58
65
  ></script>
59
-
66
+ <script
67
+ src="https://unpkg.com/graphql-ws/umd/graphql-ws.min.js"
68
+ type="application/javascript"
69
+ ></script>
60
70
  <link
61
71
  rel="stylesheet"
62
72
  href="https://unpkg.com/@graphiql/plugin-explorer/dist/style.css"
@@ -69,6 +79,7 @@ const GraphIQL = `
69
79
  const root = ReactDOM.createRoot(document.getElementById('graphiql'));
70
80
  const fetcher = GraphiQL.createFetcher({
71
81
  url: '{{URL}}',
82
+ subscriptionUrl: '{{WSURL}}',
72
83
  headers: { 'X-GraphiQL-Schema': 'true' },
73
84
  });
74
85
  const explorerPlugin = GraphiQLPluginExplorer.explorerPlugin();
@@ -93,6 +104,7 @@ export class GraphQLParameters extends DomainServiceParameters {
93
104
  this.maxOperationsPerRequest ?? (this.maxOperationsPerRequest = 10);
94
105
  this.userModel ?? (this.userModel = "User");
95
106
  this.exposeMe ?? (this.exposeMe = true);
107
+ this.globalSubscription ?? (this.globalSubscription = true);
96
108
  }
97
109
  }
98
110
  /**
@@ -113,7 +125,7 @@ export class GraphQLService extends DomainService {
113
125
  * @param definitions
114
126
  * @returns
115
127
  */
116
- getJsonSchemaDefinition(prop, definitions) {
128
+ getJsonSchemaDefinition(prop, definitions = {}) {
117
129
  if (prop?.type) {
118
130
  if (prop.type === "array" && prop.items["$ref"]) {
119
131
  prop.items = this.getJsonSchemaDefinition(prop.items, definitions);
@@ -131,38 +143,50 @@ export class GraphQLService extends DomainService {
131
143
  * @param defaultName
132
144
  * @returns
133
145
  */
134
- getGraphQLSchemaFromSchema(schema, defaultName) {
146
+ getGraphQLSchemaFromSchema(schema, defaultName, input) {
135
147
  let type;
136
148
  if (!schema || !schema.type) {
137
- return;
149
+ type = AnyScalarType;
138
150
  }
139
151
  else if (schema.type === "string") {
140
- type = GraphQLString;
152
+ if (schema.format === "date-time") {
153
+ type = DateScalar;
154
+ }
155
+ else {
156
+ type = GraphQLString;
157
+ }
141
158
  }
142
159
  else if (schema.type === "boolean") {
143
160
  type = GraphQLBoolean;
144
161
  }
145
162
  else if (schema.type === "array") {
146
- type = new GraphQLList(this.getGraphQLSchemaFromSchema(schema.items, schema.title || defaultName)?.type || GraphQLString);
163
+ type = new GraphQLList(this.getGraphQLSchemaFromSchema(schema.items, schema.title || defaultName, input)?.type ||
164
+ GraphQLString);
147
165
  }
148
166
  else if (schema.type === "integer" || schema.type === "number") {
149
- type = GraphQLInt;
167
+ // Use long to handle 2^52
168
+ type = GraphQLLong;
150
169
  }
151
170
  else if (schema.type === "null") {
152
171
  return undefined;
153
172
  }
154
173
  else if (schema.type === "object") {
155
174
  const fields = {};
175
+ // Map does not fit well with graphql
176
+ if (!schema.properties) {
177
+ return { type: AnyScalarType, description: "Map" };
178
+ }
156
179
  for (let i in schema.properties) {
157
- let res = this.getGraphQLSchemaFromSchema(this.getJsonSchemaDefinition(schema.properties[i], schema.definitions), `${schema.title || defaultName}_${i}`);
180
+ let res = this.getGraphQLSchemaFromSchema(this.getJsonSchemaDefinition(schema.properties[i], schema.definitions), `${schema.title || defaultName}_${i}`, input);
158
181
  if (!res)
159
182
  continue;
160
183
  fields[i] = res;
161
184
  }
162
185
  if (Object.keys(fields).length === 0) {
163
- return undefined;
186
+ this.log("DEBUG", "Return map for", defaultName, "because no fields");
187
+ return { type: AnyScalarType, description: "Map" };
164
188
  }
165
- type = new GraphQLObjectType({
189
+ type = new (input ? GraphQLInputObjectType : GraphQLObjectType)({
166
190
  fields,
167
191
  name: schema.title || defaultName
168
192
  });
@@ -197,7 +221,7 @@ export class GraphQLService extends DomainService {
197
221
  * @param webdaGraph
198
222
  * @returns
199
223
  */
200
- getGraphQLFieldsFromSchema(schema, defaultName, webdaGraph) {
224
+ getGraphQLFieldsFromSchema(schema, defaultName, webdaGraph, input) {
201
225
  const fields = {};
202
226
  const skipFields = [];
203
227
  const attributeFilter = (skip = false) => info => {
@@ -207,7 +231,7 @@ export class GraphQLService extends DomainService {
207
231
  }
208
232
  return this.modelsMap[info.model];
209
233
  };
210
- if (webdaGraph) {
234
+ if (webdaGraph && !input) {
211
235
  // In graphql parent should not be displayed
212
236
  if (webdaGraph.parent) {
213
237
  fields[webdaGraph.parent.attribute] = {
@@ -239,7 +263,8 @@ export class GraphQLService extends DomainService {
239
263
  }
240
264
  },
241
265
  resolve: async (source, args, context, info) => {
242
- return Promise.all(source[link.attribute].map(i => this.loadModelInstance(i, source[link.attribute].model, context, info.fieldNodes.find(node => node.name.value === link.attribute))));
266
+ let src = link.type === "LINKS_MAP" ? Object.values(source[link.attribute]) : source[link.attribute];
267
+ return (await Promise.all(src.map(i => this.loadModelInstance(i, this.getWebda().getModel(link.model), context, info.fieldNodes.find(node => node.name.value === link.attribute), args.filter ? new WebdaQL.PartialValidator(WebdaQL.unsanitize(args.filter)) : undefined)))).filter(i => i !== null);
243
268
  }
244
269
  };
245
270
  }
@@ -254,7 +279,7 @@ export class GraphQLService extends DomainService {
254
279
  },
255
280
  resolve: async (source, args, context, info) => {
256
281
  let modelDefinition = this.app.getModel(map.model);
257
- return Promise.all(source[map.attribute].map(i => this.loadModelInstance(i, modelDefinition, context, info.fieldNodes.find(node => node.name.value === map.attribute))));
282
+ return (await Promise.all(source[map.attribute].map(i => this.loadModelInstance(i, modelDefinition, context, info.fieldNodes.find(node => node.name.value === map.attribute), args.filter ? new WebdaQL.PartialValidator(WebdaQL.unsanitize(args.filter)) : undefined)))).filter(i => i !== null);
258
283
  }
259
284
  };
260
285
  });
@@ -267,7 +292,7 @@ export class GraphQLService extends DomainService {
267
292
  }
268
293
  },
269
294
  resolve: async (source, args, context, info) => {
270
- let res = await source[query.attribute].query(args.query, context);
295
+ let res = await source[query.attribute].query(WebdaQL.unsanitize(args.query || ""), context);
271
296
  this.countOperation(context, res.results.length);
272
297
  return res;
273
298
  }
@@ -276,10 +301,10 @@ export class GraphQLService extends DomainService {
276
301
  }
277
302
  for (let i in schema.properties) {
278
303
  // Was initiated by the known graph
279
- if (fields[i] || skipFields.includes(i)) {
304
+ if (fields[i] || skipFields.includes(i) || (schema.properties[i].readOnly && input)) {
280
305
  continue;
281
306
  }
282
- let prop = this.getGraphQLSchemaFromSchema(this.getJsonSchemaDefinition(schema.properties[i], schema.definitions), `${defaultName}_${i}`);
307
+ let prop = this.getGraphQLSchemaFromSchema(this.getJsonSchemaDefinition(schema.properties[i], schema.definitions), `${defaultName}_${i}`, input);
283
308
  if (!prop) {
284
309
  continue;
285
310
  }
@@ -287,8 +312,19 @@ export class GraphQLService extends DomainService {
287
312
  }
288
313
  return fields;
289
314
  }
290
- async loadModelInstance(knownFieldsOrId, model, context, info) {
315
+ /**
316
+ * Load model with filter on attributes
317
+ * @param knownFieldsOrId
318
+ * @param model
319
+ * @param context
320
+ * @param info
321
+ * @returns
322
+ */
323
+ async loadModelInstance(knownFieldsOrId, model, context, info, filter) {
291
324
  let res = typeof knownFieldsOrId === "string" ? { uuid: knownFieldsOrId } : knownFieldsOrId;
325
+ if (filter && !filter.eval(res)) {
326
+ return null;
327
+ }
292
328
  let operation =
293
329
  // Check if we have a valid selection set
294
330
  info === undefined ||
@@ -303,7 +339,7 @@ export class GraphQLService extends DomainService {
303
339
  }
304
340
  }
305
341
  // We already know the whole answer so no more request needed
306
- if (!operation) {
342
+ if (!operation && (!filter || !filter.wasPartialMatch())) {
307
343
  return res;
308
344
  }
309
345
  // Count the operation then and retrieve the model
@@ -323,6 +359,9 @@ export class GraphQLService extends DomainService {
323
359
  }
324
360
  });
325
361
  }
362
+ if (filter && !filter.eval(modelInstance, false)) {
363
+ return null;
364
+ }
326
365
  return modelInstance;
327
366
  }
328
367
  /**
@@ -331,23 +370,46 @@ export class GraphQLService extends DomainService {
331
370
  */
332
371
  countOperation(context, increment = 1) {
333
372
  let ext = context.getExtension("graphql");
334
- if (ext.count === this.parameters.maxOperationsPerRequest) {
373
+ if (ext?.count === this.parameters.maxOperationsPerRequest) {
335
374
  throw new GraphQLError("Too many operations", {
336
375
  extensions: {
337
376
  code: "TOO_MANY_OPERATIONS"
338
377
  }
339
378
  });
340
379
  }
341
- ext.count += increment;
380
+ if (ext) {
381
+ ext.count ?? (ext.count = 0);
382
+ ext.count += increment;
383
+ }
384
+ }
385
+ resolve() {
386
+ super.resolve();
387
+ // Set-up ws server
388
+ this.wss = new WebSocketServer({ noServer: true });
389
+ this.getWebda().on("Webda.Init.Http", (http) => {
390
+ http.on("upgrade", (req, socket, head) => {
391
+ if (req.url === this.parameters.url) {
392
+ (async () => {
393
+ req.webdaContext ?? (req.webdaContext = await Core.get().getContextFromRequest(req));
394
+ await req.webdaContext.init();
395
+ this.wss.handleUpgrade(req, socket, head, ws => {
396
+ this.wss.emit("connection", ws, req);
397
+ });
398
+ })();
399
+ }
400
+ });
401
+ });
402
+ return this;
342
403
  }
343
404
  /**
344
405
  * Generate GraphQL schema
345
406
  */
346
407
  generateSchema() {
347
408
  const rootFields = {};
409
+ const mutations = {};
410
+ const subscriptions = {};
348
411
  const models = this.app.getModels();
349
412
  const graph = this.app.getGraph();
350
- const roots = this.app.getRootExposedModels();
351
413
  this.modelsMap = {};
352
414
  for (let i in models) {
353
415
  const model = models[i];
@@ -365,29 +427,164 @@ export class GraphQLService extends DomainService {
365
427
  fields: () => this.getGraphQLFieldsFromSchema(schema, name, graph[i]),
366
428
  name
367
429
  });
368
- }
369
- for (let i of roots) {
370
- this.log("INFO", "Add GraphQL root query", i);
371
- const model = models[i];
372
- if (!this.parameters.isIncluded(model.getIdentifier())) {
373
- continue;
430
+ let input = new GraphQLInputObjectType({
431
+ fields: this.getGraphQLFieldsFromSchema(schema, name + "Input", graph[i], true),
432
+ name: name + "Input"
433
+ });
434
+ if (!model.Expose.restrict.create) {
435
+ mutations[`create${name}`] = {
436
+ type: this.modelsMap[i],
437
+ args: {
438
+ [name]: { type: input }
439
+ },
440
+ resolve: async (_, args, context) => {
441
+ let object = new model().load(args[name]);
442
+ this.log("INFO", "Create", object, context.getCurrentUserId());
443
+ if ((await object.canAct(context, "create")) !== true) {
444
+ throw new GraphQLError("Permission denied", {
445
+ extensions: {
446
+ code: "PERMISSION_DENIED"
447
+ }
448
+ });
449
+ }
450
+ await object.save();
451
+ return object;
452
+ }
453
+ };
374
454
  }
375
- const schema = model?.getSchema();
376
- if (!schema) {
377
- this.log("INFO", "Schema not valid for root query", i);
378
- continue;
455
+ if (!model.Expose.restrict.update) {
456
+ mutations[`update${name}`] = {
457
+ type: this.modelsMap[i],
458
+ args: {
459
+ [name]: { type: input },
460
+ uuid: {
461
+ type: GraphQLString
462
+ }
463
+ },
464
+ resolve: async (_, args, context) => {
465
+ let object = await model.ref(args.uuid).get();
466
+ if ((await object?.canAct(context, "update")) !== true) {
467
+ throw new GraphQLError("Permission denied", {
468
+ extensions: {
469
+ code: "PERMISSION_DENIED"
470
+ }
471
+ });
472
+ }
473
+ return object.load(args[name]).save();
474
+ }
475
+ };
379
476
  }
380
- rootFields[this.transformName(this.app.getModelPlural(i).split("/").pop())] = {
477
+ // check for actions
478
+ if (!model.Expose.restrict.delete) {
479
+ mutations[`delete${name}`] = {
480
+ type: new GraphQLObjectType({ name: `delete${name}`, fields: { success: { type: GraphQLBoolean } } }),
481
+ args: {
482
+ uuid: {
483
+ type: GraphQLString
484
+ }
485
+ },
486
+ resolve: async (_, args, context) => {
487
+ let object = await model.ref(args.uuid).get();
488
+ if ((await object?.canAct(context, "delete")) !== true) {
489
+ throw new GraphQLError("Permission denied", {
490
+ extensions: {
491
+ code: "PERMISSION_DENIED"
492
+ }
493
+ });
494
+ }
495
+ await object.delete();
496
+ return {
497
+ success: true
498
+ };
499
+ }
500
+ };
501
+ }
502
+ // Retrieval
503
+ let plural = this.transformName(this.app.getModelPlural(i).split("/").pop());
504
+ rootFields[plural] = {
381
505
  type: this.getGraphQLQueryResult(this.modelsMap[i]),
382
506
  args: {
383
507
  query: {
384
- type: GraphQLString
508
+ type: GraphQLString,
509
+ defaultValue: ""
385
510
  }
386
511
  },
387
512
  resolve: async (_, args, context) => {
388
- return await model.query(args.query || "", true, context);
513
+ return await model.query(WebdaQL.unsanitize(args.query || ""), true, context);
514
+ },
515
+ subscribe: async (_source, args, context) => {
516
+ this.log("DEBUG", "Subscription called on", args);
517
+ return this.registerAsyncIteratorQuery(model, plural, WebdaQL.unsanitize(args.query || ""), context);
389
518
  }
390
519
  };
520
+ /**
521
+ * Subscription for a specific object
522
+ */
523
+ subscriptions[this.transformName(i.split("/").pop())] = {
524
+ type: this.modelsMap[i],
525
+ args: {
526
+ [model.getUuidField()]: {
527
+ type: GraphQLString
528
+ }
529
+ },
530
+ subscribe: async (_source, args, context) => {
531
+ this.log("DEBUG", "Subscription called on", args);
532
+ return this.registerAsyncIterator(model, args[model.getUuidField()], context);
533
+ }
534
+ };
535
+ const events = model.getClientEvents();
536
+ const modelEvents = events
537
+ .filter(e => typeof e !== "string" && e.global)
538
+ .map((e) => e.name);
539
+ const instanceEvents = events
540
+ .filter(e => typeof e === "string" || !e.global)
541
+ .map(e => (typeof e === "string" ? e : e.name));
542
+ if (modelEvents.length) {
543
+ const eventTypes = {};
544
+ modelEvents.forEach(e => {
545
+ eventTypes[e] = {
546
+ type: AnyScalarType
547
+ };
548
+ });
549
+ eventTypes["latestEventTime"] = { type: GraphQLLong };
550
+ /**
551
+ * Subscription for all events on a class of objects
552
+ */
553
+ subscriptions[plural + "Events"] = {
554
+ type: new GraphQLObjectType({ fields: eventTypes, name: plural + "Events" }),
555
+ subscribe: async (_source, args, context, info) => {
556
+ let subscribedEvents = this.getSubscribedEvents(info);
557
+ this.log("DEBUG", "Subscription called on", model, args[model.getUuidField()], subscribedEvents);
558
+ return this.registerAsyncEventIterator(model, null, subscribedEvents, context, plural + "Events");
559
+ }
560
+ };
561
+ }
562
+ if (instanceEvents.length) {
563
+ const eventTypes = {};
564
+ instanceEvents.forEach(e => {
565
+ eventTypes[e] = { type: AnyScalarType };
566
+ });
567
+ eventTypes["latestEventTime"] = { type: GraphQLLong };
568
+ /**
569
+ * Subscription for event on a specific object
570
+ */
571
+ subscriptions[this.transformName(i.split("/").pop()) + "Events"] = {
572
+ type: new GraphQLObjectType({ fields: eventTypes, name: this.transformName(i.split("/").pop()) + "Events2" }),
573
+ args: {
574
+ [model.getUuidField()]: {
575
+ type: GraphQLString
576
+ }
577
+ },
578
+ subscribe: async (_source, args, context, info) => {
579
+ let subscribedEvents = this.getSubscribedEvents(info);
580
+ this.log("DEBUG", "Subscription called on", model, args[model.getUuidField()], subscribedEvents);
581
+ return this.registerAsyncEventIterator(model, args[model.getUuidField()], subscribedEvents, context, this.transformName(i.split("/").pop()) + "Events");
582
+ }
583
+ };
584
+ }
585
+ /**
586
+ * Query for a specific object
587
+ */
391
588
  rootFields[this.transformName(i.split("/").pop())] = {
392
589
  type: this.modelsMap[i],
393
590
  args: {
@@ -395,9 +592,9 @@ export class GraphQLService extends DomainService {
395
592
  type: GraphQLString
396
593
  }
397
594
  },
398
- resolve: async (_, args, context, info) => {
595
+ resolve: async (_source, args, context, _info) => {
399
596
  this.countOperation(context);
400
- return this.loadModelInstance(args.uuid || "", model, context);
597
+ return this.loadModelInstance(args[model.getUuidField()] || "", model, context);
401
598
  }
402
599
  };
403
600
  }
@@ -413,12 +610,214 @@ export class GraphQLService extends DomainService {
413
610
  return context.getCurrentUser();
414
611
  }
415
612
  };
613
+ subscriptions["Me"] = {
614
+ type: this.modelsMap[userGraph],
615
+ subscribe: async (_source, _args, context) => {
616
+ if (!context.getCurrentUserId()) {
617
+ throw new GraphQLError("Permission denied", {
618
+ extensions: {
619
+ code: "PERMISSION_DENIED"
620
+ }
621
+ });
622
+ }
623
+ const user = await context.getCurrentUser();
624
+ return this.registerAsyncIterator(user.__class, context.getCurrentUserId(), context, "Me");
625
+ }
626
+ };
627
+ const events = model.getClientEvents();
628
+ const instanceEvents = events
629
+ .filter(e => typeof e === "string" || !e.global)
630
+ .map(e => (typeof e === "string" ? e : e.name));
631
+ if (instanceEvents.length) {
632
+ const eventTypes = {};
633
+ instanceEvents.forEach(e => {
634
+ eventTypes[e] = { type: AnyScalarType };
635
+ });
636
+ subscriptions["MeEvents"] = {
637
+ type: new GraphQLObjectType({ fields: eventTypes, name: "MeEvents" }),
638
+ subscribe: async (_source, args, context, info) => {
639
+ if (!context.getCurrentUserId()) {
640
+ throw new GraphQLError("Permission denied", {
641
+ extensions: {
642
+ code: "PERMISSION_DENIED"
643
+ }
644
+ });
645
+ }
646
+ const subscribedEvents = (info.fieldNodes[0].selectionSet?.selections || [])
647
+ .filter(node => node.kind === "Field")
648
+ .map(n => n.name.value);
649
+ const user = await context.getCurrentUser();
650
+ return this.registerAsyncEventIterator(user.__class, context.getCurrentUserId(), subscribedEvents, context, "MeEvents");
651
+ }
652
+ };
653
+ }
416
654
  }
417
655
  else {
418
656
  this.log("WARN", "Cannot expose me, user model is not exposed or get is restricted or type is not unavailable");
419
657
  }
420
658
  }
421
- this.schema = this.getGraphQLSchema(rootFields);
659
+ // Copy the rootFields without resolver
660
+ for (let i in rootFields) {
661
+ subscriptions[i] ?? (subscriptions[i] = { ...rootFields[i], resolve: undefined });
662
+ }
663
+ if (this.parameters.globalSubscription) {
664
+ // Create global type based on all previous subscriptions
665
+ subscriptions["Aggregate"] = {
666
+ type: new GraphQLObjectType({
667
+ fields: subscriptions,
668
+ name: "AggregateSubscriptions"
669
+ }),
670
+ subscribe: async (_source, args2, context, info) => {
671
+ let iterators = {};
672
+ let p = [];
673
+ // Check if know all fields already
674
+ for (let field of (info.fieldNodes[0].selectionSet?.selections || []).filter(node => node.kind === "Field")) {
675
+ const name = field.name.value;
676
+ const args = {};
677
+ field.arguments?.forEach(arg => {
678
+ // @ts-ignore
679
+ args[arg.name.value] = arg.value.value;
680
+ });
681
+ p.push((async () => {
682
+ iterators[name] = await subscriptions[name].subscribe(_source, args, context, {
683
+ fieldNodes: [field] // Abusing a bit the builder currently
684
+ });
685
+ })());
686
+ }
687
+ await Promise.all(p);
688
+ return MergedIterator.iterate({
689
+ Aggregate: MergedIterator.iterate(iterators, true, data => {
690
+ return Object.values(data).pop();
691
+ })
692
+ });
693
+ }
694
+ };
695
+ }
696
+ this.schema = this.getGraphQLSchema(rootFields, mutations, subscriptions);
697
+ }
698
+ /**
699
+ * Return the events to subscribe to
700
+ * @param info
701
+ * @returns
702
+ */
703
+ getSubscribedEvents(info) {
704
+ return (info.fieldNodes[0].selectionSet?.selections || [])
705
+ .filter(node => node.kind === "Field" && node.name.value !== "latestEventTime")
706
+ .map(n => n.name.value);
707
+ }
708
+ /**
709
+ *
710
+ * @param model
711
+ * @param arg1
712
+ * @param context
713
+ * @returns
714
+ */
715
+ async registerAsyncIteratorQuery(model, plural, query, context) {
716
+ let result = await model.query(query, true, context);
717
+ let queryInfo = new WebdaQL.QueryValidator(query);
718
+ const updatedCallback = async (evt) => {
719
+ this.log("INFO", "Event from", evt.emitterId, evt.object_id);
720
+ if (!result.results.find(e => evt.object_id === e.getUuid()))
721
+ return;
722
+ // We rely on the cache of the store to get the full object
723
+ // We let the other listeners finish before returning the object
724
+ await new Promise(resolve => nextTick(resolve));
725
+ return {
726
+ continuationToken: result.continuationToken,
727
+ results: await Promise.all(result.results.map(r => (r.getUuid() === evt.object_id ? model.ref(evt.object_id).get() : r)))
728
+ };
729
+ };
730
+ const events = {
731
+ "Store.Updated": updatedCallback,
732
+ // Deleted is different as we need to return null
733
+ "Store.Deleted": async (evt) => {
734
+ if (!result.results.find(e => evt.object_id === e.getUuid()))
735
+ return;
736
+ result = await model.query(query, true, context);
737
+ return result;
738
+ },
739
+ "Store.Saved": async (evt) => {
740
+ // If object match the query and is not in the result and can be read by the user
741
+ if (queryInfo.eval(evt.object) && !queryInfo.getOffset() && evt.object.canAct(context, "get")) {
742
+ // Should check with the order by of the query to see if we need to recompute
743
+ result = await model.query(query, true, context);
744
+ return result;
745
+ }
746
+ return;
747
+ },
748
+ "Store.PatchUpdated": updatedCallback,
749
+ "Store.PartialUpdated": updatedCallback
750
+ };
751
+ return new EventIterator(model.store(), events, plural, result).iterate();
752
+ }
753
+ /**
754
+ *
755
+ * @param model
756
+ * @param uuid
757
+ * @param context
758
+ * @returns
759
+ */
760
+ async registerAsyncIterator(model, uuid, context, identifier) {
761
+ const updatedCallback = async (evt) => {
762
+ this.log("INFO", "Event from", evt.emitterId, evt.object_id);
763
+ if (evt.object_id !== uuid)
764
+ return;
765
+ // We rely on the cache of the store to get the full object
766
+ // We let the other listeners finish before returning the object
767
+ await new Promise(resolve => nextTick(resolve));
768
+ return model.ref(evt.object_id).get();
769
+ };
770
+ const events = {
771
+ "Store.Updated": updatedCallback,
772
+ // Deleted is different as we need to return null
773
+ "Store.Deleted": evt => {
774
+ if (evt.object_id !== uuid)
775
+ return;
776
+ return null;
777
+ },
778
+ "Store.PatchUpdated": updatedCallback,
779
+ "Store.PartialUpdated": updatedCallback
780
+ };
781
+ let modelInstance = await model.ref(uuid).get();
782
+ // Ensure we have the permission to get the object
783
+ if ((await modelInstance?.canAct(context, "get")) !== true) {
784
+ throw new GraphQLError("Permission denied", {
785
+ extensions: {
786
+ code: "PERMISSION_DENIED"
787
+ }
788
+ });
789
+ }
790
+ return new EventIterator(model.store(), events, identifier || model.getIdentifier(), modelInstance).iterate();
791
+ }
792
+ /**
793
+ *
794
+ * @param model
795
+ * @param uuid
796
+ * @param context
797
+ * @returns
798
+ */
799
+ async registerAsyncEventIterator(model, uuid, events, context, identifier) {
800
+ const updatedCallback = eventName => async (evt) => {
801
+ if (uuid === null || evt.object_id !== uuid)
802
+ return;
803
+ // We rely on the cache of the store to get the full object
804
+ // We let the other listeners finish before returning the object
805
+ return { latestEventTime: Date.now(), [eventName]: evt };
806
+ };
807
+ const eventsMap = {};
808
+ let modelInstance = uuid !== null ? await model.ref(uuid).get() : undefined;
809
+ events
810
+ .filter(e => model.authorizeClientEvent(e, context, modelInstance))
811
+ .forEach(e => (eventsMap[e] = updatedCallback(e)));
812
+ // Ensure we have the permission to listen to the object
813
+ if (Object.keys(eventsMap).length === 0) {
814
+ throw new GraphQLError("Permission denied", {
815
+ extensions: {
816
+ code: "PERMISSION_DENIED"
817
+ }
818
+ });
819
+ }
820
+ return new EventIterator(model.store(), eventsMap, identifier, { logout: { evt: "nok?" } }).iterate();
422
821
  }
423
822
  /**
424
823
  *
@@ -426,11 +825,12 @@ export class GraphQLService extends DomainService {
426
825
  * @param mutation
427
826
  * @returns
428
827
  */
429
- getGraphQLSchema(rootFields, mutations = {}) {
828
+ getGraphQLSchema(rootFields, mutations = {}, subscription = {}) {
430
829
  // Emit Webda.GraphQL.Schema to allow other services to contribute
431
830
  this.emit("Webda.GraphQL.Schema", {
432
831
  rootFields,
433
- mutations
832
+ mutations,
833
+ subscription
434
834
  });
435
835
  return new GraphQLSchema({
436
836
  query: new GraphQLObjectType({
@@ -438,6 +838,9 @@ export class GraphQLService extends DomainService {
438
838
  fields: rootFields
439
839
  }),
440
840
  types: Object.values(this.modelsMap),
841
+ subscription: Object.keys({ ...subscription }).length > 0
842
+ ? new GraphQLObjectType({ fields: { ...subscription }, name: "Subscription" })
843
+ : null,
441
844
  mutation: Object.keys(mutations).length > 0 ? new GraphQLObjectType({ fields: mutations, name: "Mutations" }) : null
442
845
  });
443
846
  }
@@ -458,6 +861,46 @@ export class GraphQLService extends DomainService {
458
861
  return req.context;
459
862
  }
460
863
  });
864
+ // Define the mechanism to handle the websocket
865
+ this.wsHandler = makeServer({
866
+ schema: this.schema,
867
+ context: async (req) => {
868
+ // @ts-ignore
869
+ return req.extra?.context || {};
870
+ }
871
+ });
872
+ this.wss.on("connection", async (socket, request) => {
873
+ // a new socket opened, let graphql-ws take over
874
+ const closed = this.wsHandler.opened({
875
+ protocol: socket.protocol, // will be validated
876
+ send: data => new Promise((resolve, reject) => {
877
+ socket.send(data, err => (err ? reject(err) : resolve()));
878
+ }), // control your data flow by timing the promise resolve
879
+ close: (code, reason) => socket.close(code, reason), // there are protocol standard closures
880
+ onMessage: cb => socket.on("message", async (event) => {
881
+ try {
882
+ // wait for the the operation to complete
883
+ // - if init message, waits for connect
884
+ // - if query/mutation, waits for result
885
+ // - if subscription, waits for complete
886
+ await cb(event.toString());
887
+ }
888
+ catch (err) {
889
+ // all errors that could be thrown during the
890
+ // execution of operations will be caught here
891
+ socket.close(CloseCode.InternalServerError, err.message);
892
+ }
893
+ })
894
+ },
895
+ // pass values to the `extra` field in the context
896
+ { socket, request, context: request.webdaContext });
897
+ this.log("INFO", "Socket once closed");
898
+ // notify server that the socket closed
899
+ socket.once("close", (code, reason) => {
900
+ this.log("INFO", "Socket closed - clean up Iterators");
901
+ closed(code, reason.toString());
902
+ });
903
+ });
461
904
  return this;
462
905
  }
463
906
  handleModel(model, name, context) {
@@ -479,7 +922,7 @@ export class GraphQLService extends DomainService {
479
922
  }
480
923
  else {
481
924
  ctx.writeHead(200, { "Content-Type": "text/html" });
482
- ctx.write(GraphIQL.replace("{{URL}}", httpContext.getAbsoluteUrl()));
925
+ ctx.write(GraphIQL.replace("{{URL}}", httpContext.getAbsoluteUrl()).replace("{{WSURL}}", httpContext.getAbsoluteUrl().replace("http", "ws")));
483
926
  }
484
927
  }
485
928
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { GraphQLScalarType } from "graphql";
2
+ export declare const AnyScalarType: GraphQLScalarType<any, any>;
@@ -0,0 +1,21 @@
1
+ import { GraphQLScalarType, Kind } from "graphql";
2
+ function coerceAny(value) {
3
+ return typeof value === "object" ? value : typeof value === "string" ? JSON.parse(value) : null;
4
+ }
5
+ export const AnyScalarType = new GraphQLScalarType({
6
+ name: "Object",
7
+ description: "Arbitrary object",
8
+ parseValue: coerceAny,
9
+ serialize: coerceAny,
10
+ parseLiteral: ast => {
11
+ switch (ast.kind) {
12
+ case Kind.STRING:
13
+ return JSON.parse(ast.value);
14
+ case Kind.OBJECT:
15
+ throw new Error(`Not sure what to do with OBJECT for ObjectScalarType`);
16
+ default:
17
+ return null;
18
+ }
19
+ }
20
+ });
21
+ //# sourceMappingURL=any.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"any.js","sourceRoot":"","sources":["../../src/types/any.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD,SAAS,SAAS,CAAC,KAAU;IAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClG,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC;IACjD,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,kBAAkB;IAC/B,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,GAAG,CAAC,EAAE;QAClB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,MAAM;gBACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,MAAM;gBACd,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { GraphQLScalarType } from "graphql";
2
+ export declare const DateScalar: GraphQLScalarType<Date, string>;
@@ -0,0 +1,26 @@
1
+ import { GraphQLScalarType, Kind } from "graphql";
2
+ export const DateScalar = new GraphQLScalarType({
3
+ name: "Date",
4
+ description: "Date custom scalar type",
5
+ serialize(value) {
6
+ if (value instanceof Date) {
7
+ return value.toISOString(); // Convert outgoing Date to integer for JSON
8
+ }
9
+ throw Error("GraphQL Date Scalar serializer expected a `Date` object");
10
+ },
11
+ parseValue(value) {
12
+ if (typeof value === "string") {
13
+ return new Date(value); // Convert incoming integer to Date
14
+ }
15
+ throw new Error("GraphQL Date Scalar parser expected a `string`");
16
+ },
17
+ parseLiteral(ast) {
18
+ if (ast.kind === Kind.STRING) {
19
+ // Convert hard-coded AST string to integer and then to Date
20
+ return new Date(ast.value);
21
+ }
22
+ // Invalid hard-coded value (not an integer)
23
+ return null;
24
+ }
25
+ });
26
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/types/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC;IAC9C,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,yBAAyB;IACtC,SAAS,CAAC,KAAK;QACb,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,4CAA4C;QAC1E,CAAC;QACD,MAAM,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,CAAC;IACD,UAAU,CAAC,KAAK;QACd,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC;QAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,YAAY,CAAC,GAAG;QACd,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,4DAA4D;YAC5D,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,4CAA4C;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { GraphQLScalarType } from "graphql";
2
+ export declare const GraphQLLong: GraphQLScalarType<number, number>;
@@ -0,0 +1,31 @@
1
+ import { GraphQLScalarType, Kind } from "graphql";
2
+ // Code from https://github.com/fibjs/fib-app/commit/dfb8421f80e5c6f806dfd62cb313cf544c42d60c
3
+ const MAX_LONG = Number.MAX_SAFE_INTEGER;
4
+ const MIN_LONG = Number.MIN_SAFE_INTEGER;
5
+ function coerceLong(value) {
6
+ if (value === "") {
7
+ throw new TypeError("Long cannot represent non 52-bit signed integer value: (empty string)");
8
+ }
9
+ const num = Number(value);
10
+ if (num === num && num <= MAX_LONG && num >= MIN_LONG) {
11
+ return num < 0 ? Math.ceil(num) : Math.floor(num);
12
+ }
13
+ throw new TypeError("Long cannot represent non 52-bit signed integer value: " + String(value));
14
+ }
15
+ function parseLiteral(ast) {
16
+ if (ast.kind === Kind.INT) {
17
+ const num = parseInt(ast.value, 10);
18
+ if (num <= MAX_LONG && num >= MIN_LONG) {
19
+ return num;
20
+ }
21
+ }
22
+ return null;
23
+ }
24
+ export const GraphQLLong = new GraphQLScalarType({
25
+ name: "Long",
26
+ description: "The `Long` scalar type represents 52-bit integers",
27
+ serialize: coerceLong,
28
+ parseValue: coerceLong,
29
+ parseLiteral: parseLiteral
30
+ });
31
+ //# sourceMappingURL=long.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"long.js","sourceRoot":"","sources":["../../src/types/long.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD,6FAA6F;AAC7F,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEzC,SAAS,UAAU,CAAC,KAAU;IAC5B,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,SAAS,CAAC,uEAAuE,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QACtD,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,yDAAyD,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,YAAY,CAAC,GAAQ;IAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YACvC,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;IAC/C,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,mDAAmD;IAChE,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,YAAY;CAC3B,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webda/graphql",
3
- "version": "3.6.2",
3
+ "version": "3.7.0",
4
4
  "description": "GraphQL endpoint for your Webda Application",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",
@@ -23,16 +23,19 @@
23
23
  "package.json"
24
24
  ],
25
25
  "dependencies": {
26
- "@webda/core": "^3.11.2",
26
+ "@webda/core": "^3.12.0",
27
+ "@webda/runtime": "^3.2.0",
27
28
  "graphql": "^16.6.0",
28
29
  "graphql-http": "^1.16.0",
29
- "json-schema": "^0.4.0"
30
+ "graphql-ws": "^5.14.2",
31
+ "json-schema": "^0.4.0",
32
+ "ws": "^8.14.2"
30
33
  },
31
34
  "devDependencies": {
32
35
  "@testdeck/mocha": "^0.3.3",
33
36
  "@types/node": "18.11.13",
34
- "@webda/shell": "^3.8.2",
35
- "c8": "^8.0.0",
37
+ "@webda/shell": "^3.9.0",
38
+ "c8": "^9.0.0",
36
39
  "glob": "^10.0.0",
37
40
  "js-beautify": "^1.14.7",
38
41
  "mocha": "^10.2.0",
@@ -73,5 +76,5 @@
73
76
  "engines": {
74
77
  "node": ">=18.0.0"
75
78
  },
76
- "gitHead": "51fc34da66e457166ae636c047785303f949fdce"
79
+ "gitHead": "167f6b86b33867ef2ab10cc02624bc0441965632"
77
80
  }
package/webda.module.json CHANGED
@@ -109,6 +109,10 @@
109
109
  "type": "boolean",
110
110
  "description": "Expose the schema"
111
111
  },
112
+ "globalSubscription": {
113
+ "type": "boolean",
114
+ "description": "Expose a aggregation of all available subscriptions"
115
+ },
112
116
  "openapi": {
113
117
  "type": "object",
114
118
  "additionalProperties": true
@@ -117,6 +121,7 @@
117
121
  "required": [
118
122
  "exposeGraphiQL",
119
123
  "exposeMe",
124
+ "globalSubscription",
120
125
  "maxOperationsPerRequest",
121
126
  "models",
122
127
  "nameTransfomer",