@flowerforce/flowerbase 1.0.1-beta.9 → 1.0.2

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 (178) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +1 -1
  3. package/README.md +466 -7
  4. package/dist/auth/controller.d.ts.map +1 -1
  5. package/dist/auth/controller.js +11 -1
  6. package/dist/auth/providers/local-userpass/controller.d.ts.map +1 -1
  7. package/dist/auth/providers/local-userpass/controller.js +15 -15
  8. package/dist/auth/utils.d.ts +2 -1
  9. package/dist/auth/utils.d.ts.map +1 -1
  10. package/dist/auth/utils.js +14 -10
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +3 -3
  13. package/dist/features/endpoints/utils.d.ts +1 -1
  14. package/dist/features/endpoints/utils.d.ts.map +1 -1
  15. package/dist/features/endpoints/utils.js +5 -2
  16. package/dist/features/functions/controller.d.ts.map +1 -1
  17. package/dist/features/functions/controller.js +12 -8
  18. package/dist/features/functions/dtos.d.ts +2 -1
  19. package/dist/features/functions/dtos.d.ts.map +1 -1
  20. package/dist/features/functions/interface.d.ts +2 -1
  21. package/dist/features/functions/interface.d.ts.map +1 -1
  22. package/dist/features/functions/utils.d.ts +1 -1
  23. package/dist/features/functions/utils.d.ts.map +1 -1
  24. package/dist/features/functions/utils.js +4 -4
  25. package/dist/features/triggers/index.d.ts.map +1 -1
  26. package/dist/features/triggers/index.js +9 -3
  27. package/dist/features/triggers/interface.d.ts +4 -4
  28. package/dist/features/triggers/interface.d.ts.map +1 -1
  29. package/dist/features/triggers/utils.d.ts.map +1 -1
  30. package/dist/features/triggers/utils.js +25 -14
  31. package/dist/global.d.ts +9 -0
  32. package/dist/global.d.ts.map +1 -0
  33. package/dist/global.js +2 -0
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +13 -9
  37. package/dist/model.d.ts +1 -0
  38. package/dist/model.d.ts.map +1 -1
  39. package/dist/model.js +15 -0
  40. package/dist/services/api/index.d.ts.map +1 -1
  41. package/dist/services/api/index.js +6 -1
  42. package/dist/services/aws/index.d.ts.map +1 -1
  43. package/dist/services/aws/index.js +5 -5
  44. package/dist/services/index.d.ts.map +1 -1
  45. package/dist/services/mongodb-atlas/index.d.ts.map +1 -1
  46. package/dist/services/mongodb-atlas/index.js +76 -71
  47. package/dist/services/mongodb-atlas/model.d.ts +3 -3
  48. package/dist/services/mongodb-atlas/model.d.ts.map +1 -1
  49. package/dist/services/mongodb-atlas/utils.d.ts.map +1 -1
  50. package/dist/state.d.ts +2 -2
  51. package/dist/state.d.ts.map +1 -1
  52. package/dist/utils/context/helpers.d.ts +4 -4
  53. package/dist/utils/context/helpers.d.ts.map +1 -1
  54. package/dist/utils/context/helpers.js +1 -1
  55. package/dist/utils/context/index.d.ts.map +1 -1
  56. package/dist/utils/context/index.js +3 -5
  57. package/dist/utils/helpers/someAsync.d.ts.map +1 -1
  58. package/dist/utils/initializer/exposeRoutes.d.ts.map +1 -1
  59. package/dist/utils/initializer/exposeRoutes.js +44 -1
  60. package/dist/utils/initializer/registerPlugins.d.ts.map +1 -1
  61. package/dist/utils/initializer/registerPlugins.js +9 -9
  62. package/dist/utils/roles/helpers.d.ts.map +1 -1
  63. package/dist/utils/roles/helpers.js +9 -7
  64. package/dist/utils/roles/interface.d.ts.map +1 -1
  65. package/dist/utils/roles/machines/commonValidators.d.ts +2 -2
  66. package/dist/utils/roles/machines/commonValidators.d.ts.map +1 -1
  67. package/dist/utils/roles/machines/commonValidators.js +5 -6
  68. package/dist/utils/roles/machines/index.d.ts.map +1 -1
  69. package/dist/utils/roles/machines/interface.d.ts.map +1 -1
  70. package/dist/utils/roles/machines/machine.d.ts +3 -3
  71. package/dist/utils/roles/machines/machine.d.ts.map +1 -1
  72. package/dist/utils/roles/machines/machine.js +12 -4
  73. package/dist/utils/roles/machines/read/A/index.d.ts.map +1 -1
  74. package/dist/utils/roles/machines/read/A/index.js +12 -2
  75. package/dist/utils/roles/machines/read/B/index.d.ts.map +1 -1
  76. package/dist/utils/roles/machines/read/B/index.js +20 -5
  77. package/dist/utils/roles/machines/read/C/index.d.ts.map +1 -1
  78. package/dist/utils/roles/machines/read/C/index.js +20 -5
  79. package/dist/utils/roles/machines/read/D/index.d.ts.map +1 -1
  80. package/dist/utils/roles/machines/read/D/index.js +13 -3
  81. package/dist/utils/roles/machines/read/D/validators.d.ts +1 -1
  82. package/dist/utils/roles/machines/read/D/validators.d.ts.map +1 -1
  83. package/dist/utils/roles/machines/read/D/validators.js +8 -4
  84. package/dist/utils/roles/machines/utils.d.ts +4 -4
  85. package/dist/utils/roles/machines/utils.d.ts.map +1 -1
  86. package/dist/utils/roles/machines/utils.js +5 -1
  87. package/dist/utils/roles/machines/write/A/index.d.ts.map +1 -1
  88. package/dist/utils/roles/machines/write/A/index.js +13 -3
  89. package/dist/utils/roles/machines/write/B/index.d.ts.map +1 -1
  90. package/dist/utils/roles/machines/write/B/index.js +37 -10
  91. package/dist/utils/roles/machines/write/C/index.d.ts.map +1 -1
  92. package/dist/utils/roles/machines/write/C/index.js +13 -3
  93. package/dist/utils/roles/machines/write/C/validators.d.ts +1 -1
  94. package/dist/utils/roles/machines/write/C/validators.d.ts.map +1 -1
  95. package/dist/utils/roles/machines/write/C/validators.js +8 -4
  96. package/dist/utils/rules-matcher/interface.d.ts.map +1 -1
  97. package/dist/utils/rules-matcher/utils.d.ts.map +1 -1
  98. package/dist/utils/rules.d.ts.map +1 -1
  99. package/package.json +9 -2
  100. package/src/auth/controller.ts +12 -1
  101. package/src/auth/providers/local-userpass/controller.ts +47 -39
  102. package/src/auth/providers/local-userpass/dtos.ts +1 -1
  103. package/src/auth/utils.ts +24 -18
  104. package/src/constants.ts +7 -3
  105. package/src/features/endpoints/utils.ts +6 -4
  106. package/src/features/functions/controller.ts +23 -22
  107. package/src/features/functions/dtos.ts +9 -9
  108. package/src/features/functions/interface.ts +2 -1
  109. package/src/features/functions/utils.ts +12 -12
  110. package/src/features/triggers/index.ts +9 -6
  111. package/src/features/triggers/interface.ts +9 -10
  112. package/src/features/triggers/utils.ts +57 -29
  113. package/src/global.ts +9 -0
  114. package/src/index.ts +16 -11
  115. package/src/model.ts +3 -1
  116. package/src/services/api/index.ts +6 -1
  117. package/src/services/aws/index.ts +19 -17
  118. package/src/services/mongodb-atlas/index.ts +204 -163
  119. package/src/services/mongodb-atlas/model.ts +13 -13
  120. package/src/services/mongodb-atlas/utils.ts +6 -4
  121. package/src/state.ts +32 -20
  122. package/src/utils/__tests__/STEP_A_STATES.test.ts +78 -47
  123. package/src/utils/__tests__/STEP_B_STATES.test.ts +168 -105
  124. package/src/utils/__tests__/STEP_C_STATES.test.ts +150 -78
  125. package/src/utils/__tests__/STEP_D_STATES.test.ts +129 -86
  126. package/src/utils/__tests__/checkAdditionalFieldsFn.test.ts +35 -35
  127. package/src/utils/__tests__/checkApplyWhen.test.ts +40 -41
  128. package/src/utils/__tests__/checkFieldsPropertyExists.test.ts +40 -40
  129. package/src/utils/__tests__/checkIsValidFieldNameFn.test.ts +185 -184
  130. package/src/utils/__tests__/comparePassword.test.ts +27 -30
  131. package/src/utils/__tests__/evaluateDocumentsFiltersReadFn.test.ts +55 -47
  132. package/src/utils/__tests__/evaluateDocumentsFiltersWriteFn.test.ts +61 -47
  133. package/src/utils/__tests__/evaluateTopLevelReadFn.test.ts +48 -48
  134. package/src/utils/__tests__/evaluateTopLevelWriteFn.test.ts +56 -56
  135. package/src/utils/__tests__/exposeRoutes.test.ts +46 -44
  136. package/src/utils/__tests__/generateContextData.test.ts +57 -51
  137. package/src/utils/__tests__/getDefaultRule.test.ts +32 -27
  138. package/src/utils/__tests__/getKey.test.ts +10 -10
  139. package/src/utils/__tests__/getKeys.test.ts +10 -9
  140. package/src/utils/__tests__/getWinningRole.test.ts +57 -50
  141. package/src/utils/__tests__/hashPassword.test.ts +24 -25
  142. package/src/utils/__tests__/isEmpty.test.ts +14 -15
  143. package/src/utils/__tests__/logMachineInfo.test.ts +12 -12
  144. package/src/utils/__tests__/operators.test.ts +94 -96
  145. package/src/utils/__tests__/readFileContent.test.ts +28 -28
  146. package/src/utils/__tests__/registerPlugins.test.ts +44 -32
  147. package/src/utils/__tests__/rule.test.ts +47 -49
  148. package/src/utils/__tests__/rulesMatcherInterfaces.test.ts +57 -52
  149. package/src/utils/__tests__/rulesMatcherUtils.test.ts +64 -53
  150. package/src/utils/__tests__/someAsync.test.ts +46 -49
  151. package/src/utils/context/helpers.ts +1 -1
  152. package/src/utils/context/index.ts +7 -10
  153. package/src/utils/crypto/index.ts +2 -2
  154. package/src/utils/helpers/someAsync.ts +11 -11
  155. package/src/utils/initializer/exposeRoutes.ts +56 -2
  156. package/src/utils/initializer/registerPlugins.ts +11 -13
  157. package/src/utils/roles/helpers.ts +22 -15
  158. package/src/utils/roles/interface.ts +2 -3
  159. package/src/utils/roles/machines/commonValidators.ts +23 -14
  160. package/src/utils/roles/machines/index.ts +7 -4
  161. package/src/utils/roles/machines/interface.ts +17 -5
  162. package/src/utils/roles/machines/machine.ts +97 -72
  163. package/src/utils/roles/machines/read/A/index.ts +12 -4
  164. package/src/utils/roles/machines/read/B/index.ts +20 -7
  165. package/src/utils/roles/machines/read/C/index.ts +24 -8
  166. package/src/utils/roles/machines/read/D/index.ts +14 -8
  167. package/src/utils/roles/machines/read/D/validators.ts +21 -13
  168. package/src/utils/roles/machines/read/index.ts +5 -5
  169. package/src/utils/roles/machines/utils.ts +30 -13
  170. package/src/utils/roles/machines/write/A/index.ts +13 -5
  171. package/src/utils/roles/machines/write/B/index.ts +42 -16
  172. package/src/utils/roles/machines/write/C/index.ts +14 -8
  173. package/src/utils/roles/machines/write/C/validators.ts +21 -13
  174. package/src/utils/roles/machines/write/index.ts +4 -4
  175. package/src/utils/rules-matcher/interface.ts +4 -4
  176. package/src/utils/rules-matcher/utils.ts +10 -6
  177. package/src/utils/rules.ts +12 -5
  178. package/src/global.d.ts +0 -0
