{"version":3,"file":"security.mjs","sources":["../../../src/assemblers/document/security.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { OpenAPIV3_1 } from 'openapi-types';\n\nimport type { DocumentContext } from '../../types';\n\nimport type { Assembler } from '..';\n\nconst DEFAULT_BEARER_AUTH: OpenAPIV3_1.HttpSecurityScheme = {\n  type: 'http',\n  scheme: 'bearer',\n  bearerFormat: 'JWT',\n  description: 'JWT Bearer token for authentication',\n};\n\nexport class DocumentSecurityAssembler implements Assembler.Document {\n  assemble(context: DocumentContext): void {\n    const { strapi } = context;\n\n    const securitySchemes = this._getSecuritySchemes(strapi);\n    const security = this._getGlobalSecurity(strapi);\n\n    if (context.output.data.components === undefined) {\n      context.output.data.components = {};\n    }\n\n    context.output.data.components.securitySchemes = securitySchemes;\n    context.output.data.security = security;\n  }\n\n  private _getSecuritySchemes(\n    strapi: Core.Strapi\n  ): Record<string, OpenAPIV3_1.SecuritySchemeObject> {\n    const securityConfig =\n      strapi.config.get<\n        Record<string, OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SecuritySchemeObject>\n      >('openapi.security') ?? {};\n\n    const schemes: Record<string, OpenAPIV3_1.SecuritySchemeObject> = {};\n\n    if (!securityConfig.bearerAuth) {\n      schemes.bearerAuth = DEFAULT_BEARER_AUTH;\n    }\n\n    for (const [name, config] of Object.entries(securityConfig)) {\n      schemes[name] = config as OpenAPIV3_1.SecuritySchemeObject;\n    }\n\n    return schemes;\n  }\n\n  private _getGlobalSecurity(strapi: Core.Strapi): OpenAPIV3_1.Document['security'] {\n    const globalSecurity =\n      strapi.config.get<OpenAPIV3_1.Document['security']>('openapi.globalSecurity');\n\n    if (globalSecurity) {\n      return globalSecurity;\n    }\n\n    return [{ bearerAuth: [] }];\n  }\n}\n"],"names":["DEFAULT_BEARER_AUTH","type","scheme","bearerFormat","description","DocumentSecurityAssembler","assemble","context","strapi","securitySchemes","_getSecuritySchemes","security","_getGlobalSecurity","output","data","components","undefined","securityConfig","config","get","schemes","bearerAuth","name","Object","entries","globalSecurity"],"mappings":"AAOA,MAAMA,mBAAAA,GAAsD;IAC1DC,IAAAA,EAAM,MAAA;IACNC,MAAAA,EAAQ,QAAA;IACRC,YAAAA,EAAc,KAAA;IACdC,WAAAA,EAAa;AACf,CAAA;AAEO,MAAMC,yBAAAA,CAAAA;AACXC,IAAAA,QAAAA,CAASC,OAAwB,EAAQ;QACvC,MAAM,EAAEC,MAAM,EAAE,GAAGD,OAAAA;AAEnB,QAAA,MAAME,eAAAA,GAAkB,IAAI,CAACC,mBAAmB,CAACF,MAAAA,CAAAA;AACjD,QAAA,MAAMG,QAAAA,GAAW,IAAI,CAACC,kBAAkB,CAACJ,MAAAA,CAAAA;AAEzC,QAAA,IAAID,QAAQM,MAAM,CAACC,IAAI,CAACC,UAAU,KAAKC,SAAAA,EAAW;AAChDT,YAAAA,OAAAA,CAAQM,MAAM,CAACC,IAAI,CAACC,UAAU,GAAG,EAAC;AACpC,QAAA;AAEAR,QAAAA,OAAAA,CAAQM,MAAM,CAACC,IAAI,CAACC,UAAU,CAACN,eAAe,GAAGA,eAAAA;AACjDF,QAAAA,OAAAA,CAAQM,MAAM,CAACC,IAAI,CAACH,QAAQ,GAAGA,QAAAA;AACjC,IAAA;AAEQD,IAAAA,mBAAAA,CACNF,MAAmB,EAC+B;AAClD,QAAA,MAAMS,iBACJT,MAAAA,CAAOU,MAAM,CAACC,GAAG,CAEf,uBAAuB,EAAC;AAE5B,QAAA,MAAMC,UAA4D,EAAC;QAEnE,IAAI,CAACH,cAAAA,CAAeI,UAAU,EAAE;AAC9BD,YAAAA,OAAAA,CAAQC,UAAU,GAAGrB,mBAAAA;AACvB,QAAA;QAEA,KAAK,MAAM,CAACsB,IAAAA,EAAMJ,MAAAA,CAAO,IAAIK,MAAAA,CAAOC,OAAO,CAACP,cAAAA,CAAAA,CAAiB;YAC3DG,OAAO,CAACE,KAAK,GAAGJ,MAAAA;AAClB,QAAA;QAEA,OAAOE,OAAAA;AACT,IAAA;AAEQR,IAAAA,kBAAAA,CAAmBJ,MAAmB,EAAoC;AAChF,QAAA,MAAMiB,cAAAA,GACJjB,MAAAA,CAAOU,MAAM,CAACC,GAAG,CAAmC,wBAAA,CAAA;AAEtD,QAAA,IAAIM,cAAAA,EAAgB;YAClB,OAAOA,cAAAA;AACT,QAAA;QAEA,OAAO;AAAC,YAAA;AAAEJ,gBAAAA,UAAAA,EAAY;AAAG;AAAE,SAAA;AAC7B,IAAA;AACF;;;;"}