@webresto/graphql 1.3.6 → 1.3.8

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.
Files changed (142) hide show
  1. package/.gitattributes +2 -0
  2. package/.gitlab-ci.yml +18 -0
  3. package/.vscode/extensions.json +5 -0
  4. package/docs/actions.md +25 -0
  5. package/docs/authorization.md +215 -0
  6. package/docs/captcha.md +71 -0
  7. package/docs/device-id.md +30 -0
  8. package/docs/messages.md +10 -0
  9. package/docs/user.md +54 -0
  10. package/index.d.ts +0 -1
  11. package/index.js +6 -2
  12. package/index.ts +2 -2
  13. package/lib/afterHook.js +8 -0
  14. package/lib/afterHook.ts +9 -0
  15. package/lib/bindTranslations.d.ts +1 -0
  16. package/lib/bindTranslations.js +40 -0
  17. package/lib/bindTranslations.ts +39 -0
  18. package/lib/defaults.d.ts +1 -0
  19. package/lib/defaults.js +49 -10
  20. package/lib/defaults.ts +55 -0
  21. package/lib/eventHelper.d.ts +14 -5
  22. package/lib/eventHelper.js +28 -9
  23. package/lib/eventHelper.ts +41 -8
  24. package/lib/getRecomended.d.ts +1 -0
  25. package/lib/getRecomended.js +29 -0
  26. package/lib/getRecomended.ts +31 -0
  27. package/lib/graphqlHelper.d.ts +3 -4
  28. package/lib/graphqlHelper.js +184 -73
  29. package/lib/graphqlHelper.ts +329 -186
  30. package/lib/jwt.d.ts +10 -0
  31. package/lib/jwt.js +43 -0
  32. package/lib/jwt.ts +61 -0
  33. package/package.json +13 -6
  34. package/src/additionalResolvers.d.ts +72 -9
  35. package/src/additionalResolvers.js +93 -24
  36. package/src/additionalResolvers.ts +105 -34
  37. package/src/graphql.d.ts +5 -3
  38. package/src/graphql.js +170 -37
  39. package/src/graphql.ts +210 -60
  40. package/src/resolvers/bonusProgram.d.ts +32 -0
  41. package/src/resolvers/bonusProgram.js +65 -0
  42. package/src/resolvers/bonusProgram.ts +79 -0
  43. package/src/resolvers/captcha.d.ts +11 -0
  44. package/src/resolvers/captcha.js +19 -0
  45. package/src/resolvers/captcha.ts +16 -0
  46. package/src/resolvers/checkout.d.ts +43 -14
  47. package/src/resolvers/checkout.js +172 -122
  48. package/src/resolvers/checkout.ts +218 -142
  49. package/src/resolvers/dishAndModifier.js +8 -4
  50. package/src/resolvers/dishAndModifier.ts +4 -0
  51. package/src/resolvers/error.d.ts +9 -0
  52. package/src/resolvers/error.js +21 -0
  53. package/src/resolvers/error.ts +21 -0
  54. package/src/resolvers/menu.d.ts +9 -0
  55. package/src/resolvers/menu.js +12 -0
  56. package/src/resolvers/menu.ts +10 -0
  57. package/src/resolvers/order.d.ts +527 -0
  58. package/src/resolvers/order.js +349 -0
  59. package/src/resolvers/order.ts +435 -0
  60. package/src/resolvers/paymentMethod.js +7 -3
  61. package/src/resolvers/paymentMethod.ts +9 -5
  62. package/src/resolvers/pickupPoint.d.ts +1 -0
  63. package/src/resolvers/pickupPoint.js +24 -0
  64. package/src/resolvers/pickupPoint.ts +23 -0
  65. package/src/resolvers/recomended.d.ts +13 -0
  66. package/src/resolvers/recomended.js +80 -0
  67. package/src/resolvers/recomended.ts +86 -0
  68. package/src/resolvers/restrictions.d.ts +37 -1
  69. package/src/resolvers/restrictions.js +100 -15
  70. package/src/resolvers/restrictions.ts +106 -14
  71. package/src/resolvers/streets.d.ts +1 -1
  72. package/src/resolvers/streets.js +1 -4
  73. package/src/resolvers/streets.ts +1 -3
  74. package/src/resolvers/subscriptions.d.ts +4 -4
  75. package/src/resolvers/subscriptions.js +49 -12
  76. package/src/resolvers/subscriptions.ts +59 -14
  77. package/src/resolvers/telemetry.d.ts +14 -0
  78. package/src/resolvers/telemetry.js +25 -0
  79. package/src/resolvers/telemetry.ts +24 -0
  80. package/src/resolvers/user.d.ts +82 -0
  81. package/src/resolvers/user.js +416 -0
  82. package/src/resolvers/user.ts +621 -0
  83. package/src/resolvers/userLocation.d.ts +53 -0
  84. package/src/resolvers/userLocation.js +74 -0
  85. package/src/resolvers/userLocation.ts +125 -0
  86. package/src/resolvers/userOTPrequest.d.ts +21 -0
  87. package/src/resolvers/userOTPrequest.js +57 -0
  88. package/src/resolvers/userOTPrequest.ts +75 -0
  89. package/test/e2e_helper.js +157 -0
  90. package/test/e2e_helper.ts +212 -0
  91. package/test/fixture/config/i18n.js +7 -20
  92. package/test/fixture/config/locales/de.json +1 -0
  93. package/test/fixture/config/locales/en.json +10 -0
  94. package/test/fixture/config/locales/es.json +3 -0
  95. package/test/fixture/config/locales/fr.json +1 -0
  96. package/test/fixture/config/log.js +1 -1
  97. package/test/fixture/package.json +5 -6
  98. package/test/fixture/patches/rttc+10.0.1.patch +17 -0
  99. package/test/integration/captcha.test.js +20 -0
  100. package/test/integration/captcha.test.ts +25 -0
  101. package/test/integration/dish.test.js +35 -0
  102. package/test/integration/dish.test.ts +43 -0
  103. package/test/integration/graphql.test.js +5 -2
  104. package/test/integration/graphql.test.ts +2 -4
  105. package/test/integration/images.test.js +35 -0
  106. package/test/integration/images.test.ts +40 -0
  107. package/test/integration/locale.test.js +26 -0
  108. package/test/integration/locale.test.ts +32 -0
  109. package/test/integration/order.test.js +56 -43
  110. package/test/integration/order.test.ts +59 -59
  111. package/test/integration/subscriptions.test.js +136 -0
  112. package/test/integration/subscriptions.test.ts +162 -0
  113. package/test/integration/user.test.js +249 -0
  114. package/test/integration/user.test.ts +299 -0
  115. package/test/unit/first.test.js +4 -2
  116. package/test/unit/first.test.ts +1 -1
  117. package/test/unit/get-recomended.test.js +56 -0
  118. package/test/unit/get-recomended.test.ts +63 -0
  119. package/translations/de.json +2 -0
  120. package/translations/en.json +3 -0
  121. package/translations/es.json +3 -0
  122. package/translations/fr.json +2 -0
  123. package/translations/ru.json +36 -0
  124. package/tsconfig.json +20 -5
  125. package/types/global.d.ts +30 -0
  126. package/types/global.js +2 -0
  127. package/types/global.ts +31 -0
  128. package/types/primitives.d.ts +19 -0
  129. package/types/references.d.ts +1 -0
  130. package/types/restoGraphQLConfig.d.ts +13 -0
  131. package/lib/afterHook.ts___graphql-transport-ws +0 -138
  132. package/lib/afterHook.ts___graphql-ws +0 -133
  133. package/lib/errorWrapper.d.ts +0 -4
  134. package/lib/errorWrapper.js +0 -13
  135. package/lib/errorWrapper.ts +0 -12
  136. package/notes.md +0 -1976
  137. package/src/resolvers/cart.d.ts +0 -343
  138. package/src/resolvers/cart.js +0 -196
  139. package/src/resolvers/cart.ts +0 -277
  140. package/test/fixture/config/connections.js +0 -9
  141. package/test/integration/sails_not_crash.test.js +0 -3
  142. package/test/integration/sails_not_crash.test.ts +0 -3