@@ -43,10 +43,10 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
43
43
  const winningRole = (0, utils_1.getWinningRole)(result, user, roles);
44
44
  const { status, document } = winningRole
45
45
  ? yield (0, machines_1.checkValidation)(winningRole, {
46
- type: "read",
46
+ type: 'read',
47
47
  roles,
48
48
  cursor: result,
49
- expansions: {},
49
+ expansions: {}
50
50
  }, user)
51
51
  : { status: true, document: result };
52
52
  // Return validated document or empty object if not permitted
@@ -78,20 +78,20 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
78
78
  // Apply access control filters
79
79
  const formattedQuery = (0, utils_2.getFormattedQuery)(filters, query, user);
80
80
  // Retrieve the document to check permissions before deleting
81
- const result = yield collection.findOne(formattedQuery);
81
+ const result = yield collection.findOne({ $and: formattedQuery });
82
82
  const winningRole = (0, utils_1.getWinningRole)(result, user, roles);
83
83
  const { status } = winningRole
84
84
  ? yield (0, machines_1.checkValidation)(winningRole, {
85
- type: "delete",
85
+ type: 'delete',
86
86
  roles,
87
87
  cursor: result,
88
- expansions: {},
88
+ expansions: {}
89
89
  }, user)
90
90
  : { status: true };
