UNPKG

@apideck/portman

Version:

Port OpenAPI Spec to Postman Collection, with contract & variation tests included

714 lines 44.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Fuzzer = void 0; var tslib_1 = require("tslib"); var types_1 = require("../types"); var legacy_1 = tslib_1.__importDefault(require("neotraverse/legacy")); var utils_1 = require("../utils"); var PostmanDynamicVarGenerator_1 = require("../services/PostmanDynamicVarGenerator"); var openapi_format_1 = require("openapi-format"); var Fuzzer = (function () { function Fuzzer(options) { var testSuite = options.testSuite, variationWriter = options.variationWriter; this.testSuite = testSuite; this.variationWriter = variationWriter; this.fuzzVariations = []; } Fuzzer.prototype.injectFuzzRequestBodyVariations = function (pmOperation, oaOperation, variation, variationMeta) { var _this = this; var _a, _b, _c, _d; var fuzzingSet = (variation === null || variation === void 0 ? void 0 : variation.fuzzing) || []; if (fuzzingSet.length === 0) return; if (!((_a = oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.schema) === null || _a === void 0 ? void 0 : _a.requestBody)) return; var reqBody = (_b = oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.schema) === null || _b === void 0 ? void 0 : _b.requestBody; var jsonContentType = (0, utils_1.getJsonContentType)(Object.keys(reqBody === null || reqBody === void 0 ? void 0 : reqBody.content)); if (!jsonContentType) return; var schema = (_d = (_c = reqBody === null || reqBody === void 0 ? void 0 : reqBody.content) === null || _c === void 0 ? void 0 : _c[jsonContentType]) === null || _d === void 0 ? void 0 : _d.schema; var fuzzItems = this.analyzeFuzzJsonSchema(schema); var requestBodyExamples = (0, utils_1.getRequestBodyExamples)(reqBody, jsonContentType); var fuzzReqBodySet = fuzzingSet.filter(function (fuzz) { return fuzz === null || fuzz === void 0 ? void 0 : fuzz.requestBody; }); fuzzReqBodySet.map(function (fuzzItem) { var fuzzSet = fuzzItem === null || fuzzItem === void 0 ? void 0 : fuzzItem.requestBody; fuzzSet.map(function (fuzz) { var _a, _b, _c, _d, _e; if (((_a = fuzz === null || fuzz === void 0 ? void 0 : fuzz.requiredFields) === null || _a === void 0 ? void 0 : _a.enabled) === true) { _this.injectFuzzRequiredVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems, requestBodyExamples); } if (((_b = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.enabled) === true) { _this.injectFuzzMinimumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_c = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.enabled) === true) { _this.injectFuzzMaximumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_d = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minLengthFields) === null || _d === void 0 ? void 0 : _d.enabled) === true) { _this.injectFuzzMinLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_e = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maxLengthFields) === null || _e === void 0 ? void 0 : _e.enabled) === true) { _this.injectFuzzMaxLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } }); }); }; Fuzzer.prototype.injectFuzzRequestQueryParamsVariations = function (pmOperation, oaOperation, variation, variationMeta) { var _this = this; var fuzzingSet = (variation === null || variation === void 0 ? void 0 : variation.fuzzing) || []; if (fuzzingSet.length === 0) return; if (!(oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.queryParams)) return; var reqQueryParams = oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.queryParams; reqQueryParams.map(function (queryParam) { var fuzzItems = _this.analyzeQuerySchema(queryParam); var fuzzQueryParamSet = fuzzingSet.filter(function (fuzz) { return fuzz === null || fuzz === void 0 ? void 0 : fuzz.requestQueryParams; }); fuzzQueryParamSet.map(function (fuzzItem) { var fuzzSet = fuzzItem === null || fuzzItem === void 0 ? void 0 : fuzzItem.requestQueryParams; fuzzSet.map(function (fuzz) { var _a, _b, _c, _d, _e; if (((_a = fuzz === null || fuzz === void 0 ? void 0 : fuzz.requiredFields) === null || _a === void 0 ? void 0 : _a.enabled) === true) { _this.injectFuzzRequiredVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_b = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.enabled) === true) { _this.injectFuzzMinimumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_c = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.enabled) === true) { _this.injectFuzzMaximumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_d = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minLengthFields) === null || _d === void 0 ? void 0 : _d.enabled) === true) { _this.injectFuzzMinLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_e = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maxLengthFields) === null || _e === void 0 ? void 0 : _e.enabled) === true) { _this.injectFuzzMaxLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } }); }); }); }; Fuzzer.prototype.injectFuzzRequestHeadersVariations = function (pmOperation, oaOperation, variation, variationMeta) { var _this = this; var fuzzingSet = (variation === null || variation === void 0 ? void 0 : variation.fuzzing) || []; if (fuzzingSet.length === 0) return; if (!(oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.requestHeaders)) return; var reqHeaders = oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.requestHeaders; reqHeaders.map(function (header) { var fuzzItems = _this.analyzeHeaderSchema(header); var fuzzHeaderSet = fuzzingSet.filter(function (fuzz) { return fuzz === null || fuzz === void 0 ? void 0 : fuzz.requestHeaders; }); fuzzHeaderSet.map(function (fuzzItem) { var fuzzSet = fuzzItem === null || fuzzItem === void 0 ? void 0 : fuzzItem.requestHeaders; fuzzSet.map(function (fuzz) { var _a, _b, _c, _d, _e; if (((_a = fuzz === null || fuzz === void 0 ? void 0 : fuzz.requiredFields) === null || _a === void 0 ? void 0 : _a.enabled) === true) { _this.injectFuzzRequiredVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_b = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.enabled) === true) { _this.injectFuzzMinimumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_c = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.enabled) === true) { _this.injectFuzzMaximumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_d = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minLengthFields) === null || _d === void 0 ? void 0 : _d.enabled) === true) { _this.injectFuzzMinLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } if (((_e = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maxLengthFields) === null || _e === void 0 ? void 0 : _e.enabled) === true) { _this.injectFuzzMaxLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems); } }); }); }); }; Fuzzer.prototype.injectFuzzRequiredVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems, requestBodyExamples) { var _this = this; var requiredFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.requiredFields) || []; if (requiredFields.length === 0) return; var clonedVariation = JSON.parse(JSON.stringify(variation)); requiredFields.map(function (requiredField) { var filteredExamples = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody && (requestBodyExamples === null || requestBodyExamples === void 0 ? void 0 : requestBodyExamples.length) ? _this.filterRequestBodyExamples(requestBodyExamples, requiredField) : []; var fallbackExamples = requestBodyExamples && requestBodyExamples.length > 0 ? [requestBodyExamples[0]] : []; var examplePayloads = filteredExamples.length > 0 ? filteredExamples : fallbackExamples; var examplesToUse = examplePayloads.length > 0 ? examplePayloads : [undefined]; var includeExampleSuffix = examplePayloads.length > 1; examplesToUse.forEach(function (examplePayload, exampleIndex) { var exampleSuffix = includeExampleSuffix ? " [example ".concat(exampleIndex + 1, "]") : ''; var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][required ").concat(requiredField, "]").concat(exampleSuffix); var operationVariation = pmOperation.clone({ newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'), name: variationFuzzName }); _this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false); var newVariation = JSON.parse(JSON.stringify(clonedVariation)); if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites)) newVariation.overwrites = []; if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) { if (examplePayload !== undefined) { var safeExamplePayload = JSON.parse(JSON.stringify(examplePayload)); var exampleOverwrite = { key: '.', value: safeExamplePayload, overwrite: true }; _this.addOverwriteRequestBody(newVariation, exampleOverwrite); } var fuzzRequestBody = { key: requiredField, remove: true }; _this.addOverwriteRequestBody(newVariation, fuzzRequestBody); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) { var fuzzRequestQueryParam = { key: requiredField, remove: true }; _this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) { var fuzzRequestHeader = { key: requiredField, remove: true }; _this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader); } _this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta); _this.fuzzVariations.push(operationVariation); }); }); }; Fuzzer.prototype.filterRequestBodyExamples = function (examples, requiredField) { return examples .filter(function (example) { if (example === null || typeof example !== 'object') return false; var safeExample = JSON.parse(JSON.stringify(example)); return ((0, utils_1.getByPath)(safeExample, requiredField) !== undefined); }) .map(function (example) { return JSON.parse(JSON.stringify(example)); }); }; Fuzzer.prototype.injectFuzzMinimumVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems) { var _this = this; var minimumNumberFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minimumNumberFields) || []; if (minimumNumberFields.length === 0) return; if (!(types_1.PortmanFuzzTypes.requestBody === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) && !(types_1.PortmanFuzzTypes.requestQueryParam === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) && !(types_1.PortmanFuzzTypes.requestHeader === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType))) return; var clonedVariation = JSON.parse(JSON.stringify(variation)); minimumNumberFields.forEach(function (field) { var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][minimum number value ").concat(field.path, "]"); var numberVal = typeof field.value === 'number' ? field.value - 1 : Number(field.value) - 1; var operationVariation = pmOperation.clone({ newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'), name: variationFuzzName }); _this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false); var newVariation = JSON.parse(JSON.stringify(clonedVariation)); if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites)) newVariation.overwrites = []; if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) { var fuzzRequestBody = { key: field.path, value: numberVal, overwrite: true }; _this.addOverwriteRequestBody(newVariation, fuzzRequestBody); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) { var fuzzRequestQueryParam = { key: field.path, value: numberVal.toString(), overwrite: true, disable: false }; _this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) { var fuzzRequestHeader = { key: field.path, value: numberVal.toString(), overwrite: true, disable: false }; _this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader); } _this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta); _this.fuzzVariations.push(operationVariation); }); }; Fuzzer.prototype.injectFuzzMaximumVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems) { var _this = this; var maximumNumberFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maximumNumberFields) || []; if (maximumNumberFields.length === 0) return; if (!(types_1.PortmanFuzzTypes.requestBody === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) && !(types_1.PortmanFuzzTypes.requestQueryParam === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) && !(types_1.PortmanFuzzTypes.requestHeader === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType))) return; var clonedVariation = JSON.parse(JSON.stringify(variation)); maximumNumberFields.forEach(function (field) { var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][maximum number value ").concat(field.path, "]"); var numberVal = typeof field.value === 'number' ? field.value + 1 : Number(field.value) + 1; var operationVariation = pmOperation.clone({ newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'), name: variationFuzzName }); _this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false); var newVariation = JSON.parse(JSON.stringify(clonedVariation)); if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites)) newVariation.overwrites = []; if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) { var fuzzRequestBody = { key: field.path, value: numberVal, overwrite: true }; _this.addOverwriteRequestBody(newVariation, fuzzRequestBody); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) { var fuzzRequestQueryParam = { key: field.path, value: numberVal.toString(), overwrite: true, disable: false }; _this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) { var fuzzRequestHeader = { key: field.path, value: numberVal.toString(), overwrite: true, disable: false }; _this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader); } _this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta); _this.fuzzVariations.push(operationVariation); }); }; Fuzzer.prototype.injectFuzzMinLengthVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems) { var _this = this; var minLengthFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minLengthFields) || []; if (minLengthFields.length === 0) return; if (!(types_1.PortmanFuzzTypes.requestBody === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) && !(types_1.PortmanFuzzTypes.requestQueryParam === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) && !(types_1.PortmanFuzzTypes.requestHeader === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType))) return; var clonedVariation = JSON.parse(JSON.stringify(variation)); minLengthFields.forEach(function (field) { var _a, _b, _c; var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][minimum length ").concat(field.path, "]"); var reqObj, reqValue; if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) { reqObj = JSON.parse(((_c = (_b = (_a = pmOperation === null || pmOperation === void 0 ? void 0 : pmOperation.item) === null || _a === void 0 ? void 0 : _a.request) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c.raw) || ''); reqValue = (0, utils_1.getByPath)(reqObj, field.path); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) { var queryParams = JSON.parse(JSON.stringify(pmOperation.item.request.url.query)); var pmQueryParam = queryParams.find(function (obj) { return obj.key === field.field; }); reqValue = pmQueryParam === null || pmQueryParam === void 0 ? void 0 : pmQueryParam.value; } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) { var reqHeaders = JSON.parse(JSON.stringify(pmOperation.item.request.headers)); var pmHeader = reqHeaders.find(function (obj) { return obj.key === field.field; }); reqValue = pmHeader === null || pmHeader === void 0 ? void 0 : pmHeader.value; } if (typeof reqValue === 'string' && reqValue.includes('{{') && reqValue.includes('}}')) { if (reqValue.includes('{{$')) { var pmVarGen = new PostmanDynamicVarGenerator_1.PostmanDynamicVarGenerator(); reqValue = pmVarGen.replaceDynamicVar(reqValue); } else { return; } } var newLenVal; if (typeof reqValue === 'number' && typeof field.value === 'number') { newLenVal = Number(reqValue.toString().substr(0, field.value - 1)) || 0; } if (typeof reqValue === 'string' && typeof field.value === 'number') { newLenVal = reqValue.substring(0, field.value - 1); } if (Array.isArray(reqValue) && typeof field.value === 'number') { var newLength = field.value - 1; newLenVal = reqValue.slice(0, newLength); } var operationVariation = pmOperation.clone({ newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'), name: variationFuzzName }); _this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false); var newVariation = JSON.parse(JSON.stringify(clonedVariation)); if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites)) newVariation.overwrites = []; if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody && newLenVal !== undefined) { var fuzzRequestBody = { key: field.path, value: newLenVal, overwrite: true }; _this.addOverwriteRequestBody(newVariation, fuzzRequestBody); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam && newLenVal !== undefined) { var fuzzRequestQueryParam = { key: field.path, value: newLenVal.toString(), overwrite: true, disable: false }; _this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) { var fuzzRequestHeader = { key: field.path, value: newLenVal.toString(), overwrite: true, disable: false }; _this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader); } _this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta); _this.fuzzVariations.push(operationVariation); }); }; Fuzzer.prototype.injectFuzzMaxLengthVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems) { var _this = this; var maxLengthFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maxLengthFields) || []; if (maxLengthFields.length === 0) return; if (!(types_1.PortmanFuzzTypes.requestBody === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) && !(types_1.PortmanFuzzTypes.requestQueryParam === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) && !(types_1.PortmanFuzzTypes.requestHeader === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType))) return; var clonedVariation = JSON.parse(JSON.stringify(variation)); maxLengthFields.forEach(function (field) { var _a, _b, _c; var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][maximum length ").concat(field.path, "]"); var reqObj, reqValue; if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) { reqObj = JSON.parse(((_c = (_b = (_a = pmOperation === null || pmOperation === void 0 ? void 0 : pmOperation.item) === null || _a === void 0 ? void 0 : _a.request) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c.raw) || ''); reqValue = (0, utils_1.getByPath)(reqObj, field.path); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) { var queryParams = JSON.parse(JSON.stringify(pmOperation.item.request.url.query)); var pmQueryParam = queryParams.find(function (obj) { return obj.key === field.field; }); reqValue = pmQueryParam === null || pmQueryParam === void 0 ? void 0 : pmQueryParam.value; } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) { var reqHeaders = JSON.parse(JSON.stringify(pmOperation.item.request.headers)); var pmHeader = reqHeaders.find(function (obj) { return obj.key === field.field; }); reqValue = pmHeader === null || pmHeader === void 0 ? void 0 : pmHeader.value; } if (typeof reqValue === 'string' && reqValue.includes('{{') && reqValue.includes('}}')) { if (reqValue.includes('{{$')) { var pmVarGen = new PostmanDynamicVarGenerator_1.PostmanDynamicVarGenerator(); reqValue = pmVarGen.replaceDynamicVar(reqValue); } else { return; } } if (reqValue && typeof reqValue === 'number' && typeof field.value === 'number') { field.value = Number(reqValue.toString().padEnd(field.value + 1, '0')) || reqValue; } if (reqValue && typeof reqValue === 'string' && typeof field.value === 'number' && reqValue) { field.value = reqValue.padEnd(field.value + 1, reqValue.charAt(0)); } if (Array.isArray(reqValue) && typeof field.value === 'number') { field.value = reqValue.concat(Array(field.value + 1).fill(reqValue[0])); } var operationVariation = pmOperation.clone({ newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'), name: variationFuzzName }); _this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false); var newVariation = JSON.parse(JSON.stringify(clonedVariation)); if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites)) newVariation.overwrites = []; if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody && reqValue !== undefined) { var fuzzRequestBody = { key: field.path, value: field.value, overwrite: true }; _this.addOverwriteRequestBody(newVariation, fuzzRequestBody); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam && reqValue !== undefined) { var fuzzRequestQueryParam = { key: field.path, value: field.value.toString(), overwrite: true, disable: false }; _this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam); } if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) { var fuzzRequestHeader = { key: field.path, value: field.value.toString(), overwrite: true, disable: false }; _this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader); } _this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta); _this.fuzzVariations.push(operationVariation); }); }; Fuzzer.prototype.analyzeFuzzJsonSchema = function (originalJsonSchema) { var fuzzItems = { fuzzType: types_1.PortmanFuzzTypes.requestBody, requiredFields: [], minimumNumberFields: [], maximumNumberFields: [], minLengthFields: [], maxLengthFields: [] }; if (!originalJsonSchema) return fuzzItems; var jsonSchema = tslib_1.__assign({}, originalJsonSchema); var skipSchemaKeys = ['properties', 'items', 'allOf', 'anyOf', 'oneOf']; (0, legacy_1.default)(jsonSchema).forEach(function (node) { var _a, _b, _c, _d, _e, _f, _g, _h; var path = ""; var requiredPath = ""; var key = this.key; if ((node === null || node === void 0 ? void 0 : node.allOf) || (node === null || node === void 0 ? void 0 : node.oneOf) || (node === null || node === void 0 ? void 0 : node.anyOf)) { var SchemaObject_1 = (0, legacy_1.default)(node).clone(); var modelType = SchemaObject_1.anyOf ? 'anyOf' : SchemaObject_1.oneOf ? 'oneOf' : 'allOf'; SchemaObject_1[modelType].forEach(function (s) { if ('type' in s) { SchemaObject_1.type = s.type; } if ('properties' in s) { SchemaObject_1.properties = Object.assign(SchemaObject_1.properties || {}, s.properties); } if ('required' in s) { SchemaObject_1.required = tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read((SchemaObject_1.required || [])), false), tslib_1.__read(s.required), false); } if (!SchemaObject_1.allOf) return; }); delete SchemaObject_1[modelType]; this.update(SchemaObject_1); node = SchemaObject_1; } if (key === 'anyOf' || key === 'oneOf' || key === 'allOf') { this.delete(); } if (node && (node.hasOwnProperty('minimum') || node.hasOwnProperty('maximum') || node.hasOwnProperty('minLength') || node.hasOwnProperty('maxLength') || (node === null || node === void 0 ? void 0 : node.required) || (node === null || node === void 0 ? void 0 : node.nullable))) { this.parents.forEach(function (item) { var _a, _b, _c; var itemKey = item.key; if (itemKey && ((_a = item === null || item === void 0 ? void 0 : item.node) === null || _a === void 0 ? void 0 : _a.type) === 'object' && !skipSchemaKeys.includes(itemKey)) { path += "".concat(itemKey, "."); } if ((item === null || item === void 0 ? void 0 : item.key) && ((_b = item === null || item === void 0 ? void 0 : item.node) === null || _b === void 0 ? void 0 : _b.type) === 'array') { path += "".concat(itemKey, "[0]."); } if ((item === null || item === void 0 ? void 0 : item.isRoot) && ((_c = item === null || item === void 0 ? void 0 : item.node) === null || _c === void 0 ? void 0 : _c.type) === 'array') { path += "[0]."; } requiredPath = path; }); } if (node === null || node === void 0 ? void 0 : node.required) { if ((node === null || node === void 0 ? void 0 : node.type) === 'object' && key && !skipSchemaKeys.includes(key)) { requiredPath += "".concat(key, "."); } if (key !== 'properties' && Array.isArray(node.required)) { var requiredFuzz = node.required.map(function (req) { return "".concat(requiredPath).concat(req); }); fuzzItems.requiredFields = fuzzItems.requiredFields.concat(requiredFuzz) || []; } } if ((node === null || node === void 0 ? void 0 : node.nullable) === true && fuzzItems.requiredFields.length > 0) { fuzzItems.requiredFields = fuzzItems.requiredFields.filter(function (item) { return item !== "".concat(requiredPath).concat(key); }); } if (key !== 'properties') { var pathBase = path; var pathKey = key; var fieldKey = key; if (key === 'items' && ((_b = (_a = this === null || this === void 0 ? void 0 : this.parent) === null || _a === void 0 ? void 0 : _a.node) === null || _b === void 0 ? void 0 : _b.type) === 'array' && node.type !== 'object') { pathBase = path.slice(0, path.length - 1); pathKey = ''; fieldKey = '[0]'; } if (node && node.hasOwnProperty('minimum')) { (_c = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minimumNumberFields) === null || _c === void 0 ? void 0 : _c.push({ path: "".concat(pathBase).concat(pathKey), field: fieldKey, value: node.minimum }); } if (node && node.hasOwnProperty('maximum')) { (_d = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maximumNumberFields) === null || _d === void 0 ? void 0 : _d.push({ path: "".concat(pathBase).concat(pathKey), field: fieldKey, value: node.maximum }); } if (node && node.hasOwnProperty('minLength') && !((_e = node === null || node === void 0 ? void 0 : node.type) === null || _e === void 0 ? void 0 : _e.includes('object'))) { (_f = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minLengthFields) === null || _f === void 0 ? void 0 : _f.push({ path: "".concat(pathBase).concat(pathKey), field: fieldKey, value: node.minLength }); } if (node && node.hasOwnProperty('maxLength') && !((_g = node === null || node === void 0 ? void 0 : node.type) === null || _g === void 0 ? void 0 : _g.includes('object'))) { (_h = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maxLengthFields) === null || _h === void 0 ? void 0 : _h.push({ path: "".concat(pathBase).concat(pathKey), field: fieldKey, value: node.maxLength }); } } }); return fuzzItems; }; Fuzzer.prototype.analyzeQuerySchema = function (queryParam) { var _a, _b, _c, _d, _e; var fuzzItems = { fuzzType: types_1.PortmanFuzzTypes.requestQueryParam, requiredFields: [], minimumNumberFields: [], maximumNumberFields: [], minLengthFields: [], maxLengthFields: [] }; if (!(queryParam === null || queryParam === void 0 ? void 0 : queryParam.schema) || !queryParam.name) return fuzzItems; var schema = queryParam === null || queryParam === void 0 ? void 0 : queryParam.schema; if (queryParam === null || queryParam === void 0 ? void 0 : queryParam.required) { (_a = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.requiredFields) === null || _a === void 0 ? void 0 : _a.push(queryParam.name); } if (schema && schema.hasOwnProperty('minimum')) { (_b = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.push({ path: queryParam.name, field: queryParam.name, value: schema.minimum }); } if (schema && schema.hasOwnProperty('maximum')) { (_c = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.push({ path: queryParam.name, field: queryParam.name, value: schema.maximum }); } if (schema && schema.hasOwnProperty('minLength')) { (_d = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minLengthFields) === null || _d === void 0 ? void 0 : _d.push({ path: queryParam.name, field: queryParam.name, value: schema.minLength }); } if (schema && schema.hasOwnProperty('maxLength')) { (_e = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maxLengthFields) === null || _e === void 0 ? void 0 : _e.push({ path: queryParam.name, field: queryParam.name, value: schema.maxLength }); } return fuzzItems; }; Fuzzer.prototype.analyzeHeaderSchema = function (header) { var _a, _b, _c, _d, _e; var fuzzItems = { fuzzType: types_1.PortmanFuzzTypes.requestHeader, requiredFields: [], minimumNumberFields: [], maximumNumberFields: [], minLengthFields: [], maxLengthFields: [] }; if (!(header === null || header === void 0 ? void 0 : header.schema) || !header.name) return fuzzItems; var schema = header === null || header === void 0 ? void 0 : header.schema; if (header === null || header === void 0 ? void 0 : header.required) { (_a = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.requiredFields) === null || _a === void 0 ? void 0 : _a.push(header.name); } if (schema && schema.hasOwnProperty('minimum')) { (_b = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.push({ path: header.name, field: header.name, value: schema.minimum }); } if (schema && schema.hasOwnProperty('maximum')) { (_c = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.push({ path: header.name, field: header.name, value: schema.maximum }); } if (schema && schema.hasOwnProperty('minLength')) { (_d = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minLengthFields) === null || _d === void 0 ? void 0 : _d.push({ path: header.name, field: header.name, value: schema.minLength }); } if (schema && schema.hasOwnProperty('maxLength')) { (_e = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maxLengthFields) === null || _e === void 0 ? void 0 : _e.push({ path: header.name, field: header.name, value: schema.maxLength }); } return fuzzItems; }; Fuzzer.prototype.addOverwriteRequestBody = function (variation, fuzzRequestBody) { var idx = variation.overwrites.findIndex(function (obj) { return obj.overwriteRequestBody; }); if (idx === -1) { variation.overwrites.push({ overwriteRequestBody: [fuzzRequestBody] }); } else { variation.overwrites[idx].overwriteRequestBody.push(fuzzRequestBody); } return variation; }; Fuzzer.prototype.addOverwriteRequestQueryParam = function (variation, fuzzRequestQueryParam) { var idx = variation.overwrites.findIndex(function (obj) { return obj.overwriteRequestQueryParams; }); if (idx === -1) { variation.overwrites.push({ overwriteRequestQueryParams: [fuzzRequestQueryParam] }); } else { variation.overwrites[idx].overwriteRequestQueryParams.push(fuzzRequestQueryParam); } return variation; }; Fuzzer.prototype.addOverwriteRequestHeader = function (variation, fuzzRequestHeader) { var idx = variation.overwrites.findIndex(function (obj) { return obj.overwriteRequestHeaders; }); if (idx === -1) { variation.overwrites.push({ overwriteRequestHeaders: [fuzzRequestHeader] }); } else { variation.overwrites[idx].overwriteRequestHeaders.push(fuzzRequestHeader); } return variation; }; return Fuzzer; }()); exports.Fuzzer = Fuzzer; //# sourceMappingURL=Fuzzer.js.map