{"version":3,"sources":["../../../../src/middlewares/A-ServerCORS/A_ServerCORS.component.ts"],"names":[],"mappings":";;;;;;;;;;AAcO,MAAM,qBAAqB,kBAAA,CAAmB;AAAA,EAOjD,MAAM,KACkB,MAAA,EACtB;AACE,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACV,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,QAAQ,KAAK,6BAAA,CAA8B,MAAA;AAAA,MAC9D,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,SAAS,KAAK,6BAAA,CAA8B,OAAA;AAAA,MAChE,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,SAAS,KAAK,6BAAA,CAA8B,OAAA;AAAA,MAChE,WAAA,EAAa,MAAA,CAAO,GAAA,CAAI,aAAa,KAAK,6BAAA,CAA8B,WAAA;AAAA,MACxE,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,SAAS,KAAK,6BAAA,CAA8B;AAAA,KACnE;AAAA,EACJ;AAAA,EAIO,KAAA,CACkB,MACC,IAAA,EACxB;AAEE,IAAA,IAAA,CAAK,SAAA,CAAU,6BAAA,EAA+B,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAChE,IAAA,IAAA,CAAK,UAAU,8BAAA,EAAgC,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAC7E,IAAA,IAAA,CAAK,UAAU,8BAAA,EAAgC,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAE7E,IAAA,IAAI,IAAA,CAAK,OAAO,WAAA,EAAa;AACzB,MAAA,IAAA,CAAK,SAAA,CAAU,oCAAoC,MAAM,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACpB,MAAA,IAAA,CAAK,UAAU,wBAAA,EAA0B,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAAA,IAC1E;AAGA,IAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC3B,MAAA,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,IAC1B;AAAA,EACJ;AACJ;AApCU,eAAA,CAAA;AAAA,EAHL,UAAU,MAAA,CAAO;AAAA,IACd,MAAM,iBAAA,CAAkB;AAAA,GAC3B,CAAA;AAAA,EAEI,4BAAS,QAAQ,CAAA;AAAA,CAAA,EARb,YAAA,CAOH,SAAA,EAAA,MAAA,EAAA,CAAA,CAAA;AAcC,eAAA,CAAA;AAAA,EADN,YAAA,CAAa,eAAA;AAAA,EAET,4BAAS,SAAS,CAAA,CAAA;AAAA,EAClB,4BAAS,UAAU,CAAA;AAAA,CAAA,EAvBf,YAAA,CAqBF,SAAA,EAAA,OAAA,EAAA,CAAA,CAAA","file":"A_ServerCORS.component.mjs","sourcesContent":["import { A_Feature, A_Inject } from '@adaas/a-concept';\nimport { A_ServiceFeatures } from '@adaas/a-utils/a-service';\nimport { A_Request } from '@adaas/a-server/request/A-Request.entity';\nimport { A_Response } from '@adaas/a-server/response/A-Response.entity';\nimport { A_HttpServerFeatures } from '@adaas/a-server/server/A-HttpServer.constants';\nimport { A_Config } from '@adaas/a-utils/a-config';\nimport { A_ServerMiddleware } from '@adaas/a-server/middleware/A-ServerMiddleware.component';\nimport { A_SERVER_TYPES__CorsConfig } from './A_ServerCORS.types';\nimport { A_SERVER_DEFAULTS__CorsConfig } from './A_ServerCORS.constants';\nimport { A_HttpServer } from '@adaas/a-server/server/A-HttpServer.container';\n\n\n\n\nexport class A_ServerCORS extends A_ServerMiddleware {\n\n    private config!: A_SERVER_TYPES__CorsConfig;\n\n    @A_Feature.Extend({\n        name: A_ServiceFeatures.onBeforeStart\n    })\n    async init(\n        @A_Inject(A_Config) config: A_Config<['ORIGIN', 'METHODS', 'HEADERS', 'CREDENTIALS', 'MAX_AGE']>,\n    ) {\n        this.config = {\n            origin: config.get('ORIGIN') || A_SERVER_DEFAULTS__CorsConfig.origin,\n            methods: config.get('METHODS') || A_SERVER_DEFAULTS__CorsConfig.methods,\n            headers: config.get('HEADERS') || A_SERVER_DEFAULTS__CorsConfig.headers,\n            credentials: config.get('CREDENTIALS') || A_SERVER_DEFAULTS__CorsConfig.credentials,\n            maxAge: config.get('MAX_AGE') || A_SERVER_DEFAULTS__CorsConfig.maxAge,\n        };\n    }\n\n\n    @A_HttpServer.onBeforeRequest\n    public apply(\n        @A_Inject(A_Request) aReq: A_Request,\n        @A_Inject(A_Response) aRes: A_Response,\n    ) {\n\n        aRes.setHeader('Access-Control-Allow-Origin', this.config.origin);\n        aRes.setHeader('Access-Control-Allow-Methods', this.config.methods.join(', '));\n        aRes.setHeader('Access-Control-Allow-Headers', this.config.headers.join(', '));\n\n        if (this.config.credentials) {\n            aRes.setHeader('Access-Control-Allow-Credentials', 'true');\n        }\n\n        if (this.config.maxAge) {\n            aRes.setHeader('Access-Control-Max-Age', this.config.maxAge.toString());\n        }\n\n        // Handle preflight OPTIONS requests\n        if (aReq.method === 'OPTIONS') {\n            aRes.status(204).send();\n        }\n    }\n}\n"]}