@flowerforce/flowerbase 1.2.1-beta.2 → 1.2.1-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -6
- package/dist/auth/controller.d.ts.map +1 -1
- package/dist/auth/controller.js +55 -4
- package/dist/auth/plugins/jwt.d.ts.map +1 -1
- package/dist/auth/plugins/jwt.js +52 -6
- package/dist/auth/providers/anon-user/controller.d.ts +8 -0
- package/dist/auth/providers/anon-user/controller.d.ts.map +1 -0
- package/dist/auth/providers/anon-user/controller.js +90 -0
- package/dist/auth/providers/anon-user/dtos.d.ts +10 -0
- package/dist/auth/providers/anon-user/dtos.d.ts.map +1 -0
- package/dist/auth/providers/anon-user/dtos.js +2 -0
- package/dist/auth/providers/custom-function/controller.d.ts.map +1 -1
- package/dist/auth/providers/custom-function/controller.js +35 -25
- package/dist/auth/providers/custom-function/dtos.d.ts +4 -1
- package/dist/auth/providers/custom-function/dtos.d.ts.map +1 -1
- package/dist/auth/providers/local-userpass/controller.d.ts.map +1 -1
- package/dist/auth/providers/local-userpass/controller.js +159 -73
- package/dist/auth/providers/local-userpass/dtos.d.ts +17 -2
- package/dist/auth/providers/local-userpass/dtos.d.ts.map +1 -1
- package/dist/auth/utils.d.ts +76 -14
- package/dist/auth/utils.d.ts.map +1 -1
- package/dist/auth/utils.js +55 -61
- package/dist/constants.d.ts +12 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +16 -4
- package/dist/features/functions/controller.d.ts.map +1 -1
- package/dist/features/functions/controller.js +31 -12
- package/dist/features/functions/dtos.d.ts +3 -0
- package/dist/features/functions/dtos.d.ts.map +1 -1
- package/dist/features/functions/interface.d.ts +3 -0
- package/dist/features/functions/interface.d.ts.map +1 -1
- package/dist/features/functions/utils.d.ts +3 -2
- package/dist/features/functions/utils.d.ts.map +1 -1
- package/dist/features/functions/utils.js +19 -7
- package/dist/features/triggers/index.d.ts.map +1 -1
- package/dist/features/triggers/index.js +49 -7
- package/dist/features/triggers/interface.d.ts +1 -0
- package/dist/features/triggers/interface.d.ts.map +1 -1
- package/dist/features/triggers/utils.d.ts.map +1 -1
- package/dist/features/triggers/utils.js +67 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -13
- package/dist/services/mongodb-atlas/index.d.ts.map +1 -1
- package/dist/services/mongodb-atlas/index.js +72 -2
- package/dist/services/mongodb-atlas/model.d.ts +3 -2
- package/dist/services/mongodb-atlas/model.d.ts.map +1 -1
- package/dist/services/mongodb-atlas/utils.d.ts.map +1 -1
- package/dist/services/mongodb-atlas/utils.js +3 -1
- package/dist/shared/handleUserRegistration.d.ts.map +1 -1
- package/dist/shared/handleUserRegistration.js +66 -1
- package/dist/shared/models/handleUserRegistration.model.d.ts +2 -1
- package/dist/shared/models/handleUserRegistration.model.d.ts.map +1 -1
- package/dist/shared/models/handleUserRegistration.model.js +1 -0
- package/dist/utils/context/helpers.d.ts +6 -6
- package/dist/utils/context/helpers.d.ts.map +1 -1
- package/dist/utils/context/index.d.ts +1 -1
- package/dist/utils/context/index.d.ts.map +1 -1
- package/dist/utils/context/index.js +176 -9
- package/dist/utils/context/interface.d.ts +1 -1
- package/dist/utils/context/interface.d.ts.map +1 -1
- package/dist/utils/crypto/index.d.ts +1 -0
- package/dist/utils/crypto/index.d.ts.map +1 -1
- package/dist/utils/crypto/index.js +6 -2
- package/dist/utils/initializer/exposeRoutes.js +1 -1
- package/dist/utils/initializer/registerPlugins.d.ts.map +1 -1
- package/dist/utils/initializer/registerPlugins.js +12 -4
- package/dist/utils/roles/helpers.js +2 -1
- package/dist/utils/rules-matcher/utils.d.ts.map +1 -1
- package/dist/utils/rules-matcher/utils.js +3 -0
- package/package.json +1 -2
- package/src/auth/controller.ts +71 -5
- package/src/auth/plugins/jwt.test.ts +93 -0
- package/src/auth/plugins/jwt.ts +67 -8
- package/src/auth/providers/anon-user/controller.ts +91 -0
- package/src/auth/providers/anon-user/dtos.ts +10 -0
- package/src/auth/providers/custom-function/controller.ts +40 -31
- package/src/auth/providers/custom-function/dtos.ts +5 -1
- package/src/auth/providers/local-userpass/controller.ts +211 -101
- package/src/auth/providers/local-userpass/dtos.ts +20 -2
- package/src/auth/utils.ts +66 -83
- package/src/constants.ts +14 -2
- package/src/features/functions/controller.ts +42 -12
- package/src/features/functions/dtos.ts +3 -0
- package/src/features/functions/interface.ts +3 -0
- package/src/features/functions/utils.ts +29 -8
- package/src/features/triggers/index.ts +44 -1
- package/src/features/triggers/interface.ts +1 -0
- package/src/features/triggers/utils.ts +89 -37
- package/src/index.ts +49 -13
- package/src/services/mongodb-atlas/__tests__/findOneAndUpdate.test.ts +95 -0
- package/src/services/mongodb-atlas/index.ts +665 -567
- package/src/services/mongodb-atlas/model.ts +16 -3
- package/src/services/mongodb-atlas/utils.ts +3 -0
- package/src/shared/handleUserRegistration.ts +83 -2
- package/src/shared/models/handleUserRegistration.model.ts +2 -1
- package/src/utils/__tests__/registerPlugins.test.ts +5 -1
- package/src/utils/context/index.ts +238 -18
- package/src/utils/context/interface.ts +1 -1
- package/src/utils/crypto/index.ts +5 -1
- package/src/utils/initializer/exposeRoutes.ts +1 -1
- package/src/utils/initializer/registerPlugins.ts +8 -0
- package/src/utils/roles/helpers.ts +3 -2
- package/src/utils/rules-matcher/utils.ts +3 -0
|
@@ -118,18 +118,18 @@ const handleCronTrigger = (_a) => __awaiter(void 0, [_a], void 0, function* ({ c
|
|
|
118
118
|
registerOnClose(app, () => task.stop(), 'Scheduled trigger');
|
|
119
119
|
});
|
|
120
120
|
const handleAuthenticationTrigger = (_a) => __awaiter(void 0, [_a], void 0, function* ({ config, triggerHandler, functionsList, services, app }) {
|
|
121
|
-
|
|
121
|
+
var _b;
|
|
122
|
+
const { database, isAutoTrigger } = config;
|
|
123
|
+
const authCollection = (_b = constants_1.AUTH_CONFIG.authCollection) !== null && _b !== void 0 ? _b : 'auth_users';
|
|
124
|
+
const collection = app.mongo.client.db(database || constants_1.DB_NAME).collection(authCollection);
|
|
122
125
|
const pipeline = [
|
|
123
126
|
{
|
|
124
127
|
$match: {
|
|
125
|
-
operationType: { $in: ['insert'] }
|
|
128
|
+
operationType: { $in: ['insert', 'update', 'replace'] }
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
131
|
];
|
|
129
|
-
const changeStream =
|
|
130
|
-
.db(database || constants_1.DB_NAME)
|
|
131
|
-
.collection(constants_1.AUTH_CONFIG.authCollection)
|
|
132
|
-
.watch(pipeline, {
|
|
132
|
+
const changeStream = collection.watch(pipeline, {
|
|
133
133
|
fullDocument: 'whenAvailable'
|
|
134
134
|
});
|
|
135
135
|
changeStream.on('error', (error) => {
|
|
@@ -139,27 +139,68 @@ const handleAuthenticationTrigger = (_a) => __awaiter(void 0, [_a], void 0, func
|
|
|
139
139
|
});
|
|
140
140
|
changeStream.on('change', function (change) {
|
|
141
141
|
return __awaiter(this, void 0, void 0, function* () {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
142
|
+
var _a, _b;
|
|
143
|
+
const operationType = change['operationType'];
|
|
144
|
+
const documentKey = change['documentKey'];
|
|
145
|
+
const fullDocument = change['fullDocument'];
|
|
146
|
+
if (!(documentKey === null || documentKey === void 0 ? void 0 : documentKey._id)) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const updateDescription = change['updateDescription'];
|
|
150
|
+
const updatedStatus = (_a = updateDescription === null || updateDescription === void 0 ? void 0 : updateDescription.updatedFields) === null || _a === void 0 ? void 0 : _a.status;
|
|
151
|
+
let confirmedCandidate = false;
|
|
152
|
+
let confirmedDocument = fullDocument;
|
|
153
|
+
if (operationType === 'update') {
|
|
154
|
+
if (updatedStatus === 'confirmed') {
|
|
155
|
+
confirmedCandidate = true;
|
|
156
|
+
}
|
|
157
|
+
else if (updatedStatus === undefined) {
|
|
158
|
+
const fetched = yield collection.findOne({
|
|
159
|
+
_id: documentKey._id
|
|
160
|
+
});
|
|
161
|
+
confirmedDocument = fetched !== null && fetched !== void 0 ? fetched : confirmedDocument;
|
|
162
|
+
confirmedCandidate = (confirmedDocument === null || confirmedDocument === void 0 ? void 0 : confirmedDocument.status) === 'confirmed';
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
confirmedCandidate = (confirmedDocument === null || confirmedDocument === void 0 ? void 0 : confirmedDocument.status) === 'confirmed';
|
|
167
|
+
}
|
|
168
|
+
if (!confirmedCandidate) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const updateResult = yield collection.findOneAndUpdate({
|
|
172
|
+
_id: documentKey._id,
|
|
173
|
+
status: 'confirmed',
|
|
174
|
+
on_user_creation_triggered_at: { $exists: false }
|
|
175
|
+
}, {
|
|
176
|
+
$set: {
|
|
177
|
+
on_user_creation_triggered_at: new Date()
|
|
178
|
+
}
|
|
179
|
+
}, {
|
|
180
|
+
returnDocument: 'after'
|
|
181
|
+
});
|
|
182
|
+
const document = (_b = updateResult === null || updateResult === void 0 ? void 0 : updateResult.value) !== null && _b !== void 0 ? _b : confirmedDocument;
|
|
183
|
+
if (!document) {
|
|
184
|
+
return;
|
|
162
185
|
}
|
|
186
|
+
delete document.password;
|
|
187
|
+
const currentUser = Object.assign({}, document);
|
|
188
|
+
delete currentUser.password;
|
|
189
|
+
const userData = Object.assign(Object.assign({}, currentUser), { id: currentUser._id.toString(), data: {
|
|
190
|
+
_id: currentUser._id.toString(),
|
|
191
|
+
email: currentUser.email
|
|
192
|
+
} });
|
|
193
|
+
// TODO change va ripulito
|
|
194
|
+
yield (0, context_1.GenerateContext)({
|
|
195
|
+
args: isAutoTrigger ? [userData] : [{ user: userData /*, ...change */ }],
|
|
196
|
+
app,
|
|
197
|
+
rules: state_1.StateManager.select("rules"),
|
|
198
|
+
user: {}, // TODO from currentUser ??
|
|
199
|
+
currentFunction: triggerHandler,
|
|
200
|
+
functionsList,
|
|
201
|
+
services,
|
|
202
|
+
runAsSystem: true
|
|
203
|
+
});
|
|
163
204
|
});
|
|
164
205
|
});
|
|
165
206
|
registerOnClose(app, () => __awaiter(void 0, void 0, void 0, function* () {
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AActB,cAAc,SAAS,CAAA;AAGvB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,IAA0B,EAC1B,SAAqC,EACrC,IAA0B,EAC1B,UAAuC,EACvC,UAAwC,EACxC,QAAQ,EACT,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AActB,cAAc,SAAS,CAAA;AAGvB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,IAA0B,EAC1B,SAAqC,EACrC,IAA0B,EAC1B,UAAuC,EACvC,UAAwC,EACxC,QAAQ,EACT,EAAE,gBAAgB,iBA6GlB"}
|
package/dist/index.js
CHANGED
|
@@ -75,21 +75,30 @@ __exportStar(require("./model"), exports);
|
|
|
75
75
|
function initialize(_a) {
|
|
76
76
|
return __awaiter(this, arguments, void 0, function* ({ projectId, host = constants_1.DEFAULT_CONFIG.HOST, jwtSecret = constants_1.DEFAULT_CONFIG.JWT_SECRET, port = constants_1.DEFAULT_CONFIG.PORT, mongodbUrl = constants_1.DEFAULT_CONFIG.MONGODB_URL, corsConfig = constants_1.DEFAULT_CONFIG.CORS_OPTIONS, basePath }) {
|
|
77
77
|
var _b, _c;
|
|
78
|
+
if (!jwtSecret || jwtSecret.trim().length === 0) {
|
|
79
|
+
throw new Error('JWT secret missing: set JWT_SECRET or pass jwtSecret to initialize()');
|
|
80
|
+
}
|
|
78
81
|
const resolvedBasePath = (_c = basePath !== null && basePath !== void 0 ? basePath : (_b = require.main) === null || _b === void 0 ? void 0 : _b.path) !== null && _c !== void 0 ? _c : process.cwd();
|
|
79
82
|
const fastify = (0, fastify_1.default)({
|
|
80
83
|
logger: !!constants_1.DEFAULT_CONFIG.ENABLE_LOGGER
|
|
81
84
|
});
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
const isTest = process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined;
|
|
86
|
+
const logInfo = (...args) => {
|
|
87
|
+
if (!isTest) {
|
|
88
|
+
console.log(...args);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
logInfo("BASE PATH", resolvedBasePath);
|
|
92
|
+
logInfo("CURRENT PORT", port);
|
|
93
|
+
logInfo("CURRENT HOST", host);
|
|
85
94
|
const functionsList = yield (0, utils_2.loadFunctions)(resolvedBasePath);
|
|
86
|
-
|
|
95
|
+
logInfo("Functions LOADED");
|
|
87
96
|
const triggersList = yield (0, utils_4.loadTriggers)(resolvedBasePath);
|
|
88
|
-
|
|
97
|
+
logInfo("Triggers LOADED");
|
|
89
98
|
const endpointsList = yield (0, utils_1.loadEndpoints)(resolvedBasePath);
|
|
90
|
-
|
|
99
|
+
logInfo("Endpoints LOADED");
|
|
91
100
|
const rulesList = yield (0, utils_3.loadRules)(resolvedBasePath);
|
|
92
|
-
|
|
101
|
+
logInfo("Rules LOADED");
|
|
93
102
|
const stateConfig = {
|
|
94
103
|
functions: functionsList,
|
|
95
104
|
triggers: triggersList,
|
|
@@ -107,7 +116,33 @@ function initialize(_a) {
|
|
|
107
116
|
deepLinking: false
|
|
108
117
|
},
|
|
109
118
|
uiHooks: {
|
|
110
|
-
onRequest: function (request, reply, next) {
|
|
119
|
+
onRequest: function (request, reply, next) {
|
|
120
|
+
const swaggerUser = constants_1.DEFAULT_CONFIG.SWAGGER_UI_USER;
|
|
121
|
+
const swaggerPassword = constants_1.DEFAULT_CONFIG.SWAGGER_UI_PASSWORD;
|
|
122
|
+
if (!swaggerUser && !swaggerPassword) {
|
|
123
|
+
next();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const authHeader = request.headers.authorization;
|
|
127
|
+
if (!authHeader || !authHeader.startsWith('Basic ')) {
|
|
128
|
+
reply
|
|
129
|
+
.code(401)
|
|
130
|
+
.header('WWW-Authenticate', 'Basic realm="Swagger UI"')
|
|
131
|
+
.send({ message: 'Unauthorized' });
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const encoded = authHeader.slice('Basic '.length);
|
|
135
|
+
const decoded = Buffer.from(encoded, 'base64').toString('utf8');
|
|
136
|
+
const [user, pass] = decoded.split(':');
|
|
137
|
+
if (user !== swaggerUser || pass !== swaggerPassword) {
|
|
138
|
+
reply
|
|
139
|
+
.code(401)
|
|
140
|
+
.header('WWW-Authenticate', 'Basic realm="Swagger UI"')
|
|
141
|
+
.send({ message: 'Unauthorized' });
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
next();
|
|
145
|
+
},
|
|
111
146
|
preHandler: function (request, reply, next) { next(); }
|
|
112
147
|
},
|
|
113
148
|
staticCSP: true,
|
|
@@ -122,15 +157,15 @@ function initialize(_a) {
|
|
|
122
157
|
functionsList,
|
|
123
158
|
corsConfig
|
|
124
159
|
});
|
|
125
|
-
|
|
160
|
+
logInfo('Plugins registration COMPLETED');
|
|
126
161
|
yield (0, exposeRoutes_1.exposeRoutes)(fastify);
|
|
127
|
-
|
|
162
|
+
logInfo('APP Routes registration COMPLETED');
|
|
128
163
|
yield (0, functions_1.registerFunctions)({ app: fastify, functionsList, rulesList });
|
|
129
|
-
|
|
164
|
+
logInfo('Functions registration COMPLETED');
|
|
130
165
|
yield (0, endpoints_1.generateEndpoints)({ app: fastify, functionsList, endpointsList, rulesList });
|
|
131
|
-
|
|
166
|
+
logInfo('HTTP Endpoints registration COMPLETED');
|
|
132
167
|
fastify.ready(() => {
|
|
133
|
-
|
|
168
|
+
logInfo("FASTIFY IS READY");
|
|
134
169
|
if ((triggersList === null || triggersList === void 0 ? void 0 : triggersList.length) > 0)
|
|
135
170
|
(0, triggers_1.activateTriggers)({ fastify, triggersList, functionsList });
|
|
136
171
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/mongodb-atlas/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/mongodb-atlas/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAyC,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAiyBrF,QAAA,MAAM,YAAY,EAAE,oBAsBlB,CAAA;AAEF,eAAe,YAAY,CAAA"}
|
|
@@ -272,6 +272,76 @@ const getOperators = (collection, { rules, collName, user, run_as_system }) => {
|
|
|
272
272
|
}
|
|
273
273
|
return collection.updateOne(query, data, options);
|
|
274
274
|
}),
|
|
275
|
+
/**
|
|
276
|
+
* Finds and updates a single document with role-based validation and access control.
|
|
277
|
+
*
|
|
278
|
+
* @param {Filter<Document>} query - The MongoDB query used to match the document to update.
|
|
279
|
+
* @param {UpdateFilter<Document> | Partial<Document>} data - The update operations or replacement document.
|
|
280
|
+
* @param {FindOneAndUpdateOptions} [options] - Optional settings for the findOneAndUpdate operation.
|
|
281
|
+
* @returns {Promise<FindAndModifyResult<Document>>} The result of the findOneAndUpdate operation.
|
|
282
|
+
*
|
|
283
|
+
* @throws {Error} If the user is not authorized to update the document.
|
|
284
|
+
*/
|
|
285
|
+
findOneAndUpdate: (query, data, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
286
|
+
var _a;
|
|
287
|
+
if (!run_as_system) {
|
|
288
|
+
(0, utils_2.checkDenyOperation)(normalizedRules, collection.collectionName, model_1.CRUD_OPERATIONS.UPDATE);
|
|
289
|
+
const formattedQuery = (0, utils_2.getFormattedQuery)(filters, query, user);
|
|
290
|
+
const safeQuery = Array.isArray(formattedQuery)
|
|
291
|
+
? (0, utils_2.normalizeQuery)(formattedQuery)
|
|
292
|
+
: formattedQuery;
|
|
293
|
+
const result = yield collection.findOne({ $and: safeQuery });
|
|
294
|
+
if (!result) {
|
|
295
|
+
throw new Error('Update not permitted');
|
|
296
|
+
}
|
|
297
|
+
const winningRole = (0, utils_1.getWinningRole)(result, user, roles);
|
|
298
|
+
const hasOperators = Object.keys(data).some((key) => key.startsWith('$'));
|
|
299
|
+
const pipeline = [
|
|
300
|
+
{
|
|
301
|
+
$match: { $and: safeQuery }
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
$limit: 1
|
|
305
|
+
},
|
|
306
|
+
...Object.entries(data).map(([key, value]) => ({ [key]: value }))
|
|
307
|
+
];
|
|
308
|
+
const [docToCheck] = hasOperators
|
|
309
|
+
? yield collection.aggregate(pipeline).toArray()
|
|
310
|
+
: [data];
|
|
311
|
+
const { status, document } = winningRole
|
|
312
|
+
? yield (0, machines_1.checkValidation)(winningRole, {
|
|
313
|
+
type: 'write',
|
|
314
|
+
roles,
|
|
315
|
+
cursor: docToCheck,
|
|
316
|
+
expansions: {}
|
|
317
|
+
}, user)
|
|
318
|
+
: fallbackAccess(docToCheck);
|
|
319
|
+
const areDocumentsEqual = (0, isEqual_1.default)(document, docToCheck);
|
|
320
|
+
if (!status || !areDocumentsEqual) {
|
|
321
|
+
throw new Error('Update not permitted');
|
|
322
|
+
}
|
|
323
|
+
const updateResult = options
|
|
324
|
+
? yield collection.findOneAndUpdate({ $and: safeQuery }, data, options)
|
|
325
|
+
: yield collection.findOneAndUpdate({ $and: safeQuery }, data);
|
|
326
|
+
if (!updateResult) {
|
|
327
|
+
return updateResult;
|
|
328
|
+
}
|
|
329
|
+
const readRole = (0, utils_1.getWinningRole)(updateResult, user, roles);
|
|
330
|
+
const readResult = readRole
|
|
331
|
+
? yield (0, machines_1.checkValidation)(readRole, {
|
|
332
|
+
type: 'read',
|
|
333
|
+
roles,
|
|
334
|
+
cursor: updateResult,
|
|
335
|
+
expansions: {}
|
|
336
|
+
}, user)
|
|
337
|
+
: fallbackAccess(updateResult);
|
|
338
|
+
const sanitizedDoc = readResult.status ? ((_a = readResult.document) !== null && _a !== void 0 ? _a : updateResult) : {};
|
|
339
|
+
return sanitizedDoc;
|
|
340
|
+
}
|
|
341
|
+
return options
|
|
342
|
+
? collection.findOneAndUpdate(query, data, options)
|
|
343
|
+
: collection.findOneAndUpdate(query, data);
|
|
344
|
+
}),
|
|
275
345
|
/**
|
|
276
346
|
* Finds documents in a MongoDB collection with optional role-based access control and post-query validation.
|
|
277
347
|
*
|
|
@@ -408,7 +478,7 @@ const getOperators = (collection, { rules, collName, user, run_as_system }) => {
|
|
|
408
478
|
return collection.watch(pipeline, options);
|
|
409
479
|
},
|
|
410
480
|
//TODO -> add filter & rules in aggregate
|
|
411
|
-
aggregate: (
|
|
481
|
+
aggregate: (pipeline = [], options, isClient) => {
|
|
412
482
|
if (run_as_system || !isClient) {
|
|
413
483
|
return collection.aggregate(pipeline, options);
|
|
414
484
|
}
|
|
@@ -438,7 +508,7 @@ const getOperators = (collection, { rules, collName, user, run_as_system }) => {
|
|
|
438
508
|
const newCursor = Object.create(originalCursor);
|
|
439
509
|
newCursor.toArray = () => __awaiter(void 0, void 0, void 0, function* () { return originalCursor.toArray(); });
|
|
440
510
|
return newCursor;
|
|
441
|
-
}
|
|
511
|
+
},
|
|
442
512
|
/**
|
|
443
513
|
* Inserts multiple documents into a MongoDB collection with optional role-based access control and validation.
|
|
444
514
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FastifyInstance } from 'fastify';
|
|
2
|
-
import { Collection, Document, FindCursor, WithId } from 'mongodb';
|
|
2
|
+
import { Collection, Document, FindCursor, FindOneAndUpdateOptions, Filter as MongoFilter, UpdateFilter, WithId } from 'mongodb';
|
|
3
3
|
import { User } from '../../auth/dtos';
|
|
4
4
|
import { Filter, Rules } from '../../features/rules/interface';
|
|
5
5
|
import { Role } from '../../utils/roles/interface';
|
|
@@ -28,9 +28,10 @@ export type GetOperatorsFunction = (collection: Collection<Document>, { rules, c
|
|
|
28
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
|
+
findOneAndUpdate: (filter: MongoFilter<Document>, update: UpdateFilter<Document> | Document[], options?: FindOneAndUpdateOptions) => Promise<Document | null>;
|
|
31
32
|
find: (...params: Parameters<Method<'find'>>) => FindCursor;
|
|
32
33
|
watch: (...params: Parameters<Method<'watch'>>) => ReturnType<Method<'watch'>>;
|
|
33
|
-
aggregate: (...params: [...Parameters<Method<'aggregate'>>, isClient: boolean]) =>
|
|
34
|
+
aggregate: (...params: [...Parameters<Method<'aggregate'>>, isClient: boolean]) => ReturnType<Method<'aggregate'>>;
|
|
34
35
|
insertMany: (...params: Parameters<Method<'insertMany'>>) => ReturnType<Method<'insertMany'>>;
|
|
35
36
|
updateMany: (...params: Parameters<Method<'updateMany'>>) => ReturnType<Method<'updateMany'>>;
|
|
36
37
|
deleteMany: (...params: Parameters<Method<'deleteMany'>>) => ReturnType<Method<'deleteMany'>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/services/mongodb-atlas/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EACL,mBAAmB,EAEnB,MAAM,EAEN,UAAU,EACV,KAAK,EAGN,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAGlD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE7D,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,IAAI,GAAG,MAAM,EAAE,2BAInD,kBAAkB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/services/mongodb-atlas/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EACL,mBAAmB,EAEnB,MAAM,EAEN,UAAU,EACV,KAAK,EAGN,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAGlD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE7D,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,IAAI,GAAG,MAAM,EAAE,2BAInD,kBAAkB,CAAC,CAAC,CAAC,QA8BvB,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,8BAcZ,CAAA;AAED,eAAO,MAAM,sBAAsB,GACjC,UAAS,MAAM,EAAO,EACtB,OAAO,IAAI,KACV,UAAU,GAAG,IAaf,CAAA;AAED,eAAO,MAAM,4BAA4B,GACvC,UAAU,mBAAmB,EAC7B,OAAO,MAAM,CACX,MAAM,EACN;IACE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;CACf,CACF,EACD,MAAM,IAAI,EACV,gBAAgB,MAAM,EACtB,UAAU;IACR,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,KACA,mBA6GF,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,gBAAgB,MAAM,EACtB,WAAW,eAAe,SAM3B,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE;;;;;;;;iBA2HwvrS,CAAC;sBAAgC,CAAC;2BAAsC,CAAC;;;;IAnH/3rS;AAED,eAAO,MAAM,0BAA0B,GAAI,UAAU,QAAQ,EAAE,aAgC9D,CAAA;AAYD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,QA+BvE;AAED,wBAAgB,8BAA8B,CAAC,WAAW,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;CAAE,YAK9E;AAyBD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,EAAE,uBAKtF"}
|
|
@@ -16,18 +16,20 @@ const model_1 = require("./model");
|
|
|
16
16
|
const getValidRule = ({ filters = [], user, record = null }) => {
|
|
17
17
|
if (!filters.length)
|
|
18
18
|
return [];
|
|
19
|
+
const rootRecord = record !== null && record !== void 0 ? record : null;
|
|
19
20
|
return filters.filter((f) => {
|
|
20
21
|
if (Object.keys(f.apply_when).length === 0)
|
|
21
22
|
return true;
|
|
22
23
|
// expandQuery traduce i placeholder (%%user, %%true)
|
|
23
24
|
const conditions = (0, rules_1.expandQuery)(f.apply_when, {
|
|
25
|
+
'%%root': rootRecord,
|
|
24
26
|
'%%user': user,
|
|
25
27
|
'%%true': true
|
|
26
28
|
/** values */
|
|
27
29
|
});
|
|
28
30
|
// checkRule valuta se i campi del record soddisfano quella condizione.
|
|
29
31
|
// Quindi le regole vengono effettivamente rispettate.
|
|
30
|
-
const valid = utils_1.default.checkRule(conditions, Object.assign(Object.assign({}, (record !== null && record !== void 0 ? record : {})), { '%%user': user, '%%true': true }), {});
|
|
32
|
+
const valid = utils_1.default.checkRule(conditions, Object.assign(Object.assign({}, (record !== null && record !== void 0 ? record : {})), { '%%root': rootRecord, '%%user': user, '%%true': true }), {});
|
|
31
33
|
return valid;
|
|
32
34
|
});
|
|
33
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleUserRegistration.d.ts","sourceRoot":"","sources":["../../src/shared/handleUserRegistration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handleUserRegistration.d.ts","sourceRoot":"","sources":["../../src/shared/handleUserRegistration.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AAE9E;;;;;;GAMG;AACH,QAAA,MAAM,sBAAsB,EAAE,sBAkI7B,CAAA;AAED,eAAe,sBAAsB,CAAA"}
|
|
@@ -10,6 +10,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const constants_1 = require("../constants");
|
|
13
|
+
const state_1 = require("../state");
|
|
14
|
+
const context_1 = require("../utils/context");
|
|
13
15
|
const crypto_1 = require("../utils/crypto");
|
|
14
16
|
/**
|
|
15
17
|
* Register user
|
|
@@ -19,11 +21,16 @@ const crypto_1 = require("../utils/crypto");
|
|
|
19
21
|
* @returns {Promise<InsertOneResult<Document>>} A promise resolving to the result of the insert operation.
|
|
20
22
|
*/
|
|
21
23
|
const handleUserRegistration = (app, opt) => (_a) => __awaiter(void 0, [_a], void 0, function* ({ email, password }) {
|
|
24
|
+
var _b;
|
|
22
25
|
const { run_as_system, skipUserCheck, provider } = opt !== null && opt !== void 0 ? opt : {};
|
|
23
26
|
if (!run_as_system) {
|
|
24
27
|
throw new Error('only run_as_system');
|
|
25
28
|
}
|
|
26
29
|
const { authCollection } = constants_1.AUTH_CONFIG;
|
|
30
|
+
const localUserpassConfig = constants_1.AUTH_CONFIG.localUserpassConfig;
|
|
31
|
+
const autoConfirm = (localUserpassConfig === null || localUserpassConfig === void 0 ? void 0 : localUserpassConfig.autoConfirm) === true;
|
|
32
|
+
const runConfirmationFunction = (localUserpassConfig === null || localUserpassConfig === void 0 ? void 0 : localUserpassConfig.runConfirmationFunction) === true;
|
|
33
|
+
const confirmationFunctionName = localUserpassConfig === null || localUserpassConfig === void 0 ? void 0 : localUserpassConfig.confirmationFunctionName;
|
|
27
34
|
const mongo = app === null || app === void 0 ? void 0 : app.mongo;
|
|
28
35
|
const db = mongo.client.db(constants_1.DB_NAME);
|
|
29
36
|
const hashedPassword = yield (0, crypto_1.hashPassword)(password);
|
|
@@ -34,7 +41,7 @@ const handleUserRegistration = (app, opt) => (_a) => __awaiter(void 0, [_a], voi
|
|
|
34
41
|
const result = yield (db === null || db === void 0 ? void 0 : db.collection(authCollection).insertOne({
|
|
35
42
|
email,
|
|
36
43
|
password: hashedPassword,
|
|
37
|
-
status: skipUserCheck ? 'confirmed' : 'pending',
|
|
44
|
+
status: skipUserCheck || autoConfirm ? 'confirmed' : 'pending',
|
|
38
45
|
createdAt: new Date(),
|
|
39
46
|
custom_data: {
|
|
40
47
|
// TODO: aggiungere dati personalizzati alla registrazione
|
|
@@ -58,6 +65,64 @@ const handleUserRegistration = (app, opt) => (_a) => __awaiter(void 0, [_a], voi
|
|
|
58
65
|
]
|
|
59
66
|
}
|
|
60
67
|
}));
|
|
68
|
+
if (!(result === null || result === void 0 ? void 0 : result.insertedId) || skipUserCheck || autoConfirm) {
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
if (!runConfirmationFunction) {
|
|
72
|
+
throw new Error('Missing confirmation function');
|
|
73
|
+
}
|
|
74
|
+
if (!confirmationFunctionName) {
|
|
75
|
+
throw new Error('Missing confirmation function name');
|
|
76
|
+
}
|
|
77
|
+
const functionsList = state_1.StateManager.select('functions');
|
|
78
|
+
const services = state_1.StateManager.select('services');
|
|
79
|
+
const confirmationFunction = functionsList[confirmationFunctionName];
|
|
80
|
+
if (!confirmationFunction) {
|
|
81
|
+
throw new Error(`Confirmation function not found: ${confirmationFunctionName}`);
|
|
82
|
+
}
|
|
83
|
+
const token = (0, crypto_1.generateToken)();
|
|
84
|
+
const tokenId = (0, crypto_1.generateToken)();
|
|
85
|
+
yield (db === null || db === void 0 ? void 0 : db.collection(authCollection).updateOne({ _id: result.insertedId }, {
|
|
86
|
+
$set: {
|
|
87
|
+
confirmationToken: token,
|
|
88
|
+
confirmationTokenId: tokenId
|
|
89
|
+
}
|
|
90
|
+
}));
|
|
91
|
+
let confirmationStatus = 'fail';
|
|
92
|
+
try {
|
|
93
|
+
const response = yield (0, context_1.GenerateContext)({
|
|
94
|
+
args: [{
|
|
95
|
+
token,
|
|
96
|
+
tokenId,
|
|
97
|
+
username: email
|
|
98
|
+
}],
|
|
99
|
+
app,
|
|
100
|
+
rules: {},
|
|
101
|
+
user: {},
|
|
102
|
+
currentFunction: confirmationFunction,
|
|
103
|
+
functionsList,
|
|
104
|
+
services,
|
|
105
|
+
runAsSystem: true
|
|
106
|
+
});
|
|
107
|
+
confirmationStatus = (_b = response === null || response === void 0 ? void 0 : response.status) !== null && _b !== void 0 ? _b : 'fail';
|
|
108
|
+
}
|
|
109
|
+
catch (_c) {
|
|
110
|
+
confirmationStatus = 'fail';
|
|
111
|
+
}
|
|
112
|
+
if (confirmationStatus === 'success') {
|
|
113
|
+
yield (db === null || db === void 0 ? void 0 : db.collection(authCollection).updateOne({ _id: result.insertedId }, {
|
|
114
|
+
$set: { status: 'confirmed' },
|
|
115
|
+
$unset: { confirmationToken: '', confirmationTokenId: '' }
|
|
116
|
+
}));
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
if (confirmationStatus === 'pending') {
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
yield (db === null || db === void 0 ? void 0 : db.collection(authCollection).updateOne({ _id: result.insertedId }, {
|
|
123
|
+
$set: { status: 'failed' },
|
|
124
|
+
$unset: { confirmationToken: '', confirmationTokenId: '' }
|
|
125
|
+
}));
|
|
61
126
|
return result;
|
|
62
127
|
});
|
|
63
128
|
exports.default = handleUserRegistration;
|
|
@@ -20,7 +20,8 @@ type RegistrationResult = {
|
|
|
20
20
|
export type HandleUserRegistration = (app: FastifyInstance, opt: Options) => (params: RegistrationParams) => Promise<RegistrationResult>;
|
|
21
21
|
export declare enum PROVIDER {
|
|
22
22
|
LOCAL_USERPASS = "local-userpass",
|
|
23
|
-
CUSTOM_FUNCTION = "custom-function"
|
|
23
|
+
CUSTOM_FUNCTION = "custom-function",
|
|
24
|
+
ANON_USER = "anon-user"
|
|
24
25
|
}
|
|
25
26
|
export {};
|
|
26
27
|
//# sourceMappingURL=handleUserRegistration.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleUserRegistration.model.d.ts","sourceRoot":"","sources":["../../../src/shared/models/handleUserRegistration.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAA;AAEtD,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,MAAM,CAAA;KACvB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,OAAO,KACT,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;AAEhE,oBAAY,QAAQ;IAClB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;
|
|
1
|
+
{"version":3,"file":"handleUserRegistration.model.d.ts","sourceRoot":"","sources":["../../../src/shared/models/handleUserRegistration.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAA;AAEtD,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,MAAM,CAAA;KACvB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,OAAO,KACT,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;AAEhE,oBAAY,QAAQ;IAClB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,SAAS,cAAc;CACxB"}
|
|
@@ -23,10 +23,10 @@ export declare const generateContextData: ({ user, services, app, rules, current
|
|
|
23
23
|
method?: string | undefined;
|
|
24
24
|
url?: string | undefined;
|
|
25
25
|
host?: string | undefined;
|
|
26
|
-
id?: string | undefined;
|
|
27
26
|
ips?: string[];
|
|
28
27
|
hostname?: string | undefined;
|
|
29
28
|
ip?: string | undefined;
|
|
29
|
+
id?: string | undefined;
|
|
30
30
|
};
|
|
31
31
|
user: unknown;
|
|
32
32
|
environment: {
|
|
@@ -69,20 +69,20 @@ export declare const generateContextData: ({ user, services, app, rules, current
|
|
|
69
69
|
message: string;
|
|
70
70
|
};
|
|
71
71
|
} | import("undici").Dispatcher.ResponseData<T>>;
|
|
72
|
-
} | {
|
|
73
|
-
emailPasswordAuth: {
|
|
74
|
-
registerUser: ReturnType<import("../../shared/models/handleUserRegistration.model").HandleUserRegistration>;
|
|
75
|
-
};
|
|
76
72
|
} | {
|
|
77
73
|
lambda: (region: string) => import("aws-sdk").Lambda & {
|
|
78
74
|
Invoke: (...args: Parameters<import("aws-sdk").Lambda["invoke"]>) => Promise<import("aws-sdk/lib/request").PromiseResult<import("aws-sdk/clients/lambda").InvocationResponse, import("aws-sdk").AWSError>>;
|
|
79
75
|
InvokeAsync: import("aws-sdk").Lambda["invokeAsync"];
|
|
80
76
|
};
|
|
81
77
|
s3: (region: string) => import("aws-sdk").S3;
|
|
78
|
+
} | {
|
|
79
|
+
emailPasswordAuth: {
|
|
80
|
+
registerUser: ReturnType<import("../../shared/models/handleUserRegistration.model").HandleUserRegistration>;
|
|
81
|
+
};
|
|
82
82
|
} | undefined;
|
|
83
83
|
};
|
|
84
84
|
functions: {
|
|
85
|
-
execute: (name: keyof typeof functionsList, ...args: Arguments) => Promise<
|
|
85
|
+
execute: (name: keyof typeof functionsList, ...args: Arguments) => Promise<unknown>;
|
|
86
86
|
};
|
|
87
87
|
};
|
|
88
88
|
};
|
|
@@ -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,0FASjC,yBAAyB;;;uBAGT,SAAS;yBAGP,SAAS;;;;;;;;;;;;;;;;;;uBAcb,MAAM;;;+BAGE,MAAM,OAAO,QAAQ
|
|
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,0FASjC,yBAAyB;;;uBAGT,SAAS;yBAGP,SAAS;;;;;;;;;;;;;;;;;;uBAcb,MAAM;;;+BAGE,MAAM,OAAO,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAlCG,GAE3C;;;;;;;;;;;4BAiDgB,MAAM,OAAO,aAAa,WAAW,SAAS;;;CAclE,CAAA"}
|
|
@@ -10,5 +10,5 @@ import { GenerateContextParams } from './interface';
|
|
|
10
10
|
* @param functionsList -> the list of all functions
|
|
11
11
|
* @param services -> the list of all services
|
|
12
12
|
*/
|
|
13
|
-
export declare function GenerateContext({ args, app, rules, user, currentFunction, functionsList, services, runAsSystem, deserializeArgs, enqueue, request }: GenerateContextParams): Promise<
|
|
13
|
+
export declare function GenerateContext({ args, app, rules, user, currentFunction, functionsList, services, runAsSystem, deserializeArgs, enqueue, request }: GenerateContextParams): Promise<unknown>;
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/context/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/context/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AA0GnD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,EACpC,IAAI,EACJ,GAAG,EACH,KAAK,EACL,IAAI,EACJ,eAAe,EACf,aAAa,EACb,QAAQ,EACR,WAAW,EACX,eAAsB,EACtB,OAAO,EACP,OAAO,EACR,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8J1C"}
|