{"version":3,"file":"policy.mjs","sources":["../../../../server/src/services/content-api/policy.ts"],"sourcesContent":["import { propOr } from 'lodash/fp';\nimport { GraphQLFieldResolver, GraphQLResolveInfo } from 'graphql';\nimport { policy as policyUtils, errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst { PolicyError } = errors;\n\nconst getPoliciesConfig = propOr([], 'policies');\n\nconst createPoliciesMiddleware = (resolverConfig: any, { strapi }: { strapi: Core.Strapi }) => {\n  const resolverPolicies = getPoliciesConfig(resolverConfig);\n  const policies = strapi.get('policies').resolve(resolverPolicies, {});\n\n  return async (\n    resolve: GraphQLFieldResolver<any, any>,\n    parent: any,\n    args: any,\n    context: any,\n    info: GraphQLResolveInfo\n  ) => {\n    // Create a graphql policy context\n    const policyContext = createGraphQLPolicyContext(parent, args, context, info);\n\n    // Run policies & throw an error if one of them fails\n    for (const { handler, config } of policies) {\n      const result = await handler(policyContext, config, { strapi });\n\n      if (![true, undefined].includes(result)) {\n        throw new PolicyError();\n      }\n    }\n\n    return resolve(parent, args, context, info);\n  };\n};\n\nconst createGraphQLPolicyContext = (\n  parent: any,\n  args: any,\n  context: any,\n  info: GraphQLResolveInfo\n) => {\n  const policyContext = {\n    get parent() {\n      return parent;\n    },\n\n    get args() {\n      return args;\n    },\n\n    get context() {\n      return context;\n    },\n\n    get info() {\n      return info;\n    },\n\n    get state() {\n      return this.context.state;\n    },\n\n    get http() {\n      return this.context.koaContext;\n    },\n  };\n\n  return policyUtils.createPolicyContext('graphql', policyContext);\n};\n\nexport { createPoliciesMiddleware };\n"],"names":["PolicyError","errors","getPoliciesConfig","propOr","createPoliciesMiddleware","resolverConfig","strapi","resolverPolicies","policies","get","resolve","parent","args","context","info","policyContext","createGraphQLPolicyContext","handler","config","result","undefined","includes","state","http","koaContext","policyUtils","createPolicyContext"],"mappings":";;;AAKA,MAAM,EAAEA,WAAW,EAAE,GAAGC,MAAAA;AAExB,MAAMC,iBAAAA,GAAoBC,MAAO,CAAA,EAAE,EAAE,UAAA,CAAA;AAErC,MAAMC,wBAA2B,GAAA,CAACC,cAAqB,EAAA,EAAEC,MAAM,EAA2B,GAAA;AACxF,IAAA,MAAMC,mBAAmBL,iBAAkBG,CAAAA,cAAAA,CAAAA;IAC3C,MAAMG,QAAAA,GAAWF,OAAOG,GAAG,CAAC,YAAYC,OAAO,CAACH,kBAAkB,EAAC,CAAA;AAEnE,IAAA,OAAO,OACLG,OAAAA,EACAC,MACAC,EAAAA,IAAAA,EACAC,OACAC,EAAAA,IAAAA,GAAAA;;AAGA,QAAA,MAAMC,aAAgBC,GAAAA,0BAAAA,CAA2BL,MAAQC,EAAAA,IAAAA,EAAMC,OAASC,EAAAA,IAAAA,CAAAA;;AAGxE,QAAA,KAAK,MAAM,EAAEG,OAAO,EAAEC,MAAM,EAAE,IAAIV,QAAU,CAAA;AAC1C,YAAA,MAAMW,MAAS,GAAA,MAAMF,OAAQF,CAAAA,aAAAA,EAAeG,MAAQ,EAAA;AAAEZ,gBAAAA;AAAO,aAAA,CAAA;AAE7D,YAAA,IAAI,CAAC;AAAC,gBAAA,IAAA;AAAMc,gBAAAA;aAAU,CAACC,QAAQ,CAACF,MAAS,CAAA,EAAA;AACvC,gBAAA,MAAM,IAAInB,WAAAA,EAAAA;AACZ;AACF;QAEA,OAAOU,OAAAA,CAAQC,MAAQC,EAAAA,IAAAA,EAAMC,OAASC,EAAAA,IAAAA,CAAAA;AACxC,KAAA;AACF;AAEA,MAAME,0BAA6B,GAAA,CACjCL,MACAC,EAAAA,IAAAA,EACAC,OACAC,EAAAA,IAAAA,GAAAA;AAEA,IAAA,MAAMC,aAAgB,GAAA;AACpB,QAAA,IAAIJ,MAAS,CAAA,GAAA;YACX,OAAOA,MAAAA;AACT,SAAA;AAEA,QAAA,IAAIC,IAAO,CAAA,GAAA;YACT,OAAOA,IAAAA;AACT,SAAA;AAEA,QAAA,IAAIC,OAAU,CAAA,GAAA;YACZ,OAAOA,OAAAA;AACT,SAAA;AAEA,QAAA,IAAIC,IAAO,CAAA,GAAA;YACT,OAAOA,IAAAA;AACT,SAAA;AAEA,QAAA,IAAIQ,KAAQ,CAAA,GAAA;AACV,YAAA,OAAO,IAAI,CAACT,OAAO,CAACS,KAAK;AAC3B,SAAA;AAEA,QAAA,IAAIC,IAAO,CAAA,GAAA;AACT,YAAA,OAAO,IAAI,CAACV,OAAO,CAACW,UAAU;AAChC;AACF,KAAA;IAEA,OAAOC,MAAAA,CAAYC,mBAAmB,CAAC,SAAWX,EAAAA,aAAAA,CAAAA;AACpD,CAAA;;;;"}