@webda/graphql 3.6.2 → 3.8.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
+ };
476
+ }
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
+ };
379
501
  }
380
- rootFields[this.transformName(this.app.getModelPlural(i).split("/").pop())] = {
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);
518
+ }
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);
389
533
  }
390
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,243 @@ 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
+ const services = this.getWebda().getServices();
660
+ for (let i in services) {
661
+ if (services[i]?.getClientEvents === undefined) {
662
+ continue;
663
+ }
664
+ const events = services[i]?.getClientEvents() || [];
665
+ if (events.length === 0) {
666
+ continue;
667
+ }
668
+ const fields = {};
669
+ events.forEach(e => {
670
+ fields[e] = { type: AnyScalarType };
671
+ });
672
+ const id = `${i}Events`;
673
+ subscriptions[id] = {
674
+ type: new GraphQLObjectType({
675
+ fields,
676
+ name: id
677
+ }),
678
+ subscribe: async (_source, args, context, info) => {
679
+ const fieldsMap = {};
680
+ (info.fieldNodes[0].selectionSet?.selections || [])
681
+ .filter(node => node.kind === "Field")
682
+ .map(n => n.name.value)
683
+ .forEach(n => (fieldsMap[n] = true));
684
+ return new EventIterator(services[i], fieldsMap, id, {}).iterate();
685
+ }
686
+ };
687
+ }
688
+ // Copy the rootFields without resolver
689
+ for (let i in rootFields) {
690
+ subscriptions[i] ?? (subscriptions[i] = { ...rootFields[i], resolve: undefined });
691
+ }
692
+ if (this.parameters.globalSubscription) {
693
+ // Create global type based on all previous subscriptions
694
+ subscriptions["Aggregate"] = {
695
+ type: new GraphQLObjectType({
696
+ fields: subscriptions,
697
+ name: "AggregateSubscriptions"
698
+ }),
699
+ subscribe: async (_source, args2, context, info) => {
700
+ let iterators = {};
701
+ let p = [];
702
+ // Check if know all fields already
703
+ for (let field of (info.fieldNodes[0].selectionSet?.selections || []).filter(node => node.kind === "Field")) {
704
+ const name = field.name.value;
705
+ const args = {};
706
+ field.arguments?.forEach(arg => {
707
+ // @ts-ignore
708
+ args[arg.name.value] = arg.value.value;
709
+ });
710
+ p.push((async () => {
711
+ iterators[name] = await subscriptions[name].subscribe(_source, args, context, {
712
+ fieldNodes: [field] // Abusing a bit the builder currently
713
+ });
714
+ })());
715
+ }
716
+ await Promise.all(p);
717
+ return MergedIterator.iterate({
718
+ Aggregate: MergedIterator.iterate(iterators, true, data => {
719
+ return Object.values(data).pop();
720
+ })
721
+ });
722
+ }
723
+ };
724
+ }
725
+ this.schema = this.getGraphQLSchema(rootFields, mutations, subscriptions);
726
+ }
727
+ /**
728
+ * Return the events to subscribe to
729
+ * @param info
730
+ * @returns
731
+ */
732
+ getSubscribedEvents(info) {
733
+ return (info.fieldNodes[0].selectionSet?.selections || [])
734
+ .filter(node => node.kind === "Field" && node.name.value !== "latestEventTime")
735
+ .map(n => n.name.value);
736
+ }
737
+ /**
738
+ *
739
+ * @param model
740
+ * @param arg1
741
+ * @param context
742
+ * @returns
743
+ */
744
+ async registerAsyncIteratorQuery(model, plural, query, context) {
745
+ let result = await model.query(query, true, context);
746
+ let queryInfo = new WebdaQL.QueryValidator(query);
747
+ const updatedCallback = async (evt) => {
748
+ this.log("INFO", "Event from", evt.emitterId, evt.object_id);
749
+ if (!result.results.find(e => evt.object_id === e.getUuid()))
750
+ return;
751
+ // We rely on the cache of the store to get the full object
752
+ // We let the other listeners finish before returning the object
753
+ await new Promise(resolve => nextTick(resolve));
754
+ return {
755
+ continuationToken: result.continuationToken,
756
+ results: await Promise.all(result.results.map(r => (r.getUuid() === evt.object_id ? model.ref(evt.object_id).get() : r)))
757
+ };
758
+ };
759
+ const events = {
760
+ "Store.Updated": updatedCallback,
761
+ // Deleted is different as we need to return null
762
+ "Store.Deleted": async (evt) => {
763
+ if (!result.results.find(e => evt.object_id === e.getUuid()))
764
+ return;
765
+ result = await model.query(query, true, context);
766
+ return result;
767
+ },
768
+ "Store.Saved": async (evt) => {
769
+ // If object match the query and is not in the result and can be read by the user
770
+ if (queryInfo.eval(evt.object) && !queryInfo.getOffset() && evt.object.canAct(context, "get")) {
771
+ // Should check with the order by of the query to see if we need to recompute
772
+ result = await model.query(query, true, context);
773
+ return result;
774
+ }
775
+ return;
776
+ },
777
+ "Store.PatchUpdated": updatedCallback,
778
+ "Store.PartialUpdated": updatedCallback
779
+ };
780
+ return new EventIterator(model.store(), events, plural, result).iterate();
781
+ }
782
+ /**
783
+ *
784
+ * @param model
785
+ * @param uuid
786
+ * @param context
787
+ * @returns
788
+ */
789
+ async registerAsyncIterator(model, uuid, context, identifier) {
790
+ const updatedCallback = async (evt) => {
791
+ this.log("INFO", "Event from", evt.emitterId, evt.object_id);
792
+ if (evt.object_id !== uuid)
793
+ return;
794
+ // We rely on the cache of the store to get the full object
795
+ // We let the other listeners finish before returning the object
796
+ await new Promise(resolve => nextTick(resolve));
797
+ return model.ref(evt.object_id).get();
798
+ };
799
+ const events = {
800
+ "Store.Updated": updatedCallback,
801
+ // Deleted is different as we need to return null
802
+ "Store.Deleted": evt => {
803
+ if (evt.object_id !== uuid)
804
+ return;
805
+ return null;
806
+ },
807
+ "Store.PatchUpdated": updatedCallback,
808
+ "Store.PartialUpdated": updatedCallback
809
+ };
810
+ let modelInstance = await model.ref(uuid).get();
811
+ // Ensure we have the permission to get the object
812
+ if ((await modelInstance?.canAct(context, "get")) !== true) {
813
+ throw new GraphQLError("Permission denied", {
814
+ extensions: {
815
+ code: "PERMISSION_DENIED"
816
+ }
817
+ });
818
+ }
819
+ return new EventIterator(model.store(), events, identifier || model.getIdentifier(), modelInstance).iterate();
820
+ }
821
+ /**
822
+ *
823
+ * @param model
824
+ * @param uuid
825
+ * @param context
826
+ * @returns
827
+ */
828
+ async registerAsyncEventIterator(model, uuid, events, context, identifier) {
829
+ const updatedCallback = eventName => async (evt) => {
830
+ if (uuid === null || evt.object_id !== uuid)
831
+ return;
832
+ // We rely on the cache of the store to get the full object
833
+ // We let the other listeners finish before returning the object
834
+ return { latestEventTime: Date.now(), [eventName]: evt };
835
+ };
836
+ const eventsMap = {};
837
+ let modelInstance = uuid !== null ? await model.ref(uuid).get() : undefined;
838
+ events
839
+ .filter(e => model.authorizeClientEvent(e, context, modelInstance))
840
+ .forEach(e => (eventsMap[e] = updatedCallback(e)));
841
+ // Ensure we have the permission to listen to the object
842
+ if (Object.keys(eventsMap).length === 0) {
843
+ throw new GraphQLError("Permission denied", {
844
+ extensions: {
845
+ code: "PERMISSION_DENIED"
846
+ }
847
+ });
848
+ }
849
+ return new EventIterator(model.store(), eventsMap, identifier, { logout: { evt: "nok?" } }).iterate();
422
850
  }
