@friggframework/schemas 2.0.0-next.78 → 2.0.0-next.80
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/index.js +232 -5
- package/middleware/__tests__/schema-validation.test.js +508 -0
- package/middleware/schema-validation.js +388 -0
- package/mocks/README.md +280 -0
- package/mocks/__tests__/authorization-mocks.test.js +311 -0
- package/mocks/authorization-mocks.js +339 -0
- package/package.json +4 -2
- package/schemas/api-authorization.schema.json +302 -0
- package/schemas/api-credentials.schema.json +176 -0
- package/schemas/api-entities.schema.json +292 -0
- package/schemas/api-proxy.schema.json +251 -0
- package/schemas/app-definition.schema.json +19 -0
- package/schemas/core-models.schema.json +16 -16
package/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @friggframework/schemas - Canonical JSON Schema definitions for Frigg Framework
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This package provides formal JSON Schema definitions for all core Frigg configuration
|
|
5
|
-
* objects, along with runtime validation utilities.
|
|
5
|
+
* objects, along with runtime validation utilities and Express middleware.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
const Ajv = require('ajv');
|
|
@@ -10,6 +10,9 @@ const addFormats = require('ajv-formats');
|
|
|
10
10
|
const fs = require('fs');
|
|
11
11
|
const path = require('path');
|
|
12
12
|
|
|
13
|
+
// Import middleware
|
|
14
|
+
const schemaValidationMiddleware = require('./middleware/schema-validation');
|
|
15
|
+
|
|
13
16
|
// Initialize AJV with formats
|
|
14
17
|
const ajv = new Ajv({
|
|
15
18
|
allErrors: true,
|
|
@@ -25,11 +28,15 @@ const schemaDir = path.join(__dirname, 'schemas');
|
|
|
25
28
|
// Load schema files
|
|
26
29
|
const schemaFiles = [
|
|
27
30
|
'app-definition.schema.json',
|
|
28
|
-
'integration-definition.schema.json',
|
|
31
|
+
'integration-definition.schema.json',
|
|
29
32
|
'api-module-definition.schema.json',
|
|
30
33
|
'serverless-config.schema.json',
|
|
31
34
|
'environment-config.schema.json',
|
|
32
|
-
'core-models.schema.json'
|
|
35
|
+
'core-models.schema.json',
|
|
36
|
+
'api-authorization.schema.json',
|
|
37
|
+
'api-credentials.schema.json',
|
|
38
|
+
'api-entities.schema.json',
|
|
39
|
+
'api-proxy.schema.json'
|
|
33
40
|
];
|
|
34
41
|
|
|
35
42
|
schemaFiles.forEach(file => {
|
|
@@ -117,6 +124,195 @@ function validateCoreModels(coreModels) {
|
|
|
117
124
|
return validate('core-models', coreModels);
|
|
118
125
|
}
|
|
119
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Validate Authorization Requirements
|
|
129
|
+
* @param {object} requirements - Authorization requirements object to validate
|
|
130
|
+
* @returns {object} - Validation result
|
|
131
|
+
*/
|
|
132
|
+
function validateAuthorizationRequirements(requirements) {
|
|
133
|
+
return validate('api-authorization#/definitions/authorizationRequirements', requirements);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Validate Authorization Request
|
|
138
|
+
* @param {object} request - Authorization request object to validate
|
|
139
|
+
* @returns {object} - Validation result
|
|
140
|
+
*/
|
|
141
|
+
function validateAuthorizationRequest(request) {
|
|
142
|
+
return validate('api-authorization#/definitions/authorizationRequest', request);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Validate Authorization Response
|
|
147
|
+
* @param {object} response - Authorization response object to validate
|
|
148
|
+
* @returns {object} - Validation result
|
|
149
|
+
*/
|
|
150
|
+
function validateAuthorizationResponse(response) {
|
|
151
|
+
return validate('api-authorization#/definitions/authorizationResponse', response);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Validate Authorization Session
|
|
156
|
+
* @param {object} session - Authorization session object to validate
|
|
157
|
+
* @returns {object} - Validation result
|
|
158
|
+
*/
|
|
159
|
+
function validateAuthorizationSession(session) {
|
|
160
|
+
return validate('api-authorization#/definitions/authorizationSession', session);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Validate Credential
|
|
165
|
+
* @param {object} credential - Credential object to validate
|
|
166
|
+
* @returns {object} - Validation result
|
|
167
|
+
*/
|
|
168
|
+
function validateCredential(credential) {
|
|
169
|
+
return validate('api-credentials#/definitions/credential', credential);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Validate List Credentials Response
|
|
174
|
+
* @param {object} response - List credentials response object to validate
|
|
175
|
+
* @returns {object} - Validation result
|
|
176
|
+
*/
|
|
177
|
+
function validateListCredentialsResponse(response) {
|
|
178
|
+
return validate('api-credentials#/definitions/listCredentialsResponse', response);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Validate Get Credential Response
|
|
183
|
+
* @param {object} response - Get credential response object to validate
|
|
184
|
+
* @returns {object} - Validation result
|
|
185
|
+
*/
|
|
186
|
+
function validateGetCredentialResponse(response) {
|
|
187
|
+
return validate('api-credentials#/definitions/getCredentialResponse', response);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Validate Delete Credential Response
|
|
192
|
+
* @param {object} response - Delete credential response object to validate
|
|
193
|
+
* @returns {object} - Validation result
|
|
194
|
+
*/
|
|
195
|
+
function validateDeleteCredentialResponse(response) {
|
|
196
|
+
return validate('api-credentials#/definitions/deleteCredentialResponse', response);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Validate Reauthorize Credential Request
|
|
201
|
+
* @param {object} request - Reauthorize credential request object to validate
|
|
202
|
+
* @returns {object} - Validation result
|
|
203
|
+
*/
|
|
204
|
+
function validateReauthorizeCredentialRequest(request) {
|
|
205
|
+
return validate('api-credentials#/definitions/reauthorizeCredentialRequest', request);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Validate Reauthorize Credential Response
|
|
210
|
+
* @param {object} response - Reauthorize credential response object to validate
|
|
211
|
+
* @returns {object} - Validation result
|
|
212
|
+
*/
|
|
213
|
+
function validateReauthorizeCredentialResponse(response) {
|
|
214
|
+
return validate('api-credentials#/definitions/reauthorizeCredentialResponse', response);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Validate Proxy Request
|
|
219
|
+
* @param {object} request - Proxy request object to validate
|
|
220
|
+
* @returns {object} - Validation result
|
|
221
|
+
*/
|
|
222
|
+
function validateProxyRequest(request) {
|
|
223
|
+
return validate('api-proxy#/definitions/proxyRequest', request);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Validate Proxy Response
|
|
228
|
+
* @param {object} response - Proxy response object to validate
|
|
229
|
+
* @returns {object} - Validation result
|
|
230
|
+
*/
|
|
231
|
+
function validateProxyResponse(response) {
|
|
232
|
+
return validate('api-proxy#/definitions/proxyResponseUnion', response);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Validate Entity
|
|
237
|
+
* @param {object} entity - Entity object to validate
|
|
238
|
+
* @returns {object} - Validation result
|
|
239
|
+
*/
|
|
240
|
+
function validateEntity(entity) {
|
|
241
|
+
return validate('api-entities#/definitions/entity', entity);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Validate List Entities Response
|
|
246
|
+
* @param {object} response - List entities response object to validate
|
|
247
|
+
* @returns {object} - Validation result
|
|
248
|
+
*/
|
|
249
|
+
function validateListEntitiesResponse(response) {
|
|
250
|
+
return validate('api-entities#/definitions/listEntitiesResponse', response);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Validate Create Entity Request
|
|
255
|
+
* @param {object} request - Create entity request object to validate
|
|
256
|
+
* @returns {object} - Validation result
|
|
257
|
+
*/
|
|
258
|
+
function validateCreateEntityRequest(request) {
|
|
259
|
+
return validate('api-entities#/definitions/createEntityRequest', request);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Validate Create Entity Response
|
|
264
|
+
* @param {object} response - Create entity response object to validate
|
|
265
|
+
* @returns {object} - Validation result
|
|
266
|
+
*/
|
|
267
|
+
function validateCreateEntityResponse(response) {
|
|
268
|
+
return validate('api-entities#/definitions/createEntityResponse', response);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Validate Entity Type
|
|
273
|
+
* @param {object} entityType - Entity type object to validate
|
|
274
|
+
* @returns {object} - Validation result
|
|
275
|
+
*/
|
|
276
|
+
function validateEntityType(entityType) {
|
|
277
|
+
return validate('api-entities#/definitions/entityType', entityType);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Validate List Entity Types Response
|
|
282
|
+
* @param {object} response - List entity types response object to validate
|
|
283
|
+
* @returns {object} - Validation result
|
|
284
|
+
*/
|
|
285
|
+
function validateListEntityTypesResponse(response) {
|
|
286
|
+
return validate('api-entities#/definitions/listEntityTypesResponse', response);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Validate Get Entity Type Response
|
|
291
|
+
* @param {object} response - Get entity type response object to validate
|
|
292
|
+
* @returns {object} - Validation result
|
|
293
|
+
*/
|
|
294
|
+
function validateGetEntityTypeResponse(response) {
|
|
295
|
+
return validate('api-entities#/definitions/getEntityTypeResponse', response);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Validate Reauthorize Entity Request
|
|
300
|
+
* @param {object} request - Reauthorize entity request object to validate
|
|
301
|
+
* @returns {object} - Validation result
|
|
302
|
+
*/
|
|
303
|
+
function validateReauthorizeEntityRequest(request) {
|
|
304
|
+
return validate('api-entities#/definitions/reauthorizeEntityRequest', request);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Validate Reauthorize Entity Response
|
|
309
|
+
* @param {object} response - Reauthorize entity response object to validate
|
|
310
|
+
* @returns {object} - Validation result
|
|
311
|
+
*/
|
|
312
|
+
function validateReauthorizeEntityResponse(response) {
|
|
313
|
+
return validate('api-entities#/definitions/reauthorizeEntityResponse', response);
|
|
314
|
+
}
|
|
315
|
+
|
|
120
316
|
/**
|
|
121
317
|
* Get all available schemas
|
|
122
318
|
* @returns {object} - Object containing all loaded schemas
|
|
@@ -158,6 +354,7 @@ function formatErrors(errors) {
|
|
|
158
354
|
}
|
|
159
355
|
|
|
160
356
|
module.exports = {
|
|
357
|
+
// Validation functions
|
|
161
358
|
validate,
|
|
162
359
|
validateAppDefinition,
|
|
163
360
|
validateIntegrationDefinition,
|
|
@@ -165,9 +362,39 @@ module.exports = {
|
|
|
165
362
|
validateServerlessConfig,
|
|
166
363
|
validateEnvironmentConfig,
|
|
167
364
|
validateCoreModels,
|
|
365
|
+
validateAuthorizationRequirements,
|
|
366
|
+
validateAuthorizationRequest,
|
|
367
|
+
validateAuthorizationResponse,
|
|
368
|
+
validateAuthorizationSession,
|
|
369
|
+
validateCredential,
|
|
370
|
+
validateListCredentialsResponse,
|
|
371
|
+
validateGetCredentialResponse,
|
|
372
|
+
validateDeleteCredentialResponse,
|
|
373
|
+
validateReauthorizeCredentialRequest,
|
|
374
|
+
validateReauthorizeCredentialResponse,
|
|
375
|
+
validateProxyRequest,
|
|
376
|
+
validateProxyResponse,
|
|
377
|
+
validateEntity,
|
|
378
|
+
validateListEntitiesResponse,
|
|
379
|
+
validateCreateEntityRequest,
|
|
380
|
+
validateCreateEntityResponse,
|
|
381
|
+
validateEntityType,
|
|
382
|
+
validateListEntityTypesResponse,
|
|
383
|
+
validateGetEntityTypeResponse,
|
|
384
|
+
validateReauthorizeEntityRequest,
|
|
385
|
+
validateReauthorizeEntityResponse,
|
|
168
386
|
getSchemas,
|
|
169
387
|
getSchema,
|
|
170
388
|
formatErrors,
|
|
171
389
|
schemas,
|
|
172
|
-
ajv
|
|
390
|
+
ajv,
|
|
391
|
+
|
|
392
|
+
// Middleware exports
|
|
393
|
+
middleware: schemaValidationMiddleware,
|
|
394
|
+
validateBody: schemaValidationMiddleware.validateBody,
|
|
395
|
+
validateQuery: schemaValidationMiddleware.validateQuery,
|
|
396
|
+
validateParams: schemaValidationMiddleware.validateParams,
|
|
397
|
+
validateResponse: schemaValidationMiddleware.validateResponse,
|
|
398
|
+
SchemaRefs: schemaValidationMiddleware.SchemaRefs,
|
|
399
|
+
SchemaValidationError: schemaValidationMiddleware.SchemaValidationError
|
|
173
400
|
};
|