91
91
  if (!status) {
92
92
  throw new Error('Delete not permitted');
93
93
  }
94
- return collection.deleteOne(formattedQuery);
94
+ return collection.deleteOne({ $and: formattedQuery });
95
95
  }
96
96
  // System mode: bypass access control
97
97
  return collection.deleteOne(query);
@@ -121,10 +121,10 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
121
121
  const winningRole = (0, utils_1.getWinningRole)(data, user, roles);
122
122
  const { status, document } = winningRole
123
123
  ? yield (0, machines_1.checkValidation)(winningRole, {
124
- type: "insert",
124
+ type: 'insert',
125
125
  roles,
126
126
  cursor: data,
127
- expansions: {},
127
+ expansions: {}
128
128
  }, user)
129
129
  : { status: true, document: data };
130
130
  if (!status || !(0, isEqual_1.default)(data, document)) {
@@ -168,28 +168,31 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
168
168
  }
169
169
  const winningRole = (0, utils_1.getWinningRole)(result, user, roles);
170
170
  // Check if the update data contains MongoDB update operators (e.g., $set, $inc)
171
- const hasOperators = Object.keys(data).some(key => key.startsWith("$"));
171
+ const hasOperators = Object.keys(data).some((key) => key.startsWith('$'));
172
172
  // Flatten the update object to extract the actual fields being modified
173
173
  // const docToCheck = hasOperators
174
174
  // ? Object.values(data).reduce((acc, operation) => ({ ...acc, ...operation }), {})
175
175
  // : data
176
+ const [matchQuery] = formattedQuery;
176
177
  const pipeline = [
177
178
  {
178
- $match: formattedQuery,
179
+ $match: matchQuery
179
180
  },
180
181
  {
181
182
  $limit: 1
182
183
  },
183
- ...Object.entries(data).map(([key, value]) => ({ [key]: value })),
184
+ ...Object.entries(data).map(([key, value]) => ({ [key]: value }))
184
185
  ];
185
- const [docToCheck] = hasOperators ? yield collection.aggregate(pipeline).toArray() : [data];
186
+ const [docToCheck] = hasOperators
187
+ ? yield collection.aggregate(pipeline).toArray()
188
+ : [data];
186
189
  // Validate update permissions
187
190
  const { status, document } = winningRole
188
191
  ? yield (0, machines_1.checkValidation)(winningRole, {
189
- type: "write",
192
+ type: 'write',
190
193
  roles,
191
194
  cursor: docToCheck,
192
- expansions: {},
195
+ expansions: {}
193
196
  }, user)
194
197
  : { status: true, document: docToCheck };
195
198
  // Ensure no unauthorized changes are made
@@ -197,27 +200,27 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
197
200
  if (!status || !areDocumentsEqual) {
198
201
  throw new Error('Update not permitted');
199
202
  }
200
- return collection.updateOne(formattedQuery, data, options);
203
+ return collection.updateOne({ $and: formattedQuery }, data, options);
201
204
  }
202
205
  return collection.updateOne(query, data, options);
203
206
  }),