423
851
  /**
424
852
  *
@@ -426,11 +854,12 @@ export class GraphQLService extends DomainService {
426
854
  * @param mutation
427
855
  * @returns
428
856
  */
429
- getGraphQLSchema(rootFields, mutations = {}) {
857
+ getGraphQLSchema(rootFields, mutations = {}, subscription = {}) {
430
858
  // Emit Webda.GraphQL.Schema to allow other services to contribute
431
859
  this.emit("Webda.GraphQL.Schema", {
432
860
  rootFields,
433
- mutations
861
+ mutations,
862
+ subscription
434
863
  });
435
864
  return new GraphQLSchema({
436
865
  query: new GraphQLObjectType({
@@ -438,6 +867,9 @@ export class GraphQLService extends DomainService {
438
867
  fields: rootFields
439
868
  }),
440
869
  types: Object.values(this.modelsMap),
870
+ subscription: Object.keys({ ...subscription }).length > 0
871
+ ? new GraphQLObjectType({ fields: { ...subscription }, name: "Subscription" })
872
+ : null,
441
873
  mutation: Object.keys(mutations).length > 0 ? new GraphQLObjectType({ fields: mutations, name: "Mutations" }) : null
442
874
  });
443
875
  }
@@ -458,6 +890,46 @@ export class GraphQLService extends DomainService {
458
890
  return req.context;
459
891
  }
460
892
  });
