From 861bb255fef011e3884b0560db7ce42d97d732ab Mon Sep 17 00:00:00 2001 From: Vikas Aggarwal Date: Thu, 3 Jul 2025 14:37:44 -0400 Subject: [PATCH] Added functionality to support x-amazon-* in security schemes. [BUG] securityScheme does not support x-amazon-* extensions #248 --- src/definitionGenerator.js | 6 +++++ test/unit/definitionGenerator.spec.js | 36 +++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/definitionGenerator.js b/src/definitionGenerator.js index 9bfb223..355163a 100644 --- a/src/definitionGenerator.js +++ b/src/definitionGenerator.js @@ -920,6 +920,12 @@ class DefinitionGenerator { break; } + const extendedSpec = this.extendSpecification(securityScheme); + + if (Object.keys(extendedSpec).length) { + Object.assign(schema, extendedSpec); + } + this.addToComponents(this.componentTypes.securitySchemes, schema, scheme); } } diff --git a/test/unit/definitionGenerator.spec.js b/test/unit/definitionGenerator.spec.js index 8f94c0a..65b76f9 100644 --- a/test/unit/definitionGenerator.spec.js +++ b/test/unit/definitionGenerator.spec.js @@ -886,6 +886,42 @@ describe("DefinitionGenerator", () => { ).to.have.property("api_key"); }); }); + + describe("x-amazon-* extensions", () => { + it("should add an x-amazon-* security scheme to components", function () { + mockServerless.service.custom.documentation.securitySchemes = { + x_amazon_api_key: { + type: "apiKey", + name: "x-amz-security-token", + in: "header", + "x-amazon-apigateway-authtype": "awsSigv4", + }, + }; + + const definitionGenerator = new DefinitionGenerator( + mockServerless, + logger + ); + definitionGenerator.createSecuritySchemes( + mockServerless.service.custom.documentation.securitySchemes + ); + + expect(definitionGenerator.openAPI).to.be.an("object"); + expect(definitionGenerator.openAPI.components).to.be.an("object"); + expect(definitionGenerator.openAPI.components).to.have.property( + "securitySchemes" + ); + expect(definitionGenerator.openAPI.components.securitySchemes).to.be.an( + "object" + ); + expect( + definitionGenerator.openAPI.components.securitySchemes + ).to.have.property("x_amazon_api_key"); + expect( + definitionGenerator.openAPI.components.securitySchemes.x_amazon_api_key + ).to.have.property("x-amazon-apigateway-authtype"); + }); + }); }); describe("createTags", () => {