@@ -1,22 +1,18 @@
1
1
  "use strict";
2
- /// <reference path="../../core/libs/globalTypes.ts"/>
3
- var _a;
4
2
  Object.defineProperty(exports, "__esModule", { value: true });
5
3
  exports.setWhiteList = exports.addModelResolver = exports.addDirResolvers = exports.addAllSailsModels = exports.addToReplaceList = exports.addCustomField = exports.addToBlackList = exports.getSchema = exports.addResolvers = exports.addType = exports.addModel = void 0;
6
4
  const _ = require("lodash");
7
5
  const worktime_1 = require("@webresto/worktime");
8
- const getEmitter_1 = require("@webresto/core/libs/getEmitter");
9
6
  const WLCriteria = require("waterline-criteria");
10
- const fs = require('fs');
11
- const path = require('path');
7
+ const jwt_1 = require("./jwt");
8
+ const fs = require("fs");
9
+ const path = require("path");
12
10
  const scalarTypes = {
13
11
  string: "String",
14
- text: "String",
15
- date: "String",
16
- datetime: "String",
17
- integer: "Int",
18
- float: "Float",
12
+ number: "Float",
19
13
  boolean: "Boolean",
14
+ // json: "Json",
15
+ // "array": "Array",
20
16
  };
21
17
  /*
22
18
  const typeDefsExample = {
@@ -78,8 +74,8 @@ function addModel(modelName) {
78
74
  models.add(modelName.toLowerCase());
79
75
  }
80
76
  exports.addModel = addModel;
81
- function addType(typeString) {
82
- schemaTypes.push(typeString);
77
+ function addType(type) {
78
+ schemaTypes.push(type);
83
79
  }
84
80
  exports.addType = addType;
85
81
  /**
@@ -87,7 +83,7 @@ exports.addType = addType;
87
83
  *
88
84
  * @param resolvers
89
85
  * resolverExample = {
90
- * def: "user(id: String)",
86
+ * def: "user(id: string)",
91
87
  * fn: function (parent, args, context) {
92
88
  * return User.find({id: args.id})
93
89
  * }
@@ -127,7 +123,7 @@ function addToBlackList(list) {
127
123
  exports.addToBlackList = addToBlackList;
128
124
  /**
129
125
  * Добавляет в указаную модель новое поле
130
- * Пример: addCustomField("Order", "customField: String")
126
+ * Пример: addCustomField("Order", "customField: string")
131
127
  *
132
128
  * @param model string
133
129
  * @param field string
@@ -173,8 +169,7 @@ exports.addDirResolvers = addDirResolvers;
173
169
  */