893
+ // Define the mechanism to handle the websocket
894
+ this.wsHandler = makeServer({
895
+ schema: this.schema,
896
+ context: async (req) => {
897
+ // @ts-ignore
898
+ return req.extra?.context || {};
899
+ }
900
+ });
901
+ this.wss.on("connection", async (socket, request) => {
902
+ // a new socket opened, let graphql-ws take over
903
+ const closed = this.wsHandler.opened({
904
+ protocol: socket.protocol, // will be validated
905
+ send: data => new Promise((resolve, reject) => {
906
+ socket.send(data, err => (err ? reject(err) : resolve()));
907
+ }), // control your data flow by timing the promise resolve
908
+ close: (code, reason) => socket.close(code, reason), // there are protocol standard closures
909
+ onMessage: cb => socket.on("message", async (event) => {
910
+ try {
911
+ // wait for the the operation to complete
912
+ // - if init message, waits for connect
913
+ // - if query/mutation, waits for result
914
+ // - if subscription, waits for complete
915
+ await cb(event.toString());
916
+ }
917
+ catch (err) {
918
+ // all errors that could be thrown during the
919
+ // execution of operations will be caught here
920
+ socket.close(CloseCode.InternalServerError, err.message);
921
+ }
922
+ })
923
+ },
924
+ // pass values to the `extra` field in the context
925
+ { socket, request, context: request.webdaContext });
926
+ this.log("INFO", "Socket once closed");
927
+ // notify server that the socket closed
928
+ socket.once("close", (code, reason) => {
929
+ this.log("INFO", "Socket closed - clean up Iterators");
930
+ closed(code, reason.toString());
931
+ });
932
+ });
461
933
  return this;
462
934
  }
463
935
  handleModel(model, name, context) {
@@ -479,7 +951,7 @@ export class GraphQLService extends DomainService {
479
951
  }
480
952
  else {
481
953
  ctx.writeHead(200, { "Content-Type": "text/html" });
482
- ctx.write(GraphIQL.replace("{{URL}}", httpContext.getAbsoluteUrl()));
954
+ ctx.write(GraphIQL.replace("{{URL}}", httpContext.getAbsoluteUrl()).replace("{{WSURL}}", httpContext.getAbsoluteUrl().replace("http", "ws")));
483
955
  }
484
956
  }
485
957
  /**
@@ -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.8.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.13.0",
27
+ "@webda/runtime": "^3.3.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.1",
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": "f0a5fb3352ec67e923be51b7c49c8e9c653d4630"
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",