@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
package/src/graphql.ts CHANGED
@@ -1,19 +1,19 @@
1
- import * as helper from '../lib/graphqlHelper';
2
- import getEmitter from "@webresto/core/libs/getEmitter";
1
+ import * as helper from "../lib/graphqlHelper";
3
2
  import _ = require("lodash");
4
- import { additionalResolver } from './additionalResolvers';
3
+ import { additionalResolver } from "./additionalResolvers";
4
+ import * as langParser from "accept-language-parser"
5
+ import { ApolloServer } from "apollo-server-express";
6
+ const fs = require("fs");
7
+ const path = require("path");
8
+ var i18nFactory = require('i18n-2');
5
9
 
6
- const { ApolloServer } = require('apollo-server-express');
7
- const fs = require('fs');
8
- const path = require('path');
9
-
10
- const { PubSub } = require('apollo-server');
10
+ import { PubSub } from "apollo-server";
11
+ import { GraphQLError, GraphQLFormattedError } from "graphql";
11
12
  const pubsub = new PubSub();
12
13
  sails.graphql = { pubsub };
13
- let server;
14
+ let server: ApolloServer;
14
15
 
15
- const AdditionalResolvers: any = {
16
- }
16
+ const AdditionalResolvers: any = {};
17
17
 
18
18
  export default {
19
19
  getPubsub: () => pubsub,
@@ -22,7 +22,7 @@ export default {
22
22
  _.merge(AdditionalResolvers, resolver);
23
23
  },
24
24
  init: async function () {
25
- let resolversApiPath = path.resolve(__dirname, './resolvers');
25
+ let resolversApiPath = path.resolve(__dirname, "./resolvers");
26
26
  if (fs.existsSync(resolversApiPath)) {
27
27
  helper.addDirResolvers(resolversApiPath);
28
28
  }
@@ -34,9 +34,7 @@ export default {
34
34
  helper.addAllSailsModels();
35
35
 
36
36
  if (sails.config.restographql?.whiteListAutoGen)
37
- helper.setWhiteList(
38
- sails.config.restographql.whiteListAutoGen
39
- );
37
+ helper.setWhiteList(sails.config.restographql.whiteListAutoGen);
40
38
 
41
39
  if (sails.config.restographql?.blackList)
42
40
  helper.addToBlackList(sails.config.restographql.blackList);
@@ -45,13 +43,12 @@ export default {
45
43
  _.merge(AdditionalResolvers, additionalResolver);
46
44
 
47
45
  helper.addType(`
48
-
49
46
  input Customer {
50
- phone: Phone
47
+ phone: InputPhone
51
48
  mail: String
52
49
  name: String!
53
50
  }
54
- input Phone {
51
+ input InputPhone {
55
52
  code: String!
56
53
  number: String!
57
54
  additionalNumber: String
@@ -70,11 +67,13 @@ export default {
70
67
  doorphone: String
71
68
  }
72
69
  type Message {
70
+ id: String
73
71
  title: String
74
72
  type: String
75
73
  message: String
76
74
  }
77
75
  type Action {
76
+ id: String
78
77
  type: String
79
78
  data: Json
80
79
  }
@@ -83,20 +82,66 @@ export default {
83
82
  message: Message
84
83
  action: Action
85
84
  }
85
+ type Response {
86
+ message: Message
87
+ action: Action
88
+ }
86
89
  type GetOrderResponse {
87
90
  order: Order
88
91
  customData: Json
89
92
  }
90
- type Restrictions {
91
- workTime: Json
92
- periodPossibleForOrder: Json
93
- timezone: Json
94
- deliveryDescription: Json
95
- minDeliveryTime: Json
93
+
94
+ type UserCustomField {
95
+ id: String
96
+ type: String
97
+ label: String
98
+ enum: [String]
99
+ description: String
100
+ required: Boolean
101
+ regex: String
96
102
  }
97
- `);
98
103
 
99
104
 
105
+ type Phone {
106
+ code: String
107
+ number: String
108
+ additionalNumber: String
109
+ }
110
+ type CaptchaJob {
111
+ id: String
112
+ task: String
113
+ }
114
+ type PromotionState {
115
+ type: String
116
+ message: String
117
+ state: Json
118
+ }
119
+
120
+ """Solved captcha"""
121
+ input Captcha {
122
+ "Captcha job ID"
123
+ id: String!
124
+ "Resolved captcha"
125
+ solution: String!
126
+ }
127
+
128
+ """Country"""
129
+ type Country {
130
+ phoneCode: String
131
+ iso: String
132
+ name: String
133
+ nativeCountryName: String
134
+ language: [String]
135
+ currency: String
136
+ currencySymbol: String
137
+ currencyISO: String
138
+ currencyUnit: String
139
+ currencyDenomination: Int
140
+ phoneMask: [String]
141
+ flag: String
142
+ }
143
+ `);
144
+
100
145
  // helper.addToBlackList(["createdAt", "updatedAt"]);
101
146
 
102
147
  // required root types for moduling schema
@@ -110,64 +155,169 @@ export default {
110
155
  type Subscription {
111
156
  _root: String
112
157
  }`);
113
-
114
- /**
115
- * Discount fields global support
116
- */
117
- helper.addCustomField("Dish", "discountAmount: Float")
118
- helper.addCustomField("Dish", "discountType: String")
119
- helper.addCustomField("Dish", "oldPrice: Float")
120
- helper.addCustomField("Group", "discount: String")
158
+
159
+ /**
160
+ * Discount fields global support
161
+ */
162
+ helper.addCustomField("Dish", "discountAmount: Float");
163
+ helper.addCustomField("Dish", "discountType: String");
164
+
165
+ /**
166
+ * @deprecated ???
167
+ */
168
+ helper.addCustomField("Dish", "oldPrice: Float");
169
+
170
+ helper.addCustomField("Dish", "salePrice: Float");
171
+ helper.addCustomField("Group", "discount: String");
172
+
173
+ /**
174
+ * Types of complex order fields
175
+ */
176
+ helper.addType(`#graphql
177
+ type OrderDeliveryState {
178
+ "Time it will take for delivery"
179
+ deliveryTimeMinutes: Int
180
+ "If disabled, then delivery is not allowed and will be processed"
181
+ allowed: Boolean
182
+ "Cost of delivery"
183
+ cost: Float
184
+ "ID of the service that will be on the delivery receipt"
185
+ item: String
186
+ "Server message for current delivery"
187
+ message: String
188
+ }`
189
+ );
190
+
191
+
192
+ helper.addToReplaceList("Order.delivery", "delivery: OrderDeliveryState");
193
+
194
+
121
195
 
122
196
  const { typeDefs, resolvers } = helper.getSchema();
123
197
 
124
- getEmitter().on('core-order-after-count', 'graphql', function (order) {
198
+ emitter.on("core-order-after-count", "graphql", function (order) {
125
199
  pubsub.publish("order-changed", order);
126
200
  });
127
- getEmitter().on("send-message", "graphql", function ({ orderId, message }) {
201
+ emitter.on("send-message", "graphql", function ({ orderId, message }) {
128
202
  pubsub.publish("message", { orderId, message });
129
203
  });
130
- getEmitter().on("core-dish-after-update", "graphql", function (record) {
204
+ emitter.on("core-dish-after-update", "graphql", function (record) {
131
205
  pubsub.publish("dish-changed", record);
132
206
  });
133
- getEmitter().on("core-maintenance-enabled", "graphql", function (record) {
207
+ emitter.on("core-maintenance-enabled", "graphql", function (record) {
134
208
  pubsub.publish("maintenance", record);
135
209
  });
136
- getEmitter().on("core-maintenance-disabled", "graphql", function () {
210
+ emitter.on("core-maintenance-disabled", "graphql", function () {
137
211
  pubsub.publish("maintenance", null);
138
212
  });
139
-
140
- let apolloServer
213
+
214
+ let apolloServer: ApolloServer;
141
215
  try {
142
216
  apolloServer = new ApolloServer({
143
217
  typeDefs,
218
+ introspection: true,
219
+ playground: true,
144
220
  resolvers: [resolvers, AdditionalResolvers],
145
221
  subscriptions: {
146
222
  onConnect: (connectionParams, webSocket) => {
147
- let exContext = {}
148
- if (connectionParams) {
149
- if (!connectionParams['authorization'] && connectionParams['Authorization'])
150
- connectionParams['authorization'] = connectionParams['Authorization'];
151
-
152
- exContext['connectionParams'] = connectionParams
153
- }
154
- exContext['pubsub'] = pubsub;
155
- return exContext;
156
- },
223
+ let exContext = {};
224
+
225
+ if (connectionParams) {
226
+
227
+ /**
228
+ * Authorization
229
+ */
230
+ if (!connectionParams["authorization"] && connectionParams["Authorization"]) {
231
+ connectionParams["authorization"] = connectionParams["Authorization"];
232
+ }
233
+
234
+ if (connectionParams["x-device-id"] || connectionParams["X-Device-Id"]) {
235
+ connectionParams["deviceId"] = connectionParams["x-device-id"] ? connectionParams["x-device-id"] : connectionParams["X-Device-Id"];
236
+ }
237
+
238
+ exContext["connectionParams"] = connectionParams;
239
+
240
+ /**
241
+ * Accept-Language
242
+ */
243
+
244
+ connectionParams["locale"] = sails.config.i18n.defaultLocale
245
+ const acceptLanguge = connectionParams["Accept-Language"] ?? connectionParams["accept-language"] ?? false
246
+ if(acceptLanguge){
247
+ connectionParams["locale"] = langParser.parse(acceptLanguge)[0]?.code ?? sails.config.i18n.defaultLocale
248
+ }
249
+ const i18n = new i18nFactory({...sails.config.i18n, directory: sails.config.i18n.localesDirectory, extension: ".json"})
250
+ i18n.setLocale(connectionParams["locale"]);
251
+ exContext["i18n"] = i18n;
252
+
253
+ }
254
+ exContext["pubsub"] = pubsub;
255
+ return exContext;
256
+ },
257
+ },
258
+ formatError: (error: GraphQLError) => {
259
+ const graphQLFormattedError: GraphQLFormattedError = {
260
+ message: `${error.path}: ${error.message}`,
261
+ ...process.env.NODE_ENV !== "production" && {
262
+ locations: error.extensions.exception.stacktrace,
263
+ path: error.path
157
264
  },
158
- context: async ({ req , connection}) => {
159
- if (connection) {
160
- return connection.context;
161
- } else {
162
- return { ...req };
265
+ }
266
+ return graphQLFormattedError;
267
+ },
268
+ context: ({ req, connection }) => {
269
+ if (connection && connection.context) {
270
+ return connection.context;
271
+ } else {
272
+ const headers = {};
273
+ if(req?.rawHeaders) {
274
+ for (let i = 0; i < req.rawHeaders.length; i += 2) {
275
+ const name = req.rawHeaders[i];
276
+ const value = req.rawHeaders[i + 1];
277
+ headers[name.toLowerCase()] = value;
163
278
  }
164
279
  }
165
- });
280
+ if (headers["x-device-id"] || headers["X-Device-Id"]) {
281
+ headers["deviceId"] = headers["x-device-id"] ? headers["x-device-id"] : headers["X-Device-Id"];
282
+ }
283
+
284
+ if (!headers["authorization"] && headers["Authorization"]) {
285
+ headers["authorization"] = headers["Authorization"];
286
+ }
287
+
288
+ // set context locale
289
+ headers["locale"] = sails.config.i18n.defaultLocale
290
+ const acceptLanguge = headers["Accept-Language"] ?? headers["accept-language"] ?? false
291
+ if(acceptLanguge){
292
+ headers["locale"] = (langParser.parse(acceptLanguge))[0]?.code ?? sails.config.i18n.defaultLocale
293
+ }
294
+
295
+ const i18n = new i18nFactory({...sails.config.i18n, directory: sails.config.i18n.localesDirectory, extension: ".json"})
296
+ i18n.setLocale(headers["locale"]);
297
+ return { ...req, connectionParams: headers, i18n: i18n };
298
+ }
299
+ },
300
+ });
166
301
  } catch (error) {
167
- console.error("GraphQL start error: ", error)
168
- }
302
+ if (error.locations && error.locations[0].line) {
303
+ typeDefs.split("\n").forEach((item, i) => {
304
+ if (Math.abs(error.locations[0].line - i) < 10) {
305
+ console.log(i, `|`, item);
306
+ if (error.locations[0].line - 1 === i) {
307
+ console.log("_______________");
308
+ }
309
+ }
310
+ });
311
+ console.log(
312
+ `ERROR LINE: ${error.locations[0].line} `,
313
+ typeDefs.split("\n", -1)[error.locations[0].line - 1]
314
+ );
315
+ }
169
316
 
317
+ console.error(JSON.stringify(error));
318
+ throw error;
319
+ }
170
320
  server = apolloServer;
171
321
  return apolloServer;
172
- }
173
- }
322
+ },
323
+ };
@@ -0,0 +1,32 @@
1
+ import UserBonusProgram from "@webresto/core/models/UserBonusProgram";
2
+ declare const _default: {
3
+ Query: {
4
+ bonusProgram: {
5
+ def: string;
6
+ fn: (parent: any, args: any, context: any) => Promise<import("@webresto/core/models/BonusProgram").default[]>;
7
+ };
8
+ };
9
+ Mutation: {
10
+ userRegistrationInBonusProgram: {
11
+ def: string;
12
+ fn: (parent: any, payload: {
13
+ bonusProgramId: string;
14
+ }, context: {
15
+ connectionParams: {
16
+ authorization: string;
17
+ };
18
+ }) => Promise<UserBonusProgram>;
19
+ };
20
+ userDeleteInBonusProgram: {
21
+ def: string;
22
+ fn: (parent: any, payload: {
23
+ bonusProgramId: string;
24
+ }, context: {
25
+ connectionParams: {
26
+ authorization: string;
27
+ };
28
+ }) => Promise<boolean>;
29
+ };
30
+ };
31
+ };
32
+ export default _default;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ // export interface SpendBonus {
3
+ // bonusProgramId: string
4
+ // amount: number
5
+ // adapter: string
6
+ // bonusProgramName: string
7
+ // }
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const jwt_1 = require("../../lib/jwt");
10
+ exports.default = {
11
+ Query: {
12
+ bonusProgram: {
13
+ def: 'bonusProgramAlived(orderId: String): [BonusProgram]',
14
+ fn: async function (parent, args, context) {
15
+ const orderId = args.orderId;
16
+ try {
17
+ if (orderId) {
18
+ const order = await Order.findOne({ id: orderId });
19
+ if (!order)
20
+ throw `order not found`;
21
+ }
22
+ const data = await BonusProgram.getAvailable();
23
+ await emitter.emit('graphql-return-bonus-program', orderId, data);
24
+ return data;
25
+ }
26
+ catch (e) {
27
+ sails.log.error(e);
28
+ throw `${JSON.stringify(e)}`;
29
+ }
30
+ }
31
+ }
32
+ },
33
+ Mutation: {
34
+ // Authentication required
35
+ userRegistrationInBonusProgram: {
36
+ def: `#graphql
37
+ userRegistrationInBonusProgram(
38
+ bonusProgramId: String!
39
+ ): UserBonusProgram`,
40
+ fn: async (parent, payload, context) => {
41
+ const auth = await jwt_1.JWTAuth.verify(context.connectionParams.authorization);
42
+ let adapter = await BonusProgram.getAdapter(payload.bonusProgramId);
43
+ return await UserBonusProgram.registration(auth.userId, adapter.id);
44
+ }
45
+ },
46
+ // Authentication required
47
+ userDeleteInBonusProgram: {
48
+ def: `#graphql
49
+ userDeleteInBonusProgram(
50
+ bonusProgramId: String!
51
+ ): Boolean`,
52
+ fn: async (parent, payload, context) => {
53
+ const auth = await jwt_1.JWTAuth.verify(context.connectionParams.authorization);
54
+ let adapter = await BonusProgram.getAdapter(payload.bonusProgramId);
55
+ try {
56
+ await UserBonusProgram.delete(auth.userId, adapter.id);
57
+ return true;
58
+ }
59
+ catch (error) {
60
+ throw `Error deleting user in bonus program`;
61
+ }
62
+ }
63
+ }
64
+ }
65
+ };
@@ -0,0 +1,79 @@
1
+ // export interface SpendBonus {
2
+ // bonusProgramId: string
3
+ // amount: number
4
+ // adapter: string
5
+ // bonusProgramName: string
6
+ // }
7
+
8
+ import { JWTAuth } from "../../lib/jwt";
9
+ import UserBonusProgram from "@webresto/core/models/UserBonusProgram";
10
+
11
+ export default {
12
+ Query: {
13
+ bonusProgram: {
14
+ def: 'bonusProgramAlived(orderId: String): [BonusProgram]',
15
+ fn: async function (parent, args, context) {
16
+ const orderId = args.orderId;
17
+ try {
18
+ if (orderId) {
19
+ const order = await Order.findOne({id: orderId});
20
+ if(!order) throw `order not found`
21
+ }
22
+
23
+ const data = await BonusProgram.getAvailable();
24
+ await emitter.emit('graphql-return-bonus-program', orderId, data);
25
+ return data;
26
+ } catch (e) {
27
+ sails.log.error(e);
28
+ throw `${JSON.stringify(e)}`
29
+ }
30
+ }
31
+ }
32
+ },
33
+ Mutation: {
34
+ // Authentication required
35
+ userRegistrationInBonusProgram: {
36
+ def: `#graphql
37
+ userRegistrationInBonusProgram(
38
+ bonusProgramId: String!
39
+ ): UserBonusProgram`,
40
+ fn: async (
41
+ parent: any,
42
+ payload: { bonusProgramId: string },
43
+ context: { connectionParams: { authorization: string } }
44
+ ): Promise<UserBonusProgram> => {
45
+
46
+ const auth = await JWTAuth.verify(
47
+ context.connectionParams.authorization
48
+ );
49
+ let adapter = await BonusProgram.getAdapter(payload.bonusProgramId);
50
+
51
+ return await UserBonusProgram.registration(auth.userId, adapter.id);
52
+ }
53
+ },
54
+ // Authentication required
55
+ userDeleteInBonusProgram: {
56
+ def: `#graphql
57
+ userDeleteInBonusProgram(
58
+ bonusProgramId: String!
59
+ ): Boolean`,
60
+ fn: async (
61
+ parent: any,
62
+ payload: { bonusProgramId: string },
63
+ context: { connectionParams: { authorization: string } }
64
+ ): Promise<boolean> => {
65
+
66
+ const auth = await JWTAuth.verify(
67
+ context.connectionParams.authorization
68
+ );
69
+ let adapter = await BonusProgram.getAdapter(payload.bonusProgramId);
70
+ try {
71
+ await UserBonusProgram.delete(auth.userId, adapter.id);
72
+ return true
73
+ } catch (error) {
74
+ throw `Error deleting user in bonus program`
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,11 @@
1
+ declare const _default: {
2
+ Query: {
3
+ captchaGetJob: {
4
+ def: string;
5
+ fn: (parent: any, args: {
6
+ label: string;
7
+ }, context: any, info: any) => Promise<import("@webresto/core/adapters/captcha/CaptchaAdapter").CaptchaJob>;
8
+ };
9
+ };
10
+ };
11
+ export default _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("@webresto/core/adapters/index");
4
+ exports.default = {
5
+ Query: {
6
+ captchaGetJob: {
7
+ def: 'captchaGetJob(label: String): CaptchaJob',
8
+ fn: async (parent, args, context, info) => {
9
+ try {
10
+ return (await index_1.Captcha.getAdapter()).getJob(args.label);
11
+ }
12
+ catch (error) {
13
+ sails.log.error(error);
14
+ throw error;
15
+ }
16
+ }
17
+ }
18
+ }
19
+ };
@@ -0,0 +1,16 @@
1
+ import { Captcha } from "@webresto/core/adapters/index"
2
+ export default {
3
+ Query: {
4
+ captchaGetJob: {
5
+ def: 'captchaGetJob(label: String): CaptchaJob',
6
+ fn: async (parent: any, args: { label: string } , context: any, info: any) => {
7
+ try {
8
+ return (await Captcha.getAdapter()).getJob(args.label)
9
+ } catch (error) {
10
+ sails.log.error(error)
11
+ throw error
12
+ }
13
+ }
14
+ }
15
+ }
16
+ }
@@ -1,28 +1,57 @@
1
+ import { Action, Message } from "../../types/primitives";
2
+ import Order from "@webresto/core/models/Order";
3
+ type CheckResponse = {
4
+ order?: Order;
5
+ message: Message;
6
+ action?: Action;
7
+ };
8
+ import Address from "@webresto/core/interfaces/Address";
9
+ import Customer from "@webresto/core/interfaces/Customer";
10
+ import { SpendBonus } from "@webresto/core/interfaces/SpendBonus";
11
+ interface InputOrderCheckout {
12
+ orderId: string;
13
+ paymentMethodId: string;
14
+ selfService?: boolean;
15
+ pickupPointId?: string;
16
+ address?: Address;
17
+ locationId: string;
18
+ customer: Customer;
19
+ date?: string;
20
+ personsCount?: number;
21
+ comment: string;
22
+ spendBonus: SpendBonus;
23
+ customData: {
24
+ [key: string]: string | number;
25
+ };
26
+ }
1
27
  declare const _default: {
2
28
  Mutation: {
3
29
  checkOrder: {
4
30
  def: string;
5
- fn: (parent: any, args: any, context: any) => Promise<void | {
6
- message: any;
7
- order: import("@webresto/core/models/Order").default;
8
- } | {
9
- message: {
10
- type: string;
11
- title: string;
12
- message: string;
13
- };
14
- order?: undefined;
15
- }>;
31
+ fn: (parent: any, args: {
32
+ orderCheckout: InputOrderCheckout;
33
+ }, context: any) => Promise<CheckResponse>;
16
34
  };
17
35
  sendOrder: {
18
36
  def: string;
19
37
  fn: (parent: any, args: any, context: any) => Promise<{
20
- order: import("@webresto/core/models/Order").default;
38
+ order: Order;
39
+ action: {
40
+ deviceId: any;
41
+ type: string;
42
+ data: {
43
+ link: string;
44
+ };
45
+ };
46
+ message?: undefined;
47
+ } | {
48
+ order: Order;
21
49
  message: {
22
50
  type: string;
23
- title: string;
24
- message: string;
51
+ title: any;
52
+ message: any;
25
53
  };
54
+ action?: undefined;
26
55
  }>;
27
56
  };
28
57
  };