@flowerforce/flowerbase 1.2.0 → 1.2.1-beta.11
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 +28 -3
- package/dist/auth/controller.d.ts.map +1 -1
- package/dist/auth/controller.js +57 -3
- package/dist/auth/plugins/jwt.d.ts.map +1 -1
- package/dist/auth/plugins/jwt.js +49 -3
- package/dist/auth/providers/custom-function/controller.d.ts.map +1 -1
- package/dist/auth/providers/custom-function/controller.js +19 -3
- package/dist/auth/providers/local-userpass/controller.d.ts.map +1 -1
- package/dist/auth/providers/local-userpass/controller.js +125 -71
- package/dist/auth/providers/local-userpass/dtos.d.ts +11 -2
- package/dist/auth/providers/local-userpass/dtos.d.ts.map +1 -1
- package/dist/auth/utils.d.ts +53 -14
- package/dist/auth/utils.d.ts.map +1 -1
- package/dist/auth/utils.js +46 -63
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +18 -5
- package/dist/features/functions/controller.d.ts.map +1 -1
- package/dist/features/functions/controller.js +32 -3
- 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 +2 -1
- package/dist/features/functions/utils.d.ts.map +1 -1
- package/dist/features/functions/utils.js +19 -7
- package/dist/features/rules/utils.d.ts.map +1 -1
- package/dist/features/rules/utils.js +11 -2
- package/dist/features/triggers/index.d.ts.map +1 -1
- package/dist/features/triggers/index.js +48 -7
- package/dist/features/triggers/utils.d.ts.map +1 -1
- package/dist/features/triggers/utils.js +118 -27
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -21
- package/dist/services/mongodb-atlas/index.d.ts.map +1 -1
- package/dist/services/mongodb-atlas/index.js +605 -478
- package/dist/services/mongodb-atlas/model.d.ts +2 -1
- package/dist/services/mongodb-atlas/model.d.ts.map +1 -1
- package/dist/services/mongodb-atlas/utils.d.ts +9 -2
- package/dist/services/mongodb-atlas/utils.d.ts.map +1 -1
- package/dist/services/mongodb-atlas/utils.js +113 -23
- package/dist/shared/handleUserRegistration.d.ts.map +1 -1
- package/dist/shared/handleUserRegistration.js +4 -1
- package/dist/shared/models/handleUserRegistration.model.d.ts +6 -2
- package/dist/shared/models/handleUserRegistration.model.d.ts.map +1 -1
- package/dist/utils/context/helpers.d.ts +7 -6
- package/dist/utils/context/helpers.d.ts.map +1 -1
- package/dist/utils/context/helpers.js +3 -0
- 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 -5
- 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.d.ts.map +1 -1
- package/dist/utils/initializer/exposeRoutes.js +11 -4
- package/dist/utils/initializer/registerPlugins.d.ts +3 -1
- package/dist/utils/initializer/registerPlugins.d.ts.map +1 -1
- package/dist/utils/initializer/registerPlugins.js +9 -6
- package/dist/utils/roles/helpers.js +11 -3
- package/dist/utils/roles/machines/commonValidators.d.ts.map +1 -1
- package/dist/utils/roles/machines/commonValidators.js +10 -6
- package/dist/utils/roles/machines/read/B/validators.d.ts +4 -0
- package/dist/utils/roles/machines/read/B/validators.d.ts.map +1 -0
- package/dist/utils/roles/machines/read/B/validators.js +8 -0
- package/dist/utils/roles/machines/read/C/index.d.ts.map +1 -1
- package/dist/utils/roles/machines/read/C/index.js +10 -7
- package/dist/utils/roles/machines/read/C/validators.d.ts +5 -0
- package/dist/utils/roles/machines/read/C/validators.d.ts.map +1 -0
- package/dist/utils/roles/machines/read/C/validators.js +29 -0
- package/dist/utils/roles/machines/read/D/index.d.ts.map +1 -1
- package/dist/utils/roles/machines/read/D/index.js +13 -11
- package/dist/utils/rules.d.ts +1 -1
- package/dist/utils/rules.d.ts.map +1 -1
- package/dist/utils/rules.js +26 -17
- package/jest.config.ts +2 -12
- package/jest.setup.ts +28 -0
- package/package.json +1 -2
- package/src/auth/controller.ts +70 -4
- package/src/auth/plugins/jwt.test.ts +93 -0
- package/src/auth/plugins/jwt.ts +62 -3
- package/src/auth/providers/custom-function/controller.ts +22 -5
- package/src/auth/providers/local-userpass/controller.ts +168 -96
- package/src/auth/providers/local-userpass/dtos.ts +13 -2
- package/src/auth/utils.ts +51 -86
- package/src/constants.ts +17 -3
- package/src/fastify.d.ts +32 -15
- package/src/features/functions/controller.ts +51 -3
- 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/rules/utils.ts +11 -2
- package/src/features/triggers/index.ts +43 -1
- package/src/features/triggers/utils.ts +146 -38
- package/src/index.ts +69 -20
- package/src/services/mongodb-atlas/__tests__/findOneAndUpdate.test.ts +95 -0
- package/src/services/mongodb-atlas/__tests__/utils.test.ts +141 -0
- package/src/services/mongodb-atlas/index.ts +241 -90
- package/src/services/mongodb-atlas/model.ts +15 -2
- package/src/services/mongodb-atlas/utils.ts +158 -22
- package/src/shared/handleUserRegistration.ts +5 -4
- package/src/shared/models/handleUserRegistration.model.ts +8 -3
- package/src/types/fastify-raw-body.d.ts +22 -0
- package/src/utils/__tests__/STEP_B_STATES.test.ts +1 -1
- package/src/utils/__tests__/STEP_C_STATES.test.ts +1 -1
- package/src/utils/__tests__/STEP_D_STATES.test.ts +2 -2
- package/src/utils/__tests__/checkIsValidFieldNameFn.test.ts +9 -4
- package/src/utils/__tests__/registerPlugins.test.ts +16 -1
- package/src/utils/context/helpers.ts +3 -0
- package/src/utils/context/index.ts +238 -13
- package/src/utils/context/interface.ts +1 -1
- package/src/utils/crypto/index.ts +5 -1
- package/src/utils/initializer/exposeRoutes.ts +15 -8
- package/src/utils/initializer/registerPlugins.ts +15 -7
- package/src/utils/roles/helpers.ts +23 -5
- package/src/utils/roles/machines/commonValidators.ts +10 -5
- package/src/utils/roles/machines/read/B/validators.ts +8 -0
- package/src/utils/roles/machines/read/C/index.ts +11 -7
- package/src/utils/roles/machines/read/C/validators.ts +21 -0
- package/src/utils/roles/machines/read/D/index.ts +22 -12
- package/src/utils/rules.ts +31 -22
- package/tsconfig.spec.json +7 -0
|
@@ -17,6 +17,7 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
|
17
17
|
};
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.activateTriggers = void 0;
|
|
20
|
+
const constants_1 = require("../../constants");
|
|
20
21
|
const services_1 = require("../../services");
|
|
21
22
|
const utils_1 = require("./utils");
|
|
22
23
|
/**
|
|
@@ -27,15 +28,55 @@ const utils_1 = require("./utils");
|
|
|
27
28
|
* @param functionsList -> the list of all functions
|
|
28
29
|
*/
|
|
29
30
|
const activateTriggers = (_a) => __awaiter(void 0, [_a], void 0, function* ({ fastify, triggersList, functionsList }) {
|
|
30
|
-
var _b,
|
|
31
|
-
var
|
|
31
|
+
var _b, e_1, _c, _d;
|
|
32
|
+
var _e;
|
|
32
33
|
console.log('START ACTIVATION TRIGGERS');
|
|
33
34
|
try {
|
|
35
|
+
const triggersToActivate = [...triggersList];
|
|
36
|
+
if (constants_1.AUTH_CONFIG.on_user_creation_function_name) {
|
|
37
|
+
const alreadyDeclared = triggersToActivate.some((trigger) => {
|
|
38
|
+
var _a, _b, _c;
|
|
39
|
+
return trigger.content.type === 'AUTHENTICATION' &&
|
|
40
|
+
((_c = (_b = (_a = trigger.content.event_processors) === null || _a === void 0 ? void 0 : _a.FUNCTION) === null || _b === void 0 ? void 0 : _b.config) === null || _c === void 0 ? void 0 : _c.function_name) ===
|
|
41
|
+
constants_1.AUTH_CONFIG.on_user_creation_function_name;
|
|
42
|
+
});
|
|
43
|
+
if (!alreadyDeclared) {
|
|
44
|
+
triggersToActivate.push({
|
|
45
|
+
fileName: '__auto_on_user_creation_trigger__.json',
|
|
46
|
+
content: {
|
|
47
|
+
name: 'onUserCreation',
|
|
48
|
+
type: 'AUTHENTICATION',
|
|
49
|
+
disabled: false,
|
|
50
|
+
config: {
|
|
51
|
+
collection: (_e = constants_1.AUTH_CONFIG.authCollection) !== null && _e !== void 0 ? _e : 'auth_users',
|
|
52
|
+
database: constants_1.DB_NAME,
|
|
53
|
+
full_document: true,
|
|
54
|
+
full_document_before_change: false,
|
|
55
|
+
match: {},
|
|
56
|
+
operation_types: ['insert', 'update', 'replace'],
|
|
57
|
+
project: {},
|
|
58
|
+
service_name: 'mongodb-atlas',
|
|
59
|
+
skip_catchup_events: false,
|
|
60
|
+
tolerate_resume_errors: false,
|
|
61
|
+
unordered: false,
|
|
62
|
+
schedule: ''
|
|
63
|
+
},
|
|
64
|
+
event_processors: {
|
|
65
|
+
FUNCTION: {
|
|
66
|
+
config: {
|
|
67
|
+
function_name: constants_1.AUTH_CONFIG.on_user_creation_function_name
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
34
75
|
try {
|
|
35
|
-
for (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const trigger =
|
|
76
|
+
for (var _f = true, triggersToActivate_1 = __asyncValues(triggersToActivate), triggersToActivate_1_1; triggersToActivate_1_1 = yield triggersToActivate_1.next(), _b = triggersToActivate_1_1.done, !_b; _f = true) {
|
|
77
|
+
_d = triggersToActivate_1_1.value;
|
|
78
|
+
_f = false;
|
|
79
|
+
const trigger = _d;
|
|
39
80
|
const { content } = trigger;
|
|
40
81
|
const { type, config, event_processors } = content;
|
|
41
82
|
const functionName = event_processors.FUNCTION.config.function_name;
|
|
@@ -52,7 +93,7 @@ const activateTriggers = (_a) => __awaiter(void 0, [_a], void 0, function* ({ fa
|
|
|
52
93
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
53
94
|
finally {
|
|
54
95
|
try {
|
|
55
|
-
if (!
|
|
96
|
+
if (!_f && !_b && (_c = triggersToActivate_1.return)) yield _c.call(triggersToActivate_1);
|
|
56
97
|
}
|
|
57
98
|
finally { if (e_1) throw e_1.error; }
|
|
58
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/features/triggers/utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/features/triggers/utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAA;AAqC9D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAU,gBAAuB,KAAG,OAAO,CAAC,QAAQ,CAkB5E,CAAA;AAqOD,eAAO,MAAM,gBAAgB;0EAjN1B,aAAa;yEA4Jb,aAAa;+EAvIb,aAAa;CAgMf,CAAA"}
|
|
@@ -31,6 +31,40 @@ const constants_1 = require("../../constants");
|
|
|
31
31
|
const state_1 = require("../../state");
|
|
32
32
|
const utils_1 = require("../../utils");
|
|
33
33
|
const context_1 = require("../../utils/context");
|
|
34
|
+
const registerOnClose = (app, handler, label) => {
|
|
35
|
+
if (app.server) {
|
|
36
|
+
app.server.once('close', () => {
|
|
37
|
+
Promise.resolve(handler()).catch((error) => {
|
|
38
|
+
console.error(`${label} close error`, error);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
app.addHook('onClose', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
try {
|
|
46
|
+
yield handler();
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(`${label} close error`, error);
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.error(`${label} hook registration error`, error);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const shouldIgnoreStreamError = (error) => {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
const err = error;
|
|
60
|
+
if ((err === null || err === void 0 ? void 0 : err.name) === 'MongoClientClosedError')
|
|
61
|
+
return true;
|
|
62
|
+
if ((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('client was closed'))
|
|
63
|
+
return true;
|
|
64
|
+
if ((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes('Client is closed'))
|
|
65
|
+
return true;
|
|
66
|
+
return false;
|
|
67
|
+
};
|
|
34
68
|
/**
|
|
35
69
|
* Loads trigger files from the specified directory and returns them as an array of objects.
|
|
36
70
|
* Each object contains the file name and the parsed JSON content.
|
|
@@ -70,7 +104,7 @@ exports.loadTriggers = loadTriggers;
|
|
|
70
104
|
* @param {Object} params.app - The app instance for context.
|
|
71
105
|
*/
|
|
72
106
|
const handleCronTrigger = (_a) => __awaiter(void 0, [_a], void 0, function* ({ config, triggerHandler, functionsList, services, app }) {
|
|
73
|
-
node_cron_1.default.schedule(config.schedule, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
107
|
+
const task = node_cron_1.default.schedule(config.schedule, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
108
|
yield (0, context_1.GenerateContext)({
|
|
75
109
|
args: [],
|
|
76
110
|
app,
|
|
@@ -81,47 +115,97 @@ const handleCronTrigger = (_a) => __awaiter(void 0, [_a], void 0, function* ({ c
|
|
|
81
115
|
services
|
|
82
116
|
});
|
|
83
117
|
}));
|
|
118
|
+
registerOnClose(app, () => task.stop(), 'Scheduled trigger');
|
|
84
119
|
});
|
|
85
120
|
const handleAuthenticationTrigger = (_a) => __awaiter(void 0, [_a], void 0, function* ({ config, triggerHandler, functionsList, services, app }) {
|
|
121
|
+
var _b;
|
|
86
122
|
const { database } = 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);
|
|
87
125
|
const pipeline = [
|
|
88
126
|
{
|
|
89
127
|
$match: {
|
|
90
|
-
operationType: { $in: ['insert'] }
|
|
128
|
+
operationType: { $in: ['insert', 'update', 'replace'] }
|
|
91
129
|
}
|
|
92
130
|
}
|
|
93
131
|
];
|
|
94
|
-
const changeStream =
|
|
95
|
-
.db(database || constants_1.DB_NAME)
|
|
96
|
-
.collection(constants_1.AUTH_CONFIG.authCollection)
|
|
97
|
-
.watch(pipeline, {
|
|
132
|
+
const changeStream = collection.watch(pipeline, {
|
|
98
133
|
fullDocument: 'whenAvailable'
|
|
99
134
|
});
|
|
135
|
+
changeStream.on('error', (error) => {
|
|
136
|
+
if (shouldIgnoreStreamError(error))
|
|
137
|
+
return;
|
|
138
|
+
console.error('Authentication trigger change stream error', error);
|
|
139
|
+
});
|
|
100
140
|
changeStream.on('change', function (change) {
|
|
101
141
|
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
args: [{
|
|
109
|
-
user: Object.assign(Object.assign({}, currentUser), { id: currentUser._id.toString(), data: {
|
|
110
|
-
_id: currentUser._id.toString(),
|
|
111
|
-
email: currentUser.email
|
|
112
|
-
} })
|
|
113
|
-
}],
|
|
114
|
-
app,
|
|
115
|
-
rules: state_1.StateManager.select("rules"),
|
|
116
|
-
user: {}, // TODO from currentUser ??
|
|
117
|
-
currentFunction: triggerHandler,
|
|
118
|
-
functionsList,
|
|
119
|
-
services,
|
|
120
|
-
runAsSystem: true
|
|
121
|
-
});
|
|
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;
|
|
122
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;
|
|
185
|
+
}
|
|
186
|
+
delete document.password;
|
|
187
|
+
const currentUser = Object.assign({}, document);
|
|
188
|
+
delete currentUser.password;
|
|
189
|
+
yield (0, context_1.GenerateContext)({
|
|
190
|
+
args: [{
|
|
191
|
+
user: Object.assign(Object.assign({}, currentUser), { id: currentUser._id.toString(), data: {
|
|
192
|
+
_id: currentUser._id.toString(),
|
|
193
|
+
email: currentUser.email
|
|
194
|
+
} })
|
|
195
|
+
}],
|
|
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
|
+
});
|
|
123
204
|
});
|
|
124
205
|
});
|
|
206
|
+
registerOnClose(app, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
207
|
+
yield changeStream.close();
|
|
208
|
+
}), 'Authentication trigger');
|
|
125
209
|
});
|
|
126
210
|
/**
|
|
127
211
|
* Handles a database trigger by watching changes in a specified collection and triggering the appropriate handler.
|
|
@@ -160,6 +244,11 @@ const handleDataBaseTrigger = (_a) => __awaiter(void 0, [_a], void 0, function*
|
|
|
160
244
|
? 'whenAvailable'
|
|
161
245
|
: undefined
|
|
162
246
|
});
|
|
247
|
+
changeStream.on('error', (error) => {
|
|
248
|
+
if (shouldIgnoreStreamError(error))
|
|
249
|
+
return;
|
|
250
|
+
console.error('Database trigger change stream error', error);
|
|
251
|
+
});
|
|
163
252
|
changeStream.on('change', function (_a) {
|
|
164
253
|
return __awaiter(this, void 0, void 0, function* () {
|
|
165
254
|
var { clusterTime } = _a, change = __rest(_a, ["clusterTime"]);
|
|
@@ -174,7 +263,9 @@ const handleDataBaseTrigger = (_a) => __awaiter(void 0, [_a], void 0, function*
|
|
|
174
263
|
});
|
|
175
264
|
});
|
|
176
265
|
});
|
|
177
|
-
|
|
266
|
+
registerOnClose(app, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
267
|
+
yield changeStream.close();
|
|
268
|
+
}), 'Database trigger');
|
|
178
269
|
});
|
|
179
270
|
exports.TRIGGER_HANDLERS = {
|
|
180
271
|
SCHEDULED: handleCronTrigger,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import 'dotenv/config';
|
|
2
2
|
export * from './model';
|
|
3
|
+
export type ALLOWED_METHODS = "GET" | "POST" | "PUT" | "DELETE";
|
|
4
|
+
export type CorsConfig = {
|
|
5
|
+
origin: string;
|
|
6
|
+
methods: ALLOWED_METHODS[];
|
|
7
|
+
};
|
|
3
8
|
export type InitializeConfig = {
|
|
4
9
|
projectId: string;
|
|
5
10
|
mongodbUrl?: string;
|
|
6
11
|
jwtSecret?: string;
|
|
7
12
|
port?: number;
|
|
8
13
|
host?: string;
|
|
14
|
+
corsConfig?: CorsConfig;
|
|
15
|
+
basePath?: string;
|
|
9
16
|
};
|
|
10
17
|
/**
|
|
11
18
|
* > Used to initialize fastify app
|
|
@@ -15,5 +22,5 @@ export type InitializeConfig = {
|
|
|
15
22
|
* @param port -> the serve port number
|
|
16
23
|
* @param mongodbUrl -> the database connection string
|
|
17
24
|
*/
|
|
18
|
-
export declare function initialize({ projectId, host, jwtSecret, port, mongodbUrl }: InitializeConfig): Promise<void>;
|
|
25
|
+
export declare function initialize({ projectId, host, jwtSecret, port, mongodbUrl, corsConfig, basePath }: InitializeConfig): Promise<void>;
|
|
19
26
|
//# sourceMappingURL=index.d.ts.map
|
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;
|
|
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
|
@@ -73,23 +73,32 @@ __exportStar(require("./model"), exports);
|
|
|
73
73
|
* @param mongodbUrl -> the database connection string
|
|
74
74
|
*/
|
|
75
75
|
function initialize(_a) {
|
|
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 }) {
|
|
77
|
-
var _b;
|
|
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
|
+
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
|
+
}
|
|
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();
|
|
78
82
|
const fastify = (0, fastify_1.default)({
|
|
79
83
|
logger: !!constants_1.DEFAULT_CONFIG.ENABLE_LOGGER
|
|
80
84
|
});
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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);
|
|
94
|
+
const functionsList = yield (0, utils_2.loadFunctions)(resolvedBasePath);
|
|
95
|
+
logInfo("Functions LOADED");
|
|
96
|
+
const triggersList = yield (0, utils_4.loadTriggers)(resolvedBasePath);
|
|
97
|
+
logInfo("Triggers LOADED");
|
|
98
|
+
const endpointsList = yield (0, utils_1.loadEndpoints)(resolvedBasePath);
|
|
99
|
+
logInfo("Endpoints LOADED");
|
|
100
|
+
const rulesList = yield (0, utils_3.loadRules)(resolvedBasePath);
|
|
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,
|
|
@@ -119,17 +154,18 @@ function initialize(_a) {
|
|
|
119
154
|
register: fastify.register,
|
|
120
155
|
mongodbUrl,
|
|
121
156
|
jwtSecret,
|
|
122
|
-
functionsList
|
|
157
|
+
functionsList,
|
|
158
|
+
corsConfig
|
|
123
159
|
});
|
|
124
|
-
|
|
160
|
+
logInfo('Plugins registration COMPLETED');
|
|
125
161
|
yield (0, exposeRoutes_1.exposeRoutes)(fastify);
|
|
126
|
-
|
|
162
|
+
logInfo('APP Routes registration COMPLETED');
|
|
127
163
|
yield (0, functions_1.registerFunctions)({ app: fastify, functionsList, rulesList });
|
|
128
|
-
|
|
164
|
+
logInfo('Functions registration COMPLETED');
|
|
129
165
|
yield (0, endpoints_1.generateEndpoints)({ app: fastify, functionsList, endpointsList, rulesList });
|
|
130
|
-
|
|
166
|
+
logInfo('HTTP Endpoints registration COMPLETED');
|
|
131
167
|
fastify.ready(() => {
|
|
132
|
-
|
|
168
|
+
logInfo("FASTIFY IS READY");
|
|
133
169
|
if ((triggersList === null || triggersList === void 0 ? void 0 : triggersList.length) > 0)
|
|
134
170
|
(0, triggers_1.activateTriggers)({ fastify, triggersList, functionsList });
|
|
135
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":"AAYA,OAAO,EAAyC,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAkyBrF,QAAA,MAAM,YAAY,EAAE,oBAsBlB,CAAA;AAEF,eAAe,YAAY,CAAA"}
|