{"version":3,"file":"request.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/request.ts"],"sourcesContent":["import {AuthScopes, Session} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../../types';\nimport {redirectToInstallPage} from '../helpers/redirect-to-install-page';\nimport {AdminApiContext} from '../../../clients';\n\nimport {fetchScopeDetail} from './client/fetch-scopes-details';\n\nexport function requestScopesFactory(\n  params: BasicParams,\n  session: Session,\n  admin: AdminApiContext,\n) {\n  return async function requestScopes(scopes: string[]) {\n    const {logger} = params;\n\n    logger.debug('Requesting optional scopes: ', {shop: session.shop, scopes});\n\n    if (scopes.length === 0) return;\n    if (await alreadyGranted(scopes, admin)) return;\n\n    throw await redirectToInstallPage(params, session.shop, scopes);\n  };\n\n  async function alreadyGranted(scopes: string[], admin: AdminApiContext) {\n    const scopesDetail = await fetchScopeDetail(admin);\n    const grantedScopes = scopesDetail.app.installation.accessScopes.map(\n      (scope) => scope.handle,\n    );\n    return new AuthScopes(grantedScopes).has(scopes);\n  }\n}\n"],"names":[],"mappings":";;;;SAQgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,KAAsB,EAAA;AAEtB,IAAA,OAAO,eAAe,aAAa,CAAC,MAAgB,EAAA;AAClD,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAC,CAAC;AAE1E,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE;AACzB,QAAA,IAAI,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE;QAEzC,MAAM,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACjE,IAAA,CAAC;AAED,IAAA,eAAe,cAAc,CAAC,MAAgB,EAAE,KAAsB,EAAA;AACpE,QAAA,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC;QAClD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAClE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CACxB;QACD,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAClD;AACF;;;;"}