204
207
  /**
205
- * Finds documents in a MongoDB collection with optional role-based access control and post-query validation.
206
- *
207
- * @param {Filter<Document>} query - The MongoDB query to filter documents.
208
- * @returns {FindCursor} A customized `FindCursor` that includes additional access control logic in its `toArray()` method.
209
- *
210
- * @description
211
- * If `run_as_system` is enabled, the function simply returns a regular MongoDB cursor (`collection.find(query)`).
212
- * Otherwise:
213
- * - Combines the user query with role-based filters via `getFormattedQuery`.
214
- * - Executes the query using `collection.find` with a `$and` of all filters.
215
- * - Returns a cloned `FindCursor` where `toArray()`:
216
- * - Applies additional post-query validation using `checkValidation` for each document.
217
- * - Filters out documents the current user is not authorized to read.
218
- *
219
- * This ensures that both pre-query filtering and post-query validation are applied consistently.
220
- */
208
+ * Finds documents in a MongoDB collection with optional role-based access control and post-query validation.
209
+ *
210
+ * @param {Filter<Document>} query - The MongoDB query to filter documents.
211
+ * @returns {FindCursor} A customized `FindCursor` that includes additional access control logic in its `toArray()` method.
212
+ *
213
+ * @description
214
+ * If `run_as_system` is enabled, the function simply returns a regular MongoDB cursor (`collection.find(query)`).
215
+ * Otherwise:
216
+ * - Combines the user query with role-based filters via `getFormattedQuery`.
217
+ * - Executes the query using `collection.find` with a `$and` of all filters.
218
+ * - Returns a cloned `FindCursor` where `toArray()`:
219
+ * - Applies additional post-query validation using `checkValidation` for each document.
220
+ * - Filters out documents the current user is not authorized to read.
221
+ *
222
+ * This ensures that both pre-query filtering and post-query validation are applied consistently.
223
+ */
221
224
  find: (query) => {
222
225
  if (!run_as_system) {
223
226
  const { filters, roles } = rules[collName] || {};
@@ -238,10 +241,10 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
238
241
  const winningRole = (0, utils_1.getWinningRole)(currentDoc, user, roles);
239
242
  const { status, document } = winningRole
240
243
  ? yield (0, machines_1.checkValidation)(winningRole, {
241
- type: "read",
244
+ type: 'read',
242
245
  roles,
243
246
  cursor: currentDoc,
244
- expansions: {},
247
+ expansions: {}
245
248
  }, user)
246
249
  : { status: !roles.length, document: currentDoc };
247
250
  return status ? document : undefined;
@@ -254,34 +257,37 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
254
257
  return collection.find(query);
255
258
  },
256
259
  /**
257
- * Watches changes on a MongoDB collection with optional role-based filtering of change events.
258
- *
259
- * @param {Document[]} [pipeline=[]] - Optional aggregation pipeline stages to apply to the change stream.
260
- * @param {ChangeStreamOptions} [options] - Optional settings for the change stream, such as `fullDocument`, `resumeAfter`, etc.
261
- * @returns {ChangeStream} A MongoDB `ChangeStream` instance, optionally enhanced with access control.
262
- *
263
- * @description
264
- * If `run_as_system` is enabled, this function simply returns `collection.watch(pipeline, options)`.
265
- * Otherwise:
266
- * - Applies access control filters via `getFormattedQuery`.
267
- * - Prepends a `$match` stage to the pipeline to limit watched changes to authorized documents.
268
- * - Overrides the `.on()` method of the returned `ChangeStream` to:
269
- * - Validate the `fullDocument` and any `updatedFields` using `checkValidation`.
270
- * - Filter out change events the user is not authorized to see.
271
- * - Pass only validated and filtered events to the original listener.
272
- *
273
- * This allows fine-grained control over what change events a user can observe, based on roles and filters.
274
- */
260
+ * Watches changes on a MongoDB collection with optional role-based filtering of change events.
261
+ *
262
+ * @param {Document[]} [pipeline=[]] - Optional aggregation pipeline stages to apply to the change stream.
263
+ * @param {ChangeStreamOptions} [options] - Optional settings for the change stream, such as `fullDocument`, `resumeAfter`, etc.
264
+ * @returns {ChangeStream} A MongoDB `ChangeStream` instance, optionally enhanced with access control.
265
+ *
266
+ * @description
267
+ * If `run_as_system` is enabled, this function simply returns `collection.watch(pipeline, options)`.
268
+ * Otherwise:
269
+ * - Applies access control filters via `getFormattedQuery`.
270
+ * - Prepends a `$match` stage to the pipeline to limit watched changes to authorized documents.
271
+ * - Overrides the `.on()` method of the returned `ChangeStream` to:
272
+ * - Validate the `fullDocument` and any `updatedFields` using `checkValidation`.
273
+ * - Filter out change events the user is not authorized to see.
274
+ * - Pass only validated and filtered events to the original listener.
275
+ *
276
+ * This allows fine-grained control over what change events a user can observe, based on roles and filters.
277
+ */
275
278
  watch: (pipeline = [], options) => {
276
279
  if (!run_as_system) {
277
280
  const { filters, roles } = rules[collName] || {};
278
281
  // Apply access filters to initial change stream pipeline
279
282
  const formattedQuery = (0, utils_2.getFormattedQuery)(filters, {}, user);
280
- const formattedPipeline = [{
283
+ const formattedPipeline = [
284
+ {
281
285
  $match: {
282
286
  $and: formattedQuery
283
287
  }
284
- }, ...pipeline];
288
+ },
289
+ ...pipeline
290
+ ];
285
291
  const result = collection.watch(formattedPipeline, options);
286
292
  const originalOn = result.on.bind(result);
287
293
  /**
@@ -294,18 +300,18 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
294
300
  const winningRole = (0, utils_1.getWinningRole)(fullDocument, user, roles);
295
301
  const { status, document } = winningRole
296
302
  ? yield (0, machines_1.checkValidation)(winningRole, {
297
- type: "read",
303
+ type: 'read',
298
304
  roles,
299
305
  cursor: fullDocument,
300
- expansions: {},
306
+ expansions: {}
301
307
  }, user)
302
308
  : { status: true, document: fullDocument };
303
309
  const { status: updatedFieldsStatus, document: updatedFields } = winningRole
304
310
  ? yield (0, machines_1.checkValidation)(winningRole, {
305
- type: "read",
311
+ type: 'read',
306
312
  roles,
307
313
  cursor: updateDescription === null || updateDescription === void 0 ? void 0 : updateDescription.updatedFields,
308
- expansions: {},
314
+ expansions: {}
309
315
  }, user)
310
316
  : { status: true, document: updateDescription === null || updateDescription === void 0 ? void 0 : updateDescription.updatedFields };
311
317
  return { status, document, updatedFieldsStatus, updatedFields };
@@ -352,10 +358,10 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
352
358
  const winningRole = (0, utils_1.getWinningRole)(currentDoc, user, roles);
353
359
  const { status, document } = winningRole
354
360
  ? yield (0, machines_1.checkValidation)(winningRole, {
355
- type: "insert",
361
+ type: 'insert',
356
362
  roles,
357
363
  cursor: currentDoc,
358
- expansions: {},
364
+ expansions: {}
359
365
  }, user)
360
366
  : { status: !roles.length, document: currentDoc };
361
367
  return status ? document : undefined;
@@ -380,26 +386,28 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
380
386
  throw new Error('Update not permitted');
381
387
  }
382
388
  // Check if the update data contains MongoDB update operators (e.g., $set, $inc)
383
- const hasOperators = Object.keys(data).some(key => key.startsWith("$"));
389
+ const hasOperators = Object.keys(data).some((key) => key.startsWith('$'));
384
390
  // Flatten the update object to extract the actual fields being modified
385
391
  // const docToCheck = hasOperators
386
392
  // ? Object.values(data).reduce((acc, operation) => ({ ...acc, ...operation }), {})
387
393
  // : data
388
394
  const pipeline = [
389
395
  {
390
- $match: formattedQuery,
396
+ $match: formattedQuery
391
397
  },
392
- ...Object.entries(data).map(([key, value]) => ({ [key]: value })),
398
+ ...Object.entries(data).map(([key, value]) => ({ [key]: value }))
393
399
  ];
394
- const docsToCheck = hasOperators ? yield collection.aggregate(pipeline).toArray() : result;
400
+ const docsToCheck = hasOperators
401
+ ? yield collection.aggregate(pipeline).toArray()
402
+ : result;
395
403
  const filteredItems = yield Promise.all(docsToCheck.map((currentDoc) => __awaiter(void 0, void 0, void 0, function* () {
396
404
  const winningRole = (0, utils_1.getWinningRole)(currentDoc, user, roles);
397
405
  const { status, document } = winningRole
398
406
  ? yield (0, machines_1.checkValidation)(winningRole, {
399
- type: "write",
407
+ type: 'write',
400
408
  roles,
401
409
  cursor: currentDoc,
402
- expansions: {},
410
+ expansions: {}
403
411
  }, user)
404
412
  : { status: !roles.length, document: currentDoc };
405
413
  return status ? document : undefined;
@@ -439,10 +447,10 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
439
447
  const winningRole = (0, utils_1.getWinningRole)(currentDoc, user, roles);
440
448
  const { status, document } = winningRole
441
449
  ? yield (0, machines_1.checkValidation)(winningRole, {
442
- type: "delete",
450
+ type: 'delete',
443
451
  roles,
444
452
  cursor: currentDoc,
445
- expansions: {},
453
+ expansions: {}
446
454
  }, user)
447
455
  : { status: !roles.length, document: currentDoc };
448
456
  return status ? document : undefined;
@@ -457,10 +465,7 @@ const getOperators = (collection, { rules = {}, collName, user, run_as_system })
457
465
  }
458
466
  // Build final delete query with access control and ID filter
459
467
  const deleteQuery = {
460
- $and: [
461
- ...formattedQuery,
462
- { _id: { $in: elementsToDelete } }
463
- ]
468
+ $and: [...formattedQuery, { _id: { $in: elementsToDelete } }]
464
469
  };
465
470
  return collection.deleteMany(deleteQuery);
466
471
  }
@@ -18,14 +18,14 @@ export type GetValidRuleParams<T extends Role | Filter> = {
18
18
  record?: WithId<Document> | Document | null;
19
19
  };
20
20
  type Method<T extends keyof Collection<Document>> = Collection<Document>[T];
21
- export type GetOperatorsFunction = (collection: Collection<Document>, { rules, collName, user, run_as_system, }: {
21
+ export type GetOperatorsFunction = (collection: Collection<Document>, { rules, collName, user, run_as_system }: {
22
22
  user?: User;
23
23
  rules?: Rules;
24
24
  run_as_system?: boolean;
25
25
  collName: string;
26
26
  }) => {
27
- findOne: (...params: Parameters<Method<"findOne">>) => ReturnType<Method<"findOne">>;
28
- deleteOne: (...params: Parameters<Method<"findOne">>) => ReturnType<Method<"findOne">>;
27
+ findOne: (...params: Parameters<Method<'findOne'>>) => ReturnType<Method<'findOne'>>;
28
+ deleteOne: (...params: Parameters<Method<'findOne'>>) => ReturnType<Method<'findOne'>>;
29
29
  insertOne: (...params: Parameters<Method<'insertOne'>>) => ReturnType<Method<'insertOne'>>;
30
30
  updateOne: (...params: Parameters<Method<'updateOne'>>) => ReturnType<Method<'updateOne'>>;
31
31
  find: (...params: Parameters<Method<'find'>>) => FindCursor;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/services/mongodb-atlas/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/services/mongodb-atlas/model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/services/mongodb-atlas/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,IAAI,GAAG,MAAM,EAAE,2BAInD,kBAAkB,CAAC,CAAC,CAAC,QAoBvB,CAAA;AAGD,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,YAAK,EAAE,OAAO,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,UAO3H,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/services/mongodb-atlas/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,IAAI,GAAG,MAAM,EAAE,2BAInD,kBAAkB,CAAC,CAAC,CAAC,QAoBvB,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EAAE,YAAK,EACtB,OAAO,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACrD,OAAO,IAAI,UAQZ,CAAA"}
package/dist/state.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export declare class StateManager {
2
2
  private static _state;
3
- static select<K extends keyof typeof this._state>(key: K): NonNullable<typeof this._state[K]>;
4
- static setData<K extends keyof typeof this._state>(key: K, value: typeof this._state[K]): void;
3
+ static select<K extends keyof typeof this._state>(key: K): NonNullable<(typeof this._state)[K]>;
4
+ static setData<K extends keyof typeof this._state>(key: K, value: (typeof this._state)[K]): void;
5
5
  }
6
6
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AASA,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAC,MAAM,CAKnB;IACF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAI7F,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;CAG1F"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAgBA,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,MAAM,CAKpB;IACD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,CAAC,MAAM,EAC9C,GAAG,EAAE,CAAC,GACL,WAAW,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAIvC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,CAAC,MAAM,EAC/C,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CAIjC"}
@@ -26,10 +26,6 @@ export declare const generateContextData: ({ user, services, app, rules, current
26
26
  };
27
27
  services: {
28
28
  get: (serviceName: keyof typeof services) => {
29
- db: (dbName: string) => {
30
- collection: (collName: string) => ReturnType<import("../../services/mongodb-atlas/model").GetOperatorsFunction>;
31
- };
32
- } | {
33
29
  get: <T = null>({ url, headers }: import("../../services/api/model").GetParams) => Promise<{
34
30
  status: number;
35
31
  headers: import("undici/types/header").IncomingHttpHeaders;
@@ -64,6 +60,10 @@ export declare const generateContextData: ({ user, services, app, rules, current
64
60
  InvokeAsync: import("aws-sdk").Lambda["invokeAsync"];
65
61
  };
66
62
  s3: (region: string) => import("aws-sdk").S3;
63
+ } | {
64
+ db: (dbName: string) => {
65
+ collection: (collName: string) => ReturnType<import("../../services/mongodb-atlas/model").GetOperatorsFunction>;
66
+ };
67
67
  } | undefined;
68
68
  };
69
69
  functions: {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/utils/context/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,iFAQjC,yBAAyB;;;uBAGT,SAAS;;;;;;;;uBAUX,MAAM;;;+BAGE,MAAM,OAAO,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BA1BpC,GAAE;;;;;;;4BA2CU,MAAM,OAAO,aAAa,WAAW,SAAS;;;CAclE,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/utils/context/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,iFAQjC,yBAAyB;;;uBAGT,SAAS;;;;;;;;uBAUX,MAAM;;;+BAGE,MAAM,OAAO,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BA1BvC,GAAc;;;;;;;;;;;4BA2CC,MAAM,OAAO,aAAa,WAAW,SAAS;;;CAclE,CAAA"}
@@ -25,7 +25,7 @@ const generateContextData = ({ user, services, app, rules, currentFunction, func
25
25
  tag: process.env.NODE_ENV
26
26
  },
27
27
  values: {
28
- get: (key) => process.env[key],
28
+ get: (key) => process.env[key]
29
29
  },
30
30
  services: {
31
31
  get: (serviceName) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/context/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAGnD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,EACpC,IAAI,EACJ,GAAG,EACH,KAAK,EACL,IAAI,EACJ,eAAe,EACf,aAAa,EACb,QAAQ,EACT,EAAE,qBAAqB,gBA8BvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/context/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,EACpC,IAAI,EACJ,GAAG,EACH,KAAK,EACL,IAAI,EACJ,eAAe,EACf,aAAa,EACb,QAAQ,EACT,EAAE,qBAAqB,gBA4BvB"}
@@ -13,11 +13,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.GenerateContext = GenerateContext;
16
- const module_1 = __importDefault(require("module"));
16
+ const node_module_1 = require("node:module");
17
17
  const vm_1 = __importDefault(require("vm"));
18
18
  const bson_1 = require("bson");
19
19
  const helpers_1 = require("./helpers");
20
- const node_module_1 = require("node:module");
21
20
  /**
22
21
  * > Used to generate the current context
23
22
  * @testable
@@ -43,10 +42,9 @@ function GenerateContext(_a) {
43
42
  });
44
43
  try {
45
44
  const entryFile = (_c = (_b = require.main) === null || _b === void 0 ? void 0 : _b.filename) !== null && _c !== void 0 ? _c : process.cwd();
46
- console.log("🚀 ~ entryFile:", entryFile);
47
45
  const customRequire = (0, node_module_1.createRequire)(entryFile);
48
- console.log("🚀 ~ customRequire:", customRequire);
49
- vm_1.default.runInContext(module_1.default.wrap(currentFunction.code), vm_1.default.createContext(contextData))(exports, customRequire, module, __filename, __dirname);
46
+ vm_1.default.runInContext(currentFunction.code, vm_1.default.createContext(Object.assign(Object.assign({}, contextData), { require: customRequire, exports,
47
+ module, __filename: __filename, __dirname: __dirname })));
50
48
  }
51
49
  catch (e) {
52
50
  console.log(e);
@@ -1 +1 @@
1
- {"version":3,"file":"someAsync.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/someAsync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EAAE,EACV,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GACpE,OAAO,CAAC,OAAO,CAAC,CAUlB"}
1
+ {"version":3,"file":"someAsync.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/someAsync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EACV,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAClE,OAAO,CAAC,OAAO,CAAC,CAUlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"exposeRoutes.d.ts","sourceRoot":"","sources":["../../../src/utils/initializer/exposeRoutes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAGzC;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,SAAS,eAAe,kBAgB1D,CAAA"}
1
+ {"version":3,"file":"exposeRoutes.d.ts","sourceRoot":"","sources":["../../../src/utils/initializer/exposeRoutes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAMzC;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,SAAS,eAAe,kBAiE1D,CAAA"}
@@ -11,7 +11,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.exposeRoutes = void 0;
13
13
  const node_process_1 = require("node:process");
14
+ const utils_1 = require("../../auth/utils");
14
15
  const constants_1 = require("../../constants");
16
+ const crypto_1 = require("../crypto");
15
17
  /**
16
18
  * > Used to expose all app routes
17
19
  * @param fastify -> the fastify instance
@@ -24,7 +26,7 @@ const exposeRoutes = (fastify) => __awaiter(void 0, void 0, void 0, function* ()
24
26
  deployment_model: 'LOCAL',
25
27
  location: 'IE',
26
28
  hostname: `${constants_1.DEFAULT_CONFIG.HTTPS_SCHEMA}://${req.headers.host}`,
27
- ws_hostname: `${constants_1.DEFAULT_CONFIG.HTTPS_SCHEMA === "https" ? "wss" : "ws"}://${req.headers.host}`
29
+ ws_hostname: `${constants_1.DEFAULT_CONFIG.HTTPS_SCHEMA === 'https' ? 'wss' : 'ws'}://${req.headers.host}`
28
30
  });
29
31
  }));
30
32
  fastify.get('/health', () => __awaiter(void 0, void 0, void 0, function* () {
@@ -33,6 +35,47 @@ const exposeRoutes = (fastify) => __awaiter(void 0, void 0, void 0, function* ()
33
35
  uptime: (0, node_process_1.uptime)()
34
36
  });
35
37
  }));
38
+ fastify.post(utils_1.AUTH_ENDPOINTS.FIRST_USER, {
39
+ schema: utils_1.REGISTRATION_SCHEMA
40
+ }, function (req, res) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const { authCollection } = constants_1.AUTH_CONFIG;
43
+ const db = fastify.mongo.client.db(constants_1.DB_NAME);
44
+ const { email, password } = req.body;
45
+ const hashedPassword = yield (0, crypto_1.hashPassword)(password);
46
+ const users = db.collection(authCollection).find();
47
+ const list = yield (users === null || users === void 0 ? void 0 : users.toArray());
48
+ if (list === null || list === void 0 ? void 0 : list.length) {
49
+ res.status(409);
50
+ return {
51
+ error: `The ${authCollection} collection is not empty`
52
+ };
53
+ }
54
+ const result = yield db.collection(authCollection).insertOne({
55
+ email: email,
56
+ password: hashedPassword,
57
+ custom_data: {}
58
+ });
59
+ yield (db === null || db === void 0 ? void 0 : db.collection(authCollection).updateOne({
60
+ email: email
61
+ }, {
62
+ $set: {
63
+ identities: [
64
+ {
65
+ id: result === null || result === void 0 ? void 0 : result.insertedId.toString(),
66
+ provider_id: result === null || result === void 0 ? void 0 : result.insertedId.toString(),
67
+ provider_type: utils_1.PROVIDER_TYPE,
68
+ provider_data: { email }
69
+ }
70
+ ]
71
+ }
72
+ }));
73
+ res.status(201);
74
+ return {
75
+ userId: result === null || result === void 0 ? void 0 : result.insertedId
76
+ };
77
+ });
78
+ });
36
79
  }
37
80
  catch (e) {
38
81
  console.error('Error while exposing routes', e.message);
@@ -1 +1 @@
1
- {"version":3,"file":"registerPlugins.d.ts","sourceRoot":"","sources":["../../../src/utils/initializer/registerPlugins.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAKzC,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AAE9D,KAAK,gBAAgB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;AAGnD,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,SAAS,CAAA;CACzB,CAAA;AAQD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAU,oDAKnC,qBAAqB,kBAsBvB,CAAA"}
1
+ {"version":3,"file":"registerPlugins.d.ts","sourceRoot":"","sources":["../../../src/utils/initializer/registerPlugins.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAKzC,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AAE9D,KAAK,gBAAgB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;AAGnD,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,SAAS,CAAA;CACzB,CAAA;AAQD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAU,oDAKnC,qBAAqB,kBAoBvB,CAAA"}
@@ -36,11 +36,11 @@ const registerPlugins = (_a) => __awaiter(void 0, [_a], void 0, function* ({ reg
36
36
  registersConfig.forEach(({ plugin, options, pluginName }) => {
37
37
  try {
38
38
  register(plugin, options);
39
- console.log("registration COMPLETED --->", pluginName);
39
+ console.log('registration COMPLETED --->', pluginName);
40
40
  }
41
41
  catch (e) {
42
- console.log("Registration FAILED --->", pluginName);
43
- console.log("Error --->", e);
42
+ console.log('Registration FAILED --->', pluginName);
43
+ console.log('Error --->', e);
44
44
  }
45
45
  });
46
46
  }
@@ -58,15 +58,15 @@ exports.registerPlugins = registerPlugins;
58
58
  const getRegisterConfig = (_a) => __awaiter(void 0, [_a], void 0, function* ({ mongodbUrl, jwtSecret }) {
59
59
  return [
60
60
  {
61
- pluginName: "cors",
61
+ pluginName: 'cors',
62
62
  plugin: cors_1.default,
63
63
  options: {
64
64
  origin: '*',
65
- methods: ['POST', 'GET']
65
+ methods: ['POST', 'GET', 'DELETE']
66
66
  }
67
67
  },
68
68
  {
69
- pluginName: "fastifyMongodb",
69
+ pluginName: 'fastifyMongodb',
70
70
  plugin: mongodb_1.default,
71
71
  options: {
72
72
  forceClose: true,
@@ -74,19 +74,19 @@ const getRegisterConfig = (_a) => __awaiter(void 0, [_a], void 0, function* ({ m
74
74
  }
75
75
  },
76
76
  {
77
- pluginName: "jwtAuthPlugin",
77
+ pluginName: 'jwtAuthPlugin',
78
78
  plugin: jwt_1.default,
79
79
  options: {
80
80
  secret: jwtSecret
81
81
  }
82
82
  },
83
83
  {
84
- pluginName: "authController",
84
+ pluginName: 'authController',
85
85
  plugin: controller_1.authController,
86
86
  options: { prefix: `${constants_1.API_VERSION}/auth` }
87
87
  },
88
88
  {
89
- pluginName: "localUserPassController",
89
+ pluginName: 'localUserPassController',
90
90
  plugin: controller_2.localUserPassController,
91
91
  options: {
92
92
  prefix: `${constants_1.API_VERSION}/app/:appId/auth/providers/local-userpass`
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/utils/roles/helpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAIrD,eAAO,MAAM,kBAAkB,GAAU,QAAQ,cAAc,CAAC,QAAQ,CAAC,EAAE,aAAa,oBAAoB,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,OAAO,CAa5J,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/utils/roles/helpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAIrD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,cAAc,CAAC,QAAQ,CAAC,EAChC,aAAa,oBAAoB,EACjC,OAAO,cAAc,CAAC,MAAM,CAAC,KAC5B,OAAO,CAAC,OAAO,CAgBjB,CAAA"}
@@ -18,21 +18,23 @@ const state_1 = require("../../state");
18
18
  const context_1 = require("../context");
19
19
  const rules_1 = require("../rules");
20
20
  const utils_1 = __importDefault(require("../rules-matcher/utils"));
21
- const functionsConditions = ["%%true", "%%false"];
21
+ const functionsConditions = ['%%true', '%%false'];
22
22
  const evaluateExpression = (params, expression, user) => __awaiter(void 0, void 0, void 0, function* () {
23
23
  if (!expression || typeof expression === 'boolean')
24
24
  return !!expression;
25
- const value = Object.assign(Object.assign(Object.assign({}, params.expansions), params.cursor), { "%%user": user, '%%true': true });
25
+ const value = Object.assign(Object.assign(Object.assign({}, params.expansions), params.cursor), { '%%user': user, '%%true': true });
26
26
  const conditions = (0, rules_1.expandQuery)(expression, value);
27
27
  const complexCondition = Object.entries(conditions).find(([key]) => functionsConditions.includes(key));
28
- return complexCondition ? yield evaluateComplexExpression(complexCondition, params, user) : utils_1.default.checkRule(conditions, value, {});
28
+ return complexCondition
29
+ ? yield evaluateComplexExpression(complexCondition, params, user)
30
+ : utils_1.default.checkRule(conditions, value, {});
29
31
  });
30
32
  exports.evaluateExpression = evaluateExpression;
31
33
  const evaluateComplexExpression = (condition, params, user) => __awaiter(void 0, void 0, void 0, function* () {
32
34
  const [key, config] = condition;
33
- const { name } = config["%function"];
34
- const functionsList = state_1.StateManager.select("functions");
35
- const app = state_1.StateManager.select("app");
35
+ const { name } = config['%function'];
36
+ const functionsList = state_1.StateManager.select('functions');
37
+ const app = state_1.StateManager.select('app');
36
38
  const currentFunction = functionsList[name];
37
39
  const response = yield (0, context_1.GenerateContext)({
38
40
  args: [params.cursor],
@@ -43,5 +45,5 @@ const evaluateComplexExpression = (condition, params, user) => __awaiter(void 0,
43
45
  functionsList,
44
46
  services: services_1.services
45
47
  });
46
- return key === "%%true" ? response : !response;
48
+ return key === '%%true' ? response : !response;
47
49
  });
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/utils/roles/interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAA;AAE1C,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,KAAK,CAAC,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IAEZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,gBAAgB,CAAC,EAAE,0BAA0B,CAAA;IAC7C,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAC5B,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,MAAM,CAAC,EAAE;QACP,CAAC,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAA;KACvC,CAAA;IACD,iBAAiB,CAAC,EAAE;QAClB,CAAC,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAA;KACvC,CAAA;CACF;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,IAAI,EAAE,CAAA;IAEb,MAAM,EAAE,GAAG,CAAA;IAEX,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;CACxD;AAID,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/utils/roles/interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAA;AAE1C,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,KAAK,CAAC,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IAEZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,gBAAgB,CAAC,EAAE,0BAA0B,CAAA;IAC7C,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAC5B,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,MAAM,CAAC,EAAE;QACP,CAAC,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAA;KACvC,CAAA;IACD,iBAAiB,CAAC,EAAE;QAClB,CAAC,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAA;KACvC,CAAA;CACF;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,IAAI,EAAE,CAAA;IAEb,MAAM,EAAE,GAAG,CAAA;IAEX,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;CACxD;AAGD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA"}