174
170
  function getSchema() {
175
171
  Object.keys(whiteList).forEach(modelname => {
176
- var _a, _b;
177
- if (((_b = (_a = sails.models[modelname]) === null || _a === void 0 ? void 0 : _a.graphql) === null || _b === void 0 ? void 0 : _b.public) !== false) {
172
+ if (sails.models[modelname]?.graphql?.public !== false) {
178
173
  addModelResolver(modelname);
179
174
  }
180
175
  });
@@ -208,25 +203,34 @@ function createType(model) {
208
203
  }
209
204
  let scalarType;
210
205
  if (attributes[prop].type) {
211
- if (scalarTypes[attributes[prop].type.toLowerCase()]) {
212
- scalarType = scalarTypes[attributes[prop].type.toLowerCase()];
206
+ // TODO: make method add AddModelFieldType(path, type) for pass custom type for specific model
207
+ if (modelName.toLowerCase() === "user" && prop === "phone") {
208
+ scalarType = "Phone";
213
209
  }
214
210
  else {
215
- scalarType = firstLetterToUpperCase(attributes[prop].type);
216
- schemaScalars.add(scalarType);
211
+ if (scalarTypes[attributes[prop].type.toLowerCase()]) {
212
+ scalarType = scalarTypes[attributes[prop].type.toLowerCase()];
213
+ }
214
+ else {
215
+ scalarType = firstLetterToUpperCase(attributes[prop].type);
216
+ schemaScalars.add(scalarType);
217
+ }
217
218
  }
218
219
  type += ' ' + prop + ': ' + scalarType + '\n';
219
220
  }
220
221
  // MODEL SCHEMA GENERATION
221
222
  if (attributes[prop].model) {
222
223
  let relationModel = sails.models[attributes[prop].model.toLowerCase()];
223
- scalarType = scalarTypes[relationModel.attributes[relationModel.primaryKey].type];
224
+ scalarType = scalarTypes[relationModel.attributes[relationModel.primaryKey].type.toLowerCase()];
224
225
  const name = sails.models[attributes[prop].model.toLowerCase()].globalId;
225
226
  type += ` ${prop}: ${name}\n`;
227
+ // Virtual Id field
228
+ type += ` ${prop}Id: ${scalarType}\n`;
226
229
  }
227
230
  // COLLECTION SCHEMA GENERATION
228
231
  if (attributes[prop].collection) {
229
- scalarType = scalarTypes[attributes[sails.models[attributes[prop].collection.toLowerCase()].primaryKey].type.toLowerCase()];
232
+ let collectionModel = sails.models[attributes[prop].collection.toLowerCase()];
233
+ scalarType = scalarTypes[collectionModel.attributes[collectionModel.primaryKey].type.toLowerCase()];
230
234
  const name = sails.models[attributes[prop].collection.toLowerCase()].globalId;
231
235
  type += ` ${prop}: [${name}]\n`;
232
236
  }
@@ -235,7 +239,7 @@ function createType(model) {
235
239
  type += ` ${customFields[modelName]}\n`;
236
240
  }
237
241
  if (!attributes.customData) {
238
- type += '""" autogenerated """ customData: Json';
242
+ type += `""" [autogenerated] ${isAuthRequired(modelName) ? '\n[auth required]' : ''}""" customData: Json`;
239
243
  }
240
244
  type += '}\n';
241
245
  return type;
@@ -299,9 +303,8 @@ function createSchema(typeDefsObj) {
299
303
  const whiteList = {
300
304
  // group: ['subscription', 'query'] // order - modelname , 'subscription' - resolver type
301
305
  };
302
- const userAuth = typeof ((_a = sails.config.restographql) === null || _a === void 0 ? void 0 : _a.authService) === 'function' ? sails.config.restographql.authService : null;
303
306
  let modelsResolvers = { Query: {} };
304
- const { withFilter } = require("apollo-server");
307
+ const apollo_server_1 = require("apollo-server");
305
308
  /**
306
309
  * Патчит waterline criteria во время автогенерации
307
310
  *
@@ -360,38 +363,60 @@ function addModelResolver(modelname) {
360
363
  models.add(modelname); // make schema Type for Model
361
364
  const methodName = firstLetterToLowerCase(modelName);
362
365
  let resolverQuery = {
363
- def: `""" autogenerated """ ${methodName}(criteria: Json): [${modelName}]`,
366
+ def: `""" [autogenerated] ${isAuthRequired(modelname) ? '\n[auth required]' : ''}""" ${methodName}(criteria: Json, skip: Int, limit: Int, sort: String): [${modelName}]`,
364
367
  fn: async function (parent, args, context) {
365
368
  let criteria = args.criteria || {};
366
369
  criteria = sanitizeCriteria(modelname, criteria);
367
370
  // If model has User field need auth
368
- if (sails.models[modelname].attributes.user) {
369
- if (userAuth) {
370
- let user = await userAuth(context.connectionParams.authorization);
371
- if (user.id) {
372
- criteria.user = user.id;
371
+ if (isAuthRequired(modelName)) {
372
+ let auth = await jwt_1.JWTAuth.verify(context.connectionParams.authorization);
373
+ if (auth.userId && UserDevice.checkSession(auth.sessionId, auth.userId, { lastIP: "IP", userAgent: context.connectionParams["user-agent"] })) {
374
+ if (modelName.toLowerCase() === "user") {
375
+ criteria.id = auth.userId;
376
+ }
377
+ else {
378
+ criteria.user = auth.userId;
373
379
  }
374
- else
375
- return null;
376
380
  }
377
381
  else {
378
- return null;
382
+ throw 'Authorization failed';
379
383
  }
380
384
  }
381
- let query = { where: criteria };
385
+ let query;
386
+ if (criteria.where === undefined) {
387
+ query = { where: criteria };
388
+ }
389
+ else {
390
+ query = criteria;
391
+ }
382
392
  //sorting
383
- if (sails.models[modelname].attributes.order) {
384
- query.sort = 'order ASC';
393
+ if (sails.models[modelname].attributes.sortOrder) {
394
+ query.sort = 'sortOrder ASC';
385
395
  }
386
- let result = await sails.models[modelname].find(query);
387
- getEmitter_1.default().emit(`graphql-query-${modelname}`, result);
388
- //workTime filter
389
- if (sails.models[modelname].attributes.workTime) {
396
+ let ORMrequest = sails.models[modelname].find(query);
397
+ if (args.skip) {
398
+ ORMrequest.skip(args.skip);
399
+ }
400
+ if (args.limit) {
401
+ ORMrequest.limit(args.limit);
402
+ }
403
+ if (args.sort) {
404
+ ORMrequest.sort(args.sort);
405
+ }
406
+ else {
407
+ if (sails.models[modelname].attributes.sortOrder) {
408
+ ORMrequest.sort('sortOrder ASC');
409
+ }
410
+ }
411
+ let result = await ORMrequest;
412
+ emitter.emit(`graphql-query-${modelname}`, result);
413
+ //worktime filter
414
+ if (sails.models[modelname].attributes.worktime) {
390
415
  result = result.filter(record => {
391
- if (!record.workTime)
416
+ if (!record.worktime)
392
417
  return true;
393
418
  try {
394
- return (worktime_1.WorkTimeValidator.isWorkNow({ workTime: record.workTime })).workNow;
419
+ return (worktime_1.WorkTimeValidator.isWorkNow({ worktime: record.worktime })).workNow;
395
420
  }
396
421
  catch (error) {
397
422
  sails.log.error("Graphql > helper > error: ", error);
@@ -399,12 +424,58 @@ function addModelResolver(modelname) {
399
424
  });
400
425
  }
401
426
  result.forEach(item => {
402
- getEmitter_1.default().emit(`http-api:before-send-${modelname.toLowerCase()}`, item);
427
+ emitter.emit(`http-api:before-send-${modelname.toLowerCase()}`, item);
403
428
  });
404
429
  return result;
405
430
  },
406
431
  };
407
432
  modelsResolvers.Query[methodName] = resolverQuery;
433
+ let resolverQueryCount = {
434
+ def: `""" [autogenerated] ${isAuthRequired(modelname) ? '\n[auth required]' : ''}""" ${methodName}Count(criteria: Json): Int`,
435
+ fn: async function (parent, args, context) {
436
+ let criteria = args.criteria || {};
437
+ criteria = sanitizeCriteria(modelname, criteria);
438
+ // If model has User field need auth
439
+ if (isAuthRequired(modelName)) {
440
+ let auth = await jwt_1.JWTAuth.verify(context.connectionParams.authorization);
441
+ if (auth.userId && UserDevice.checkSession(auth.sessionId, auth.userId, { lastIP: "IP", userAgent: context.connectionParams["user-agent"] })) {
442
+ if (modelName.toLowerCase() === "user") {
443
+ criteria.id = auth.userId;
444
+ }
445
+ else {
446
+ criteria.user = auth.userId;
447
+ }
448
+ }
449
+ else {
450
+ throw 'Authorization failed';
451
+ }
452
+ }
453
+ let query;
454
+ if (criteria.where === undefined) {
455
+ query = { where: criteria };
456
+ }
457
+ else {
458
+ query = criteria;
459
+ }
460
+ let ORMrequest = sails.models[modelname].find(query);
461
+ let result = await ORMrequest;
462
+ //worktime filter
463
+ if (sails.models[modelname].attributes.worktime) {
464
+ result = result.filter(record => {
465
+ if (!record.worktime)
466
+ return true;
467
+ try {
468
+ return (worktime_1.WorkTimeValidator.isWorkNow({ worktime: record.worktime })).workNow;
469
+ }
470
+ catch (error) {
471
+ sails.log.error("Graphql > helper > error: ", error);
472
+ }
473
+ });
474
+ }
475
+ return result.length;
476
+ },
477
+ };
478
+ modelsResolvers.Query[`${methodName}Count`] = resolverQueryCount;
408
479
  }
409
480
  // Model fields resolvers
410
481
  let resolvers = {};
@@ -434,37 +505,74 @@ function addModelResolver(modelname) {
434
505
  case "model":
435
506
  resolvers[key] = async (parent, args, context) => {
436
507
  criteria[relationKey] = parent[key];
508
+ // Check access rights
509
+ if (isAuthRequired(modelAttribute[modelRelationType])) {
510
+ let auth = await jwt_1.JWTAuth.verify(context.connectionParams.authorization);
511
+ if (auth.userId && UserDevice.checkSession(auth.sessionId, auth.userId, { lastIP: "IP", userAgent: context.connectionParams["user-agent"] })) {
512
+ if (modelName.toLowerCase() === "user") {
513
+ criteria["id"] = auth.userId;
514
+ }
515
+ else {
516
+ criteria["user"] = auth.userId;
517
+ }
518
+ }
519
+ else {
520
+ throw 'Authorization failed';
521
+ }
522
+ }
437
523
  let result = await sails.models[modelAttribute[modelRelationType]].findOne(criteria);
438
524
  // TODO: this need only for support legacy patching (discount)
439
- getEmitter_1.default().emit(`http-api:before-send-${modelAttribute.model.toLowerCase()}`, result);
525
+ emitter.emit(`http-api:before-send-${modelAttribute.model.toLowerCase()}`, result);
440
526
  // celan if not work time
441
- if (result && result.workTime && !worktime_1.WorkTimeValidator.isWorkNow({ workTime: result.workTime }).workNow) {
527
+ if (result && result.worktime && !worktime_1.WorkTimeValidator.isWorkNow({ worktime: result.worktime }).workNow) {
442
528
  result = null;
443
529
  }
530
+ return result;
531
+ };
532
+ // add virtual ids
533
+ resolvers[`${key}Id`] = async (parent, args, context) => {
534
+ return parent && parent[key];
444
535
  };
445
536
  return;
446
537
  case "collection":
447
538
  resolvers[key] = async (parent, args, context) => {
448
- let subcriteria = {};
449
- let subquery = { where: criteria };
450
- //sorting
451
- if (sails.models[modelname].attributes.order) {
452
- subquery.sort = 'order ASC';
539
+ let parentPrimaryKey = sails.models[modelname].primaryKey;
540
+ let criteria = {};
541
+ criteria[relationKey] = parent[parentPrimaryKey];
542
+ // Check access rights
543
+ if (isAuthRequired(modelAttribute[modelRelationType])) {
544
+ let auth = await jwt_1.JWTAuth.verify(context.connectionParams.authorization);
545
+ if (auth.userId && UserDevice.checkSession(auth.sessionId, auth.userId, { lastIP: "IP", userAgent: context.connectionParams["user-agent"] })) {
546
+ if (modelName.toLowerCase() === "user") {
547
+ criteria["id"] = auth.userId;
548
+ }
549
+ else {
550
+ criteria["user"] = auth.userId;
551
+ }
552
+ }
553
+ else {
554
+ throw 'Authorization failed';
555
+ }
556
+ }
557
+ let result = null;
558
+ result = (await sails.models[modelname].findOne({ id: parent.id }).populate(key))[key];
559
+ if (result && sails.models[modelAttribute[modelRelationType]].attributes.sortOrder) {
560
+ result.sort((a, b) => a.sortOrder - b.sortOrder);
453
561
  }
454
- let result = (await sails.models[modelname].findOne({ id: parent.id }).populate(key, subquery));
455
- result = result ? result[key] : null;
562
+ if (!result)
563
+ result = [];
456
564
  // TODO: this need only for support legacy patching (discount)
457
565
  if (result && result.length) {
458
566
  result.forEach(item => {
459
- getEmitter_1.default().emit(`http-api:before-send-${modelAttribute.collection.toLowerCase()}`, item);
567
+ emitter.emit(`http-api:before-send-${modelAttribute.collection.toLowerCase()}`, item);
460
568
  });
461
569
  }
462
- if (sails.models[modelname].attributes.workTime && Array.isArray(result)) {
570
+ if (sails.models[modelAttribute[modelRelationType]].attributes.worktime && Array.isArray(result) && result.length > 0) {
463
571
  result = result.filter(record => {
464
- if (!record.workTime)
572
+ if (!record.worktime)
465
573
  return true;
466
574
  try {
467
- return (worktime_1.WorkTimeValidator.isWorkNow({ workTime: record.workTime })).workNow;
575
+ return (worktime_1.WorkTimeValidator.isWorkNow({ worktime: record.worktime })).workNow;
468
576
  }
469
577
  catch (error) {
470
578
  sails.log.error("Graphql > helper > error: ", error);
@@ -483,32 +591,31 @@ function addModelResolver(modelname) {
483
591
  return parent && parent[key];
484
592
  };
485
593
  });
486
- console.log(modelName, resolvers);
487
594
  modelsResolvers[modelName] = resolvers;
488
595
  // Subscription resolver
489
596
  if (!blackList.includes(`${modelName}`) && whiteList[modelname].includes('subscription')) {
490
597
  models.add(modelname);
491
598
  const methodName = `${firstLetterToLowerCase(modelName)}`;
492
599
  let subscription = {
493
- def: `""" Generated """ ${methodName}(criteria: Json): ${modelName}`,
600
+ def: `""" [autogenerated] ${isAuthRequired(modelname) ? '\n[auth required]' : ''} """ ${methodName}(criteria: Json): ${modelName} `,
494
601
  fn: {
495
- subscribe: withFilter((rootValue, args, context, info) => context.pubsub.asyncIterator(modelName), async (payload, args, context, info) => {
602
+ subscribe: (0, apollo_server_1.withFilter)((rootValue, args, context, info) => context.pubsub.asyncIterator(modelName), async (payload, args, context, info) => {
496
603
  // For User models
497
- if (sails.models[modelname].attributes.user) {
498
- if (userAuth) {
499
- let user = await userAuth(context.connectionParams.authorization);
500
- if (user.id === payload.user) {
501
- if (args.criteria) {
502
- checkCriteria(payload, args.criteria);
503
- }
504
- else {
505
- return true;
506
- }
604
+ if (sails.models[modelname].attributes.user || modelname === 'user') {
605
+ let auth = await jwt_1.JWTAuth.verify(context.connectionParams.authorization);
606
+ if (!args.criteria) {
607
+ args.criteria = {};
608
+ }
609
+ if (auth.userId) {
610
+ if (modelName.toLowerCase() === "user") {
611
+ args.criteria.id = auth.userId;
612
+ }
613
+ else {
614
+ args.criteria.user = auth.userId;
507
615
  }
508
- ;
509
616
  }
510
617
  else {
511
- return false;
618
+ throw 'Authorization failed';
512
619
  }
513
620
  }
514
621
  return checkCriteria(payload, args.criteria);
@@ -570,12 +677,16 @@ function modelPublishExtend(modelname) {
570
677
  publish: async function (id) {
571
678
  let data = await sails.models[modelname].findOne(id);
572
679
  // `http-api:request-${modelAttribute.collection.toLowerCase()}model-list`,
573
- getEmitter_1.default().emit(`http-api:before-send-${modelname.toLowerCase()}`, data);
680
+ emitter.emit(`http-api:before-send-${modelname.toLowerCase()}`, data);
574
681
  sails.graphql.pubsub.publish(modelName, data);
575
682
  },
576
683
  };
577
684
  _.merge(sails.models[modelname], modelPublishExtendObj);
578
685
  }
686
+ function isAuthRequired(modelname) {
687
+ modelname = modelname.toLowerCase();
688
+ return sails.models[modelname].attributes.user !== undefined || modelname === 'user';
689
+ }
579
690
  exports.default = {
580
691
  addModel,
581
692
  addType,