@flowerforce/flowerbase 1.7.6-beta.1 → 1.7.6-beta.10
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/dist/auth/providers/anon-user/controller.d.ts.map +1 -1
- package/dist/auth/providers/anon-user/controller.js +1 -0
- package/dist/auth/providers/custom-function/controller.d.ts.map +1 -1
- package/dist/auth/providers/custom-function/controller.js +3 -1
- package/dist/auth/providers/local-userpass/controller.d.ts.map +1 -1
- package/dist/auth/providers/local-userpass/controller.js +58 -18
- package/dist/auth/providers/local-userpass/dtos.d.ts +5 -1
- package/dist/auth/providers/local-userpass/dtos.d.ts.map +1 -1
- package/dist/auth/utils.d.ts +1 -0
- package/dist/auth/utils.d.ts.map +1 -1
- package/dist/auth/utils.js +1 -0
- package/dist/features/endpoints/utils.d.ts.map +1 -1
- package/dist/features/endpoints/utils.js +3 -0
- package/dist/features/functions/controller.d.ts +2 -0
- package/dist/features/functions/controller.d.ts.map +1 -1
- package/dist/features/functions/controller.js +7 -1
- package/dist/features/rules/interface.d.ts +6 -5
- package/dist/features/rules/interface.d.ts.map +1 -1
- package/dist/features/triggers/interface.d.ts +1 -1
- 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 +60 -0
- package/dist/services/mongodb-atlas/index.d.ts +3 -0
- package/dist/services/mongodb-atlas/index.d.ts.map +1 -1
- package/dist/services/mongodb-atlas/index.js +128 -37
- package/dist/utils/context/helpers.d.ts.map +1 -1
- package/dist/utils/context/helpers.js +3 -2
- package/dist/utils/context/index.d.ts.map +1 -1
- package/dist/utils/context/index.js +4 -2
- package/dist/utils/roles/helpers.d.ts.map +1 -1
- package/dist/utils/roles/helpers.js +6 -3
- package/dist/utils/roles/machines/fieldPermissions.d.ts.map +1 -1
- package/dist/utils/roles/machines/fieldPermissions.js +19 -10
- package/dist/utils/rules-matcher/interface.d.ts +2 -0
- package/dist/utils/rules-matcher/interface.d.ts.map +1 -1
- package/dist/utils/rules-matcher/interface.js +1 -0
- package/dist/utils/rules-matcher/utils.d.ts.map +1 -1
- package/dist/utils/rules-matcher/utils.js +23 -6
- package/package.json +1 -1
- package/src/auth/providers/anon-user/controller.ts +1 -0
- package/src/auth/providers/custom-function/controller.ts +6 -1
- package/src/auth/providers/local-userpass/__tests__/controller.test.ts +200 -0
- package/src/auth/providers/local-userpass/controller.ts +87 -34
- package/src/auth/providers/local-userpass/dtos.ts +6 -1
- package/src/auth/utils.ts +1 -0
- package/src/features/endpoints/__tests__/utils.test.ts +65 -0
- package/src/features/endpoints/utils.ts +3 -0
- package/src/features/functions/__tests__/watch-filter.test.ts +11 -1
- package/src/features/functions/controller.ts +8 -0
- package/src/features/rules/interface.ts +18 -17
- package/src/features/triggers/__tests__/index.test.ts +6 -4
- package/src/features/triggers/interface.ts +1 -1
- package/src/features/triggers/utils.ts +60 -0
- package/src/monitoring/ui.events.js +1 -1
- package/src/services/mongodb-atlas/__tests__/realmCompatibility.test.ts +205 -7
- package/src/services/mongodb-atlas/__tests__/utils.test.ts +27 -0
- package/src/services/mongodb-atlas/__tests__/watch-filter.test.ts +78 -0
- package/src/services/mongodb-atlas/index.ts +371 -171
- package/src/utils/__tests__/checkIsValidFieldNameFn.test.ts +74 -5
- package/src/utils/__tests__/contextExecuteCompatibility.test.ts +27 -1
- package/src/utils/__tests__/evaluateExpression.test.ts +33 -0
- package/src/utils/__tests__/generateContextData.test.ts +5 -1
- package/src/utils/__tests__/rule.test.ts +38 -0
- package/src/utils/context/helpers.ts +3 -2
- package/src/utils/context/index.ts +4 -3
- package/src/utils/roles/helpers.ts +10 -5
- package/src/utils/roles/machines/fieldPermissions.ts +17 -8
- package/src/utils/rules-matcher/interface.ts +2 -0
- package/src/utils/rules-matcher/utils.ts +33 -17
- package/src/utils/__tests__/readFileContent.test.ts +0 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/anon-user/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAOzC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/anon-user/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAOzC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,eAAe,iBAyE5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/custom-function/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAUzC;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/custom-function/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAUzC;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,eAAe,iBA0IlE"}
|
|
@@ -111,15 +111,17 @@ function customFunctionController(app) {
|
|
|
111
111
|
user_data: Object.assign(Object.assign({}, (user || {})), { id: authUser._id.toString(), email: authUser.email }),
|
|
112
112
|
custom_data: Object.assign({}, (user || {}))
|
|
113
113
|
};
|
|
114
|
+
const now = new Date();
|
|
114
115
|
const refreshToken = this.createRefreshToken(currentUserData);
|
|
115
116
|
const refreshTokenHash = (0, crypto_1.hashToken)(refreshToken);
|
|
116
117
|
yield authDb.collection(refreshTokensCollection).insertOne({
|
|
117
118
|
userId: authUser._id,
|
|
118
119
|
tokenHash: refreshTokenHash,
|
|
119
|
-
createdAt:
|
|
120
|
+
createdAt: now,
|
|
120
121
|
expiresAt: new Date(Date.now() + refreshTokenTtlMs),
|
|
121
122
|
revokedAt: null
|
|
122
123
|
});
|
|
124
|
+
yield authDb.collection(authCollection).updateOne({ _id: authUser._id }, { $set: { lastLoginAt: now } });
|
|
123
125
|
return {
|
|
124
126
|
access_token: this.createAccessToken(currentUserData),
|
|
125
127
|
refresh_token: refreshToken,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/local-userpass/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/local-userpass/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AA4CzC;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,eAAe,iBAmajE"}
|
|
@@ -49,14 +49,22 @@ function localUserPassController(app) {
|
|
|
49
49
|
const resetMaxAttempts = constants_1.DEFAULT_CONFIG.AUTH_RESET_MAX_ATTEMPTS;
|
|
50
50
|
const refreshTokenTtlMs = constants_1.DEFAULT_CONFIG.REFRESH_TOKEN_TTL_DAYS * 24 * 60 * 60 * 1000;
|
|
51
51
|
const resolveLocalUserpassProvider = () => { var _a; return (_a = constants_1.AUTH_CONFIG.authProviders) === null || _a === void 0 ? void 0 : _a['local-userpass']; };
|
|
52
|
+
const invalidPasswordError = {
|
|
53
|
+
error: 'unauthorized',
|
|
54
|
+
error_code: 'InvalidPassword'
|
|
55
|
+
};
|
|
52
56
|
try {
|
|
53
|
-
yield authDb
|
|
57
|
+
yield authDb
|
|
58
|
+
.collection(resetPasswordCollection)
|
|
59
|
+
.createIndex({ createdAt: 1 }, { expireAfterSeconds: resetPasswordTtlSeconds });
|
|
54
60
|
}
|
|
55
61
|
catch (error) {
|
|
56
62
|
console.error('Failed to ensure reset password TTL index', error);
|
|
57
63
|
}
|
|
58
64
|
try {
|
|
59
|
-
yield authDb
|
|
65
|
+
yield authDb
|
|
66
|
+
.collection(refreshTokensCollection)
|
|
67
|
+
.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 0 });
|
|
60
68
|
}
|
|
61
69
|
catch (error) {
|
|
62
70
|
console.error('Failed to ensure refresh token TTL index', error);
|
|
@@ -80,8 +88,10 @@ function localUserPassController(app) {
|
|
|
80
88
|
const services = state_1.StateManager.select('services');
|
|
81
89
|
const currentFunction = functionsList[resetPasswordConfig.resetFunctionName];
|
|
82
90
|
const baseArgs = { token, tokenId, email, password, username: email };
|
|
83
|
-
const args = Array.isArray(extraArguments)
|
|
84
|
-
|
|
91
|
+
const args = Array.isArray(extraArguments)
|
|
92
|
+
? [baseArgs, ...extraArguments]
|
|
93
|
+
: [baseArgs];
|
|
94
|
+
const response = (yield (0, context_1.GenerateContext)({
|
|
85
95
|
args,
|
|
86
96
|
app,
|
|
87
97
|
rules: {},
|
|
@@ -89,10 +99,32 @@ function localUserPassController(app) {
|
|
|
89
99
|
currentFunction,
|
|
90
100
|
functionName: resetPasswordConfig.resetFunctionName,
|
|
91
101
|
functionsList,
|
|
92
|
-
services
|
|
93
|
-
|
|
94
|
-
|
|
102
|
+
services,
|
|
103
|
+
runAsSystem: true
|
|
104
|
+
}));
|
|
105
|
+
const resetStatus = response === null || response === void 0 ? void 0 : response.status;
|
|
106
|
+
if (resetStatus === 'success') {
|
|
107
|
+
if (!password) {
|
|
108
|
+
throw new Error(utils_1.AUTH_ERRORS.INVALID_RESET_FUNCTION_RESPONSE);
|
|
109
|
+
}
|
|
110
|
+
const hashedPassword = yield (0, crypto_1.hashPassword)(password);
|
|
111
|
+
yield authDb.collection(authCollection).updateOne({ email }, {
|
|
112
|
+
$set: {
|
|
113
|
+
password: hashedPassword
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
yield (authDb === null || authDb === void 0 ? void 0 : authDb.collection(resetPasswordCollection).deleteOne({ email }));
|
|
117
|
+
return { status: 'success' };
|
|
118
|
+
}
|
|
119
|
+
if (resetStatus === 'pending') {
|
|
120
|
+
return { status: 'pending' };
|
|
121
|
+
}
|
|
122
|
+
if (resetStatus === 'fail') {
|
|
123
|
+
throw new Error(utils_1.AUTH_ERRORS.INVALID_RESET_PARAMS);
|
|
124
|
+
}
|
|
125
|
+
throw new Error(utils_1.AUTH_ERRORS.INVALID_RESET_FUNCTION_RESPONSE);
|
|
95
126
|
}
|
|
127
|
+
return { status: 'pending' };
|
|
96
128
|
});
|
|
97
129
|
/**
|
|
98
130
|
* Endpoint for user registration.
|
|
@@ -116,13 +148,17 @@ function localUserPassController(app) {
|
|
|
116
148
|
}
|
|
117
149
|
let result;
|
|
118
150
|
try {
|
|
119
|
-
result = yield (0, handleUserRegistration_1.default)(app, {
|
|
151
|
+
result = yield (0, handleUserRegistration_1.default)(app, {
|
|
152
|
+
run_as_system: true,
|
|
153
|
+
provider: handleUserRegistration_model_1.PROVIDER.LOCAL_USERPASS
|
|
154
|
+
})({
|
|
120
155
|
email: req.body.email.toLowerCase(),
|
|
121
156
|
password: req.body.password
|
|
122
157
|
});
|
|
123
158
|
}
|
|
124
159
|
catch (error) {
|
|
125
|
-
if (error instanceof Error &&
|
|
160
|
+
if (error instanceof Error &&
|
|
161
|
+
error.message === 'This email address is already used') {
|
|
126
162
|
res.status(409).send({
|
|
127
163
|
error: 'name already in use',
|
|
128
164
|
error_code: 'AccountNameInUse'
|
|
@@ -157,10 +193,10 @@ function localUserPassController(app) {
|
|
|
157
193
|
res.status(429).send({ message: 'Too many requests' });
|
|
158
194
|
return;
|
|
159
195
|
}
|
|
160
|
-
const existing = yield authDb.collection(authCollection).findOne({
|
|
196
|
+
const existing = (yield authDb.collection(authCollection).findOne({
|
|
161
197
|
confirmationToken: req.body.token,
|
|
162
198
|
confirmationTokenId: req.body.tokenId
|
|
163
|
-
});
|
|
199
|
+
}));
|
|
164
200
|
if (!existing) {
|
|
165
201
|
res.status(500);
|
|
166
202
|
throw new Error(utils_1.AUTH_ERRORS.INVALID_TOKEN);
|
|
@@ -198,11 +234,13 @@ function localUserPassController(app) {
|
|
|
198
234
|
email: req.body.username
|
|
199
235
|
});
|
|
200
236
|
if (!authUser) {
|
|
201
|
-
|
|
237
|
+
res.status(401);
|
|
238
|
+
return invalidPasswordError;
|
|
202
239
|
}
|
|
203
240
|
const passwordMatches = yield (0, crypto_1.comparePassword)(req.body.password, authUser.password);
|
|
204
241
|
if (!passwordMatches) {
|
|
205
|
-
|
|
242
|
+
res.status(401);
|
|
243
|
+
return invalidPasswordError;
|
|
206
244
|
}
|
|
207
245
|
const user = user_id_field && userCollection
|
|
208
246
|
? yield customUserDb
|
|
@@ -214,15 +252,19 @@ function localUserPassController(app) {
|
|
|
214
252
|
if (authUser && authUser.status !== 'confirmed') {
|
|
215
253
|
throw new Error(utils_1.AUTH_ERRORS.USER_NOT_CONFIRMED);
|
|
216
254
|
}
|
|
255
|
+
const now = new Date();
|
|
217
256
|
const refreshToken = this.createRefreshToken(userWithCustomData);
|
|
218
257
|
const refreshTokenHash = (0, crypto_1.hashToken)(refreshToken);
|
|
219
258
|
yield authDb.collection(refreshTokensCollection).insertOne({
|
|
220
259
|
userId: authUser._id,
|
|
221
260
|
tokenHash: refreshTokenHash,
|
|
222
|
-
createdAt:
|
|
261
|
+
createdAt: now,
|
|
223
262
|
expiresAt: new Date(Date.now() + refreshTokenTtlMs),
|
|
224
263
|
revokedAt: null
|
|
225
264
|
});
|
|
265
|
+
yield authDb
|
|
266
|
+
.collection(authCollection)
|
|
267
|
+
.updateOne({ _id: authUser._id }, { $set: { lastLoginAt: now } });
|
|
226
268
|
return {
|
|
227
269
|
access_token: this.createAccessToken(userWithCustomData),
|
|
228
270
|
refresh_token: refreshToken,
|
|
@@ -271,11 +313,9 @@ function localUserPassController(app) {
|
|
|
271
313
|
res.status(429);
|
|
272
314
|
return { message: 'Too many requests' };
|
|
273
315
|
}
|
|
274
|
-
yield handleResetPasswordRequest(req.body.email, req.body.password, req.body.arguments);
|
|
316
|
+
const result = yield handleResetPasswordRequest(req.body.email, req.body.password, req.body.arguments);
|
|
275
317
|
res.status(202);
|
|
276
|
-
return
|
|
277
|
-
status: 'ok'
|
|
278
|
-
};
|
|
318
|
+
return result;
|
|
279
319
|
});
|
|
280
320
|
});
|
|
281
321
|
/**
|
|
@@ -15,12 +15,16 @@ export type LoginSuccessDto = {
|
|
|
15
15
|
export type ErrorResponseDto = {
|
|
16
16
|
message: string;
|
|
17
17
|
};
|
|
18
|
+
export type InvalidPasswordResponseDto = {
|
|
19
|
+
error: 'unauthorized';
|
|
20
|
+
error_code: 'InvalidPassword';
|
|
21
|
+
};
|
|
18
22
|
export interface RegistrationDto {
|
|
19
23
|
Body: RegisterUserDto;
|
|
20
24
|
}
|
|
21
25
|
export interface LoginDto {
|
|
22
26
|
Body: LoginUserDto;
|
|
23
|
-
Reply: LoginSuccessDto | ErrorResponseDto;
|
|
27
|
+
Reply: LoginSuccessDto | ErrorResponseDto | InvalidPasswordResponseDto;
|
|
24
28
|
}
|
|
25
29
|
export interface ResetPasswordSendDto {
|
|
26
30
|
Body: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dtos.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/local-userpass/dtos.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAA;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAA;IAClB,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"dtos.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/local-userpass/dtos.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,cAAc,CAAA;IACrB,UAAU,EAAE,iBAAiB,CAAA;CAC9B,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAA;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAA;IAClB,KAAK,EAAE,eAAe,GAAG,gBAAgB,GAAG,0BAA0B,CAAA;CACvE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;KACtB,CAAA;CACF;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF"}
|
package/dist/auth/utils.d.ts
CHANGED
|
@@ -146,6 +146,7 @@ export declare enum AUTH_ERRORS {
|
|
|
146
146
|
INVALID_TOKEN = "Invalid refresh token provided",
|
|
147
147
|
INVALID_RESET_PARAMS = "Invalid token or tokenId provided",
|
|
148
148
|
MISSING_RESET_FUNCTION = "Missing reset function",
|
|
149
|
+
INVALID_RESET_FUNCTION_RESPONSE = "Invalid reset function response",
|
|
149
150
|
USER_NOT_CONFIRMED = "User not confirmed"
|
|
150
151
|
}
|
|
151
152
|
export interface AuthConfig {
|
package/dist/auth/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/auth/utils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc;;;CAA4C,CAAC;AACxE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;CAexB,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAc7B,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAgB7B,CAAA;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;CAWhC,CAAA;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;CAU/B,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;CAAoB,CAAA;AAE7C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;CAe/B,CAAA;AAED,oBAAY,cAAc;IACxB,KAAK,WAAW;IAChB,YAAY,cAAc;IAC1B,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,KAAK,gBAAgB;IACrB,UAAU,gBAAgB;IAC1B,aAAa,WAAW;IACxB,UAAU,sBAAsB;CACjC;AAED,oBAAY,WAAW;IACrB,mBAAmB,wBAAwB;IAC3C,aAAa,mCAAmC;IAChD,oBAAoB,sCAAsC;IAC1D,sBAAsB,2BAA2B;IACjD,kBAAkB,uBAAuB;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,aAAa,CAAA;IAC/B,iBAAiB,EAAE,cAAc,CAAA;IACjC,WAAW,CAAC,EAAE,QAAQ,CAAA;CACvB;AAED,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;CAClB;AACD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE;QACN,kBAAkB,EAAE,MAAM,CAAA;KAC3B,CAAA;CACF;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,uBAAuB,EAAE,OAAO,CAAA;IAChC,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,8BAA8B,EAAE,MAAM,CAAA;CACvC;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAO,UAuCjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,oBAarC,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,eAAW,WAG3C,CAAA"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/auth/utils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc;;;CAA4C,CAAC;AACxE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;CAexB,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAc7B,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAgB7B,CAAA;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;CAWhC,CAAA;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;CAU/B,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;CAAoB,CAAA;AAE7C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;CAe/B,CAAA;AAED,oBAAY,cAAc;IACxB,KAAK,WAAW;IAChB,YAAY,cAAc;IAC1B,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,KAAK,gBAAgB;IACrB,UAAU,gBAAgB;IAC1B,aAAa,WAAW;IACxB,UAAU,sBAAsB;CACjC;AAED,oBAAY,WAAW;IACrB,mBAAmB,wBAAwB;IAC3C,aAAa,mCAAmC;IAChD,oBAAoB,sCAAsC;IAC1D,sBAAsB,2BAA2B;IACjD,+BAA+B,oCAAoC;IACnE,kBAAkB,uBAAuB;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,aAAa,CAAA;IAC/B,iBAAiB,EAAE,cAAc,CAAA;IACjC,WAAW,CAAC,EAAE,QAAQ,CAAA;CACvB;AAED,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;CAClB;AACD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE;QACN,kBAAkB,EAAE,MAAM,CAAA;KAC3B,CAAA;CACF;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,uBAAuB,EAAE,OAAO,CAAA;IAChC,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,8BAA8B,EAAE,MAAM,CAAA;CACvC;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAO,UAuCjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,oBAarC,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,eAAW,WAG3C,CAAA"}
|
package/dist/auth/utils.js
CHANGED
|
@@ -115,6 +115,7 @@ var AUTH_ERRORS;
|
|
|
115
115
|
AUTH_ERRORS["INVALID_TOKEN"] = "Invalid refresh token provided";
|
|
116
116
|
AUTH_ERRORS["INVALID_RESET_PARAMS"] = "Invalid token or tokenId provided";
|
|
117
117
|
AUTH_ERRORS["MISSING_RESET_FUNCTION"] = "Missing reset function";
|
|
118
|
+
AUTH_ERRORS["INVALID_RESET_FUNCTION_RESPONSE"] = "Invalid reset function response";
|
|
118
119
|
AUTH_ERRORS["USER_NOT_CONFIRMED"] = "User not confirmed";
|
|
119
120
|
})(AUTH_ERRORS || (exports.AUTH_ERRORS = AUTH_ERRORS = {}));
|
|
120
121
|
const resolveAppPath = () => { var _a, _b, _c; return (_c = (_a = process.env.FLOWERBASE_APP_PATH) !== null && _a !== void 0 ? _a : (_b = require.main) === null || _b === void 0 ? void 0 : _b.path) !== null && _c !== void 0 ? _c : process.cwd(); };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/features/endpoints/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAKvE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAU,gBAAuB,KAAG,OAAO,CAAC,SAAS,CA+B9E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,eAAe,EACpB,SAAS,UAAU,CAAC,OAAO,eAAe,CAAC,EAC3C,UAAU,MAAM;;;;;;;CAkDhB,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,kEAM7B,qBAAqB,MACR,KAAK,cAAc,EAAE,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/features/endpoints/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAKvE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAU,gBAAuB,KAAG,OAAO,CAAC,SAAS,CA+B9E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,eAAe,EACpB,SAAS,UAAU,CAAC,OAAO,eAAe,CAAC,EAC3C,UAAU,MAAM;;;;;;;CAkDhB,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,kEAM7B,qBAAqB,MACR,KAAK,cAAc,EAAE,KAAK,YAAY,gBAgDrD,CAAA"}
|
|
@@ -135,6 +135,9 @@ const generateHandler = ({ app, currentFunction, functionName, functionsList, ru
|
|
|
135
135
|
setStatusCode: (code) => {
|
|
136
136
|
res.status(code);
|
|
137
137
|
},
|
|
138
|
+
setHeader: (name, value) => {
|
|
139
|
+
res.header(name, value);
|
|
140
|
+
},
|
|
138
141
|
setBody: (body) => {
|
|
139
142
|
customResponseBody.data = body;
|
|
140
143
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { Document } from 'mongodb';
|
|
1
2
|
import { FunctionController } from './interface';
|
|
2
3
|
export declare const mapWatchFilterToChangeStreamMatch: (value: unknown) => unknown;
|
|
3
4
|
export declare const mapWatchFilterToDocumentQuery: (value: unknown) => unknown;
|
|
5
|
+
export declare const shouldSkipReadabilityLookupForChange: (change: Document) => boolean;
|
|
4
6
|
/**
|
|
5
7
|
* > Creates a pre handler for every query
|
|
6
8
|
* @param app -> the fastify instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/features/functions/controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/features/functions/controller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAmHhD,eAAO,MAAM,iCAAiC,GAAI,OAAO,OAAO,KAAG,OA0BlE,CAAA;AAID,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,OAgD9D,CAAA;AAqHD,eAAO,MAAM,oCAAoC,GAAI,QAAQ,QAAQ,YAClC,CAAA;AAEnC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBAyRjC,CAAA"}
|
|
@@ -20,7 +20,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
return t;
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.functionsController = exports.mapWatchFilterToDocumentQuery = exports.mapWatchFilterToChangeStreamMatch = void 0;
|
|
23
|
+
exports.functionsController = exports.shouldSkipReadabilityLookupForChange = exports.mapWatchFilterToDocumentQuery = exports.mapWatchFilterToChangeStreamMatch = void 0;
|
|
24
24
|
const bson_1 = require("bson");
|
|
25
25
|
const services_1 = require("../../services");
|
|
26
26
|
const context_1 = require("../../utils/context");
|
|
@@ -262,6 +262,8 @@ const isReadableDocumentResult = (value) => !!value &&
|
|
|
262
262
|
typeof value === 'object' &&
|
|
263
263
|
!Array.isArray(value) &&
|
|
264
264
|
Object.keys(value).length > 0;
|
|
265
|
+
const shouldSkipReadabilityLookupForChange = (change) => change.operationType === 'delete';
|
|
266
|
+
exports.shouldSkipReadabilityLookupForChange = shouldSkipReadabilityLookupForChange;
|
|
265
267
|
/**
|
|
266
268
|
* > Creates a pre handler for every query
|
|
267
269
|
* @param app -> the fastify instance
|
|
@@ -431,6 +433,10 @@ const functionsController = (app_1, _a) => __awaiter(void 0, [app_1, _a], void 0
|
|
|
431
433
|
const docId = (_b = (_a = change === null || change === void 0 ? void 0 : change.documentKey) === null || _a === void 0 ? void 0 : _a._id) !== null && _b !== void 0 ? _b : (_c = change === null || change === void 0 ? void 0 : change.fullDocument) === null || _c === void 0 ? void 0 : _c._id;
|
|
432
434
|
if (typeof docId === 'undefined')
|
|
433
435
|
return;
|
|
436
|
+
if ((0, exports.shouldSkipReadabilityLookupForChange)(change)) {
|
|
437
|
+
subscriberRes.write(`data: ${serializeEjson(change)}\n\n`);
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
434
440
|
const readQuery = subscriber.documentFilter
|
|
435
441
|
? { $and: [subscriber.documentFilter, { _id: docId }] }
|
|
436
442
|
: { _id: docId };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Document } from 'mongodb';
|
|
2
|
+
export type PermissionExpression = boolean | Record<string, unknown>;
|
|
2
3
|
export interface Filter {
|
|
3
4
|
name: string;
|
|
4
5
|
query: Record<string, unknown>;
|
|
@@ -9,11 +10,11 @@ export type Projection = Record<string, 0 | 1>;
|
|
|
9
10
|
export interface Role {
|
|
10
11
|
name: string;
|
|
11
12
|
apply_when: Record<string, unknown>;
|
|
12
|
-
insert:
|
|
13
|
-
delete:
|
|
14
|
-
search:
|
|
15
|
-
read:
|
|
16
|
-
write:
|
|
13
|
+
insert: PermissionExpression;
|
|
14
|
+
delete: PermissionExpression;
|
|
15
|
+
search: PermissionExpression;
|
|
16
|
+
read: PermissionExpression;
|
|
17
|
+
write: PermissionExpression;
|
|
17
18
|
}
|
|
18
19
|
export interface RulesConfig {
|
|
19
20
|
database: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/features/rules/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AACD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;AAC9C,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/features/rules/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEpE,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AACD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;AAC9C,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,MAAM,EAAE,oBAAoB,CAAA;IAC5B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,IAAI,EAAE,oBAAoB,CAAA;IAC1B,KAAK,EAAE,oBAAoB,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,IAAI,EAAE,CAAA;CACd;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAE/C,MAAM,MAAM,wBAAwB,GAChC;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACnC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACrC;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACnC;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAA;CAAE,GACtD;IAAE,UAAU,EAAE,cAAc,CAAA;CAAE,CAAA;AAElC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,QAAQ,CAAC,EAAE,wBAAwB,EAAE,CAAA;CACtC;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,EAAE,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,oBAAoB,CAAA;AAC1D,KAAK,oBAAoB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,wBAAwB,EAAE,CAAA;CAAE,CAAA;AAElF,oBAAY,gBAAgB;IAC1B,MAAM,YAAY;IAClB,UAAU,eAAe;IACzB,KAAK,WAAW;CACjB"}
|
|
@@ -22,7 +22,7 @@ type Config = {
|
|
|
22
22
|
isAutoTrigger?: boolean;
|
|
23
23
|
match: Record<string, unknown>;
|
|
24
24
|
operation_types: string[];
|
|
25
|
-
operation_type?: 'CREATE' | 'DELETE' | 'LOGOUT';
|
|
25
|
+
operation_type?: 'CREATE' | 'DELETE' | 'LOGIN' | 'LOGOUT';
|
|
26
26
|
providers?: string[];
|
|
27
27
|
project: Record<string, unknown>;
|
|
28
28
|
service_name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/features/triggers/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAE5D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE;QAChB,QAAQ,EAAE;YACR,MAAM,EAAE;gBACN,aAAa,EAAE,MAAM,CAAA;aACtB,CAAA;SACF,CAAA;KACF,CAAA;CACF;AAED,KAAK,MAAM,GAAG;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,2BAA2B,EAAE,OAAO,CAAA;IACpC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/features/triggers/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAE5D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE;QAChB,QAAQ,EAAE;YACR,MAAM,EAAE;gBACN,aAAa,EAAE,MAAM,CAAA;aACtB,CAAA;SACF,CAAA;KACF,CAAA;CACF;AAED,KAAK,MAAM,GAAG;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,2BAA2B,EAAE,OAAO,CAAA;IACpC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA;IACzD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,sBAAsB,EAAE,OAAO,CAAA;IAC/B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,gBAAgB,CAAA;AACrE,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,CAAA;AAE/D,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,QAAQ,CAAA;IACxB,GAAG,EAAE,eAAe,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,EAAE,SAAS,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/features/triggers/utils.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAA;AA0E9D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAU,gBAAuB,KAAG,OAAO,CAAC,QAAQ,CAkB5E,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/features/triggers/utils.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAA;AA0E9D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAU,gBAAuB,KAAG,OAAO,CAAC,QAAQ,CAkB5E,CAAA;AA2qBD,eAAO,MAAM,gBAAgB;kHAppB1B,aAAa;iHA4jBb,aAAa;uHA1cb,aAAa;CAsiBf,CAAA"}
|
|
@@ -170,6 +170,7 @@ const handleCronTrigger = (_a) => __awaiter(void 0, [_a], void 0, function* ({ c
|
|
|
170
170
|
const mapOpInverse = {
|
|
171
171
|
CREATE: ['insert', 'update', 'replace'],
|
|
172
172
|
DELETE: ['delete'],
|
|
173
|
+
LOGIN: ['insert', 'update'],
|
|
173
174
|
LOGOUT: ['update'],
|
|
174
175
|
};
|
|
175
176
|
const normalizeOperationTypes = (operationTypes = []) => operationTypes.map((op) => op.toLowerCase());
|
|
@@ -270,6 +271,8 @@ const handleAuthenticationTrigger = (_a) => __awaiter(void 0, [_a], void 0, func
|
|
|
270
271
|
const isUpdate = operationType === 'update';
|
|
271
272
|
const isReplace = operationType === 'replace';
|
|
272
273
|
const isDelete = operationType === 'delete';
|
|
274
|
+
const isLoginInsert = isInsert && !!(fullDocument === null || fullDocument === void 0 ? void 0 : fullDocument.lastLoginAt);
|
|
275
|
+
const isLoginUpdate = isUpdate && !!updatedFields && 'lastLoginAt' in updatedFields;
|
|
273
276
|
const isLogoutUpdate = isUpdate && !!updatedFields && 'lastLogoutAt' in updatedFields;
|
|
274
277
|
let confirmedCandidate = false;
|
|
275
278
|
let confirmedDocument = fullDocument;
|
|
@@ -353,6 +356,63 @@ const handleAuthenticationTrigger = (_a) => __awaiter(void 0, [_a], void 0, func
|
|
|
353
356
|
}
|
|
354
357
|
return;
|
|
355
358
|
}
|
|
359
|
+
if (operation_type === 'LOGIN') {
|
|
360
|
+
if (!isLoginInsert && !isLoginUpdate) {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
let loginDocument = fullDocument !== null && fullDocument !== void 0 ? fullDocument : confirmedDocument;
|
|
364
|
+
if (!loginDocument && (documentKey === null || documentKey === void 0 ? void 0 : documentKey._id)) {
|
|
365
|
+
loginDocument = (yield collection.findOne({
|
|
366
|
+
_id: documentKey._id
|
|
367
|
+
}));
|
|
368
|
+
}
|
|
369
|
+
if (!matchesProviderFilter(loginDocument, providerFilter)) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
const userData = buildUserData(loginDocument);
|
|
373
|
+
if (!userData) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
const op = {
|
|
377
|
+
operationType: 'LOGIN',
|
|
378
|
+
fullDocument,
|
|
379
|
+
fullDocumentBeforeChange,
|
|
380
|
+
documentKey,
|
|
381
|
+
updateDescription
|
|
382
|
+
};
|
|
383
|
+
try {
|
|
384
|
+
emitTriggerEvent({
|
|
385
|
+
status: 'fired',
|
|
386
|
+
triggerName,
|
|
387
|
+
triggerType,
|
|
388
|
+
functionName,
|
|
389
|
+
meta: Object.assign(Object.assign({}, baseMeta), { event: 'LOGIN' })
|
|
390
|
+
});
|
|
391
|
+
yield (0, context_1.GenerateContext)({
|
|
392
|
+
args: [Object.assign({ user: userData }, op)],
|
|
393
|
+
app,
|
|
394
|
+
rules: state_1.StateManager.select("rules"),
|
|
395
|
+
user: {}, // TODO from currentUser ??
|
|
396
|
+
currentFunction: triggerHandler,
|
|
397
|
+
functionName,
|
|
398
|
+
functionsList,
|
|
399
|
+
services,
|
|
400
|
+
runAsSystem: true
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
emitTriggerEvent({
|
|
405
|
+
status: 'error',
|
|
406
|
+
triggerName,
|
|
407
|
+
triggerType,
|
|
408
|
+
functionName,
|
|
409
|
+
meta: Object.assign(Object.assign({}, baseMeta), { event: 'LOGIN' }),
|
|
410
|
+
error
|
|
411
|
+
});
|
|
412
|
+
console.log("🚀 ~ handleAuthenticationTrigger ~ error:", error);
|
|
413
|
+
}
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
356
416
|
if (isDelete) {
|
|
357
417
|
if (isAutoTrigger || operation_type !== 'DELETE') {
|
|
358
418
|
return;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { Document } from 'mongodb';
|
|
1
2
|
import { MongodbAtlasFunction } from './model';
|
|
3
|
+
export declare const toWatchMatchFilter: (value: unknown) => unknown;
|
|
4
|
+
export declare const watchPipelineRequestsDelete: (pipeline: Document[]) => boolean;
|
|
2
5
|
declare const MongodbAtlas: MongodbAtlasFunction;
|
|
3
6
|
export default MongodbAtlas;
|
|
4
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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":"AAKA,OAAO,EAIL,QAAQ,EAQT,MAAM,SAAS,CAAA;AAOhB,OAAO,EAGL,oBAAoB,EAErB,MAAM,SAAS,CAAA;AA6JhB,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,OA0BnD,CAAA;AA8BD,eAAO,MAAM,2BAA2B,GAAI,UAAU,QAAQ,EAAE,YAK5D,CAAA;AAmzCJ,QAAA,MAAM,YAAY,EAAE,oBAwBlB,CAAA;AAEF,eAAe,YAAY,CAAA"}
|